Linux 恢复删除文件
原创
©著作权归作者所有:来自51CTO博客作者tcspecial的原创作品,请联系作者获取转载授权,否则将追究法律责任
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/