Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1102217
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: LINUX

2013-09-04 12:33:01

今天更新脑残了下,把新版后台程序覆盖了已经停止升级的旧版后台
喵了个咪的版本太多程序员也不知道旧版是哪个版本了,这下坑爹了

好在旧版程序没停止运行,当时第一想法是把程序源内容从进程中给“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里通过文件描述符把文件复制回来

阅读(1313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~