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/​