系统故障了,机器无法正常工作,更别提正常提供服务,这个时候如果我们掌握了系统排错,那就大有用武之地了。我们在学习和实验阶段,可以通过系统排错帮助大家更深入了解系统启动过程。
对系统进行如下破坏:
1.破坏grub引导
dd if=/dev/zero of=/dev/sda bs=1 count=446
2.破坏/boot启动目录
rm -rf /boot/*
3.破坏/etc/fstab文件
rm -rf /etc/fstab
4.破坏/etc/inittab、/etc/rc.d/rc.sysinit、/bin/mount文件(任何文件丢失,及文件版本或内容不匹配,均属此列)
rm -rf /etc/inittab /etc/rc.d/rc.sysinit
cp /bin/ping /bin/mount
排错修复:
用光盘或者网络引导进入rescue模式,过程中因为fstab表被删除,会提示找不到linux分区,无法自动识别linux分区,确定后进shell
使用fdisk -l查看分区,应该可以识别出boot分区和交换分区,也可以看到是否使用到逻辑卷。
如果没有使用逻辑卷,则原根分区是分区形式,使用blkid或e2label查看标签来推断根分区,如果没有标签或无法从标签判断,则需要将分区逐一挂载(挂载点自建),查看分区内容可判断到根分区。
如果有使用逻辑卷,对分区使用上述方法查看仍没找着根分区,则估计是使用逻辑卷作为根分区,此时,需要激活逻辑卷卷组(lvm vgchange -ay),再将逻辑卷逐一挂载,查看其内容,可判断到根分区。
找到根分区后,需要处理/etc/fstab,自行编写fstab,注意写正确里面的条目,fstab表里的分区不是采用分区名挂载了,改成使用uuid。
编辑完成fstab之后,敲入exit,选择reboot重启机器。
伪根时候的shell提示符为bash-4.1#,真根时候的shell提示符为sh-4.1#
再次进入rescue模式,这时候已经可以正确找到linux分区,并自动将根分区挂载在伪根的/mnt/sysimage,使用chroot /mnt/sysimage切换到真根,如果不知道系统丢失哪些文件,可以使用rpm -Va检查,对显示出的结果需要判断哪些是跟启动相关的。
安装丢失文件对应的包之前,需先挂载光驱,/dev/sr0
rpm -qf /etc/rc.d 可查询到包名
从光盘上安装缺失或损坏的文件对应的包
rpm -ivh /mnt/Packages/initscripts-9.03.17-1.el6.x86_64.rpm --force
boot文件夹中的内容来自于内核包
rpm -V kernel和rpm -V grub
grub-install 安装grub引导
编写/boot/grub/grub.conf
exit两次reboot