由于虚拟机无法启动,vmware vcenter已经无法监控到虚机vmware tools的心跳。登陆VC通过虚拟机控制台查看发现虚机REDHAT LINUX卡在如下界面:

从截图来看:

显示chmod、chgrp、chown和awk没有找到(有可能误删),由于系统启动时候需要执行rc.sysinit脚本,该脚本会执行些权限控制命令,因此必须要用到这些文件,由于文件无法找到,导致系统初始化失败。

经过沟通,了解到客户安装了apache和mysql,并且修改了/etc/profile文件配置了应用的环境变量,导致出现如上问题。

解决问题:

  给这台虚机加载redhat linuxiso,设置虚拟机biosCD光驱为第一启动顺序,重新启动虚拟机,选择救援模式进行紧急救援。

由于是丢失文件,因此这里需要开启网络功能,方便从其他主机拷贝相关文件。


在这里输入原先该虚机的IP和网关

mount系统到sysimage下

虚机redhat linux的紧急救援_第1张图片

点击OK后,进入修复模式的shell

虚机redhat linux的紧急救援_第2张图片

然后chroot  /mnt/sysimage

进入/bin后,确实没有发现chmodchownawk等这几个命令,我们可以考虑从一台好的redhat linux系统中拷贝这几个文件过来,在命令行下执行

#scp -r [email protected]:/usr/bin/* /bin/

结果却提示命令没找到,应该是没有客户端软件,导致SCP命令没有被识别。那么设置本地yum源,并安装openssh客户端,

#yum install openssh-clients

再次执行#scp -r [email protected]:/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  加载系统

如下图:虚机redhat linux的紧急救援_第3张图片

以上操作完成之后,进入系统,这时候系统的 grub.conf 尚未恢复,需要进入目录恢复此系统文件才算是系统修复完成了。

     注意:根分区和/boot最好是独立分区,而把之外的做成是LVM卷,那么在救援模式下会比较方便。


有时候根为只读,需要mount -o remount rw /把根目录重新挂载可读写的。