事件背景:
在服务器上面执行脚本,需要删除某个目录下面的所有文件,执行rm -rf /dir/*,结果目录不知道咋了,已执行,服务器疯狂报错,感觉不对,立即把脚本停止,此时服务器已经不能执行任何命令
rm -rf $dir/*
此时应该是直接变成了
rm -fr /*
虽然只运行了几秒钟,但是系统文件该删了基本删除了,如果说此时你有连接xftp文件传输的工具,就可以直接把数据文件拷贝出来,如果没有,那么恭喜,你摊上大事了,这就是传说中的“删库跑路”了
我们平时总是说不开心就rm -fr * ,作为一个运维人员,当我们真的遇上这个事时,真的是很苦逼的
基本恢复系统是不太可能的,只能拯救一些数据了
解决办法
下面就来看看如何拯救服务器的数据吧
- 重启系统后,肯定是进不去正常的系统了,所以我们要进入到服务器的最后一道防线-----救援模式
进入到救援模式的方法网上有很多,可以参考http://www.360doc.com/content/18/0313/10/44856983_736579134.shtml
总的来说,虚拟机通过光盘进入,真实服务器通过制作U盘,用U盘启动进入到救援模式
注:如果进去救援模式下面,有提示chroot /mnt/sysimage/(切换到系统的“/”),那这个就比较简单,可以直接进入到服务器的/下面,一般这种情况损坏的不是很严重,直接恢复系统的可能性也比较大,就算恢复不了,也能直接在根目录把相应的数据文件拷贝出去。
-
先确保救援模式下相应命令可以使用,如果不存在,就要把/dev/sr0挂载出来,用rpm安装yum,再安装yum install
lvm2(但一般救援模式自带lvm2) -
查看物理卷和卷组:用
lvscan,pvscan
查看,可以看到有/dev/cl下面有3个文件夹,对应我们磁盘sda2和sda3,swap一般是一些临时缓存文件,可以不用处理
注:这个文件夹的情况根据自己服务器的情况而定
-
查看逻辑卷:用
lvdisplay
查看
-
建立挂载目录,把/dev/cl下面的路径挂载出来
mount /dev/cl/home /d1
mount /dev/cl/root /d2
如果挂载不成功,先把lvm服务启动,再重新挂载
vgchange -ay /dev/cl
挂载完成以后是可以看到挂载目录的,由此可见,我的/d2目录下面的数据还是有很多的
- 此时服务器是没有网络的,需要临时指派一下IP
ip a 看下网卡, ifconfig 网卡名 192.168.XXXX netmask XXXX
这时候就可以把有用的数据scp远程拷贝到其他服务器
总结
执行删除命令时一定要谨慎,建议使用&&,如cd dir && rm –rf ./*,这样的话如果路径不存在,下面的删除语句就不会执行,如果删除的文件是某些特定的文件,一定记得带着相应的后缀名,如.sql,.xls等,这样就可以避免误删除其他文件。