Linux 恢复删除文件

Linux下的rm命令太可怕了,一不小心 rm -rf / 那就悲剧了,请慎用rm -rf。

如果一不小心删除重要文件,后续不对该路径文件操作,可以通过相关命令找回被删文件。

原理主要是删除的文件并没有实际上从硬盘上抹去,只是inode索引删除了相关的信息(单链表节点删除实现),因此只要找到刚删除文件的block上,就可以恢复已经删除的文件。

一. 查看分区

df -T
Filesystem     Type  1K-blocks     Used Available Use% Mounted on
/dev/sda1      ext4   41284928 38206612    981164  98% /
tmpfs          tmpfs   1961248    10240   1951008   1% /dev/shm
/dev/sda5      ext4  119724260  6428840 107213784   6% /data
/dev/sda2      ext4   41284928   799900  38387876   3% /usr/local

二. ext3

sudo debugfs
open /dev/sda1		        #打开分区

ls -d /home/test/src		#显示该目标删除文件inode
819307  (12) .    819306  (4084) ..   
<790528> (4072) bosstest.cpp   
<792294> (4052) btest.cpp   
<792214> (4032) qwd_kettas.pb.cc   

logdump -i  <790528>		#查看该文件日志内容
...
[blocks] 12345 		        #12345为存放bosstest.cpp数据块地址

sudo dd if=/dev/sda1 of=/tmp/my1.cpp count=1 skip=12345   #读取12345处数据至my1.cpp中

三. ext4

debugfs只能恢复ext3系统文件,extundelete支持ext3/ext4文件系统的恢复。

  

sudo yum install -y e2fsprogs			#安装依赖库

sudo extundelete --inode 819203 /dev/sda1	#查找指定目录下删除文件
File name                                       | Inode number | Deleted status
.                                                 819307
..                                                819306
bosstest.cpp                                      790528         Deleted
btest.cpp                                         792294         Deleted
qwd_kettas.pb.cc                                  792214         Deleted

sudo extundelete --restore-inode 790528 /dev/sda1	#恢复指定inode文件,恢复文件在./RECOVERED_FILES
sudo extundelete /dev/sda1 --restore-all		#恢复/dev/sda1分区下所有文件

大多数情况下,会出现以下提示:Unable to restore inode 792214 (file.792214): Space has been reallocated.  由于文件系统被覆盖,已经无法恢复文件。

参考链接:

http://extundelete.sourceforge.net/