回顾:作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,就很难恢复。虽然删除命令只是文件节点中的一个删除标记,但它并不能真正清除文件内容,但是其他用户和一些磁盘写操作的进程很快就会覆盖这些数据。



到1和EXT2文件系统结构简介



在linux下使用




作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,就很难恢复。虽然删除命令只是文件节点中的一个删除标记,但是它不会真正删除文件内容,但是其他用户和一些磁盘写操作的进程很快就会覆盖这些数据。



到1和EXT2文件系统结构简介



在使用Linux的EXT2文件系统,文件存储在块。默认情况下,每个块的大小是1K,不同的块的块号区分。每个文件也有一个文件的所有者节点,读写权限,文件类型,等等。对于一个文件小于12块,文件的数据块的块号是直接存储在节点。如果文件大于12,则节点存储在12块,在间接块的块号对应一个间接块号、块256号文件中存储的数据块(每个块号ext2fs占用4字节,这样一个存储块。块号是1024 4=256)。如果有较大的文件,则在节点中将有两个级别的间接块和一个***间接块。



2、误删文件恢复方法



大多数的Linux发行版提供一个debugfs工具,可以用来编辑ext2文件系统,但是使用这个工具之前,还有很多工作要做。



首先是重新挂载只读分区被删除的文件,使用以下命令:(假设文件在/ usr分区)



安装ndash;R—N—O;;再登 / usr r表示只读方式;N表示不写入R;如果是恢复前的文件,添加此参数。如果系统说XXX我很忙,你可以使用fuser命令查看进程使用这个分区上的文件:



定影ndash;V—M / usr;



如果没有重要的过程,用以下命令停止它们:



定影K ndash;V—M / usr;



然后可以重新安装文件系统。



如果所有文件均安装在一个大的/分区,您可以使用Linux单在启动提示进入单用户模式,尽量减少系统进程的机会写数据到硬盘,或者硬盘挂在其他机器上。此外,恢复的数据不能写或以上避免损坏的有用数据。如果有一个DOS / Windows的机器上,你可以写信给这些分区:



安装ndash;R ndash;n / dev / / /有MNT HDA1



然后你可以执行debugfs:(假设是Linux / dev / hda5)



# debugfs / dev / hda5



debugfs debugfs将出现的提示:



使用lsdel命令,你可以列出很多被删除的文件的信息:



自动换行:断词bgcolor = # f3f3f3 > debugfs:lsdel

debugfs:2692删除节点发现。

inode主人模式大小的块时间删除

16482101006008192 1 / 1 19:22:46太阳5月13日2001

3613701006444 1 / 1 4月24日星期二10:11:15 2001

196829010064414950 38 / 38 5月27日星期13:52:04 2001



列出的文件有很多(这里是2692),第一个字段是文件节点号,第二个字段是文件的所有者,第三个字段是读写权限,然后删除文件大小、占用次数、时间。



然后您可以根据文件的大小和删除的日期来判断我们需要什么。例如,我们希望还原节点为文件的196829:



您可以先查看文件数据的状态:



debugfs:STAT

信息点:196829类型:普通模式:0644旗:0x0版本:1

用户:0组:0大小:149500

文件ACL:0目录ACL:0

链接:0 blockcount:38

片段:地址:0号码:0大小:0

Ctime:0x31a9a574——5月27日星期13:52:04 2001

Atime:0x31a21dd1——5月21日星期二20:47:29 2001

Mtime:0x313bf4d7——3月5日星期二08:01:27 2001





Dtime:0x31a9a574——5月27日星期13:52:04 2001

阻碍:

594810594811594814 594815594816594817

总计:38



然后,您可以使用转储指令恢复文件:



Debugfs:转储/ mnt / / 01.sav HDA



这样,文档恢复。退出debugfs:



Debugfs:退出



另一种方法是手动编辑模式:



debugfs:MI

模式{ 0100644 }

用户ID { 0 }

组ID { 0 }

大小{ 149500 }

创建时间0x31a9a574 } {

修改时间0x31a9a574 } {

访问时间0x31a21dd1 } {

删除时间{ 0x31a9a574 } 0

链接计数{ 0 } 1

块计数{ 38 }

文件标志{ 0 }

保留1 { 0 }

文件ACL { 0 }

目录ACL { 0 }

片段地址{ 0 }

片段号码{ 0 }

片段大小{ 0 }

直接块# 0 { 594810 }

三重间接区块{ 0 }



在使用MI指令之后,每一行都显示为每次编辑,而其他行可以直接通过进入车厢来识别。删除时间变为0(不删除),和链接数改为1,改后退出debugfs:



Debugfs:退出



然后检查/ dev / hda5和fsck



fsck / dev / hda5



程序说找到丢失的数据块并把它放在了这个目录文件+找到我们想要的东西。