修复 grub2 引导程序

最近升级安装了 debian 6,不料因为对 grub2 不太了解,一次操作失误,致使 grub2 发生致命错误,无法引导系统。好在经过一番胡乱折腾,总算是修复了引导程序。现在记录如下,以备后用。

简单情况:250G 硬盘,分成3个主分区,分别是

  • /dev/sda1 (hd0,0),Windows C 系统盘
  • /dev/sda2 (hd0,1),Windows D 数据盘
  • /dev/sda3 (hd0,2),Windows E 数据盘

然后是5个逻辑分区。分别安装了:

  • /dev/sda5 (hd0,4),Ubuntu 10.10
  • /dev/sda6 (hd0,5),Fedora 14
  • /dev/sda7 (hd0,6),openSUSE 11.3
  • /dev/sda8 (hd0,7),Debian 6
  • /dev/sda9 (hd0,8),Swap 交换分区

原来一直是用 /dev/sda5 的 Ubuntu 10.10 的 grub2 作为引导程序,升级安装 Debian 6 以后,覆盖了原来的 grub2。Debian 6 也采用了最新的 grub2 引导技术,不过奇怪的是,在安装 Debian 6 生成 grub2 菜单的时候,Debian 可以扫描出其它的全部系统,唯独它派生的 Ubuntu 无法识别!只好在安装完毕以后,自己手动修改 Debian 的 grub2 引导程序。结果这一修改出了毛病。

grub2 已经无法再通过直接修改 /boot/grub/menu.lst 文件来修改启动菜单了,/boot/grub/ 目录下倒是有一个 grub.cfg 文件可以直接修改,不过一般是不建议直接修改这个文件的。需要修改的是 /etc/grub.d/ 目录下的文件。也怪自己事先没查清楚资料,胡乱拿了一文件开刀:/etc/grub.d/40_custom,在文件后面添加了如下指令:

title Ubuntu 10.10
root (hd0,4)
linux /boot/grub/core.img
boot

用过 grub1 引导 grub2 系统的朋友估计对这几句指令比较熟悉呵呵,确实是不伦不类,Debian 6 是用 grub2 引导的,第一条指令,title Ubuntu 10.10 就不对头了,grub2 已经用 menuentry 代替了 title 指令。第二条指令 root (hd0,4) 也不正确,参考 Ubuntu 的启动菜单,grub2 已经使用 (hd0,msdos5) 代换了 (hd0,4);第三,原来用 grub1 引导 grub2 系统的时候,kernel /boot/grub/core.img 这个指令是正确的,不过 grub2 已经使用 linux 代替了 kernel 这个指令,所以这里用 linux /boot/grub/core.img 代替 linux /boot/grub/core.img 倒也不错。

杯具的是运行完些命令以后:

update-grub

然后 reboot,完了,进了 initramfs 黑屏,完全没有了启动菜单,只有一些内置命令,我这种水平如何能对付的了。赶紧找安装光盘,光驱启动,重新修复 grub。偏偏光驱罢工,凡是带 grub2 系统的安装光盘全部读不出来,原来当初买刻录碟不慎,贪便宜,买到的全部是只能读1-2次的光盘!!这些死 JS!!我一边划个圈圈诅咒,一边继续尝试其它的安装光盘。终于读起了张 Fedora 13 的光盘!内心一阵狂喜。好在还装有 Fedora 14 和 openSUSE 这两个操作系统,它们都是 grub1 引导,相对来说比较熟悉。修复其中的一个引导程序,然后再手工修改,引导其它系统吧。

进入 Fedora 13 的 LiveCD 桌面,赶紧打开终端,立马输入期待已久的命令(嘿嘿):

su -
password<直接回车>
grub
W E L C O M E ... (此处省略 N 字节)
root (hd0,5)
setup (hd0)
quit
rebo ...

等会!不要重启先。顺便把错误修改 Debian 引导文件也改回来了吧。

mount /dev/sda8 /mnt/
vi /mnt/etc/grub.d/40_custom
xxxxxxxxx

保存退出,重启,哈哈大功告成。原以为修改掉 Debian 下的 /etc/grub.d/ 文件,就能直接从 Fedora 引导进 Debian,结果还是和原来的一样黑屏。原来没有在 Debian 系统下运行 update-grub 命令之前,对 grub 文件做任何修改都没用!

没办法还是只能手工敲命令吧:

在 grub 引导界面,敲入 c 键进入命令行模式:

root (hd0,7)
kerenl /boot/vmlinuz-2.6.32-5-686 root=/dev/sda8 ro quiet
initrd /boot/initrd.img-2.6.32-5-686
boot

好了,一切正常的话,可以进入 Debian 了,然后再运行 update-grub 修复受伤的 grub 引导程序吧。这次教训是:一张安装光盘在手是不可或缺的,或许还应该考虑 USB 启动器做备用,现在的光驱和刻录碟太不靠谱了。

你可能感兴趣的:(c,windows,linux,Debian,ubuntu,终端)