数据恢复技术(第二版)第四部分_第1页
数据恢复技术(第二版)第四部分_第2页
数据恢复技术(第二版)第四部分_第3页
数据恢复技术(第二版)第四部分_第4页
数据恢复技术(第二版)第四部分_第5页
已阅读5页,还剩245页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据恢复技术(第二版)第四部分目录7.3.4Ext3文件系统的块组描述符分析7.3.5Ext3文件系统的块位图分析7.3.6Ext3文件系统的i-节点位图分析7.3.7Ext3文件系统的i-节点分析7.3.8Ext3文件系统的目录项分析7.3.9Ext3文件删除与恢复的分析7.3.10Ext3文件系统超级块的恢复实例7.3.11Linux系统数据恢复专业工具详解7.4Ext4文件系统分析7.4.1Ext4文件系统介绍7.4.2Ext4文件系统的特点7.4.3Ext4文件系统的结构7.4.4Ext4文件系统的向前与向后兼容\h第三篇物理类数据恢复技术揭秘\h第8章硬盘物理故障的种类及判定\h8.1硬盘外部物理故障的种类和判定方法\h8.1.1电路板供电故障\h8.1.2电路板接口故障\h8.1.3电路板缓存故障\h8.1.4电路板BIOS故障\h8.1.5电路板电机驱动芯片故障\h8.2硬盘内部物理故障的种类和判定方法\h8.2.1磁头组件故障\h8.2.2主轴电机故障\h8.2.3盘片故障\h8.2.4固件故障\h第9章硬盘电路板故障数据恢复方法\h9.1维修法\h9.1.1电路板常见故障及维修方法\h9.1.2希捷硬盘电路板的故障及检测方法\h9.1.3西部数据硬盘电路板的故障及检测方法\h9.2替换法\h9.2.1替换法介绍\h9.2.2希捷3.5英寸硬盘电路板兼容性判定及替换方法\h9.2.3希捷2.5英寸硬盘电路板兼容性判定及替换方法\h9.2.4西部数据3.5英寸硬盘电路板兼容性判定及替换方法\h9.2.5西部数据2.5英寸硬盘电路板兼容性判定及替换方法\h9.2.6迈拓3.5英寸硬盘电路板兼容性判定及替换方法\h9.2.7富士通2.5英寸硬盘电路板兼容性判定及替换方法\h9.2.8三星3.5英寸硬盘电路板兼容性判定及替换方法\h9.2.9三星2.5英寸硬盘电路板兼容性判定及替换方法\h9.2.10日立3.5英寸硬盘电路板兼容性判定及替换方法\h9.2.11日立2.5英寸硬盘电路板兼容性判定及替换方法\h9.2.12日立1.8英寸硬盘电路板兼容性判定及替换方法\h9.2.13东芝2.5英寸硬盘电路板兼容性判定及替换方法\h第10章硬盘磁头组件故障数据恢复方法\h10.1硬盘磁头组件故障的恢复思路\h10.1.1开盘换磁头所需环境及工具\h10.1.2开盘换磁头的操作步骤\h10.2希捷硬盘磁头兼容性判定及开盘方法\h10.2.13.5英寸硬盘开盘实例\h10.2.22.5英寸硬盘开盘实例\h10.3西部数据硬盘磁头兼容性判定及开盘方法\h10.3.13.5英寸硬盘开盘实例\h10.3.22.5英寸硬盘开盘实例\h10.4迈拓硬盘磁头兼容性判定及开盘方法\h10.5富士通硬盘磁头兼容性判定及开盘方法\h10.6三星硬盘磁头兼容性判定及开盘方法\h10.6.13.5英寸硬盘开盘实例\h10.6.22.5英寸硬盘开盘实例\h10.7日立硬盘磁头兼容性判定及开盘方法\h10.7.13.5英寸硬盘开盘实例\h10.7.22.5英寸硬盘开盘实例\h10.8东芝硬盘磁头兼容性判定及开盘方法\h10.9开盘成功后如何获得数据\h10.9.1物理镜像法\h10.9.2数据提取法\h第11章硬盘主轴电机故障数据恢复方法\h11.1主轴电机故障的恢复思路\h11.1.1处理主轴电机故障所需环境及工具\h11.1.2处理主轴电机故障的操作步骤\h11.2希捷3.5英寸硬盘主轴电机故障处理方法\h11.2.1主轴电机兼容性判定\h11.2.2实例演示\h11.3迈拓3.5英寸硬盘主轴电机故障处理方法\h11.3.1主轴电机兼容性判定11.3.2实例演示11.4东芝2.5英寸硬盘主轴电机故障处理方法11.4.1主轴电机兼容性判定11.4.2实例演示第12章硬盘盘片故障数据恢复方法12.1盘片扇区故障的检测方法12.2盘片扇区故障的修复方法12.2.1重写校验法12.2.2G-List替换法12.2.3P-List隐藏法12.3盘片扇区故障的数据恢复方法12.3.1物理镜像法与数据提取法的区别与联系12.3.2用MediaToolsProfessional做物理镜像12.3.3用HDDuplicator做物理镜像12.3.4用PC-3000UDMADE做物理镜像12.3.5用PC-3000ForSCSI做物理镜像12.3.6用PC-3000UDMADE提取数据12.3.7用PC-3000UDMADE分磁头做物理镜像第13章硬盘固件故障数据恢复方法13.1现代硬盘的固件结构13.1.1什么是硬盘的固件13.1.2硬盘固件的组成及作用13.1.3硬盘的生产流程13.1.4硬盘固件故障的表现13.2硬盘固件修复工具介绍13.2.1PC-3000forDOS13.2.2PC-3000forWindows13.2.3PC-3000UDMA13.2.4PC-3000UDMAforSCSI13.3用PC-3000UDMA修复迈拓硬盘的固件13.3.1识别迈拓硬盘的型号13.3.2迈拓硬盘的固件结构13.3.3迈拓硬盘A区、B区和C区固件13.3.4备份固件13.3.5检测固件13.3.6修复固件13.4用PC-3000UDMA修复希捷硬盘的固件13.4.1识别希捷硬盘的型号13.4.2希捷硬盘与PC-3000UDMA的连接方法13.4.3希捷硬盘的固件结构13.4.4希捷硬盘指令详解13.4.5酷鱼7200.11“固件门”解决方案13.4.6酷鱼企业级硬盘ES.2“固件门”解决方案第14章优盘物理故障数据恢复方法14.1优盘物理故障的表现及分类14.1.1优盘物理故障的表现14.1.2优盘物理故障的分类14.2优盘物理故障的修复14.2.1补焊14.2.2替换晶振14.2.3替换主控芯片14.2.4替换闪存芯片14.3用PC-3000Flash直接提取闪存芯片的数据14.3.1PC-3000Flash的工作原理14.3.2提取闪存芯片的数据\h第四篇服务器数据恢复技术揭秘第15章服务器的RAID技术揭秘15.1什么是RAID15.1.1RAID基础知识15.1.2RAID能解决什么问题15.1.3RAID级别简介15.1.4如何实现RAID15.1.5RAID专业术语详解15.2RAID-0技术详解15.2.1RAID-0数据组织原理15.2.2RAID-0故障原因分析15.2.3RAID-0数据恢复思路15.3RAID-1技术详解15.3.1RAID-1数据组织原理15.3.2RAID-1故障原因分析15.3.3RAID-1数据恢复思路15.4RAID-10技术详解15.4.1RAID-10数据组织原理15.4.2RAID-10故障原因分析15.4.3RAID-10数据恢复思路15.5RAID-1E技术详解15.5.1RAID-1E数据组织原理15.5.2RAID-1E故障原因分析15.5.3RAID-1E数据恢复思路15.6RAID-2、RAID-3、RAID-4技术详解15.6.1RAID-2数据组织原理15.6.2RAID-3数据组织原理15.6.3RAID-4数据组织原理15.7RAID-5技术详解15.7.1RAID-5数据组织原理15.7.2RAID-5的常规左异步结构15.7.3RAID-5的非常规左异步结构15.7.4RAID-5的常规左同步结构15.7.5RAID-5的非常规左同步结构15.7.6RAID-5的常规右异步结构15.7.7RAID-5的非常规右异步结构15.7.8RAID-5的常规右同步结构15.7.9RAID-5的非常规右同步结构15.7.10RAID-5故障原因分析15.7.11RAID-5数据恢复思路15.8RAID-5E、RAID-5EE技术详解15.8.1RAID-5E数据组织原理7.3.4Ext3文件系统的块组描述符分析Ext类文件系统的块组来源于UFS文件系统的柱面组,所以Ext3文件系统的块组描述符相当于UFS文件系统的柱面组概要项。每个块组都对应一个块组描述符,用来描述块组的相关信息,所有的块组描述符组成了一个列表,称为块组描述符表。提示Ext3文件系统的块组描述符表相当于UFS文件系统的柱面组概要。1.块组描述符结构分析Ext3文件系统的每个块组描述符占用32字节,用以描述块组中的位图起始地址、i-节点表起始地址、空闲块数、空闲i-节点数等信息,每个块组都有这样的一个块组描述符,所有的块组描述符集中存放,组成块组描述符表。块组描述符表的起始地址位于超级块所在块的下一个块,在整个文件系统中有很多块组描述符表的备份,备份的方式具体分为两种:(1)文件系统不具备稀疏超级块特性如果文件系统不具备稀疏超级块特性,那么在每个块组中都会有一个超级块的备份,同时也有块组描述符表的备份。(2)文件系统具备稀疏超级块特性如果文件系统具备稀疏超级块特性,那么只在块组号是3、5、7的幂的块组(如1、3、5、7、9、25、49等)内才对超级块和块组描述符表做备份,其他块组内则没有备份。块组描述符表中的每个块组描述符大小为32字节,具体结构见表7-10。表7-10块组描述符的结构2.块组描述符实例讲解一个Ext3的分区,超级块中描述了块大小为4096字节,即每块8个扇区,所以超级块位于0号块,块组描述符表则位于1号块,也就是分区的8号扇区。另外,在该超级块中还描述了文件系统的总块数为978114,每块组包含的块数为32768,用这两个值可以算出该文件系统一共有30个块组,也就是说块组描述符表中有30个块组描述符,而每个块组描述符占32字节,所以当前文件系统的块组描述符表的实际大小为960字节。用WinHex跳转到8号扇区,就可以看到0号块组中的块组描述符表了,其部分内容如图7-33所示。图7-33块组描述符实例在图7-33的块组描述符表中,每32字节是一个块组描述符,用来描述一个块组的信息,0号块组描述符项描述0号块组的信息,1号块组描述符描述1号块组的信息,以此类推。其中0号块组描述符的具体数值及其含义如图7-34所示。图7-340号块组描述符的参数模板7.3.5Ext3文件系统的块位图分析1.块位图介绍Ext3文件系统以块作为数据存储的基本单位,文件系统中的所有块被分为若干个组,即块组,块的分配情况由该块所在块组的块位图描述。块位图有以下特点:①每个块组中都有一个块位图,块位图的地址在该块组的描述符中给出。②对于含有超级块、块组描述符表的块组,或含有超级块备份、块组描述符表备份的块组,块位图起始于块组描述符表所在块的下一个块;对于没有超级块备份和块组描述符表备份的块组,块位图起始于该块组的第一个块。③在创建文件系统时,操作系统将每个块组包含的块数与每个块包含的位数设置为相等,这使得块位图刚好占用一个完整的块。④块位图用于描述本块组所管理的块的分配状态,块位图中的每一位映射本块组中的一个块。如果某个块对应的位没有设置,那么代表该块未分配,可以用于存储数据;否则,代表该块已经存放了数据或者该块不能够使用。⑤因为块位图中的每一位映射本块组中的一个块,所以每个字节映射8个块,这8个块中的第一个块对应字节中的最低位。例如,块位图中有一个字节为FEH,换算为二进制等于11111110,这个值的最低位是0,就说明其映射的8个块中,第一个块是空闲的,其他7个块已经使用。2.块位图实例分析在图7-34的块组描述符例子中,1号块组描述符的具体参数值如图7-35所示。图7-351号块组描述符的具体参数从图中可以看到1号块组的块位图起始于32770号块,我们就以这个块位图为例进行分析。用WinHex跳转到32770号块,其内容如图7-36所示。图中大部分数据都是“FF”,表示它们所映射的块是被分配的。在偏移量243CH处画圈的值为“9FH”,换算为二进制等于“10011111”,那么这8个位映射哪8个块呢?下面我们来做换算。第1步计算“9FH”在该块位图中的相对偏移量。这需要用其当前的偏移量减去块位图的起始偏移量,即243CH−2000H=43CH,换算成十进制等于1084。图7-361号块组的块位图第2步计算“9FH”在该块组中映射的8个块号。因为“9FH”在块位图中的相对偏移量为1084,所以它在该块组中映射的第一个块的块号为1084×8=8672,其后连续的7个块也都是“9FH”的映射块,即这8个映射块为8672~8679号块。第3步计算“9FH”在该文件系统中映射的8个块号。上一步计算出的8672~8679这8个块是“9FH”这个值在1号块组中映射的相对块号,并不是整个文件系统的绝对块号,如果要把块组中的相对块号换算为文件系统的绝对块号,换算公式为:文件系统的绝对块号=块组的相对块号+块组在文件系统中的起始块号从超级块中可知每块组包含32768个块,所以1号块组起始于文件系统的32768号块,那么1号块组中的相对块号8672~8679换算为文件系统的绝对块号,应该等于(8672+32768)~(8679+32768),即41440~41447号块。现在我们知道了1号块组中块位图值“9FH”(二进制为“10011111”)映射的是文件系统中41440~41447号块,二进制值“10011111”与这8个块的具体映射关系及这8个块的分配状态如图7-37所示。图7-37位图值与块的映射关系及块的分配情况7.3.6Ext3文件系统的i-节点位图分析1.i-节点位图介绍Ext3文件系统用i-节点描述文件的元数据,i-节点的分配情况由该i-节点所在块组的i-节点位图描述,i-节点位图有以下特点:①每个块组中都有一个i-节点位图,i-节点位图的地址在该块组的描述符中给出。②i-节点位图起始于该块组的块位图块后的下一个块。③系统分配了一个块来存放i-节点位图,但实际上i-节点位图用不完这个块,因为一个块组内i-节点的实际数量总是小于这一个块能描述的i-节点数量。④i-节点位图的实际大小可以通过每组i-节点数除以8计算得到。⑤i-节点位图用于描述本块组所管理的i-节点的分配状态,i-节点位图中的每一位映射本块组中的一个i-节点。如果i-节点位图中相应的位被置1,代表该i-节点已经使用;否则表示未用。⑥因为i-节点位图中的每一位映射本块组中的一个i-节点,所以每个字节映射8个i-节点,这8个i-节点中的第一个i-节点对应字节中的最低位。例如,i-节点位图中有一个字节为FEH,换算为二进制等于11111110,这个值的最低位是0,就说明其映射的8个i-节点中,第一个i-节点是空闲的,其他7个i-节点已经使用。⑦i-节点从1开始编号,即第一个i-节点是1号i-节点而不是0号i-节点,所以i-节点位图的第一个位映射1号i-节点。2.i-节点位图实例分析在图7-33的块组描述符例子中,1号块组描述符描述了1号块组的i-节点位图起始于32771号块,我们就以这个i-节点位图为例进行分析。用WinHex跳转到32771号块,其内容如图7-38所示。图7-381号块组的i-节点位图图7-38中大部分数据都是“FF”,表示它们所映射的i-节点是被分配的。在偏移量311AH处画圈的值为“03H”,换算为二进制等于“00000011”,那么这8个位映射哪8个i-节点呢?下面我们来做换算。第1步计算“03H”在该i-节点位图中的相对偏移量。这需要用其当前的偏移量减去i-节点位图的起始偏移量,即311AH−3000H=11AH,换算成十进制等于282。第2步计算“03H”在该块组中映射的8个i-节点号。因为“03H”在i-节点位图中的相对偏移量为282,所以它在该块组中映射的第一个i-节点号为282×8+1=2257,所以这8个映射i-节点为2257到2264号i-节点。第3步计算“03H”在该文件系统中映射的8个i-节点号。上一步计算出的2257~2264这8个i-节点是“03H”这个值在1号块组中映射的相对i-节点号,并不是整个文件系统的绝对i-节点号,如果要把块组中的相对i-节点号换算为文件系统的绝对i-节点号,换算公式为:文件系统的绝对i-节点号=块组中的相对i-节点号+该块组第一个i-节点的i-节点号注意i-节点从1开始编号。从超级块中可知每块组包含16320个i-节点,所以1号块组第一个i-节点的i-节点号是16321,那么1号块组中的相对i-节点号2257~2264换算为文件系统的绝对i-节点号,应该等于(2257+16321)~(2264+16321),即18578~18585号i-节点。现在我们知道了1号块组中i-节点位图值“03H”映射的是文件系统中18578~18585号i-节点,“03H”的二进制为“00000111”,说明18578~18580号i-节点已经使用,而18581~18585号i-节点没有使用。7.3.7Ext3文件系统的i-节点分析1.i-节点的结构特点Ext3文件系统的i-节点用来存储跟文件相关的除文件名以外的所有信息。提示i-节点存储的信息包括指向文件的链接数、文件大小、文件的时间信息、文件所属的用户ID、文件所属的组ID、文件内容存放地址的块指针等,这些重要信息也被称为元数据。i-节点的结构特点如下:①Ext3文件系统的每个块组中都有一个自己的i-节点表。i-节点表由很多i-节点组成,每个文件或者目录使用一个i-节点。②i-节点表起始于i-节点位图所在块的下一个块。③超级块中记录着文件系统的i-节点总数和每块组包含的i-节点数。④每个i-节点的基本大小为128字节,但当超级块中4CH~4FH偏移处的“主版本号”被定义为“动态”时,i-节点的实际大小由超级块的58H~59H处定义,i-节点可以被定义为大于128字节的“大i-节点”。⑤每个i-节点都有一个编号,第一个i-节点的编号为1。⑥1~10号i-节点被系统保留,所以在超级块中会描述第一个非保留的i-节点,这个值一般是11。⑦前10个保留的i-节点在i-节点位图中被标示为已分配,其中1号i-节点一般用于描述坏块;2号i-节点被分配给根目录使用;8号i-节点通常用于描述日志。⑧如果已知一个i-节点号,就可以计算出该i-节点所在块组,计算方法为(i-节点号−1)DIV每块组i-节点数2.i-节点的结构分析Ext3文件系统每个块组中i-节点表的起始地址由其块组描述符08H~0BH偏移处描述,每个基本i-节点占用128个字节,具体结构见表7-11。表7-11Ext3的i-节点结构下面对i-节点中的部分参数做进一步解释。(1)0x00~0x01:文件模式“文件模式”参数占用两个字节,按照其对应的16位二进制分成三组,第一组为0~8位,描述权限标志;第二组为9~11位,用来定义可执行文件和目录;第三组为12~15位,描述文件类型。下面详细说明:①权限标志。16位的“文件模式”参数中0~8位用来描述用户的权限。Linux的用户被分成三类,即属主、同组用户和其他用户。属主是指i-节点中记录的用户ID的所有者;组用户以i-节点中的组ID进行区分;其他用户为除属主、同组用户以外的所有用户。用户的权限分为读、写和执行三种,权限标志中每个位代表的含义见表7-12。表7-12权限标志的含义②定义可执行文件和目录。16位的“文件模式”参数中9~11位用来定义可执行文件和目录。这三个位设置的值不同:如果是可执行文件,其执行方式就会有所不同;如果是目录,则该目录中的文件会具有特定的属性。具体定义方式见表7-13。表7-13可执行文件和目录的定义方式如果一个可执行文件的“驻留位”设置为“1”,那么该程序关闭后其代码仍然驻留在内存中。如果一个目录的“驻留位”设置为“1”,那么只有文件的属主才能删除该目录中的文件。如果一个可执行文件的“SGID”位和“SUID”位设置为“1”,那么该文件的进程就根据组标识和用户标识来决定是否启动,而不由用户决定。③文件类型。16位的“文件模式”参数中12~15位用来定义文件类型,文件类型的各种值只能单独使用,不能同时将几个值组合起来使用。文件类型的取值及含义见表7-14。表7-14文件类型的取值及含义“先进先出”也称为管道,用于两个进程间的数据传送。一个进程可以打开文件接收信息,但这些信息必须是由另一个进程写入的,在这个过程中数据存储在内存中而不是在磁盘上。“字符设备”也称为裸设备,用于不需要一次读取一个数据块的设备,如键盘。也可以给块设备设置字符设备属性,但在不以块大小为读取和写入单位时会产生错误。i-节点通常会保存某些信息用以说明哪些块已经分配给记录设备标识符的文件。“块设备”用于只能以块大小为单位进行读取操作的设备,如硬盘。从硬盘读取数据时,一次至少要读取512个字节,即1个扇区。如果一个程序要从块设备中读取少于1个扇区的数据,操作系统也需要读取1个扇区,然后只把需要的数据返回给程序。“动态链接”是一种指向其他文件或目录的特殊文件,它的“内容”是所指向的目标文件的内容。动态链接其实就是文件或目录的快捷方式。“套接字”用于进程间的双向通信,如命名管道,这些数据并不写入磁盘。(2)0x04~0x07:总字节数(低32位)如果该i-节点是一个文件的i-节点,则“总字节数”是指文件的大小;如果该i-节点是一个目录的i-节点,则“总字节数”是指该目录的下级目录区的大小。在Ext及Ext2文件系统中,用32位来描述“总字节数”这个参数,能够管理的文件大小最大为4GB;从Ext3开始,文件系统能够支持大文件,也就是用64位存储“总字节数”这个参数,该位置为低32位,高32位在0x6C~0x6F偏移处描述。(3)0x14~0x17:删除时间Ext3的i-节点中描述了四个时间信息,包括最后访问时间、i-节点变化时间、最后修改时间及删除时间。注意这些时间信息是从1970年1月1日0时算起,并且使用格林威治标准时间,能够描述的时间上限为2038年1月18日。提示当新建立一个文件时,最后访问时间、i-节点变化时间、最后修改时间这三个时间值都被设置为文件创建时的当前时间,删除时间则不设置,只有在文件被删除时,才设置文件的删除时间。(4)0x20~0x23:标志标志参数用来定义文件的属性,具体定义方式见表7-15。表7-15标志参数的含义(5)0x28~0x63:直接块指针及间接块指针Ext3文件系统跟UFS文件系统一样,在i-节点中用块指针描述文件内容的存放地址。每个i-节点中有15个块指针,包括12个直接块指针,1个间接块指针,1个二级间接块指针和1个三级间接块指针。12个直接块指针指向文件内容的前12个数据块地址。如果文件大于12个块,则第13个块指针是一个间接块指针,它指向的块内存放的是直接块指针而不是文件内容。如果间接块指针指向的块依然存放不下文件所占的块号,就需要二级间接块指针了。第14个块指针是二级间接块指针,它指向的块内存放的是一级间接块指针而不是文件内容。二级间接块指针如果还是无法满足文件的块号需求,就要用第15个块指针了。这是三级间接块指针,它指向的块内存放的是二级间接块指针而不是文件内容。下面以一个具体实例讲解如何定位i-节点,然后具体分析i-节点。在一个Ext3的分区中,文件系统的超级块描述了以下信息:◆块大小为4096字节;◆每块组包含的块数为32768;◆每块组包含的i-节点数为16320;◆i-节点大小为128字节。假设我们要访问61号i-节点,下面对61号i-节点进行定位。第1步定位61号i-节点所在块组。具体算法为:(i-节点号-1)DIV每块组i-节点数=(61-1)DIV16320=0所以61号i-节点位于0号块组。第2步定位0号块组描述符。为了确定0号块组的i-节点表起始块号,需要查看块组描述符表内的0号块组描述符。块组描述符表起始于超级块所在块的下一个块,也就是1号块。当前文件系统每块大小为4096字节,所以1号块开始于8号扇区。用WinHex跳转到8号扇区,其中第一个块组描述符就是0号块组描述符表,其内容如图7-39所示。图7-390号块组描述符0号块组描述符的具体参数如图7-40所示。图7-400号块组描述符的具体参数从0号块组描述符中可用看到该块组的i-节点表起始于4号块,因为每块大小为8扇区,所以4号块开始于32号扇区。第3步定位61号i-节点。从第二步中分析出i-节点表开始于32号扇区,32号扇区的0偏移就是1号i-节点的开始。因为每个i-节点大小为128字节,所以61号i-节点在该i-节点表中的偏移量为(61−1)×128=7680用WinHex跳转到该i-节点表的7680偏移处,其部分内容如图7-41所示。图7-4161号i-节点61号i-节点中的参数可以通过WinHex的模板进行查看,如图7-42和7-43所示。图7-4261号i-节点参数模板第一部分图7-4361号i-节点参数模板第二部分从61号i-节点的块指针可以看到,该文件除了占用12个直接块指针外,还用到了间接块指针。间接块指针指向了8883号块,用WinHex跳转到8883块的起始位置,其内容如图7-44所示。图7-448883块内的块指针在间接块指针指向的8883号块内存放的不是文件内容,而是直接块指针,这些块指针接在12号直接块指针之后,即从第13个块开始描述。7.3.8Ext3文件系统的目录项分析1.目录项结构分析目录项用来存放文件及目录的i-节点号、目录项的长度、文件名等信息,它们存储在分配给目录的块中。Ext3文件系统的目录项结构见表7-16。目录项中“文件类型”的具体分类见表7-17。表7-16Ext3文件系统的目录项结构表7-17目录项中“文件类型”的具体分类2.目录项结构特点Ext3文件系统的目录项有如下特点:①目录项存储在目录区中,i-节点内有描述目录区地址的块指针。②目录项的长度不是固定的,其长度随着文件名长度的不同而不同,文件名最长为255个字符,并且使用ASCII码进行存储。③Ext3的目录项长度虽然不固定,但一定是4字节的倍数,每个目录项以4字节为边界进行排列,即每个目录项的起始字节必须是位于目录内可被4整除的相对偏移字节处。④另外,Ext3目录项的结束位置如果没有达到4字节的边界,那么也需要在文件名后加空字节以达到4字节的边界。⑤目录区中的前两个目录项一定是“.”和“..”目录,“.”目录表示当前目录,“..”目录表示父目录。⑥每个目录项中有一个长度值指向下一个目录项,最后一个目录项的长度则指向本块的结尾处。3.目录项实例分析下面通过实例进一步分析目录项的结构。要在一个Ext3文件系统内找到目录项,需要首先找到根目录区,以下是具体步骤:第1步定位i-节点表。Ext3文件系统的超级块位于分区内的2号扇区,跳转到2号扇区,获得如下信息:◆块大小为4096字节;◆i-节点大小为128字节。块组描述符表起始于超级块所在块的下一个块,也就是1号块。当前文件系统每块大小为4096字节,所以1号块开始于8号扇区。用WinHex跳转到8号扇区,其中第一个块组描述符就是0号块组描述符表。从0号块组描述符中查看到该块组的i-节点表起始于4号块,因为每块大小为8扇区,所以4号块开始于32号扇区。第2步定位根目录区。跳转到32号扇区就是i-节点表的开始了,其中第一个i-节点(1号i-节点)为坏块i节点,2号i-节点就是根目录的i-节点。2号i-节点的内容如图7-45所示。图7-452号i-节点的内容我们用模板查看一下2号i-节点的具体参数,如图7-46所示。图7-462号i-节点的具体参数从模板中可以看到,根目录目前只占用1个块,就是第一个直接块指针中记录的“514”号块,换算为扇区等于4112。跳转到4112扇区,其内容如图7-47所示。图7-47根目录区图7-47的根目录区中就都是根目录下的文件及文件夹的目录项了,扇区上部的阴影部分是前三个目录项,分别为“.”目录的目录项、“..”目录的目录项和“lost+found”目录的目录项。这三个目录项的具体含义及数值如图7-48、图7-49、图7-50所示。图7-48“.”目录项的模板图7-49“..”目录项的模板图7-50“lost+found”目录项的模板图7-47的根目录区所在扇区下部的阴影部分是最后一个目录项,也就是为“halt”目录的目录项,这个目录项的具体含义及数值如图7-51所示。图7-51“halt”目录项的模板“halt”目录项中记录着其目录项长度为3796字节,而实际上该目录项只用了12字节。因为这是目录区的最后一个目录项了,所以这个目录项的长度则指向了当前块的结尾处。7.3.9Ext3文件删除与恢复的分析1.文件删除的分析在分析文件删除后文件系统中各个管理结构发生的变化之前,我们再总结一下Ext3文件系统对文件的管理方式。Ext3文件系统首先被分为若干个块组,并通过块组描述符描述这些块组,所有块组描述符组成块组描述符表,块组描述符表位于超级块的下一个块中。文件以块为单位进行分配,每个文件都有自己的一个i-节点和目录项。i-节点中记录文件的大小、时间信息、分配地址(块指针)等信息,而目录项中则记录文件的i-节点号、文件名等信息。将目录项和i-节点结合起来分析,就能获得某个具体文件的所有信息并通过块指针定位到其数据存放的地址,块指针所指向的块内就是文件的数据。综上所述,Ext3文件系统对文件的管理可以用一幅图来描述,如图7-52所示。图7-52Ext3文件系统对文件管理的结构图(1)文件删除前的底层分析下面以RedHatLinux系统的Ext3文件系统中一个具体文件为例,讲解其删除前和删除后的底层变化。目标文件名为“RedHat.gif”,它是Linux系统中的一个图片文件,也是RedHatLinux系统的Logo,该文件具体存放路径为“/etc/sysconfig/ha/web/RedHat.gif”。下面按照文件系统的管理方式定位该文件。第1步读取超级块和块组描述符的参数。超级块位于文件系统的2号扇区,从超级块中获得如下参数:◆块大小为4096字节;◆每块组包含的块数为32768;◆每块组包含的i-节点数为16320;◆i-节点大小为128字节。块组描述符表起始于1号块,即8号扇区,从0号块组描述符中获得如下参数:◆该块组的i-节点表起始块号为4。第2步读取i-节点表。为了读取文件“RedHat.gif”,要从根目录入手。根目录的节点为2号i-节点,2号i节点位于0号块组的i-节点表中,该i-节点表起始0号块组的4号块,即32号扇区。跳转到32号扇区,2号i-节点的内容如图7-53所示。图7-532号i-节点的内容用WinHex的模板查看2号i-节点的参数,如图7-54所示。图7-542号i-节点的参数从图7-54的参数中可以看到该节点的文件类型为目录,也就是根目录;硬链接数为21,说明有21个文件指向该节点;该i-节点只用了一个直接块指针,指向514号块,对应4112扇区。第3步读取根目录区。根目录的i-节点指向514号块,也即4112扇区,跳转到该扇区,就是根目录区了,里面是根目录下的文件及文件夹的目录项,如图7-55所示。图7-55根目录区的目录项我们的目标文件路径是“/etc/sysconfig/ha/web/RedHat.gif”,所以应该找到“etc”目录的目录项,即图7-55中的阴影部分。用WinHex模板查看其具体内容,如图7-56所示。从图7-56的参数中可以看到“etc”目录的i-节点号为195841。图7-56“etc”目录的目录项模板第4步读取“etc”目录的i-节点。“etc”目录的i-节点号为195841,超级块中显示每个块组包含的i-节点数为16320,所以195841号i-节点所在块组的计算方法为(195841-1)DIV16320=12计算结果等于12,说明195841号i-节点位于12号块组的i-节点表内。那么195841号i-节点是12号块组的i-节点表内的几号i-节点呢,可以用下面的公式计算:[(195841-1)MOD16320]+1=1说明195841号i-节点是12号块组的i-节点表内的1号i-节点。再跳转到8号扇区的块组描述符表,读取12号块组描述符,其中记录了12号块组的i-节点表起始于393218号块,如图7-57所示。图7-5712号块组描述符的参数393218号块对应3145744号扇区,跳转到3145744号扇区。该i-节点表内的第一个i-节点就是“etc”目录指向的195841号i-节点,其内容如图7-58所示。图7-58“etc”目录的i-节点用WinHex的模板查看“etc”目录i-节点的参数,如图7-59所示。从图7-59的参数中可以看到“etc”目录的i-节点用了两个直接块指针,指向393728和14591号块,其中393728号块对应3149824号扇区。图7-59“etc”目录i-节点的参数第5步读取“etc”目录的目录区。“etc”目录的i-节点指向393728号块,也即3149824号扇区,跳转到该扇区,就是“etc”目录区了,里面是“etc”目录下的文件及文件夹的目录项,如图7-60所示。图7-60“etc”目录区的目录项在该目录区的“.”目录项和“..”目录项之后,就是“sysconfig”目录的目录项了。用WinHex模板查看“sysconfig”目录项的具体内容,如图7-61所示。图7-61“sysconfig”目录的目录项模板从图7-61的参数中可以看到“sysconfig”目录的i-节点号为212161。第6步读取“sysconfig”目录的i-节点。“sysconfig”目录的i-节点号为212161,超级块中显示每个块组包含的i-节点数为16320,所以212161号i-节点所在块组的计算方法为:(212161-1)DIV16320=13计算结果等于13,说明212161号i-节点位于13号块组的i-节点表内。接下来再计算212161号i-节点在13号块组的i-节点表内的i-节点号,可以用下面的公式计算:[(212161-1)MOD16320]+1=1说明212161号i-节点是13号块组的i-节点表内的1号i-节点。再跳转到8号扇区的块组描述符表,读取13号块组描述符,其中记录了13号块组的i-节点表起始于425986号块,如图7-62所示。图7-6213号块组描述符的参数425986号块对应3407888号扇区,跳转到3407888号扇区,该i-节点表内的第一个i-节点就是“sysconfig”目录指向的212161号i-节点,其内容如图7-63所示。图7-63“sysconfig”目录的i-节点用WinHex的模板查看“sysconfig”目录i-节点的参数,如图7-64所示。图7-64“sysconfig”目录i-节点的参数从图7-64的参数中可以看到“sysconfig”目录的i-节点只用了一个直接块指针,指向426496号块,对应3411968号扇区。第7步读取“sysconfig”目录的目录区。“sysconfig”目录的i-节点指向426496号块,也即3411968号扇区。跳转到该扇区,就是“sysconfig”目录区了,里面是“sysconfig”目录下的文件及文件夹的目录项,如图7-65所示。图7-65“sysconfig”目录区的目录项“sysconfig”目录下有很多文件及目录,所以目录项很多。我们的目标文件路径是“/etc/sysconfig/ha/web/RedHat.gif”,那么应该找到“sysconfig”的下级目录“ha”的目录项,即图7-65中的阴影部分。用WinHex模板查看其具体内容,如图7-66所示。图7-66“ha”目录的目录项模板从图7-66的参数中可以看到“ha”目录的i-节点号为312093。第8步读取“ha”目录的i-节点。“ha”目录的i-节点号为312093,超级块中显示每个块组包含的i-节点数为16320,所以312093号i-节点所在块组的计算方法为(312093-1)DIV16320=19计算结果等于19,说明312093号i-节点位于19号块组的i-节点表内。接下来再计算312093号i-节点在19号块组的i-节点表内的i-节点号,可以用下面的公式计算:[(312093-1)MOD16320]+1=2013说明312093号i-节点是19号块组的i-节点表内的2013号i-节点。再跳转到8号扇区的块组描述符表,读取19号块组描述符,其中记录了19号块组的i-节点表起始于622594号块,如图7-67所示。图7-6719号块组描述符的参数622594号块对应4980752号扇区。跳转到4980752号扇区,该i-节点表内的2013号i-节点才是“ha”目录指向的312093号i-节点。因为每个i-节点大小为128字节,所以2013号i-节点在该i-节点表内的偏移量为(2013−1)×128=257536。用WinHex跳转到该i-节点表的257536偏移处,其内容如图7-68所示。图7-68“ha”目录的i-节点用WinHex的模板查看“ha”目录i-节点的参数,如图7-69所示。图7-69“ha”目录i-节点的参数从图7-69的参数中可以看到“ha”目录的i-节点只用了一个直接块指针,指向633534号块,对应5068272号扇区。第9步读取“ha”目录的目录区。“ha”目录的i-节点指向633534号块,也即5068272号扇区,跳转到该扇区,就是“ha”目录区了。里面是“ha”目录下的文件及文件夹的目录项,如图7-70所示。图7-70“ha”目录区的目录项“ha”目录下有很多文件及目录,所以目录项比较多。我们的目标文件路径是“/etc/sysconfig/ha/web/RedHat.gif”,那么应该找到“ha”的下级目录“web”的目录项,即图7-70中的阴影部分。用WinHex模板查看其具体内容,如图7-71所示。从图7-71的参数中可以看到“web”目录的i-节点号为312099。图7-71“web”目录的目录项模板第10步读取“web”目录的i-节点。“web”目录的i-节点号为312099,超级块中显示每个块组包含的i-节点数为16320,所以312099号i-节点所在块组的计算方法为:(312099-1)DIV16320=19计算结果等于19,说明312099号i-节点位于19号块组的i-节点表内。接下来再计算312099号i-节点在19号块组的i-节点表内的i-节点号,可以用下面的公式计算:[(312099-1)MOD16320]+1=2019说明312099号i-节点是19号块组的i-节点表内的2019号i-节点。在前文读取过19号块组描述符,其中记录了19号块组的i-节点表起始于622594号块,对应4980752号扇区。跳转到4980752号扇区,该i-节点表内的2019号i-节点才是“web”目录指向的312099号i-节点。因为每个i-节点大小为128字节,所以2019号i-节点在该i-节点表内的偏移量为(2019−1)×128=258304。用WinHex跳转到该i-节点表的258304偏移处,其内容如图7-72所示。图7-72“web”目录的i-节点用WinHex的模板查看“web”目录i-节点的参数,如图7-73所示。图7-73“web”目录i-节点的参数从图7-73的参数中可以看到“web”目录的i-节点只用了一个直接块指针,指向633538号块,对应5068304号扇区。第11步读取“web”目录的目录区。“web”目录的i-节点指向633538号块,也即5068304扇区。跳转到该扇区,就是“web”目录区了,里面是“web”目录下的文件及文件夹的目录项,如图7-74所示。图7-74“web”目录区的目录项“web”目录下有很多目录项。我们的目标文件路径是“/etc/sysconfig/ha/web/RedHat.gif”,那么应该找到“web”的下级文件“RedHat.gif”的目录项,即图7-74中的阴影部分。用WinHex模板查看其具体内容,如图7-75所示。图7-75“RedHat.gif”文件的目录项模板从图7-75的参数中可以看到“RedHat.gif”文件的i-节点号为312100。第12步读取“RedHat.gif”文件的i-节点。“RedHat.gif”文件的i-节点号为312100,超级块中显示每个块组包含的i-节点数为16320,所以312100号i-节点所在块组的计算方法为(312100-1)DIV16320=19计算结果等于19,说明312100号i-节点位于19号块组的i-节点表内。接下来再计算312100号i-节点在19号块组的i-节点表内的i-节点号,可以用下面的公式计算:[(312100-1)MOD16320]+1=2020说明312100号i-节点是19号块组的i-节点表内的2020号i-节点。在前文读取过19号块组描述符,其中记录了19号块组的i-节点表起始于622594号块,对应4980752号扇区。跳转到4980752扇区,该i-节点表内的2020号i-节点才是“RedHat.gif”文件指向的312100号i-节点。因为每个i-节点大小为128字节,所以2020号i-节点在该i-节点表内的偏移量为(2020−1)×128=258432。用WinHex跳转到该i-节点表的258432偏移处,其内容如图7-76所示。图7-76“RedHat.gif”文件的i-节点用WinHex的模板查看“RedHat.gif”文件i-节点的参数,如图7-77所示。图7-77“RedHat.gif”文件i-节点的参数从图7-77的参数中可以看到“RedHat.gif”文件的i-节点只用了一个直接块指针,指向633539号块,从其i-节点的参数中还能看到文件大小为969字节。第13步读取“RedHat.gif”文件的数据。“RedHat.gif”文件的数据存储在633539号块中,对应5068312号扇区,该文件系统每个块大小为8个扇区,而“RedHat.gif”文件的大小为969字节,只用了633539号块的不到两个扇区的空间。用WinHex跳转到633539号块,选中该块内0~968字节,并另外保存到Windows环境下的分区中,文件名就保存为“RedHat.gif”。保存后的文件如图7-78所示。图7-78保存在Windows中的“RedHat.gif”文件因为“RedHat.gif”文件是一个图片格式的文件,Windows环境也支持这种图片格式,所以在Windows环境中能够看到该图片的预览,也能打开该图片。到此,RedHatLinux系统中的“/etc/sysconfig/ha/web/RedHat.gif”文件就分析完了。(2)文件删除后的底层分析在Linux系统中将“/etc/sysconfig/ha/web/”路径下的“RedHat.gif”文件删除。删除后文件系统底层的变化分析如下:①目录项的变化。“RedHat.gif”文件被删除后,其目录项所占的空间会被收回。收回的方式是把“RedHat.gif”文件目录项的长度值添加到上一个目录项的报告长度当中,这样系统就会忽略对“RedHat.gif”文件目录项的读取。具体内容如图7-79所示。图7-79“RedHat.gif”文件被删除后的目录项H个字节,而实际上该目录项只用了1CH个字节,后面的14H个字节其实就是“RedHat.gif”文件的目录项,该目录项的长度为14H个字节,现在这个长度值被加入上一个文件“about_login.php”的目录项长度值中。从目录项中可以看到,“RedHat.gif”文件删除后其目录项中的i-节点号并没有改变,文件名也没有改变,所以还可以根据这些信息定位到“RedHat.gif”文件的i-节点。另外,“RedHat.gif”文件删除后,其上级目录的i-节点变化时间和修改时间都会发生相应改变。②i-节点的变化。“RedHat.gif”文件删除后,其i-节点的“链接数”将减1,如果链接数成为0,意味着必须回收这个i-节点;文件大小和文件的块指针也全部清零,同时将文件删除时间记录下来,如图7-80所示。图7-80“RedHat.gif”文件删除后的i-节点用WinHex的模板查看其具体参数,如图7-81所示。图7-81“RedHat.gif”文件删除后的i-节点参数值从图7-81中可以看到,文件大小、链接数及原来的直接块指针都被清零了。③位图的变化。“RedHat.gif”文件删除后,其i-节点位图中的相应位设置为0以回收该i-节点,然后更新块组描述符和超级块中的空闲i-节点数。“RedHat.gif”文件原先占用的块也需要回收,将块位图中的相应位设置为0,说明它所对应的块为空闲,同时也需要更新块组描述符和超级块中的空闲块数。2.文件删除后的恢复分析通过前文对Linux系统下Ext3文件系统中的一个文件的删除分析可以知道,文件被删除后,其目录项中的文件名和i-节点号还存在。通过这两个信息可以找到文件的i-节点,但是i-节点中的文件大小和块指针都被清零,虽然数据块不会清零,但要找到文件的存储位置是很难的,所以Ext3文件系统下文件删除后是比较难恢复的。我们可以考虑按照文件类型进行恢复,但如果文件占用的块比较多,文件不连续存储的可能性比较大,也就给恢复带来了麻烦。提示因为Ext3文件系统有日志功能,日志中可能会有新近删除文件的i-节点信息的备份。利用这个备份,有机会将删除的文件成功恢复。7.3.10Ext3文件系统超级块的恢复实例Ext3文件系统的超级块中存储着大量的文件系统结构参数。Linux系统在挂载文件系统时会读取超级块,如果超级块损坏,系统将会拒绝挂载该文件系统。在系统运行时,由于软件或临时性的硬件信号干扰,可能会导致超级块损坏,从而使文件系统运行出错,并且无法再一次挂载,最终导致文件系统内的数据无法访问。Ext3文件系统在结构的设计上与UFS文件系统有很多类似之处。为了使文件系统在遭到毁灭性打击时能够得以恢复,操作系统在创建文件系统时,会将超级块复制到文件系统的每个块组中,以便在发生故障时能够读取。但是,如果文件系统具备稀疏超级块特性,那么只在块组号是3、5、7的幂的块组(如1、3、5、7、9、25、49等)内才对超级块做备份,其他块组内则没有备份。虽然文件系统的超级块在很多块组中都有备份,但在文件系统挂载时,系统只会读取主超级块的内容,如果主超级块受损,文件系统就无法挂载。因为有超级块的这种备份措施,所以给我们恢复超级块带来了很大帮助,我们只需要找到备份超级块,覆盖破坏的主超级块即可。提示主超级块在文件系统的生命周期内,会不断地发生修改,以反映文件系统目前的状态,而为了确保备份的安全,备份超级块不会跟随这些变动。所以在用备份超级块恢复主超级块后,如果文件系统还是无法挂载,那么还需要具体分析超级块的参数,并且进行适当的修改。下面具体分析一个实例。一台计算机使用RedFlagLinux系统,某次因突然断电而导致再一次启动时其中一个文件系统无法挂载。为了查找原因并恢复数据,在Linux系统下用“dd”命令将该文件系统镜像为一个文件,然后在Windows环境下用WinHex分析这个镜像文件,发现超级块所在的2号扇区已经全部变成“00”,如图7-82所示。图7-82超级块所在的2号扇区已经全部变成“00”考虑到Ext3文件系统的超级块在很多块组中都有备份,可以通过查找备份超级块的方法,用备份超级块修复主超级块。Ext3文件系统超级块中38H~39H偏移处有两个字节的固定签名值,为十六进制数值“53EF”,用WinHex搜索这两个数值就可以找到超级块的备份。搜索的设置方法如图7-83所示。图7-83搜索超级块的参数设置通过搜索,在262144号扇区找到了超级块,其内容如图7-84所示。图7-84在262144号扇区搜索到的超级块该超级块中的具体参数如图7-85和7-86所示。图7-85262144号扇区超级块的参数第一部分图7-86262144号扇区超级块的参数第二部分该超级块中“当前超级块所在块组”参数的值为1,说明这是1号块组中的超级块备份。再看参数“每块组包含块数”的值为32768,每块大小为4096字节,即8扇区。用每块组包含块数32768乘以每块扇区数8,可以得到1号块组的起始扇区,结果为262144,刚好等于我们搜索到的该超级块所在扇区号。这可以说明我们搜索到的是一个合法的超级块。不过这个超级块中的几个参数会跟主超级块不相符,即图7-85和7-86中标注了“与主超级块不相符”的这几个参数,解决的办法是在Linux系统下对该文件系统做一下一致性检查就可以了。注意一致性检查是有潜在风险的,做之前一定要对磁盘进行镜像。因为我们已经对出错的文件系统做了“dd”镜像,所以可以很放心地在原盘上做修改。把搜索到的超级块备份复制到主超级块处,并对该文件系统运行了一致性检查,随后尝试挂载该文件系统,结果挂载成功,文件系统可以正常访问了,数据成功恢复。7.3.11Linux系统数据恢复专业工具详解用于恢复Linux系统的Ext3文件系统的数据恢复工具比较少,这里介绍几种比较专业的在Windows环境下运行的Linux数据恢复工具。1.X-waysForensic和R-studio这两款工具可以很好地支持Linux系统下Ext2、Ext3文件系统的数据恢复。在5.3.12节中已经介绍过这两种工具的用法,这里就不再赘述。2.StellarPhoenixLinuxStellarPhoenixLinux是StellarPhoenix系列中专门针对Linux系统的一款数据恢复工具,下面具体介绍它的使用方法。打开StellarPhoenixLinux,其主界面如图7-87所示。图7-87StellarPhoenixLinux的主界面选择工具栏中的“打开物理盘”按钮,出现物理盘选择对话框,如图7-88所示。选中“HardDisk2”后单击“OK”按钮,出现扫描方式的选择对话框,如图7-89所示。图7-88选择物理盘图7-89扫描方式的选择对话框其中第一条是指利用分区表信息获得具体分区。如果系统的分区表完好,应该选择这一条。第二条是指自动扫描逻辑磁盘。如果分区表信息损坏,应该选择这一条,让工具自行搜索分区。选择第一条,然后单击“OK”按钮,软件会列出读取到的分区,如图7-90所示。从图7-90可以看出,软件读取到了两个Linux分区,并列出每个分区的起始位置和大小。选择需要恢复数据的分区后单击“OK”按钮,软件就开始对分区进行扫描了。经过一段时间的扫描,完成后数据会被列出来,如图7-91所示。现在只需要选中需要恢复的数据并存盘到其他分区即可。图7-90列出分区信息图7-91扫描完成后的结果3.QuickRecoveryforLinuxQuickRecoveryforLinux是UnistalSystemsPvtLtd.出品的一款针对Linux的数据恢复工具,其官方网站为/。打开QuickRecoveryforLinux,其主界面如图7-92所示。图7-92QuickRecoveryforLinux的主界面在主界面的左侧选择需要恢复的物理盘,下方有三个可选的恢复选项,如图7-93所示。图7-93三种恢复选项这三种恢复选项分别为快速扫描、高级扫描和RAW恢复,快速扫描是一种简单的扫描,速度比较快,但对文件系统的扫描不够全面;高级扫描则是对文件系统全面扫描,速度比较慢;RAW恢复是针对文件类型进行扫描。选中“快速扫描”后单击“Next”按钮,出现了工具识别到的分区,如图7-94所示。图7-94识别到的分区选择需要恢复数据的分区后单击“Next”按钮,工具就开始对分区进行扫描了。经过一段时间的扫描,完成后数据会被列出来,如图7-95所示。图7-95扫描完成后的结果选中需要恢复的数据并保存到其他分区就可以完成恢复了。7.4Ext4文件系统分析7.4.1Ext4文件系统介绍Linux最早支持的文件系统是Minix文件系统,这个文件系统有严重的性能问题,因此后来出现了另一个针对Linux的文件系统,即扩展文件系统。第1版扩展文件系统(Ext1)由RemyCard设计,并于1992年4月引入到Linux中。Ext1文件系统是第一个使用虚拟文件系统(VFS)交换的文件系统,虚拟文件系统交换是在0.96c内核中实现的,支持的最大文件系统为2GB。第2版扩展文件系统(Ext2)也是由RemyCard设计的,并于1993年1月引入到Linux中,它借鉴了当时流行的FFS(BerkeleyFastFileSystem)文件系统的先进想法。Ext2支持的最大文件系统为2TB,后来在2.6内核将该文件系统支持的最大容量提升到32TB。第3版扩展文件系统(Ext3)是Linux文件系统的重大改进,由StephenTweedie实现,并于2001年11月发布。Ext3文件系统引入了日志概念,以提高文件系统的可靠性。Ext3还能够支持从使用Ext2的系统进行就地(In-place)升级。第4版扩展文件系统(Ext4)是由Ext3的维护者TheodoreTso领导的开发团队实现的,并引入到Linux2.6.19内核中。Ext4产生的原因是开发人员在Ext3中加入了新的高级功能,但在实现的过程出现了几个重要问题:①一些新功能违背向后兼容性;②新功能使Ext3代码变得更加复杂并难以维护;③新加入的更改使原本十分可靠的Ext3变得不可靠。由于这些原因,从2006年6月份开始,开发人员决定把Ext4从Ext3中分离出来进行独立开发。Ext4的开发工作从那时起开始进行,但大部分Linux用户和管理员都没有太关注这件事情,直到2.6.19内核在2006年11月的发布。Ext4第一次出现在主流内核里,但是它当时还处于试验阶段,因此很多人都忽视了它。2008年12月25日,LinuxKernel2.6.28的正式版本发布。随着这一新内核的发布,Ext4文件系统也结束实验期,成为稳定版。7.4.2Ext4文件系统的特点Ext4文件系统有很多新的特点,下面将这些特点一一列举出来。(1)支持更大的文件系统和更大的文件Ext3文件系统最多只能支持32TB的文件系统和2TB的文件,根据使用的具体架构和系统设置,实际容量上限可能比这个数字还要低,即只能容纳2TB的文件系统和16GB的文件。而Ext4的文件系统容量达到1EB,而文件容量则达到16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列的用户而言,这就非常重要了。(2)支持更多的子目录数量Ext3目前只支持32000个子目录,而Ext4取消了这一限制,理论上支持无限数量的子目录。(3)支持更多的块和i-节点数量Ext3文件系统使用32位空间记录块数量和i-节点数量,而Ext4文件系统将它们扩充到64位。(4)支持多块分配当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块,如果写一个100MB的文件就要调用25600次数据块分配器,而Ext4的多块分配器“MultiblockAllocator(MBAlloc)”支持一次调用分配多个数据块。(5)支持持久性预分配如果一个应用程序需要在实际使用磁盘空间之前对它进行分配,大部分文件系统都是通过向未使用的磁盘空间写入0来实现分配,比如P2P软件。为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。而Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率。(6)支持延迟分配Ext3的数据块分配策略是尽快分配,而Ext4的策略是尽可能地延迟分配,直到文件在缓冲中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,显著提升性能。(7)支持盘区结构Ext3文件系统采用间接块映射地址,当操作大文件时,效率极其低下。例如,一个100MB大小的文件,在Ext3中要建立25600个数据块(以每个数据块大小为4KB为例)的映射表;而Ext4引入了盘区概念,每个盘区为一组连续的数据块,上述文件可以通过盘区的方式表示为“该文件数据保存在接下来的25600个数据块中”,提高了访问效率。(8)新的i-节点结构Ext4支持更大的i-节点。之前的Ext3默认的i-节点大小128字节,Ext4为了在i-节点中容纳更多的扩展属性,默认i-节点大小为256字节。另外,Ext4还支持快速扩展属性和i-节点保留。(9)支持日志校验功能日志是文件系统最常用的结构,日志也很容易损坏,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4给日志数据添加了校验功能,日志校验功能可以很方便地判断日志数据是否损坏。而且Ext4将Ext3的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。(10)支持“无日志”模式日志总归会占用一些开销。Ext4允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。(11)默认启用Barrier磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写Commit记录。若Commit记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4文件系统默认启用Barrier,只有当Barrier之前的数据全部写入磁盘,才能写Barrier之后的数据。(12)支持在线碎片整理尽管延迟分配、多块分配和盘区功能可以有效减少文件的碎片,但碎片还是不可避免会产生。Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。(13)支持快速fsck以前的文件系统版本执行fsck时很慢,因为它要检查所有的i-节点,而Ext4给每个块组的i-节点表中都添加了一份未使用i-节点的列表,所以Ext4文件系统做一致性检查时就可以跳过它们而只去检查那些在使用的i-节点,从而提高了速度。(14)支持纳秒级时间戳Ext4之前的扩展文件系统的时间戳都是以秒为单位的,这已经能够应付大多数设置,但随着处理器的速度和集成程度(多核处理器)不断提升,以及Linux开始向其他应用领域发展(比如高性能计算),基于秒的时间戳已经不够用。Ext4设计时间戳时考虑到未来的发展,它将时间戳的单位提升到纳秒。Ext4给时间范围增加了两个位,从而让时间寿命再延长500年,Ext4的时间戳支持的日期达到2514年4月25日,而Ext3只达到2038年1月18日。7.4.3Ext4文件系统的结构Ext4文件系统是Ext3文件系统的升级版,所以在文件系统布局上与Ext3类似,不过对于每一个具体结构都有或多或少的改变,比如在超级块中增加了一些64位的参数;在块组描述符中增加了64位参数和校验和;在i-节点中比较重要的变化是用盘区结构替代了Ext3的直接块指针和间接块指针,另外还将时间的描述增加为纳秒级。Ext4文件系统的目录项相对于Ext3则没有发生改变。因为Ext4文件系统的使用目前还不是太普及,所以为了节省篇幅本书只对超级块部分进行分析,其他结构将在笔者以后的书籍中详细讲解。Ext4的超级块开始于文件系统的1024字节处,即2号扇区,其具体结构见表7-18。表7-18Ext4文件系统的超级块结构续表7.4.4Ext4文件系统的向前与向后兼容Ext4文件系统在Ext3的基础之上做了很多改进,引入了大量新功能,这些改进主要是为了提高未来的Linux系统的性能。虽然Ext4做了很多改进,但依然能够与Ext3实现向后和向前的兼容性,这一点的确很难得。因为Ext3文件系统是Linux操作系统上最受欢迎的文件系统之一,所以Ext4的研发人员考虑到应该让Ext3用户能够轻松迁移到Ext4,为此,Ext4被设计为在盘区结构方面具有向后和向前的兼容性。首先Ext4是可以向前兼容的,也就是说Ext3文件系统可以挂载为Ext4文件系统使用,不过为了充分利用Ext4的优势,必须实现文件系统的迁移,以转换和利用新的Ext4格式。Ext3文件系统可以在线转换为Ext4,但这样并不能用到Ext4的全部新特性,只有将文件系统重新创建为Ext4才比较彻底。再说说Ext4的向后兼容,向后兼容就是指可以将Ext4文件系统挂载为Ext3文件系统使用,但前提是Ext4文件系统不能使用盘区功能。Ext4文件系统的向前与向后兼容性可以用一幅图来说明,具体如图7-96所示。图7-96Ext4文件系统的向前与向后兼容性示意图第三篇物理类数据恢复技术揭秘如果保存数据的存储介质(如硬盘、优盘等)出现了物理故障,不能正常地被计算机系统识别和访问,在这种情况下对该介质中丢失的数据进行恢复的过程,就称为物理恢复。本篇主要讲解物理恢复所用到的技术,也就是在存储介质出现物理故障后数据恢复的解决办法,包括硬盘电路板故障、硬盘磁头组件故障、硬盘主轴电机故障、硬盘盘片故障、硬盘固件故障、优盘物理故障等情况导致的数据丢失后的恢复。需要说明的是,物理故障的恢复技术,理论性的东西相对于逻辑恢复来讲要少得多,所以物理故障的恢复技能很多时候都是来源于实践中的经验总结,每个人遇到同样的故障,解决的办法也许会有差别,但最终殊途同归,都能成功恢复出数据。所以物理类的恢复技术,可能每个人都有自己不同的技巧,本篇所讲解的方法,只是提供给读者一种思路,并不是唯一的方法。本篇包括如下7章:第8章硬盘物理故障的种类及判定第9章硬盘电路板故障数据恢复方法第10章硬盘磁头组件故障数据恢复方法第11章硬盘主轴电机故障数据恢复方法第12章硬盘盘片故障数据恢复方法第13章硬盘固件故障数据恢复方法第14章优盘物理故障数据恢复方法第8章硬盘物理故障的种类及判定8.1硬盘外部物理故障的种类和判定方法硬盘的物理结构可以分为外部结构和内部结构。外部结构主要包括硬盘的外壳和电路板,其中硬盘的外壳基本不会出现故障,硬盘的外部物理故障主要出现在电路板上。硬盘的电路板一般是六层板,电路板上分布着主控芯片、缓存、电机驱动芯片、BIOS及其他电子元器件,在电路板前端还有硬盘的电源接口和数据线接口。电路板的这些组成部分都有出现故障的可能性,下文将逐一介绍。8.1.1电路板供电故障硬盘的供电来自主机的开关电源,将开关电源的电源线连接到硬盘电路板的电源接口就可以给硬盘供电了。电源线上有四个接线柱,这四个接线柱的电压分别为:一根红色线为+5V,两根黑色线为地线,一根黄色线为+12V,通过线性电源变换电路,变换为硬盘正常工作的各种电压。硬盘的供电电路如果出现问题,会直接导致硬盘不能工作。故障现象往往表现为不通电、硬盘检测不到、盘片不转、磁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论