妹子在生产服务器执行了 rm -rf /*,还好有我帮她恢复了

作者:zhouyu来源;https://www.cnblogs.com/zhouyu629/p/3734494.html

妹子在生产服务器执行了 rm -rf /*,还好有我帮她恢复了

文章插图
 
经历了两天不懈努力 , 终于恢复了一次误操作删除的生产服务器数据 。对本次事故过程和解决办法记录在此 , 警醒自己 , 也提示别人莫犯此错 。也希望遇到问题的朋友能找到一丝灵感解决问题 。
事故背景
安排一个妹子在一台生产服务器上安装Oracle,妹子边研究边安装,感觉装的不对,准备卸载重新安装 。从网上找到卸载方法 , 其中要执行一行命令删除Oracle的安装目录 , 命令如下:
rm -rf $ORACLE_BASE/*如果ORACLE_BASE这个变量没有赋值 , 那命令就变成了
rm -rf /*==|| , 妹子使用的可是root账户啊 。就这样 , 把整个盘的文件全部删除了 , 包括应用Tomcat、MySQL数据库 and so on 。。。。
(mysql数据库不是在运行吗?linux能删除正在执行的文件?反正是彻底删除了 , 最后还剩一个tomcat的log文件 , 估计是文件过大 , 一时没有删除成功)
看着妹子自责的眼神 , 又是因为这事是我安排她做的 , 也没有跟她讲清厉害关系 , 没有任何培训 , 责任只能一个人背了 , 况且怎么能让美女背负这个责任呢?
打电话到机房 , 将盘挂到另一台服务器上 , ssh上去查看文件全部被清 , 这台服务器运行的可是一个客户的生产系统啊 , 已经运行大半年了 , 得尽快恢复啊 。于是找来脱机备份的数据库 , 发现备份文件只有1kb , 里面只有几行熟悉的mysqldump注释(难道是crontab执行的备份脚本有问题) , 最接尽的备份也是2013年12月份的了 , 真是屋漏偏逢连夜雨啊 。
想起来一位领导说过的案例:当一个生产系统挂掉以后 , 发现所有备份都有问题 , 刻录的光盘也有划痕 , 磁带机也坏了(一个业界前辈 , 估计以前还用光盘做备份了) , 没想到今天真的应验到我的身上了 , 怎么办??
部门领导知道情况后 , 已经做了最坏的B计划:领导亲自带队和产品AA周日赶到客户所在的地市 , 星期一去领导层沟通;BB和CC去客户管理员那边想办法说服客户 。。。
救命稻草--ext3grep
赶快到网上去查资料进行误删数据恢复 , 还真找到一款ext3grep能够恢复通过rm -rf删除的文件 , 我们磁盘也是ext3格式 , 且网上有不少的成功案例 。于是燃起了一丝希望 , 赶快对盘umount , 防止重新写入补删文件扇区 。下载ext3grep , 安装(编译安装过程艰辛暂且不表) 。
先执行扫描文件名命令:
ext3grep /dev/vgdata/LogVol00 --dump-names打印出了所有被删除文件及路径 , 心中狂喜 , 不用执行B计划了 , 文件都在呢 。
这款软件不能按目录恢复文件 , 只能执行恢复全部命令:
ext3grep /dev/vgdata/LogVol00 --restore-all结果当前盘空间不足 , 没办法只能恢复文件 , 尝试了几个文件 , 居然部分成功部分失败
ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/aqsh/tb_b_attench.MYD心里不禁一凉 , 难道是删除磁盘上被写过文件了?恢复机率不大了啊 , 能恢复几个算几个吧 , 说不定重要数据文件刚好在能恢复的MYD文件中 。于是先将所有文件名重定向到一个文件文件中
ext3grep /dev/vgdata/LogVol00 --dump-names >/usr/allnames.txt过滤出来所有mysql数据库的文件名存成,mysqltbname.txt
编写脚本恢复文件:
妹子在生产服务器执行了 rm -rf /*,还好有我帮她恢复了

文章插图
 
执行 , 大概运行了20分钟 , 恢复了40多个文件 , 但不够啊 , 我们将近100张表 , 每张表frm,myd,myi三个文件 , 怎么说也有300多个左右啊!!将找回来的文件附到现有数据库上 , 更要文件权限为777后 , 重启mysql , 也算是找回一部分数据了 , 但客户重要的考勤签到数据、手机端上报数据(据说客户按这些数据做员工绩效的)还没找回来啊 。
咋 办?中间又试了另一款工具extundelete , 跟ext3grep语法基本一致 , 原理应该也一样了 , 但是据说能按目录恢复 , 好吧试一试 。


推荐阅读