欢迎来到天天文库
浏览记录
ID:51896598
大小:415.41 KB
页数:47页
时间:2020-03-18
《如何恢复 Linux 上删除的文件.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、如何恢复Linux上删除的文件,第1部分原理及普通文件的恢复要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的,以及如何定位并恢复数据。本文从数据恢复的角度,着重介绍了ext2文件系统中使用的一些基本概念和重要数据结构,并通过几个实例介绍了如何手工恢复已经删除的文件。最后针对ext2现有实现存在的大文件无法正常恢复的问题,通过修改内核中的实现,给出了一种解决方案。对于很多Linux的用户来说,可能有一个问题一直都非常头疼:对于那些不小心删除的数据来说,怎样才能恢复出来呢?大家知道,在Windows系统上,回收站中保存了最近使用资源管理器时删除的文件。即便是对于
2、那些在命令行中删除的文件来说,也有很多工具(例如recover4all,FinalDataRecovery)可以把这些已经删除的文件恢复出来。在Linux下这一切是否可能呢?实际上,为了方便用户的使用,现在Linux上流行的桌面管理工具(例如gnome和KDE)中都已经集成了回收站的功能。其基本思想是在桌面管理工具中捕获对文件的删除操作,将要删除的文件移动到用户根目录下的.Trash文件夹中,但却并不真正删除该文件。当然,像在Windows上一样,如果用户在删除文件的同时,按下了Shift键并确认删除该文件,那么这个文件就不会被移动到.Trash文件夹中,也就无从恢复
3、了。此时,习惯了使用Windows上各种恢复工具的人就会顿足捶胸,抱怨Linux上工具的缺乏了。但是请稍等一下,难道按照这种方式删除的文件就真的无从恢复了么?或者换一个角度来看,使用rm命令删除的文件是否还有办法能够恢复出来呢?背景知识在开始真正进行实践之前,让我们首先来了解一下在Linux系统中,文件是如何进行存储和定位的,这对于理解如何恢复文件来说非常重要。我们知道,数据最终以数据块的形式保存在磁盘上,而操作系统是通过文件系统来管理这些数据的。ext2/ext3是Linux上应用最为广泛的文件系统,本文将以ext2文件系统为例展开介绍。我们知道,在操作系统中,文件
4、系统是采用一种层次化的形式表示的,通常可以表示成一棵倒置的树。所有的文件和子目录都是通过查找其父目录项来定位的,目录项中通过匹配文件名可以找到对应的索引节点号(inode),通过查找索引节点表(inodetable)就可以找到文件在磁盘上的位置,整个过程如图1所示。图1.文件数据定位过程对于ext2类型的文件系统来说,目录项是使用一个名为ext2_dir_entry_2的结构来表示的,该结构定义如下所示:清单1.ext2_dir_entry_2结构定义structext2_dir_entry_2{__le32inode;/*索引节点号*/__le16rec_len;/
5、*目录项的长度*/__u8name_len;/*文件名长度*/__u8file_type;/*文件类型*/charname[EXT2_NAME_LEN];/*文件名*/};在Unix/Linux系统中,目录只是一种特殊的文件。目录和文件是通过file_type域来区分的,该值为1则表示是普通文件,该值为2则表示是目录。对于每个ext2分区来说,其在物理磁盘上的布局如图2所示:图2.ext2分区的布局从图2中可以看到,对于ext2文件系统来说,磁盘被划分成一个个大小相同的数据块,每个块的大小可以是1024、2048或4096个字节。其中,第一个块称为引导块,一般保留做引
6、导扇区使用,因此ext2文件系统一般都是从第二个块开始的。剩余的块被划分为一个个的块组,ext2文件系统会试图尽量将相同文件的数据块都保存在同一个块组中,并且尽量保证文件在磁盘上的连续性,从而提高文件读写时的性能。至于一个分区中到底有多少个块组,这取决于两个因素:1.分区大小。2.块大小。最终的计算公式如下:分区中的块组数=分区大小/(块大小*8)这是由于在每个块组中使用了一个数据块位图来标识数据块是否空闲,因此每个块组中最多可以有(块大小*8)个块;该值除上分区大小就是分区中总的块组数。每个块组都包含以下内容:1.超级块。存放文件系统超级块的一个拷贝。2.组描述符。
7、该块组的组描述符。3.数据块位图。标识相应的数据块是否空闲。4.索引节点位图。标识相应的索引节点是否空闲。5.索引节点表。存放所有索引节点的数据。6.数据块。该块组中用来保存实际数据的数据块。在每个块组中都保存了超级块的一个拷贝,默认情况下,只有第一个块组中的超级块结构才会被系统内核使用;其他块组中的超级块可以在e2fsck之类的程序对磁盘上的文件系统进行一致性检查使用。在ext2文件系统中,超级块的结构会通过一个名为ext2_super_block的结构进行引用。该结构的一些重要域如下所示:清单2.ext2_super_block结构定义struc
此文档下载收益归作者所有