排除 GRUB 的问题

假若一个系统的 GRUB 设置出现问题(成因包括:不正确地修改 GRUB 配置文件、安装另一个操作系统、硬件上或 BIOS 内的改动引致设置的排序不相同),导致 GRUB 不能找到它的配置文件,你可能会面对 grub 的开机提示符而无从着手。普遍来说,第一步是要找出 GRUB 配置文件的位置。GRUB 的 find 指令可以为你效努。

grub> find /grub/grub.conf
find /grub/grub.conf
 (hd0,2)
 (hd1,2)

这里告欣我们有两个 /boot 分区,有可能源自软件 RAID 或不同操作系统。头一个位于第一个硬盘的第三个分区,而另一个位于第二个硬盘的第三个分区。假若要将第一个项目的 GRUB 设置重新安装到 MBR:

grub> root (hd0,2)
grub> setup (hd0)

如果你安装了其它 Linux 版本,例如 Ubuntu,它也设只有 menu.lst 档而没有 grub.conf,但由于 CentOS 利用连结把 menu.lst 指向 grub.conf,因此在这两款系统上寻找 menu.lst 亦可行:

grub> find /grub/grub.conf
find /grub/grub.conf
 (hd0,0)
grub> find /grub/menu.lst
find /grub/menu.lst
 (hd0,0)
 (hd0,1)

这里告欣我们有两个 /boot 分区,头一个位于第一个硬盘的第一个分区,很可能正是 CentOS,而另一个 Linux 的 /boot 位于第一个硬盘的第二个分区。

要查看 grub.conf 及 menu.lst 档的内容,可使用 GRUB 的 cat 指令:

grub> cat (hd0,0)/grub/grub.conf
 ... 显示文件内容 ...
grub> cat (hd0,1)/grub/menu.lst
 ... 显示文件内容 ...

要是首轮尝试找不到文件,很可能 /boot 分区并不存在,而 grub 被安装在主目录内。你可试用

grub> find /boot/grub/grub.conf
 (hd0,0)
 (hd1,4)

同样地,这个例子里有两个 GRUB 安装。头一个在第一个硬盘的第一个分区,而另一个在第二个硬盘的第五个分区 —— 亦即首个扩展分区。

若果要撤消第二个项目并将 GRUB 的开机程序安装在第一个硬盘的 MBR 上:

grub> root (hd1,4)
grub> setup (hd0)

要是你不清楚主目录的位置时,你可以尝试寻找 /etc 内的一个文件。譬如:

grub> find /etc/fstab
 (hd0,1)

由此我们得知 / 位于第一个硬盘的第二个分区上 —— 采用 SCSI 或 SATA 等于 /dev/sda2,而采用 PATA 等于 /dev/hda2。

GRUB 的指令壳还有很多功能,并且在 GRUB 的 info 档内有详情记载,请利用 info grub 来访问它们。


其它 GRUB 文章:


这页的英文版由 PhilSchaffner 创建及维护。欢迎其它 Wiki 贡献者作出更正、添加或修改。

Translation of revision 6

zh/TipsAndTricks/TroubleshootGRUB (last edited 2019-12-09 09:11:34 by anonymous)