如何恢复已删除的Linux文件
点评:作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,很难恢复。虽然删除命令只是删除标记文件中的节点,它并没有真正删除文件内容,但是其他用户和一些过程的磁盘写行动将很快覆盖这些数据。然而,单一家庭使用Linux,或删除文件后及时补救,或作为一个多用户、多任务的操作系统,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命令,你可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs:2692删除节点发现。
inode主人模式大小的块时间删除
16482101006008192 1 / 1 19:22:46太阳5月13日2001
Hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip; hellip;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;; ;
3613701006444 1 / 1 4月24日星期二10:11:15 2001
196829010064414950 38 / 38 5月27日星期13:52:04 2001
Debugfs:
有很多列出的文件(这里是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
程序说找到丢失的数据块并把它放在了这个目录文件+找到我们想要的东西。