问题描述
我最近对硬盘进行了重新分区,并且系统上的GRUB已损坏。在启动时,我会收到GRUB抢救提示,并且必须执行以下步骤才能正常启动:
set root=(hd0,msdos6)
set prefix=(hd0,msdos6)/boot/grub
insmod normal
normal
(这些步骤已在此处的另一篇文章中找到!)。
我对每次引导都重复这一点感到非常厌倦,如何永久修复GRUB?
最佳思路
要修复grub抢救,请执行以下步骤:
-
首先是我们必须在修复grub之后才启动操作系统。
#to start OS--> error: unknown filesystem. Entering rescue mode... grub rescue>
当您首先看到此类错误时,我们必须检查“Filesystem”是否为ext2′
grub rescue> ls # type 'ls' and hit enter to see drive partition. (hd0) (hd0,msdos6) (hd0,msdos5) (hd0,msdos4) ... # you will see such things
这是我们的驱动器,现在我们必须检查哪一个是ext2。
grub rescue>ls (hd0,msdos6)
error: disk 'hd,msdos6' not found.
换另一个驱动器,直到得到“ Filesystem is ext2”。
grub rescue>ls (hd0,msdos5)
error: disk 'hd,msdos5' not found.
grub rescue>ls (hd0,msdos2)
(hd0,msdos2): Filesystem is ext2 # this is what we want
现在设置路径
grub rescue>set boot=(hd0,msdos2)
grub rescue>set prefix=(hd0,msdos6)/boot/grub
grub rescue>insmod normal
grub rescue>normal
-
现在只要在任何Ubuntu上执行以下命令即可修复grub
sudo grub-install /dev/sda sudo apt-get update # to update grub sudo apt-get upgrade
确保登录操作系统后必须更新grub
次佳思路
我会尝试运行update-grub
以便再次构建grub.conf
/grub.cfg
。
您也可以尝试使用grub-install
,但是我认为这没有帮助。
如果您想了解更多信息,请通过运行以下命令首先检查您拥有哪个版本(GRUB 1或2):
dpkg -l | grep grub
如果您有GRUB 2,则可以使用以下教程:http://www.dedoimedo.com/computers/grub-2.html
当然,在我们谈论引导过程时,请小心使用GRUB,这是一种敏感的机制。
第三种思路
在我看来,update-grub会组装grub.cfg,但您还需要(重新)运行grub-install(或grub-setup?)以使用基本信息更新MBR /引导扇区-在哪个分区上找到grub.cfg文件和显然这些模块。
第四种思路
当您收到GRUB救援提示时,这意味着GRUB引导加载程序无法从/boot/grub
中包含它们的分区中找到其模块。这样做的原因是,驱动器MBR记录中包含的代码很小,因此其主要目的是查找并加载其余的引导程序代码。加载模块后,它可以显示GRUB菜单并处理其余的引导过程。如果找不到模块,则会显示非常有限的救援提示。
因此,如果您进行了重新分区,那么您所看到的是完全正常的,从而破坏了引导加载程序对包含引导模块的分区的引用。
由于您可以手动引导,因此最简单的修复方法是手动引导并在MBR中重新安装引导加载程序,以便它对分区具有正确的引用。这样做的方法是:
sudo grub-install /dev/sda
这假定您是从/dev/sda
引导的(大多数情况,如果不是,则将其替换为正确的驱动器)。
与使用boot-repair
相比,此解决方案要简单得多,但是如果不确定,则可能更合适。