我该如何恢复Ubuntu?
chroot
进入你的安装并运行update-grub
。chroot
非常好用,因为它允许你在实际的安装中工作,而不是试图在这里那里进行重定向。这真的很干净。确定您的主分区的分区号。 sudo fdisk -l
,sudo blkid
或GParted(默认情况下已安装在Live会话中)可以帮助您。在本答案中,我假设它是/dev/sda2
,但请确保使用正确的分区号!
如果您的主分区位于LVM中,则该设备将位于/dev/mapper/
中,很可能是/dev/mapper/{volume}--{os}-root
,其中{volume}
是LVM卷名称,{os}
是操作系统。执行ls /dev/mapper
以获取确切的名称。
挂载您的分区:
sudo mount /dev/sda2 /mnt #用步骤2中的分区替换sda2
如果您有单独的/boot
、/var
或/usr
分区,请重复步骤2和3,将这些分区分别挂载到/mnt/boot
、/mnt/var
和/mnt/usr
。例如:
sudo mount /dev/sdXW /mnt/boot
sudo mount /dev/sdXY /mnt/var
sudo mount /dev/sdXZ /mnt/usr
用相应的分区号替换sdXW
、sdXY
和sdXZ
。
绑定挂载其他必要的内容:
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
如果Ubuntu是以EFI模式安装的(如果您不确定,请参见此答案),请使用sudo fdisk -l | grep -i efi
或GParted查找EFI分区。它将具有标签EFI
。挂载此分区,用实际系统的分区号替换sdXY
:
sudo mount /dev/sdXY /mnt/boot/efi
chroot
进入您的Ubuntu安装:
sudo chroot /mnt
此时,您在安装中而不是Live会话中,并作为root运行。更新grub:
update-grub
如果出现错误或者步骤7没有解决您的问题,请转到步骤8。(否则,它是可选的。)
根据您的情况,您可能需要重新安装grub:
grub-install /dev/sda
update-grub # 以查找并添加Windows到grub菜单。
如果Ubuntu是以EFI模式安装的,并且EFI分区UUID已更改,则可能需要在/etc/fstab
中更新它。比较一下:
blkid | grep -i efi
grep -i efi /etc/fstab
如果当前的EFI分区UUID(来自blkid
)与/etc/fstab
中的不同,请使用当前的UUID更新/etc/fstab
。
如果一切正常且没有错误,则完成
grub-efi-amd64
,如果你使用的是安全启动,你会想要使用grub-install --uefi-secure-boot
。这也在https://superuser.com/a/376471/197980中有详细说明。 - Raffael/bin
、/lib
或者 /lib64
,只需将它们绑定挂载:mount --bind /bin /mnt/bin
等等,或者更好的做法是找出它们在你系统中的位置并挂载正确的目录。 - Scott Severance/dev/sda2
包含了文件夹 boot-sav
、lost+found
、upper
和 work
。这是它应该包含的内容吗? - Kvothegrub-install: warning: EFI variables are not supported on this system..
根据这个答案https://unix.stackexchange.com/a/693111 我必须在第4步中使用--rbind标志而不是--bind,所以命令是for i in /sys /proc /run /dev; do sudo mount --rbind "$i" "/mnt$i"; done
。 - kprist--rbind
,并且运行第8步是必需的。 - SergioLeoneWindows安装程序不关心系统中的其他操作系统。因此,它会覆盖主引导记录的自身代码。幸运的是,解决方案也很简单。
您需要修复MBR。请按照以下步骤进行操作:
使用Ubuntu的live USB/CD启动计算机。
使用boot-repair
工具来修复问题。
在使用live USB/CD启动后,在终端中运行以下命令:
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
apt-get update
显示了一堆404 Not Found错误,安装失败并出现无法找到包boot-repair
的提示。 - Dan Dascalescu从活动的Ubuntu USB闪存驱动器或CD引导
和
按照以下步骤在Ubuntu上安装Boot-Repair
打开终端并运行以下命令
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair
按下“应用”并重新启动系统
方法2
ubuntu
条目,并将其移到列表的顶部。下次重新启动时,GRUB应该会显示出来。(如果您使用的是除GRUB之外的其他引导程序,则需要定位其条目。)bcdedit
- Windows的bcdedit
工具可用于设置GRUB为默认启动顺序。在管理员命令提示符窗口中键入命令bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
就可以实现这一点;然而,如果您的计算机启用了安全启动,那么需要改为使用bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
。实际上,即使没有使用安全启动,后一条命令也通常可以工作,所以我建议首先使用这个命令。请注意,有一种比我提供的语法稍有不同的高级Windows Shell工具,但我不记得详细信息。ubuntu
条目,使您能够引导到Ubuntu。或者,您可以引导到一个Ubuntu紧急介质上,比如以“试用后再安装”模式引导的安装程序。无论哪种方式,您都可以使用efibootmgr
来调整启动顺序:
sudo efibootmgr
以查看引导条目。BootOrder
行。ubuntu
的条目,注意其Boot####
编号。sudo efibootmgr -o xxxx[,yyyy,zzzz,....]
来更改启动顺序,将xxxx
设置为Ubuntu的编号。之后的内容可能并不是非常重要,尽管我注意到如果Windows不在列表中,它很有可能会将自己重新添加到启动顺序的开头。因此,您可能应该确保Windows在列表中,并且最安全的做法可能是重新排序列表,以便所有原始条目都在那里,只是将ubuntu
条目移到列表的顶部。这些过程还有其他变体,例如在EFI Shell中使用bcfg
,在macOS中使用bless
,使用我的rEFInd进行一次性引导等。不过,我会从EasyUEFI开始;这可能是最简单的解决方案。尽管如此,有时Windows坚持在每次启动时将自己设为默认操作系统,而报告显示bcdedit
可能更好地处理了这个问题。
请注意,上述内容都不适用于BIOS模式安装;然而,由于大多数搭载Windows 8或更高版本的计算机以EFI模式启动,BIOS模式安装正变得越来越少见,所以在许多情况下,最好通过EFI方式处理问题,而不是盲目重新安装GRUB。
efibootmgr
重新排序启动顺序(正如Rod所描述的->谢谢!),这是由于Win10更新而混乱了。之后,GRUB引导管理器出现了,就像更新之前一样,所以我可以确认提供的解决方案对我有效。我找不到EasyUEFI的基本版本,只找到了一个试用版的非免费专业版。 - antiplexScott和Web-E提供的答案已经足够好,并且在很多次中都帮了大忙。但是有很多情况下,启动修复工具无法修复grub,原因可能与i386和amd64平台相关,或者由于grub找不到efi
目录而导致。
我解决问题的方法已经用了超过10次,那就是手动清除旧的grub安装并安装一个新的。
所以首先按照Scott的答案执行前6个步骤,如果第5步出错可以跳过。
然后按照以下步骤进行操作:
- 从光盘或U盘启动,选择“试用Ubuntu”模式。
确定您的主分区的分区号。可以使用
sudo fdisk -l
、sudo blkid
或GParted(默认情况下已安装在试用会话中)来帮助您。在本答案中,我假设它是/dev/sda2
,但请确保使用正确的分区号!如果您的主分区位于LVM中,设备将位于
/dev/mapper/
,很可能是/dev/mapper/{volume}--{os}-root
,其中{volume}
是LVM卷的名称,{os}
是操作系统。执行ls /dev/mapper
以获取确切的名称。挂载您的分区:
sudo mount /dev/sda2 /mnt #将sda2替换为第2步中的分区
如果您有单独的
/boot
、/var
或/usr
分区,请重复第2步和第3步,将这些分区挂载到/mnt/boot
、/mnt/var
和/mnt/usr
。例如:sudo mount /dev/sdXW /mnt/boot sudo mount /dev/sdXY /mnt/var sudo mount /dev/sdXZ /mnt/usr
将
sdXW
、sdXY
和sdXZ
替换为相应的分区号。绑定挂载其他必要的内容:
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
如果Ubuntu是以EFI模式安装的([如果不确定,请参考此答案][efi]),使用
sudo fdisk -l | grep -i efi
或GParted查找您的EFI分区。它将具有一个标签为EFI
的分区。挂载此分区,将sdXY
替换为您系统的实际分区号:sudo mount /dev/sdXY /mnt/boot/efi
chroot
进入您的Ubuntu安装:sudo chroot /mnt