如何修理grub? (安装Windows后如何恢复Ubuntu?)

306

我安装了Windows 7,它使用了Ubuntu的启动文件。启动计算机时,它现在直接进入Windows,而不是让我选择启动Ubuntu。

如何恢复Ubuntu?

    
Salahuddin 17.12.2011 - 08:02

11 答案

313

安装Windows时,Windows假定它是计算机上唯一的操作系统(OS),或者至少它不考虑Linux。因此它用自己的引导加载程序替换GRUB。您需要做的是用GRUB替换Windows引导加载程序。我已经看到了通过使用GRUB命令或类似命令来替换GRUB的各种指令,但对我而言,最简单的方法是简单地将 chroot 放入安装并运行 update-grubchroot 很棒,因为它允许您处理实际安装,而不是尝试重定向到处。它真的很干净。

以下是:

  1. 在"试用Ubuntu"模式下从Live CD或实时USB启动。
  2. 确定主分区的分区号。 sudo fdisk -lsudo blkid 或GParted(默认情况下,应该在实时会话中安装)可以在这里为您提供帮助。我将在这个答案中假设它是 /dev/sda2 ,但是确保为您的系统使用正确的分区号!

    如果您的主分区位于LVM ,则设备将位于 /dev/mapper/ ,很可能是 /dev/mapper/{volume}--{os}-root ,其中 {volume} 是LVM卷名称, {os} 是操作系统。执行 ls /dev/mapper 以获取确切名称。

  3. 挂载分区:

    sudo mount /dev/sda2 /mnt  #Replace sda2 with the partition from step 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
    

    sdXWsdXYsdXZ 替换为相应的分区号。

  4. 绑定一些其他必要的东西:

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
    
  5. 如果Ubuntu以EFI模式安装(如果您不确定,请参阅此答案),请使用 sudo fdisk -l | grep -i efi 或GParted找到您的EFI分区。它的标签为 EFI 。挂载此分区,将 sdXY 替换为系统的实际分区号:

    sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot 进入您的Ubuntu安装:

    sudo chroot /mnt
    
  7. 此时,您正在安装,而不是实时会话,并以root用户身份运行。更新grub:

    update-grub
    

    如果您遇到错误或者如果您未能解决问题,请转到第8步。(否则,它是可选的。)

  8. 根据您的具体情况,您可能需要重新安装grub:

    grub-install /dev/sda
    update-grub # In order to find and add windows to grub menu.
    
  9. 如果Ubuntu以EFI模式安装,并且EFI分区UUID已更改,则可能需要在 /etc/fstab 中更新它。比较一下:

    blkid | grep -i efi
    grep -i efi /etc/fstab
    

    如果当前EFI分区UUID(来自 blkid )与 /etc/fstab 中的不同,请使用当前UUID更新 /etc/fstab

  10. 如果一切顺利,那么你就完成了所有工作:

    exit
    sudo reboot
    
  11. 此时,您应该能够正常启动。

  12. 如果无法正常启动,并且由于没有错误消息而未执行步骤8,请再次尝试执行步骤8.

    • 有时为您的分区提供GRUB2正确的配置是不够的,您必须将其实际安装(或重新安装)到主引导记录,这是第8步。帮助用户进行聊天的经验表明,即使没有显示任何错误消息,有时也需要执行步骤8.
给出答案 Scott Severance 17.12.2011 - 13:23
92

Windows安装程序不关心系统中的其他操作系统。因此它在主引导记录上编写自己的代码。幸运的是,解决方案也很简单。

您需要修复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

使用 Recomended Repair

更多信息 - 链接

    
给出答案 Web-E 01.09.2012 - 08:59
34

使用这些说明我从未遇到过麻烦:
链接

首先,您必须从live cd启动系统。然后

  <方法3 - CHROOT      

此安装方法使用chroot命令获取访问权限   破碎的系统文件。一旦发出chroot命令,就可以了   LiveCD将破碎的系统视为自己的系统。命令在a中运行   chroot环境会影响破坏的系统文件系统而不会   LiveCD的那些。

     
  1. 引导至LiveCD桌面(Ubuntu 9.10或更高版本)。请注意,Live CD必须与您正在修复的系统相同 - 或者   32位或64位(如果没有,则chroot将失败)。

  2.   
  3. 打开终端(应用程序&gt;附件&gt;终端)。

  4.   
  5. 确定正常的系统分区 - (开关是小写的"L")

    sudo fdisk -l
    
         

    如果您不确定,请运行

    df -Th  
    
         

    查找正确的磁盘大小和ext3或ext4格式。

  6.   
  7. 挂载正常的系统分区:

         

    替换正确的分区:sda1,sdb5等

    sudo mount /dev/sdXX /mnt  
    
         

    示例: sudo mount /dev/sda1 /mnt

  8.   
  9. 仅当您有单独的启动分区时:   sdYY是/ boot分区名称(例如sdb3)

    sudo mount /dev/sdYY /mnt/boot
    
  10.   
  11. 挂载关键虚拟文件系统:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /dev/pts /mnt/dev/pts
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  12.   
  13. Chroot进入正常的系统设备:

    sudo chroot /mnt
    
  14.   
  15. 如果没有 /boot/grub/grub.cfg 或它不正确,请使用

    创建一个
    update-grub
    
  16.   
  17. 重新安装GRUB 2:

         

    替换正确的设备 - sda,sdb等。不要指定分区号。

    grub-install /dev/sdX
    
  18.   
  19. 验证安装(使用正确的设备,例如sda。不要指定分区):

    sudo grub-install --recheck /dev/sdX
    
  20.   
  21. 退出chroot:键盘上的CTRL-D

  22.   
  23. 卸载虚拟文件系统:

    sudo umount /mnt/dev/pts
    sudo umount /mnt/dev
    sudo umount /mnt/proc
    sudo umount /mnt/sys
    
  24.   
  25. 如果你安装了一个单独的/ boot分区:

    sudo umount /mnt/boot
    
  26.   
  27. 卸载LiveCD的/ usr目录:

    sudo umount /mnt/usr
    
  28.   
  29. 卸载最后一个设备:

    sudo umount /mnt
    
  30.   
  31. 重新启动。

    sudo reboot
    
  32.   
    
给出答案 desgua 27.04.2012 - 04:15
19

从实时Ubuntu USB pendrive或CD启动 和按照以下步骤在ubuntu上安装Boot-Repair

打开终端并运行以下命令

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair

完成安装后,如果您使用Gnome,可以从System-&gt; Administration-&gt; Boot-Repair菜单启动它,如果您使用Unity,则可以在短划线中搜索"boot-repair"。然后按照以下屏幕截图:

方法1

  • 点击高级选项

  • 勾选下面显示的选项

  • 将标签更改为Grub位置标签并勾选图中所示的选项

按应用并重新启动系统

方法2

  • 选择推荐的引导修复选项,如第一个屏幕截图所示

文档:

    
给出答案 Stormvirux 30.07.2013 - 21:25
11

只需在Windows 7中安装 easyBCD 并执行

添加新条目&gt; Linux / BSD&gt; (选择)Grub2&gt; (推)添加条目

然后您可以在Windows 7引导程序中选择 Ubuntu 转到 Grub2 (之前的引导加载程序)。

    
给出答案 hamed 11.03.2012 - 23:09
5

现在有一个更简单的解决方案:

  1. 重新启动,然后输入计算机的BIOS选项(F2,有时是F11)。
  2. 转到启动菜单,然后选择启动设备优先级
  3. 检查 Windows启动管理器是否高于主启动驱动器(通常是 SATA HDD ... IDE HDD ... )。如果是,请将引导磁盘优先级高于Windows启动管理器。
  4. 保存BIOS选项,然后退出(通常为F10)。
  5. 这已经在三星Series 7 Chronos笔记本电脑双启动Windows 8和Ubuntu 13.10上进行了测试,安全启动已禁用,UEFI和传统启动已启用。

        
给出答案 scruss 15.12.2013 - 14:04
3

在基于EFI的系统(例如Windows 8或更高版本附带的大多数系统)上,Windows有时会更新其引导加载程序或将其重置为默认引导加载程序。这在重新安装操作系统或执行主要系统更新(例如,升级到最新的Windows版本)时尤为常见。请注意,Windows不太可能实际擦除基于EFI的计算机上的任何GRUB文件。启动Ubuntu所需的一切仍然存在;它只是被绕过了。在这些情况下,GRUB的完全重新安装是过度的,事实上它会产生新的问题(小)。

因此,我建议不要在这些情况下重新安装GRUB,而是将GRUB(或您喜欢的任何引导加载程序或引导管理器)重置为默认值。有几种方法可以做到这一点,包括:

  • EasyUEFI - 如果系统直接启动到Windows,调整启动顺序的最简单方法是使用 EasyUEFI,这是一个免费的(用于基本版本)第三方GUI工具,用于管理EFI启动顺序。这是非常明显的 - 在引导选项列表中找到 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 - 大多数EFI提供内置启动管理器,可通过在系统启动过程中尽早按功能键,Esc或Enter来访问。有可能是引导Ubuntu的 ubuntu 条目将显示在此引导管理器菜单中,使您可以启动到Ubuntu。或者,您可以启动到Ubuntu紧急介质,例如在"安装前尝试"模式下启动的安装程序。无论哪种方式,您都可以使用 efibootmgr 来调整启动顺序:
    1. 键入 sudo efibootmgr 以查看引导条目。
    2. 请注意当前的 BootOrder 行。
    3. 找到 ubuntu 的条目,并记下其 Boot#### 编号。
    4. 键入 sudo efibootmgr -o xxxx[,yyyy,zzzz,....] 以更改引导顺序,使 xxxx 成为Ubuntu的数字。之后发生的事情很可能不是很重要,虽然我已经注意到Windows似乎可能会将自己添加回启动顺序的开头,如果它不在列表中。因此,您可能应该确保Windows在列表中,并且最安全的是重新排序列表以便所有原始条目都存在,只需将 ubuntu 条目移动到列表顶部。
    5. 固件设置实用程序 - 某些EFI的设置实用程序可让您调整启动顺序。从一个EFI到另一个EFI的细节差别很大,所以我不会详细介绍,但您可以在设置实用程序中查找这样的选项。

这些程序还有其他变体,例如在EFI shell中使用 bcfg ,在macOS中使用 bless ,使用我的 rEFInd 做一次性启动,等等。我从EasyUEFI开始;它可能是最简单的解决方案。有时Windows会坚持在每次启动时将自己设置为默认值,并且报告表明 bcdedit 可以更好地处理该问题。

请注意,以上所有内容均不适用于BIOS模式安装;但是,由于Windows 8或更高版本附带的大多数计算机都在EFI模式下启动,因此BIOS模式安装变得越来越少,因此在许多情况下,最好以EFI方式处理问题,而不是盲目地重新安装GRUB。

    
给出答案 Rod Smith 13.07.2017 - 17:03
2

启动修复对我有用。使用图形应用程序非常容易,您不需要使用命令行,只需单击按钮即可:)

Ubuntu文档中描述了所有可用的修复选项,并且单独的页面,解释如何启动引导修复(通过创建可引导磁盘或将其安装在现有的Ubuntu实时磁盘中)以及如何使用它。 / p>

只需启动Ubuntu live CD,安装Boot-Repair并运行它。

    
给出答案 lorenzo-s 18.12.2011 - 02:41
1

当GRUB损坏时,用户通常无法访问系统,因此必须从实时会话(live-CD或live-USB)执行修复。

GRUB中断的原因有很多:Windows写入MBR,DRM阻止GRUB正确安装,安装程序错误,硬件更改...... 按照Scott最初的建议更新GRUB通常是不够的,按照Marco的建议重新安装GRUB效率更高,但仍有各种情况需要进行其他调整(添加内核选项,取消隐藏GRUB菜单,更改GRUB选项,选择正确的主机架构) ...)。 修复GRUB的其他困难是使用chroot,以及选择正确的分区/磁盘。

所有这些都可以通过一个小图形工具轻松完成:引导修复。它 应该集成在Ubuntu 12.04 CD中以便于使用,但对于现在需要它的人来说,已经有一些发行版集成它:Ubuntu-Secured-Remix(Ubuntu CD集成引导修复),引导修复盘(CD运行Boot-在启动时修理,......

希望这有帮助。

    
给出答案 LovinBuntu 20.12.2011 - 09:58
0

Windows没有看到Linux格式的分区。您需要使用liveCD中的gparted并使用引导标志创建一个格式化为NTFS的主分区。

如果新的主分区位于扩展分区之后,有些问题已经出现,因为Windows并不总是正确地重置分区表。最好有好的备份和分区表的单独备份。

将分区表备份到文本文件&amp;保存到外部设备。

sudo sfdisk -d /dev/sda > PTsda.txt

这仅适用于MBR(msdos)系统。如果您的Ubuntu安装在GPT分区驱动器中,则只能在UEFI模式下安装Windows或将驱动器转换回MBR(msdos)。

    
给出答案 oldfred 30.07.2013 - 22:01
0

只有 fsck 命令为我修复了 grub-rescue 屏幕。

使用引导修复从Live-CD启动,然后打开终端

获取正确的设备:

sudo fdisk -l

需要找到引导设备,引导设备在引导类别下有 * ,如下所示:

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1          2048   2000895   1998848  976M 82 Linux swap / Solaris
/dev/sda2  *    2000896 943716351 941715456  449G 83 Linux

现在使用以下方法修复磁盘:

sudo fsck /dev/sda2

注意: / dev / sda2是此示例中的启动设备。

输入 Y 以解决问题

输入 Y 约2次后,您可以通过输入 CTRL + C 来停止 fsck 进程,因为关键部分已经完成。

重新启动。完成。

    
给出答案 Benny 25.07.2018 - 09:51

阅读有关标签的其他问题