Grub救援提示,修复Grub

我最近重新分区了我的硬盘,并且损坏了系统上的GRUB引导程序。启动时,我会收到GRUB救援提示,为了正常启动,我必须按照以下步骤进行操作:
set root=(hd0,msdos6)
set prefix=(hd0,msdos6)/boot/grub
insmod normal
normal

(这些步骤是在这里的另一篇帖子上找到的!)
我已经厌倦了每次启动都要重复这个问题,如何永久修复GRUB?

1两个选择:(1)Boot-Repair(2)Super Grub Rescue Disk请参阅:http://linuxnorth.wordpress.com/2012/02/07/repairing-grub/ - CentaurusA
1问题中列出的启动步骤对我有效。然而,人们应该正确记住Linux的分区。 - TheCrazyProgrammer
1就像其他人所说的那样,执行update-grub命令,然后运行grub-install /dev/sda可以解决这个问题。 - TheCrazyProgrammer
请查看Karthik的回答,了解“文件未找到”的解决方法:https://askubuntu.com/questions/443241/grub-resue-error-insmod-normal-file-not-found# - samus
8个回答

解决grub rescue问题,请按照以下步骤进行操作:
首先,我们必须启动我们的操作系统,然后才能修复grub。
当你看到这样的错误时,首先我们必须检查"文件系统"是ext2。
输入以下命令以查看驱动器分区: grub rescue> ls
你会看到类似的内容:(hd0) (hd0,msdos6) (hd0,msdos5) (hd0,msdos4) ...
这是我们现在的驱动器,我们需要检查哪一个是ext2。
grub rescue>ls (hd0,msdos6)
error: disk 'hd,msdos6' not found.

继续尝试其他驱动器,直到出现“文件系统为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 # 更新grub sudo apt-get upgrade 确保在登录操作系统后更新grub。

1楼主已经知道如何启动他的操作系统了。这个回答可以更简洁一些。 - Elder Geek
2这个答案对我很有帮助。我的问题并不完全和原始问题一样,所以额外的信息变得很有用。 - retroj
1+1 这解决了一个在 KDE Neon 安装失败时出现的问题。 - Darren Lewis
1错误:文件 '/boot/grub/i386-pc/normal.mod' 未找到。 我该怎么办? - BhushanDhamale
1@roshan-sherkure 为什么你在前一行是(hd0,msdos2)的情况下,要执行set prefix=(hd0,msdos6)/boot/grub呢?- 为什么不是(hd0,msdos2)而是(hd0,msdos6)呢? - jstm

解决 grub rescue 失败的终极案例: 问题:1. i386-pc 未找到****正常模式不起作用 cp 不起作用 search.file 不起作用。所有这些问题都可以通过以下命令解决,适用于 Ubuntu 18.04。 步骤1:找到包含目录的根文件夹。
ls

例如,如果根文件夹在(hd0,gpt4)中,则输入

this is how it looks

ls (hd0, 4)/

你会看到一些文件或文件夹:

my root file is in (hd0, gpt4)

如果你运气好的话,现在就按照以下步骤操作:
set root=(hd0, 4)
set prefix=(hd0, 4)/boot/grub/
insmode normal
normal

如果你很幸运的话,它会解决你的问题。 有时候人们会遇到找不到1386-pc文件夹之类的问题。在这种情况下,你需要找到你的grub文件夹在哪里。如果你遇到类似的问题:

boot/grub/i386-pc/normal.mod not found

在这种情况下,你需要找到 grub2 文件夹。如果你有 grub2,并且在该文件夹中有 i386-pc 文件夹。然后你需要输入
prefix=(hd0, 4)/grub2/

它会起作用。 如果您没有grub2并且找不到i386-pc文件夹,请按照以下步骤操作:

grub rescue>set root=(hd0, 4)
grub rescue>set prefix=(hd0, 4)/usr/lib/grub
grub rescue>insmode normal
grub rescue>normal

执行此命令后,您的grub rescue模式将进入grub菜单。现在您可以执行Linux命令。 Linux命令
grub>set root =(hd0, 4)
grub>set prefix= (hd0, 4)/boot
grub>insmaod linux
grub>linux vmlinuz.....-generic
grub>intrd (hd0, 4)/boot/...-generic
grub>boot

这将带您进入恢复模式。从那里,您可以选择几个可用的恢复选项。 如果这不能解决问题,那么您需要下载一个Ubuntu操作系统,例如Ubuntu 18.04。您可以从以下链接下载: ubuntu 链接

制作一个可引导的驱动器,并用该Live盘打开您的计算机。它不会损坏您的任何文件。观看视频以了解如何操作。 现在,您需要找到您的i386-pc文件夹。它将位于

rootContainingDirectory-usr-lib-grub

现在将i386-pc复制到boot/grub/文件夹中。 你可能会遇到权限问题,为了解决这个问题,请输入以下命令:
sudo nautilus

现在右键点击该目录,并将所有者更改为ubuntu live session user

按照视频中的步骤进行操作:permission change

现在,在将其粘贴到boot/grub文件夹后,重新启动并拔出USB驱动器。 这次使用第一组命令,它会起作用。如果cp命令有效,则也可以从grub菜单中执行此操作。


在这里,使用“insmod”而不是“insmode”。拼写错误在这里是致命的。 - Alex

我会尝试运行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时要小心,因为我们谈论的是启动过程,这是一个敏感的机制。

2grub-install <correct-drive, i.e. /dev/sda>update-grub2最终在Ubuntu 15.04上为我解决了问题。 - Greg Kramida

我觉得执行 "update-grub" 命令是为了组装 "grub.cfg",但你还需要重新运行 "grub-install"(或者 "grub-setup"?)来更新 MBR / 引导扇区,以更新基本信息 - 即在哪个分区找到 "grub.cfg" 文件以及这些模块。

当你看到GRUB rescue提示时,意味着GRUB引导加载程序无法从包含它们的分区/boot/grub中找到其模块。造成这种情况的原因是适应驱动器MBR记录的代码非常小,因此它的主要目的是定位并加载其余的引导加载程序代码。一旦加载了它的模块,它就可以显示GRUB菜单并处理剩余的启动过程。如果找不到这些模块,它将显示一个非常有限的救援提示。
所以,如果你重新分区,破坏了引导加载程序对包含引导模块的分区的引用,那么你所看到的情况是完全正常的。
由于你可以手动启动,最简单的修复方法是手动启动并重新安装引导加载程序到MBR,以便它正确地引用你的分区。具体操作如下:
sudo grub-install /dev/sda

这假设你从 /dev/sda 启动(大多数情况下是这样,但如果不是,请将其替换为正确的驱动器)。
这个解决方案比使用 boot-repair 要简单得多,但如果你不确定的话,可能更适合。

1+1 为用易于理解的术语解释情况。 - monotasker

最简单的方法是:
sudo apt-get purge grub-pc grub-pc-bin

然后:

sudo apt-get install grub-pc grub-pc-bin

2这是一种粗暴的方法,可能会起作用,但更简单的方法是重新安装引导程序以更新对分区的引用(由于重新分区而损坏)。 - bcbc


我仅仅按照grub的指示进行操作,即使非常小心,也无法让它正常工作。使用可启动的Ubuntu 20.04 USB,我打开了终端并执行了以下操作:运行Boot Repair Tool。
sudo add-apt-repository -y ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair