8

linux上ext2文件系统中,用debugfs来恢复被删除的文件

 2 years ago
source link: https://blogread.cn/it/article/351?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

linux上ext2文件系统中,用debugfs来恢复被删除的文件

浏览:2705次  出处信息

     如果你不小心用rm -rf xxx删除了文件或者整个目录,在ext2文件系统上是可以恢复的。因为文件数据没有被实际删除,只是索引被删除了,文件被误删除之后,应该马上停止创建、修改等文件操作,因为他们有可能会覆盖以前被删除文件所占用的磁盘空间,这样就没办法恢复了。
    如果只有一个文件,那么运行:
            debugfs /dev/sda2; // /dev/sda2是你要查看的设备
            > lsdel //查看被删除文件的inode,一般是最后一个,当然你可以根据lsdel不同的属性来判断。
            > dump <inode> dst_file_path //inode表示具体的inode值,dst_file_path一定要一个具体的文件名

如果你删除了大量的文件,那么操作就很麻烦,如果进入debugfs交互模式,一次只能恢复一个文件,如果被删除了1w个,那基本没法一个一个的操作。debugfs有一个-f参数可以解决这个问题,-f表示可以传入一个命令文件让debugfs来执行。

先建立一个文件export:
      echo "lsdel" > export;
   然后执行 debugfs -f export /dev/sda2,这时候会输出所有被删除的文件信息,分别为
    Inode Owner Mode    Size    Blocks   Time deleted
    而所有这些不一定是你想要恢复的文件,你可以根据你自己的需要用grep过滤一下,例如我要恢复uid=1用户今天(10号) 12点删除的size不为0的文件,具体操作命令如下:
   debugfs -f export /dev/sda2 | grep ' 1 ' | grep ' 10 12:' | grep -v ' 0 ' | awk '{print "dump <"$1"> "$1".del"}' > cmd
这样得到了很多dump <inode> dst_file_path命令存入cmd文件,然后再调用debugfs -f cmd /dev/sda2就可以恢复想要的文件了。

如果系统中有多个磁盘,那么恢复文件的时候最好从一个磁盘恢复到另外一个。不然dump的时候,有可能把还没开始dump的inode就覆盖了。

建议继续学习:

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK