在Linux系统的启动过程中,涉及到MBR主引导记录,GRUB启动菜单,系统初始化配置文件,分区挂载配置文件各方面,其中任何一个环节出现故障都有可能导致系统启动故障,今天的实验就模拟一下这几方面的故障然后解决。
一.MBR扇区故障
首先介绍一下MBR扇区,它是物理硬盘的第一个扇区(512字节),由三部分构成:1.主引导程序代码,占446字节;2.硬盘分区表DPT,占64字节;3.主引导扇区结束标志AA55H。MBR引导记录正位于MBR扇区,当MBR扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。接下来通过实验来模拟MBR扇区的备份、破坏和修复过程:
1.备份:将第一块硬盘(sda)的MBR扇区备份到第二块硬盘的sdb1分区中。
2.模拟损坏MBR扇区:从空设备文件zero中读取512字节的数据,写入第一块硬盘sda,从而破坏MBR扇区中的数据。
完成上述操作后,重启系统,将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。(如下图)
3.恢复MBR扇区数据:由于MBR扇区损坏后无法再从硬盘启动系统,因此我们使用RHEL5安装光盘引导,当出现安装向导的“boot:”提示符时,输入“linux rescue”并回车(如下图),以“急救模式”引导光盘中的Linux系统。之后依次按回车键接收默认的语言、键盘格式,提示是否配置网卡时选“NO”,然后系统会自动查找硬盘中的分区并尝试将其挂载到“/mnt/sysimage”目录(选择“Continue”确认并继续)。接下来当出现是否初始化磁盘的警告窗口时,切记一定要选择“NO”(如下图),以免造成对硬盘数据的进一步损坏,最后选择“OK”确认后将进入带“sh-3.2#”提示符的Bash Shell环境。
接下来进行恢复操作,先确认第一硬盘的分区情况(已无法获得有效分区表信息),然后挂载带有备份文件的分区,并恢复备份数据:
完成恢复操作后,执行“init 6”重启主机即可正常进入系统。(取出RHEL5安装光盘)
二.GRUB引导故障
GRUB是大多数Linux系统默认使用的引导程序,如果主机中有不同的操作系统,可以通过启动菜单的方式选择进入。当“/boot/grup/grup.conf”配置文件丢失,或者关键配置出现错误,或者MBR记录中的引导程序遭到破坏时,Linux主机启动后可能只会出现“grub>”的提示符(如下图),无法完成进一步的系统启动过程。
接下来模拟一下“/boot/grup/grup.conf”文件备份、丢失、恢复的操作:
1.备份“/boot/grup/grup.conf ”文件至/disk下。
#cp /boot/grup/grup.conf /disk
2.删除“/boot/grup/grup.conf“ 文件,重启系统。
# rm -f /boot/grup/grup.conf
#reboot
3.恢复“/boot/grup/grup.conf” 文件有两种方法,第一种是在“grub" 命令提示符后输入对应的引导命令(可参考“/boot/grup/grup.conf“文件中的配置),再执行“boot”命令也可以引导linux系统,进入系统后再重建grup.conf文件,或直接恢复备份即可。这种恢复方法较为复杂,而且一般不容易记住相关的命令的选项,内核参数等。因此我们采用第二种方法来恢复:同样使用RHEL5安装光盘引导进入急救模式(参考上恢复MBR时的操作),如果分区表并未破坏,则急救模式将会找到硬盘中的Linux根分区,并将其挂载到光盘目录结构中的“/mnt/sysimage”文件夹中。恢复操作如下:
sh-3.2# chroot /mnt/sysimage //切换到待修复的Linux系统根环境
sh-3.2# cp /disk/grup.conf /boot/grup/ //恢复备份文件
另外如果是MBR扇区中的引导程序出现损坏,可能在恢复grub.conf配置文件后仍然无法成功启动系统,此时就需要在急救模式下的Shell环境中重装grub。
sh-3.2# chroot /mnt/sysimage
sh-3.2# grub-install /dev/sda
sh-3.2# exit
sh-3.2# exit
根据以上操作便可以恢复GRUB故障了!
三./etc/inittab文件丢失或损坏
“/etc/inittab”文件是系统初始化进程init的配置文件,当该文件被误删除或者存在错误配置时,可能导致无法启动系统。丢失“/etc/inittab”文件后,启动时将会出现“INIT:No inittab file found”的错误提示信息(如下图):
恢复方法:在急救模式的“sh-3.2#”环境中挂载RHEL5光盘,并重新安装initscripts软件包,完装完毕后重启系统,便可以恢复/etc/inittab文件了。
今天的实验到此就先结束了,当然模拟的实验环境和真实的环境中出现的故障有些差异,但解决方法应该是差不多的。以上如有文字如有错误,欢迎大家指正!