我该怎么修gr? (安装Windows后如何恢复Ubuntu?)
我安装了Windows 7,它吃了Ubuntu的启动文件。 启动计算机时,它现在直接进入Windows,而不是让我选择启动Ubuntu。
我怎样才能让Ubuntu回来?
安装Windows时,Windows假定它是计算机上唯一的操作系统(OS),或者至少它不考虑Linux。 因此它用自己的引导加载程序替换GRUB。 您需要做的是用GRUB替换Windows引导加载程序。 我已经看到了通过使用GRUB命令或类似命令来替换GRUB的各种指令,但对我而言,最简单的方法是简单地chroot
到您的安装并运行update-grub
。 chroot
非常棒,因为它允许您处理实际的安装,而不是尝试在这里和那里重定向事物。 真的很干净。
这是如何做:
- 在“试用Ubuntu”模式下从Live CD或实时USB启动。
-
确定主分区的分区号。
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 #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
用相应的分区号替换
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
sudo fdisk -l | grep -i efi
或GParted以查找您的EFI分区。 它将有一个EFI
标签。 挂载此分区,将sdXY
替换为系统的实际分区号:sudo mount /dev/sdXY /mnt/boot/efi
-
chroot
到你的Ubuntu安装:sudo chroot /mnt
-
此时,您正在安装,而不是实时会话,并以root身份运行。 更新grub:
update-grub
如果您遇到错误或者如果步骤7没有解决您的问题,请转到步骤8.(否则,它是可选的。)
-
根据您的具体情况,您可能需要重新安装grub:
grub-install /dev/sda update-grub # In order to find and add windows to grub menu.
-
如果Ubuntu以EFI模式安装,并且EFI分区UUID已更改,则可能需要在
/etc/fstab
更新它。 比较它:blkid | grep -i efi grep -i efi /etc/fstab
如果当前EFI分区UUID(来自
blkid
)与/etc/fstab
,请使用当前UUID更新/etc/fstab
。 -
如果一切顺利,那么你就完成了:
exit sudo reboot
-
此时,您应该能够正常启动。
如果由于没有错误消息而无法正常启动,并且未执行步骤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://wiki.ubuntu.com/Grub2#Recover
首先,您必须从live cd启动系统。 然后
方法3 – CHROOT
此安装方法使用chroot命令来访问损坏的系统文件。 一旦发出chroot命令,LiveCD就会将损坏的系统视为自己的/。 在chroot环境中运行的命令将影响损坏的系统文件系统,而不会影响LiveCD的系统文件系统。
启动到LiveCD桌面(Ubuntu 9.10或更高版本)。 请注意,Live CD必须与您正在修复的系统相同 – 32位或64位(如果不是,则chroot将失败)。
打开终端(应用程序>附件>终端)。
确定正常的系统分区 – (开关是小写的“L”)
sudo fdisk -l
如果您不确定,请运行
df -Th
寻找正确的磁盘大小和ext3或ext4格式。
挂载正常的系统分区:
替换正确的分区:sda1,sdb5等。
sudo mount /dev/sdXX /mnt
示例:
sudo mount /dev/sda1 /mnt
仅当您具有单独的启动分区时:sdYY是/ boot分区指定(例如sdb3)
sudo mount /dev/sdYY /mnt/boot
挂载关键虚拟文件系统:
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
Chroot到您的正常系统设备:
sudo chroot /mnt
如果没有
/boot/grub/grub.cfg
或它不正确,请使用创建一个update-grub
重新安装GRUB 2:
替换正确的设备 – sda,sdb等。不要指定分区号。
grub-install /dev/sdX
validation安装(使用正确的设备,例如sda。不要指定分区):
sudo grub-install --recheck /dev/sdX
退出chroot:键盘上的CTRL-D
卸载虚拟文件系统:
sudo umount /mnt/dev/pts sudo umount /mnt/dev sudo umount /mnt/proc sudo umount /mnt/sys
如果您安装了单独的/ boot分区:
sudo umount /mnt/boot
卸载LiveCD的/ usr目录:
sudo umount /mnt/usr
卸载最后一个设备:
sudo umount /mnt
重启。
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 (之前的引导加载程序)。
现在有一个更简单的解决方案:
- 重新启动,然后输入计算机的BIOS选项(F2,或有时F11)。
- 进入Boot菜单,选择Boot Device Priority
- 检查Windows启动管理器是否位于主启动驱动器之上(通常是SATA HDD …或IDE HDD … )。 如果是,请将引导磁盘的优先级高于Windows启动管理器的优先级。
- 保存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
– Windowsbcdedit
工具可用于将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
来调整引导顺序:- 键入
sudo efibootmgr
以查看引导条目。 - 注意当前的
BootOrder
行。 - 找到
ubuntu
的条目并记下它的Boot####
数字。 - 键入
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步:
- 在“试用Ubuntu”模式下从Live CD或实时USB启动。
确定主分区的分区号。
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 #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
用相应的分区号替换
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
sudo fdisk -l | grep -i efi
或GParted以查找您的EFI分区。 它将有一个EFI
标签。 挂载此分区,将sdXY
替换为系统的实际分区号:sudo mount /dev/sdXY /mnt/boot/efi
chroot
到你的Ubuntu安装:sudo chroot /mnt
然后执行以下步骤:
- 配置所有挂起的包。
sudo dpkg --configure -a
- 修复破损的包裹。
sudo apt install -fy
- 删除当前的grub。
sudo apt purge -y grub*-common grub-common:i386 shim-signed
这可能会警告您设备没有引导加载程序,并且可能无法在下次引导。 来吧接受它。 -
sudo apt install -y grub-pc
运行此命令后,它会要求您指向当前的sdXY
以安装引导加载程序。 使用sudo fdisk -l
命令查找当前操作系统的安装位置。 它将被标记为Linux
。 使用Tab键导航该窗口,然后使用Space键选择一个选项。 - 如果一切顺利,grub将正确安装。 你也可以做
sudo grub-update
进行双重检查。
如果问题仍然存在,你可以阅读Arch的wiki来实际了解grub以解决许多其他问题。 (是的,也有助于Ubuntu!)。