使用grubrescue恢复已移动的.mod文件

我做了一件愚蠢的事...我忘记了Ubuntu 10.04(Lucid Lynx)已经切换到GRUB 2,它将大量的*.mod文件(内核模块)放在/boot/grub中。我以为它们是错误地放在那里的配乐文件,于是我移动了它们。不用说,下次重启非常痛苦。我看到了一个我从未见过的东西...一个'grub rescue>'提示符。
然而,在修复GRUB错误:“error: unknown filesystem”的帮助下,我成功恢复了...
我发现GRUB rescue没有'cd'、'cp'或其他文件系统命令,除了它自己的变种'ls'。
所以首先我必须找到包含vmlinuz文件和其他引导映像文件的/boot目录所在的分区...(根据失败尝试的记忆近似,以及为了清晰起见添加的空行,2014-07-10由docsalvage添加)
grub rescue> ls (hd0,4) (hd0,3) (hd0,2) (hd0,1)
grub rescue> ls (hd0,4)/boot ...某种“未找到”消息
grub rescue> ls (hd0,3)/boot ...某种“未找到”消息
grub rescue> ls (hd0,2)/boot ...grub...initrd.img-2.6.32-33-generic...vmlinuz-2.6.32-33-generic
我在分区(hd0,2)上找到了一个包含vmlinuz文件vmlinuz-2.6.32-33-generic的/boot目录。
然后我从'grub rescue>'提示手动启动。以下命令将...
将root设置为使用分区(hd0,2)上的/boot目录。 加载内核模块linux。 将该模块设置为使用内核映像vmlinuz-2.6.32-33-generic。 将initrd(初始化RAM磁盘)设置为使用映像initrd.img-2.6.32-33-generic。 启动Linux。
grub rescue> set root=(hd0,2)/boot grub rescue> insmod linux grub rescue> linux (hd0,2)/boot/vmlinuz-2.6.32-33-generic root=/dev/sda2 grub rescue> initrd (hd0,2)/boot/initrd.img-2.6.32-33-generic grub rescue> boot
这样启动后会崩溃到BusyBox提示符,它确实有一些基本的文件系统命令。
然后我将*.mod文件移回/boot/grub目录...
busybox> cd /boot busybox> mv mod/* grub busybox> reboot
重新启动成功,但是这需要很多工作。
有没有更简单的方法?

1在我看来,使用Boot-Repair会更容易。详细了解如何使用它,请查看我的多个答案上关于Boot-Repair的说明。 - SirCharlo
1“最简单”的方式并不总是最好的方式。我强烈不同意那些建议使用Live CD的评论;对于没有CD/DVD读取器的系统来说,从Live CD引导真的非常困难。 - Simón
我无法找到带有/boot目录的分区。在ls命令下,所有分区都显示未知文件系统输出。 - Rafed Nole
我在上面的“问题”中添加了一些细节,希望能有所帮助。 - DocSalvager
谢谢,当我输入"ls"命令时,我得到了(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)这些选项,我已经尝试使用每个选项后面加上"/boot"的方式,但是始终显示未知文件系统。请帮忙解决。 - Rafed Nole
你确定第一个分区是(hd0)而不是像(hd0,0)这样的吗?我猜其他的分区都是MSDOS格式的。希望我能提供更多帮助。还有其他人可以帮忙吗?我有点陷入困境了。 - DocSalvager
1你的帖子对于手动引导内核和initrd非常有帮助,但是我的系统找不到dev、sys或proc等等/fstab或sbin/init。这让我去看了另一个帖子,其中建议按照grub文档中的手动引导说明加载内核并设置根目录,例如:grub> linux (hd0,X)/boot/vmlinuz-a.b.c-d-generic root=/dev/sdaX,其中X是含有/boot的分区,a.b.c-d是内核版本。然后我的系统成功引导了!谢谢! - Mark Mikofski
1除了修复GRUB错误:“error: unknown filesystem” [duplicate]这个链接外,另一个很好的链接涵盖了这些步骤:如何在Linux上修复无法启动的GRUB 2,同时grub 2手册也非常有帮助。 - Mark Mikofski
我遇到了同样的问题,在从Ubuntu 13.10升级到14.04时陷入了grub_rescue,但情况更糟糕,因为我没有alt gr键,所以没有斜杠键。 - Claudio Gorodski
5个回答

这里是一些通用和基本的指示,以帮助解决引导错误,例如"GRUB loading stage 1.5 error 15"(例如在不同磁盘驱动器上安装Windows之后):
  1. 使用LiveDVD(例如Ubuntu桌面光盘)启动。
  2. 打开终端,并使用以下命令重新编写grub配置:
    • sudo mount /dev/sdXY /mnt
    • sudo grub-install --root-directory=/mnt /dev/sdX
其中/dev/sdX是Ubuntu安装所在的磁盘,/dev/sdXY是Ubuntu安装所在磁盘的分区。换句话说,/dev/sdXY包含/boot等文件。
使用fdisk -l验证Ubuntu的安装位置。

没起作用。也许如果指示更具体一些,它就会起作用了。 - Tim Stewart
当我在一台没有光驱的机器上遇到grub2问题时,我通过使用我的Gparted Live USB内存棒恢复了系统。我启动了Gparted Live,然后打开终端并输入fdisk -l(这是字母L,不是数字1)。从输出中,我能够确定哪个分区是根分区,并按照上面提供的优秀指南进行操作,很快就成功地实现了双系统启动。 - Vic

不。我认为你已经找到了从系统状态中恢复的最简单方法,使用grub rescue;它是一个非常简约的系统,只提供足够的功能来引导系统。
顺便说一下,我相信你一定找到了.mod文件并执行了insmod linux命令,否则linux命令将会失败。
另外一种方式,正如之前提到的,是在chroot到“损坏”的系统后,使用Live CD重新安装grub2。

你说得对极了!我忘记了我已经做过那件事。已添加到我之前的帖子中以供参考。在这些情况下,我需要更加有纪律地保持仔细的记录。如果需要进一步编辑,请告知。 - DocSalvager
在加载内核时,我还需要指定根目录,就像在grub文档中所示,例如 grub> linux (hd0,2)/boot/vmlinuz-2.6.32-33-generic root=/dev/sda2 - Mark Mikofski
另外请注意,如果您找到了.mod文件,您可以将“grub rescue”恢复为功能完整的GRUB:#检查当前前缀(和其他预设变量): set #查看可用的设备: ls #设置正确的值,可能类似于以下内容: set prefix=(hd0,1)/grub set root=(hd0,1) insmod normal normal来源: https://www.gnu.org/software/grub/manual/html_node/GRUB-only-offers-a-rescue-shell.html - MegaBrutal

  1. 启动Live CD

  2. 打开终端(CTRL+ALT+T)

  3. 输入以下命令:

sudo fdisk -l

找到你的Ubuntu分区(如果是第一个分区,应该是/dev/sda1)

sudo mount /dev/sda1 /mnt

sudo mount --bind /sys /mnt/sys

sudo mount --bind /proc /mnt/proc

sudo mount --bind /dev /mnt/dev

sudo chroot /mnt

现在重新安装Grub2
sudo apt-get install --reinstall grub2

2这是一种比sudo mount /dev/sda1 /mntsudo grub-install --root-directory=/mnt/ /dev/sda && sudo update-grub更好的方式吗? - user91091

当我升级系统时,我遇到了同样的问题。

我建议采取以下简单步骤:

  1. 使用Ubuntu Live CD或Live USB启动您的系统。
  2. 打开终端并运行命令sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
  3. 然后通过运行命令sudo apt-get install -y boot-repair && boot-repair安装引导修复工具。

  4. 安装完成后启动引导修复工具。例如,从菜单中使用System->Administration->Boot-Repair(仅适用于Ubuntu 10.04),然后按照说明操作。

    可能需要15-20分钟来找出问题并解决它。

如需更多帮助,请访问链接https://help.ubuntu.com/community/Boot-Repair


你可以启动Live CD,挂载你的硬盘,以root身份打开nautilus,并将那些文件复制到/boot目录下。