linux误删文件后恢复

  1. 查看一下当前系统版本号,及文件系统格式

[root@localhost ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 51475068 22730068 26123560 47% /
tmpfs tmpfs 3966808 68 3966740 1% /dev/shm
/dev/sda2 ext4 487652 42534 419518 10% /boot
/dev/mapper/VolGroup-lv_home
ext4 901188872 20070036 835334364 3% /home

新建一个文件夹及文件my.txt,然后删除

[root@localhost local]# mkdir test
[root@localhost local]# cd test [root@localhost test]# touch my.txt
[root@localhost test]# ll
总用量 0
-rw-r–r–. 1 root root 0 1月 4 15:22 my.txt
[root@localhost test]# rm -f my.txt
[root@localhost test]# ll 总用量 0

运用,系统自还工具debugfs来修复 打开,刚刚被删除文件所在的分区,用ls 加-d参数显示刚刚删除文件所在的目录

[root@localhost test]# debugfs
debugfs 1.41.12 (17-May-2010)
debugfs: open /dev/mapper/VolGroup-lv_root
debugfs: ls -d /usr/local/test/
2378807 (12) . 2098175 (4084) … <2378808> (4072) my.txt

显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –i <2378808>,然后输入“quit”退出debugfs

debugfs: logdump -i <2378808>
Inode 2378808 is at group 290, block 9438337, offset 2944
Journal starts at block 16826, transaction 2237277
No magic number at block 30648: end of journal.
debugfs: quit

执行以下命令,进行恢复,bs与skip的值分别取自:block 9438337, offset 2944

dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337

bs对应上面的offset后面的值,skip对应block后面的值

debugfs: quit
[root@localhost test]# dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337
记录了1+0 的读入
记录了1+0 的写出
2944字节(2.9 kB)已复制,0.00989032 秒,298 kB/秒
[root@localhost test]# ls
my.txt

至此,刚删除的数据已恢复

附:若将上级文件夹删除,则可找到文件夹的block值与offset值,使用命令按文件名称恢复,如:

dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my0.txt bs=2944
count=1 skip=9438337 dd if=/dev/mapper/VolGroup-lv_root
of=/usr/local/test/my1.txt bs=2944 count=1 skip=9438337 dd
if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my2.txt bs=2944
count=1 skip=9438337

bs与skip对应的值改为文件夹的值
my0.txt、my1.txt、my2.txt分别是文件夹下的文件,如果有子文件夹也可递归深入


你可能感兴趣的:(Liunx问题)