Linux rm 文件恢复
目录
Linux下删除命令 rm 大家肯定是熟悉得不能再熟悉了,然后有时候却阴沟里翻船不小心删除了某些重要的文件,想死的心都有了。。。。现在我们就来看看被误删除的文件要如何恢复?
Linux文件系统
Linux的文件系统(如ext3、ext4)由三部分组成:inode,data block,super block。
- Super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式和相关信息;
- inode:记录 文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
- block:实际记录文件的内容,如果文件比较大,会占用多个block;
每个inode和block都有编号,而每个文件都占用一个inode,inode内则有文件数据对应的block号码。因此,如果找到了文件的inode,自然就可以读取到文件的数据内容了。
当我们将一个文件删除时,Linux并非真实地删除磁盘里的数据,而是将文件的inode节点对于对应的扇区指针清除,同时释放这些数据对应的block,只有但这些block被系统重新分配时,那些被删除的数据才会被覆盖,最终无法恢复。
因为当我们误删数据时,应立刻卸载所在的文件系统,然后进行恢复。
$ umount /dev/partition $ mount -o remount,ro /dev/partition
grep
通过grep命令我们可以简单地进行文件恢复:
grep -a -B 50 -A 60 'some string in the file' /dev/sda1 > results.txt
说明:
-a:把二进制文件当作文本文件 -A,-B:字符串的后几行和前几行
不过grep命令比较麻烦的是,必须记得文件中的部分内容,而且如果有相同的其它文件也会被输出到result.txt,结果比较混乱;同时,由于是整个分区扫描,时间会比较漫长。
debugfs & extundelete
首先,我们先创建一个文件,然后将其删除:
$ cat /proc/cpuinfo > /tmp/testrm.txt $ rm /tmp/testrm.txt
使用系统自带的 debugfs 命令:
$ sudo debugfs debugfs: open /dev/sda2 debugfs: ls -d /tmp
可以看到被删除的文件testrm.txt,其中的<657573>就是文件的inode编号:
…… <657573> (92) testrm.txt ……
使用extundelete进行恢复:
$ extundelete /dev/sda2 --restore-inode 657573
然后我们就可以在当前目录下的RECOVERED_FILES 目录看到恢复的文件了
$ ls -al RECOVERED_FILES -rw-r--r-- 1 root root 4.0K 7月 3 15:01 file.657573
码字很辛苦,转载请注明来自ChenJiehua的《Linux rm 文件恢复》
评论