我该怎么修gr? (安装Windows后如何恢复Ubuntu?)

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

我怎样才能让Ubuntu回来?

安装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 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 

    如果您遇到错误或者如果步骤7没有解决您的问题,请转到步骤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. 此时,您应该能够正常启动。

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

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

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

在此处输入图像描述

更多信息 – https://help.ubuntu.com/community/Boot-Repair

我使用这些说明从未遇到过麻烦:
https://wiki.ubuntu.com/Grub2#Recover

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

方法3 – CHROOT

此安装方法使用chroot命令来访问损坏的系统文件。 一旦发出chroot命令,LiveCD就会将损坏的系统视为自己的/。 在chroot环境中运行的命令将影响损坏的系统文件系统,而不会影响LiveCD的系统文件系统。

  1. 启动到LiveCD桌面(Ubuntu 9.10或更高版本)。 请注意,Live CD必须与您正在修复的系统相同 – 32位或64位(如果不是,则chroot将失败)。

  2. 打开终端(应用程序>附件>终端)。

  3. 确定正常的系统分区 – (开关是小写的“L”)

     sudo fdisk -l 

    如果您不确定,请运行

     df -Th 

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

  4. 挂载正常的系统分区:

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

     sudo mount /dev/sdXX /mnt 

    示例: sudo mount /dev/sda1 /mnt

  5. 仅当您具有单独的启动分区时:sdYY是/ boot分区指定(例如sdb3)

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

     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 
  7. Chroot到您的正常系统设备:

     sudo chroot /mnt 
  8. 如果没有/boot/grub/grub.cfg或它不正确,请使用创建一个

     update-grub 
  9. 重新安装GRUB 2:

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

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

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

  12. 卸载虚拟文件系统:

     sudo umount /mnt/dev/pts sudo umount /mnt/dev sudo umount /mnt/proc sudo umount /mnt/sys 
  13. 如果您安装了单独的/ boot分区:

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

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

     sudo umount /mnt 
  16. 重启。

     sudo reboot 

从现场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-> Administration-> Boot-Repair菜单启动它,如果使用Unity,则可以在短划线中搜索“boot-repair”。 然后按照以下屏幕截图:

方法1

  • 单击高级选项

初始屏幕

  • 勾选下面显示的选项

高级选项

  • 将选项卡更改为Grub Location选项卡并勾选选项如图所示

在此处输入图像描述

按应用并重新启动系统

方法2

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

文件:

只需在Windows 7中安装easyBCD

添加新条目> Linux / BSD>(选择)Grub2>(推送)添加条目

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

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

  1. 重新启动,然后输入计算机的BIOS选项(F2,或有时F11)。
  2. 进入Boot菜单,选择Boot Device Priority
  3. 检查Windows启动管理器是否位于主启动驱动之上(通常是SATA HDD …IDE HDD … )。 如果是,请将引导磁盘的优先级高于Windows启动管理器的优先级。
  4. 保存BIOS选项,然后退出(通常为F10)。

这已经在三星Series 7 Chronos笔记本电脑双启动Windows 8和Ubuntu 13.10上进行了测试,安全启动已禁用,UEFI和传统启动已启用。

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

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

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

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

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

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

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

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

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

希望这可以帮助。

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

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

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

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

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

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

使用Boot-Repair从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进程,因为关键部分已经完成。

重启。 完成。

斯科特和Web-E给出的答案已经足够好并且帮助了很多次。 但很多时候,由于与i386和amd64平台相关的问题或者grub无法找到efi目录的问题,启动修复工具无法修复grub。
什么解决了我的问题超过10次是手动清除旧的grub安装并安装一个新的。

因此,首先从Scott的答案中执行前6个步骤,如果出现错误,您可以跳过第5步:

  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模式安装([如果您不确定,请参阅此答案] [efi]),请使用sudo fdisk -l | grep -i efi sudo fdisk -l | grep -i efi或GParted以查找您的EFI分区。 它将有一个EFI标签。 挂载此分区,将sdXY替换为系统的实际分区号:

     sudo mount /dev/sdXY /mnt/boot/efi 
  6. chroot到你的Ubuntu安装:

     sudo chroot /mnt 

然后执行以下步骤:

  1. 配置所有挂起的包。
    sudo dpkg --configure -a
  2. 修复破损的包裹。
    sudo apt install -fy
  3. 删除当前的grub。
    sudo apt purge -y grub*-common grub-common:i386 shim-signed
    这可能会警告您设备没有引导加载程序,并且可能无法在下次引导。 来吧接受它。
  4. sudo apt install -y grub-pc
    运行此命令后,它会要求您指向当前的sdXY以安装引导加载程序。 使用sudo fdisk -l命令查找当前操作系统的安装位置。 它将被标记为Linux 。 使用Tab键导航该窗口,然后使用Space键选择一个选项。
  5. 如果一切顺利,grub将正确安装。 你也可以做sudo grub-update进行双重检查。

如果问题仍然存在,你可以阅读Arch的wiki来实际了解grub以解决许多其他问题。 (是的,也有助于Ubuntu!)。