如何使用 GRUB Rescue 修复 Linux
已发表: 2023-05-14ls
、 set
、 linux
和initrd
命令修复您的 Linux 系统。 相反,如果您看到“grub rescue>”提示,请使用set
、 insmod
、 linux
和initrd
命令来启动您的 PC。如果您的 Linux 计算机无法启动进入其操作系统,您可能会发现自己正盯着 GRUB shell 中的提示符。 请按照以下步骤修复损坏的启动过程。
当您的引导加载程序不启动时
使用 GRUB 外壳
使用 GRUB 救援 Shell
其他可能的补救措施
当您的引导加载程序不启动时
很少有计算机问题像无法启动一样让您的心沉沦得如此之快。 如果没有运行的操作系统,您的计算机就不是真正的计算机。
这可能是一个非常不透明的问题,没有简单的方法可以深入了解根本原因。 如果无法访问 Linux,您将无法使用任何常用的诊断工具和流程来调查问题。 在不确定问题是什么的情况下,您如何解决它?
在 Linux 上,GRUB 是控制引导过程的软件。 如果您安装了多个操作系统,它会让您选择要启动的操作系统。
GRUB 由其配置控制。 它也依赖于其他支持文件来执行其功能。 如果其中任何一个丢失或损坏,GRUB 将无法工作。 对计算机硬盘驱动器和分区的更改需要反映在 GRUB 的配置中。 如果不是这种情况,GRUB 的指令将没有意义,并且您的引导过程将无法运行。
附带说明一下,我们所说的 GRUB 实际上是 GRUB 2。这是 2012 年发布的 GRUB 的高级版本。在其他更改中,它改变了“grub.cfg”文件的创建方式,让您从可移动媒体启动。
如果 GRUB 无法加载操作系统,您将只能盯着 GRUB shell 中的提示符。 这是一个极简主义的环境,可让您执行一些操作。 但是,如果操作得当,这些步骤可以使您的计算机复活。
有两种不同的 GRUB shell。 根据问题的根本原因,您可能会发现自己处于 GRUB shell 提示符下:
蛴螬>
或者在 GRUB救援shell 提示符下:
蛴螬救援>
GRUB 救援 shell 比 GRUB shell 更受限制,但它仍然包含足够的冲击力让您的计算机启动。 计算机启动后,您就可以更好地解决根本原因。
使用 GRUB 外壳
GRUB shell 是一个命令行界面,可让您使用一小部分 Linux 命令。 如果您发现自己在这里而不是通常的登录屏幕,则意味着您的启动过程一团糟。
您可以访问的命令与通常的 Linux 版本不同。 例如,GRUB shell ls
命令不是 Bash ls
命令。 它与它几乎没有共同之处。 我们可以使用--help
选项看到这一点。
ls--帮助
它仅列出了五个选项。 这与 Bash 中ls
支持的几十个选项相去甚远。 尽管如此,即使我们的命令面板有些柔和,我们仍然可以纠正这种情况。
在提示符下,键入ls
并按“Enter”。
ls
在这台计算机上,它列出了三个项目。
- (hd0)是第一块硬盘。
- (hd0,gpt1)是第一个硬盘上的第一个分区。
- (hd0,gpt2)是第一个硬盘上的第二个分区。
“gpt”标签代表 GUID 分区表。 当我们引用一个分区时,我们需要包括括号“ ()
”,但我们可以省略标签。
要依次查看分区,我们将使用ls
。
ls (hd0,1)
ls (hd0,2)
我们发现第二个分区上有一个 Linux 文件系统。 我们将通过查看该分区的根目录来进一步调查。
ls (hd0,2)/
很明显,这是 Linux 分区,上面有引导目录。 这是存储 GRUB 文件、Linux 引导映像和其他引导文件的地方。
在这台计算机上,我们需要在发出命令时引用分区(hd0,2)
。 在您的计算机上,您可以使用您在其中找到 Linux 安装的任何分区。
我们可以使用cat
命令通过将目录路径和文件名附加到分区名称来查找文本文件,如下所示:
cat (hd0,2)/等/问题
在多重引导安装中,这是验证您在正确分区上的有用方法。 它也非常适合查看配置文件内部。
在这里,我们使用带有-l
(长)和-h
(人类可读大小)选项的ls
命令来列出“/boot”目录中的文件。
ls -lh (hd0,2)/启动
为了让这台计算机启动,我们需要告诉 GRUB 我们新发现的 Linux 分区包含启动文件。
设置根=(hd0,2)
我们需要指定从哪个 Linux 内核启动。 我们使用linux
命令执行此操作。 请注意,我们还必须使用通常的 Linux 硬盘驱动器和分区命名方案提供根目录。
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
在我们的示例计算机上,我们使用(hd0)
这是第一个硬盘驱动器。 这在通常的 Linux 命名法中称为sda
。 我们发现第二个分区是 Linux 分区,所以我们需要指定sda2
。
您的机器可能有所不同。 例如,如果您的 Linux 分区报告为(hd2,1)
,这意味着分区一位于第三个硬盘驱动器或sdc1
上。
我们还需要指定在计算机启动时使用哪个基于 RAM 的文件系统映像。 这必须使用与我们正在使用的 Linux 内核相同的数字组件。
initrd /boot/initrd.img-6.2.0-20-generic
现在,要启动我们的系统,请键入“boot”并按“Enter”。
这应该将您的计算机启动到 Linux。 这让我们再次运行,但我们仍然需要修复 GRUB,这样我们就不需要在每次启动计算机时都这样做。
我们将运行update-grub
。 这将扫描我们的系统,识别操作系统,并创建一个新的 GRUB 配置。 我们需要以 root 用户身份运行它。
须藤更新-grub
在极少数情况下,您可能还需要使用grub-install
重新安装 GRUB 引导装载程序。
sudo grub-install /dev/sda
请注意,您不需要指定要安装在哪个分区上,只需指定哪个驱动器即可。 在正常安装中,它与您的 Linux 所在的驱动器相同。
布丁的证明会在下次重启时出现。 您的计算机应正常重启。
相关:如何配置 GRUB2 引导装载程序的设置
使用 GRUB 救援 Shell
根据引导问题的性质,您可能不会进入 GRUB shell。 您可能处于 GRUB救援模式。 如果是这种情况,您的提示将如下所示:
蛴螬救援>
我们需要在这个 shell 中发出的命令是不同的。 我们需要使用ls
来查找 Linux 分区,就像您使用 GRUB shell 一样。 确定 Linux 分区后,您可以继续输入这些命令。
请记住使用适合您计算机的驱动器标识符和内核版本号。 insmod
命令加载内核模块。
设置前缀=(hd0,2)/boot/grub
设置根=(hd0,2)
insmod正常
insmod Linux
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
initrd /boot/initrd.img-6.2.0-20-generic
然后,您可以键入“boot”并按“Enter”重新启动计算机。 一旦它重新启动并且您已登录,请使用update-grub
命令更新 GRUB。
其他可能的补救措施
如果问题是缺少启动文件,例如“vmlinuz”和“initrd.img”文件,您可以从 Live DVD 或可启动的 Linux USB 闪存驱动器启动计算机,并将丢失的文件复制到位。
请注意,“vmlinuz”和“initrd.img”文件必须具有相同的版本号,因为它们是一对匹配的。
相关:如何在你的 Mac 上创建一个可启动的 Linux Live USB