由于虚拟机无法启动,vmware vcenter已经无法监控到虚机vmware tools的心跳。登陆VC通过虚拟机控制台查看发现虚机REDHAT LINUX卡在如下界面:
从截图来看:
显示chmod、chgrp、chown和awk没有找到(有可能误删),由于系统启动时候需要执行rc.sysinit脚本,该脚本会执行些权限控制命令,因此必须要用到这些文件,由于文件无法找到,导致系统初始化失败。
经过沟通,了解到客户安装了apache和mysql,并且修改了/etc/profile文件配置了应用的环境变量,导致出现如上问题。
解决问题:
给这台虚机加载redhat linux的iso,设置虚拟机bios,CD光驱为第一启动顺序,重新启动虚拟机,选择救援模式进行紧急救援。
由于是丢失文件,因此这里需要开启网络功能,方便从其他主机拷贝相关文件。
在这里输入原先该虚机的IP和网关
mount系统到sysimage下
点击OK后,进入修复模式的shell下
然后chroot /mnt/sysimage
进入/bin后,确实没有发现chmod、chown和awk等这几个命令,我们可以考虑从一台好的redhat linux系统中拷贝这几个文件过来,在命令行下执行
#scp -r root@11.11.165.177:/usr/bin/* /bin/
结果却提示命令没找到,应该是没有客户端软件,导致SCP命令没有被识别。那么设置本地yum源,并安装openssh客户端,
#yum install openssh-clients
再次执行#scp -r root@11.11.165.177:/usr/bin/* /bin/后提示输入密码,输入后开始执行拷贝命令。
拷贝完成后重启系统,顺利初始化并成功进入系统。
总结
Rescue修复要注意系统初始文件和系统命令文件的关系,恢复系统完整性。
补充另一个测试示例:
修改linux系统的文件grub.conf、fstab 我这里就不删除了,只是更改名称让系统找不到就可以了
引导程序(MBR的512字节中前446字节为引导程序,紧跟着后面64字节为分区表,最后面2个字节为结束标记)
使用以下命令把bootloader( 启 动引导程序MBR中的446字 )覆盖掉
dd if=/dev/zero of=/dev/sda bs=446 count=1
然后进入救援模式
使用fsdisk -l 查看一下分区
在当前的目录创建一个目录,用来挂载根
mkdir a
mount /dev/sda2 /a 挂载根目录到a下
mount /dev/sda1 /a/boot 挂载boot目录,因为它为单独分区
挂载成功之后就可以看到所有的系统文件,可以进行修复和修改文件了
恢复被我们修改的文件
接下来是安装MBR中的446字节的引导程序
装grub就是装/boot/grub/stage1,救援模式下输入 #grub 就可以进入grub的命令模式下
1、root(hd0,0) 这里是指的第一块一盘的一个分区,就是要指定/boot所在的分区
2、setup(hd0) 这里是安装grub的意思,当出现successed就是安装成功了
3、quit退到shell模式
4、exit重启
重启后就自动进入了 grub> 的模式,在这里手动引导系统先看一下手动引导系统
root(hd0,0) 指定一下内核文件的位置,还是/boot目录所在的分区
kernel/vmlinuz-2...ro root=/dev/sda2 具体的内核文件并以只读的形式挂载上
initrd/initrd....... 具体的内存启动镜像
boot 加载系统
如下图:
以上操作完成之后,进入系统,这时候系统的 grub.conf 尚未恢复,需要进入目录恢复此系统文件才算是系统修复完成了。
注意:根分区和/boot最好是独立分区,而把之外的做成是LVM卷,那么在救援模式下会比较方便。
有时候根为只读,需要mount -o remount rw /把根目录重新挂载成可读写的。