首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

从失败的 Linux 引导中恢复-2

从失败的 Linux 引导中恢复-2

使用 GRUB 2 shellGRUB 包含它自己的内置 shell,您可在其中键入与 Bash 或其他 Linux 文本模式 shell 中键入的命令类似的命令。根据 Linux 标准,GRUB shell 很简单,但使用它来应对许多紧急维护任务已经足够。要从 GRUB 主菜单进入该 shell(),可按下 c。要从 GRUB 编辑器进入该 shell(),可按下 Ctrl-cF2。结果类似于图 3:
图 3. GRUB shellGRUB 2 shell 支持一系列命令,其中许多命令与 grub.cfg 中用于控制菜单驱动的引导过程的命令类似或等同。如果非常熟悉 GRUB 2 配置文件格式,那么您可以在 shell 中键入命令来引导计算机。实际上,很可能会使用 shell 执行恢复操作。表 1 提供了在此方面更可能有用的一些命令。GRUB 2 支持其他许多命令,您可以通过  了解它们。
表 1. 常见的 GRUB 2 命令行命令命令选项解释boot无引导一个已定义的内核或链式装载程序。catfilename显示指定的文件的内容。configfilefilename加载指定的配置文件。help[command]显示帮助 — 一个命令列表或有关指定命令的帮助。initrdfilename加载指定的初始 RAM 磁盘文件。insmodmodule_name加载指定的模块(驱动程序)。linuxfilename加载指定的 Linux 内核。ls[arg]列出设备或一个设备上的文件。reboot无重新引导计算机。setenvvar=value将一个环境变量设置为等于某个值。
可能促使您使用 GRUB 命令行的一个问题是,GRUB 无法找到它自己的配置文件。重新安装 GRUB(如本文的 执行永久修复 一节中所述)是长期的解决方案。但是,与此同时,您可以发出一些命令来调出常规 GRUB 菜单并引导 Linux。首先,必须识别要安装 GRUB 的分区,这一点可借助 ls 命令来完成。如果在使用该命令时不带任何选项,ls 会显示 GRUB 可检测的磁盘和分区。然后您可以指定设备的名称和一个结尾斜杠 (/),以查看特定分区的内容,如清单 2 所示:
清单 2. 使用 ls 查看文件系统的设备或内容
1
2
3
4
5
6
grub> ls
(hd0) (hd0,gpt5) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
grub> ls (hd0,gpt5)/
abi-3.2.0-22-generic grub/ initrd.img-3.2.0-22-generic
memtest86+bin System.map-3.2.0-22-generic vmcoreinfo-3.2.0-22-generic
vmlinuz-3.2.0-22-generic




清单 2 中的示例显示了一个具有单个磁盘 (hd0) 的计算机,该磁盘包含 5 个全局惟一标识符 (GUID) 分区表 (GPT) 分区。(hd0,gpt5) 的内容好像是一个 Linux /boot 分区,包含一个 GRUB 配置目录 (grub/)。您可能需要查看其他分区的内容,然后才能找到您的 Linux /boot 分区。如果您的系统未使用单独的 /boot 分区,则必须查找您的 Linux 引导 (/) 分区。
识别 GRUB 配置文件所在位置后,可以设置 prefix 和 root 环境变量,告诉 GRUB 在何处找到配置文件。这些变量分别识别 grub.cfg 所在的目录和它所在的分区:
1
2
grub> set prefix=(hd0,gpt5)/grub
grub> set root=(hd0,gpt5)




从这里,您可加载 normal 模块并启动它来调出 GRUB 菜单:
1
2
grub> insmod normal
grub> normal




使用 Super GRUB2 Disk一个仅适用于 BIOS        的工具Super GRUB2 Disk 是一个仅适用于 BIOS 的工具。如果您在 EFI 模式下正常引导,Super GRUB2            Disk 帮不上忙。EFI 模式引导不依赖于 MBR 或磁盘的引导扇区中存储的代码,这些代码区域(如果损坏)会使得 Super GRUB2 Disk            大有作为。对于 EFI 引导问题,您的固件的引导管理器或一个辅助程序(比如 rEFInd)可帮助您从损坏的 NVRAM 设置导致的问题中恢复。我还建议您备份 EFI 计算机的 ESP 中的文件,以防分区被损坏。因为 EFI 不依赖于隐藏的代码,所以您可使用一个简单的文件拷贝操作来还原 ESP。(内幕披露:我在维护 rEFInd。)

在某些情况下,GRUB 甚至未提供 grub> 提示符,您可能甚至在使用该提示符解决问题时遇到麻烦。在这些情况下, 营救工具可提供帮助。
准备应对灾难即使现在可以成功引导,我仍然建议您创建 Super GRUB2 Disk 的副本,以便在需要时直接使用它。 是一个具有 .iso 扩展名的混合镜像文件。可使用 dd 将此文件复制到软盘、CompactFlash (CF) 磁盘、通用串行总线 (USB) 闪存盘或者某种类型的磁盘中。也可以使用 cdrecord 或一个 GUI 光碟工具将该文件刻录到 CD-R 中。
创建引导介质后,我建议对它执行测试(理想情况下,在多个计算机上执行测试),以熟悉该工具并确认它在您使用的硬件上是否有效。
使用 Super GRUB2 Disk 进行引导准备一个 Super GRUB2 Disk 后,您可像其他任何可引导磁盘一样引导它。在某些情况下,您可能需要在引导过程中按下某个键来更改引导顺序。常用的键包括 F2、F10 和 F12,您应该查阅计算机的手册,了解相关的详细信息。在执行 Super GRUB2 Disk 引导时,您会看到一个类似图 4 的显示屏幕,其中包括检测操作系统或启用各种类型的支持的选项:
图 4. 引导 Super GRUB2 Disk 时显示的 GRUB 菜单如果您的计算机使用了独立磁盘冗余阵列 (RAID) 或逻辑卷管理 (Logical Volume Management, LVM),或者依赖于旧的并行 ATA (PATA) 磁盘或外部 USB 磁盘,那么您可能需要选择这些功能并按下 Enter 来激活它们。完成上述操作之后,您可以尝试检测选项。我发现 “Detect any GRUB2 configuration file (grub.cfg)” 和 “Detect any GRUB2 installation (even if the MBR is overwritten)” 选项一般最适合恢复损坏的 GRUB 安装。但是 “Detect any Operating System” 选项可能也值得一试。
如果检测成功,您应该看到一个新的 GRUB 选项菜单。在单操作系统安装中,此菜单可能仅包含一个选项,它使用路径来识别 GRUB 配置文件,就像 (hd0,gpt5)/grub/grub.cfg 中一样。在选中此选项时,应显示您的安装的正常 GRUB 屏幕。(字体和颜色可能不同,但菜单选项应该能够正常工作。)
执行永久修复到目前为止,我介绍的修复都是永久性的。您可能已成功引导 Linux,但是,只要重新引导,就会看到原始的 GRUB 屏幕。要让您的更改永久生效,需要采取额外的步骤。
其中最简单的步骤是修改 GRUB 配置文件。尽管 可以直接编辑 grub.cfg 来修改您的设置,但此方法不可取,因为只要升级您的发行版提供的内核,自动化的脚本就可以从其他文件重新构建该文件。相反,您需要编辑 /etc/grub.d 中的文件和 /etc/default/grub 中的默认全局设置。然后可以使用 grub-mkconfig,从 Linux 命令提示符生成一个新的 grub.cfg 文件:
1
grub-mkconfig -o /boot/grub/grub.cfg




如果您的问题是 GRUB 仅显示了一个 grub> 提示符或完全未启动,那么您必须将 GRUB 重新安装到您硬盘上:
1
grub-install /dev/sda




在某些情况下,您可能需要将 GRUB 安装到 /dev/sda 以外的设备,比如 /dev/sdb。一般不建议将 GRUB 2 安装到某个分区。如果将 GRUB 安装到一个基于 BIOS 的计算机上的 GPT 磁盘,请确保该计算机包含一个 BIOS 引导分区。没有该分区,GRUB 可能拒绝安装或者可能不可靠。如果您将 GRUB 安装到一个基于 EFI 的计算机,那么可以省略设备规范,确保您的 ESP 挂载在 /boot/efi 上。grub-install 自动将必要的文件复制到这个目录(进而布置到 ESP)。如果 GRUB 由于不当的 NVRAM 设置而未在基于 EFI 的计算机上启动,那么您可能可以在固件自身内修复这些问题,但不同实现的细节可能有所不同。如果可以在 EFI 模式下引导一个应急系统,那么可以使用 efibootmgr 还原您的引导装载程序:
1
efibootmgr -c -l \\EFI\\loaderdir\\loadername.efi -L MenuName




结束语GRUB 2 是一个直接引导 Linux(和其他一些)操作系统内核的灵活工具。但是由于引导过程中的漏洞和 GRUB 自身的复杂性,可能会出现一些问题,导致系统无法引导。在这些情况下,知道如何编辑各个 GRUB 代码段、如何使用 GRUB 命令行和如何使用 Super GRUB2 Disk 都是宝贵的技能。通过使用这些技术,您可以从各种引导问题中恢复并引导到您的正常安装中。此时,您可以编辑 GRUB 2 配置文件或重新安装引导装载程序让修复永久生效。
返回列表