误删重要文件后要肉定

  有时候手贱,一不小心输入rm -rf *,手一抖,如果没有重要文件还好,如果有,也要肉定。

  对于linux系统来说,有如下两个重要特征:

1. 正在被进程open的文件,使用rm命令删除后,其在文件系统上的空间不会被真正释放;直到没有任何进程open这个文件(进程退出时,自动close打开的文件)。
2. ext3文件系统,rm命令删除的文件,其内容不会被自动清除,仅删除了元数据。

上面两点和主题有何关系?                                           

你手贱,你删除一个重要文件~

1 首先用lsof命令看是否有程序打开了该文件

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
atop 17365 root 4w REG 8,8 1701448 2970 /var/log/atop/atop_atae-mo-slot1_20690318 (deleted)
如果有,恭喜你,执行 cp -Lv /proc/进程id/fd/文件描述符 /some/dir/可恢复。
下面示例,可以理解一下。
atae-mo-slot1:~ # ll /proc/17365/fd
total 5
lr-x------ 1 root root 64 2069-03-18 12:29 0 -> /dev/null
l-wx------ 1 root root 64 2069-03-18 12:29 1 -> /var/log/atop/daily.log
l-wx------ 1 root root 64 2069-03-18 12:29 2 -> /var/log/atop/daily.log
lr-x------ 1 root root 64 2069-03-18 12:29 3 -> /tmp/atop.d/atop.acct
l-wx------ 1 root root 64 2069-03-18 12:29 4 -> /var/log/atop/atop_atae-mo-slot1_20690318 (deleted)
atae-mo-slot1:~ # cp -Lv /proc/17365/fd/4 /tmp/test
`/proc/17365/fd/4' -> `/tmp/test'
atae-mo-slot1:~ # ll /tmp/test
-rw-r--r-- 1 root root 1712574 2069-03-18 12:34 /tmp/test

2 fuser -m /dirname                   

  如果你没有那么幸运,也要淡定,立刻停止写该分区的进程,fuser -m /dirname可查看哪些进程打开了该目录所在分区的文件。具体看帮助。

  umount文件所在的分区,千万不要在该文件系统中新增文件,否则会覆盖删除的文件,无法恢复了。
ext3文件系统可用附件的ext3grep命令(suse10 64bit系统可用)恢复,开源的东东,具体可google。
具体恢复多少,看命了。
ext3grep /dev/sdc1 --ls --inode 2
ext3grep /dev/sdc1 --restore-file filename

posted @ 2013-09-27 14:33  朗道二级相变  阅读(472)  评论(0编辑  收藏  举报