Me

1/06/2011

/boot 分区被删掉了怎么办?

/boot 分区被删掉了怎么办?


这个真的是在我办公室电脑上发生了。当时正常开机,等待引导系统时,却发现直接进入了 grub 命令行 grub>
我顿时感到惊奇,哪里出了问题?不过还是试着加载内核,但是输入 (hd0,5) 后提示错误。按 tab 键出来的备选分区也少了一个。
我试着引导 XP,
grub>rootnoverify (hd0,0)
grub>chainloader +1
grub>boot

还好,XP 正常引导,看来不是硬盘的问题。从 XP 中查看了分区结构,/boot 那个几百兆的分区神奇的被删除了。到现在我还是没有找到被删的原因。
既然如此,那就每天输入命令进 XP 吧,反正工作也需要它。
前言到此结束。
直到昨天,我决定把我的 Fedora 修好。
按照自己的假设,应该重建 boot 分区然后挂载,把内核镜像还有 grub 相关文件放进去,就可以了。当然前提是要能建立删掉的分区才可以。XP 下是没指望,还是用万能的 rescue 模式吧。
我没有 rescue 光盘,也不打算为此刻录一张(太浪费资源了)。在此向您推荐 bfo[1] 或 bko[2],关于这两个的介绍可以参考我之前写的kickstart 和 BFO 引导自动安装 Fedora[3]。
现在进入恢复步骤:
1. 从带有 bfo 镜像的 U 盘启动计算机,通过 bfo 进入 rescue 模式;
2. rescue 模式会找到硬盘上已有的 Linux,然后按提示进入 shell;
3. 为了方便,在进入 shell 后执行 chroot /mnt/sysimage/;这样可将找到的 Linux 系统的根目录设为当前 shell 下的根目录;
4. 执行 #fdisk /dev/sda,然后按 p 列出当前分区表结构,以保证稍后建立分区时不会出错。如果你非常地熟悉自己的分区结构,可忽略这个操作;
5. 按 n 键,新建分区,我的 /boot 之前处于扩展分区,因此这里还是选择扩展分区(l),然后设置分区起止位置,如果跟我一样,硬盘只剩下之前 /boot 那么点空白空间的话,那直接使用默认值就可以。如果您的硬盘空白空间很大,并不打算都用作 /boot,那就小心一点,根据您的需要进行调整;
6. 完成新建分区后,按 p 键你也许会发现分区顺序有所改变。例如我新建的分区就成了 /dev/sda7。这时我们可以按 x 进入 expert mode,然后按 f 键,重新调整分区编号顺序,使得分区编号与分区所在物理位置对应,修改后新建的分区编号为 /dev/sda6;
8. 完成以上步骤,并确认没有错误后,按 w 键保存分区表,退出 fdisk。
重新启动计算机,再次进入 rescue 模式,重复 1-3 步,
9. 然后执行 #mkfs.ext4 /dev/sda6,在新建的分区创建 ext4 文件系统;
10. 修改 /etc/fstab,将新建的分区挂载到 /boot;
11. 重新安装引导程序和内核:
执行 #grub-install /dev/sda 重新安装 grub
运行 #yum update kernel 安装最新的内核
12. 如果这时已有 /boot/grub/grub.conf 文件,那么就可以直接重启完成修复;否则要是像小弟我,装完 grub 没有 grub.conf(我怀疑是我先安装内核后安装 grub 造成的)文件,那就需要自己动手写一个了(这个过程略掉了)。好在我之前保存过一个备份,直接改改复制到了 /boot/grub/ 下,好了,重新启动;

一切正常,/boot 重建成功,大功告成。

[1] http://boot.fedoraproject.org
[2] http://boot.kernel.org
[3] http://www.helpsworld.org/blog/?p=481