今天更新脑残了下,把新版后台程序覆盖了已经停止升级的旧版后台
喵了个咪的版本太多程序员也不知道旧版是哪个版本了,这下坑爹了
好在旧版程序没停止运行,当时第一想法是把程序源内容从进程中给“dump”出来
因为存在存储器映射,所以这个想法应该是可行的.....,程序文件应该在进程的.text段
但是找了半天也没发现有现成工具能直接提取.......
正好那天看到有人博客上提到,硬盘空间满但是找不到大文件,原因在于删除了文件没重启进程。
举一反三.....同样方法
lsof -n | grep myuser | grep delete
ok,所有被覆盖掉的文件的inode都出来了,下面就是通过inode把文件复制出来......但是好像没有直接能从inode复制文件的工具
反删除工具都要要先卸载分区或者mount ro的.....想了想rw下用反删除工具操作分区太危险....算了还是想其他办法,实在不行用c写个通过inode复制文件的程序都比反删除工具安全.....
后来又看到一篇文章
哇塞这个好,直接去/proc/pid,看见exe的软连接闪动了。
cp -p exe /home/bak/appbak/appname
文件就直接回来了...........
其实上述方法可以实际是利用了文件描述符恢复删除文件,条件是使用这个文件的进程没有关闭
不仅仅能恢复程序文件,还能恢复进程打开的文件,比如mysql你删除了innodb文件,可以通过类似的方法复制innodb文件出来
简单来讲,就是lsof出文件描述符,然后到/proc/pid/fd里通过文件描述符把文件复制回来
阅读(1355) | 评论(0) | 转发(0) |