NTFS文件系统扇区存储探秘

978-7-115-29123-3
作者: 宋群生 宋亚琼
译者:
编辑: 王峰松

图书目录:

详情

全书包括三大块:基础篇,重点介绍NTFS文件系统的性能和存储特点;工具篇,重点介绍作者编写的实用工具的功能和使用;应用篇,针对NTFS文件系统数据恢复实例进行讲解。

图书摘要

NTFS文件系统扇区存储探秘

宋群生  宋亚琼  编著

人民邮电出版社

北京

图书在版编目(CIP)数据

NTFS文件系统扇区存储探秘/宋群生,宋亚琼编著.--北京:人民邮电出版社,2012.10

ISBN 978-7-115-29123-3

Ⅰ.①N… Ⅱ.①宋… ②宋… Ⅲ.①文件系统—数据存贮—研究 Ⅳ.①TP311.13

中国版本图书馆CIP数据核字(2012)第177891号

内容提要

本书主要内容包括:介绍NTFS 文件系统优越的性能特征;介绍作者为了探索NTFS 文件系统的存储特点编写的21 个WIN32 工具程序;使用作者编写的WIN32 工具程序,探秘NTFS 文件系统的扇区存储规律。

全书分3 篇,共计17 章。第1 章至第3 章是“基础篇”,重点介绍了NTFS 文件系统的性能和存储特点,同时也辅助性地介绍了FAT16 和FAT32 两种文件系统;第4 章至第5 章是“工具篇”,介绍了作者编写的工具程序;第6 章至第17 章是“探秘篇”,使用工具程序对NTFS 文件系统的扇区存储规律进行了探索。

本书附送的光盘里收录了书中使用的全部工具程序,读者可以使用这些工具程序对硬盘扇区数据进行各种读写与分析。

本书可作为从事数据恢复和硬盘维修的技术人员参考用书,也可供研究文件系统和进行扇区数据分析的爱好者参考使用。

NTFS文件系统扇区存储探秘

♦ 编著  宋群生  宋亚琼

责任编辑  王峰松

♦ 人民邮电出版社出版发行    北京市崇文区夕照寺街14号

邮编 100061    电子邮件  315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京鑫正大印刷有限公司印刷

♦ 开本:787×1092  1/16

印张:22

字数:537千字    2012年10月第1版

印数:1-3500册    2012年10月北京第1次印刷

ISBN 978-7-115-29123-3

定价:59.00元(附光盘)

读者服务热线:(010)67132692    印装质量热线:(010)67129223

反盗版热线:(010)67171154

随着信息化的飞速发展,人们对硬盘、U 盘等各种存储介质越来越熟悉,而数据信息也由纸质保存演变到如今的电子存储,数据信息的重要性日益凸显,数据已经成为一项最重要的资产。

如今,数据的重要性已远远超越了硬盘等存储介质本身,一旦珍贵的数据遭到损坏或丢失,数据恢复就显得尤为重要。正因为在构筑数据安全保护底线方面所处的特殊地位,数据恢复技术的重要性正在被各行各业广泛关注。

《NTFS 文件系统扇区存储探秘》一书重点揭示了微软公司没有公布的NTFS 文件系统的扇区存储规律,全书对NTFS 的基本存储原理由浅入深,并结合大量演示实例的操作与分析进行讲解,是其他的书籍中找不到的,特别是作者介绍的隐藏文件的方法、恢复EFS 加密文件数据的方法、恢复NTFS 压缩文件数据的方法,都是现有书籍中尚未涉及的领域。

应当说,这是一本实际工作中非常需要的工具书,保护和抢救数据对于每个人来说都非常重要,我很乐意向读者推荐本书,相信有志的读者朋友一定能够从此书中获得相关的技术知识与操作经验。

效率源信息安全技术有限责任公司副总经理、技术总监  张彬

NTFS 全称是New Technology File System,即新技术文件系统。20 世纪90 年代初,微软和IBM 共同开发了OS/2,因为对重大问题的分歧,最终双方并没有继续合作,IBM 继续开发OS/2,而微软则开始研发Windows NT,随着Windows NT 第一个版本的诞生,NTFS文件系统也于1993 年诞生。

NTFS 从诞生至今已经有19 年,前后共发布了5 个版本,直至今天NTFS 依然是Windows操作系统中最主流的文件系统,随着微软官方宣布,其下一代文件系统存储技术WinFS 项目的停止,NTFS 可能在今后若干年,仍然会是微软操作系统中最主流的文件系统。

本书较全面地介绍了FAT、FAT32、NTFS 文件系统各类型的数据结构及其工作原理,并重点介绍了NTFS 文件系统的磁盘管理功能、编码、NTFS 文件常驻与非常驻属性、元数据等知识点,能够使读者对NTFS 有一个较为深入的了解。

最难能可贵的是,本书是一本实际操作性非常强的书,全书都贯穿作者对技术探索的过程,跟随着作者探究的步伐,读者一定能够分享到作者在对NTFS 技术不断探索和发现过程中得到的快乐。

彦安科技总经理,《数据安全与编程技术》、《数据恢复技术(第二版)》作者 涂彦晖

在众多的磁盘文件系统中,NTFS 文件系统是各项性能都比较优越的文件系统,集中体现了高效和安全两大特性。NTFS 文件系统早年在服务器领域得到了广泛应用。微软公司推出WINDOWS 2000 和WINDOWS XP 以来,NTFS 文件系统在PC 机上也得到了迅速普及。

据作者了解,现有的涉及NTFS 文件系统的书籍,一般只介绍了NTFS 文件系统的优越性能,并没有揭示其在磁盘上的扇区存储规律。在有关NTFS 文件系统的扇区存储方面,也没有发现比较系统全面的介绍资料。在NTFS 文件系统的设计者发表的官方资料中,也很少涉及NTFS 文件系统的扇区存储规律。

设计者为什么不公开其扇区存储规律呢?这主要是从安全方面考虑的。因为公开了这些扇区存储规律,文件系统的许多保护机制就都能用修改硬盘物理扇区数据的方法进行修改,文件系统的安全保护功能就被削弱了。

不过这是一把双刃剑,如果能够了解NTFS 文件系统的扇区存储规律,操作者就能在系统维护、数据恢复、开拓应用范围等方面获得很多不可替代的方法和技巧。

为了探索NTFS 文件系统的扇区存储规律,作者编写了21 个WIN32 工具程序,都收录在随书附送的光盘中。使用这些WIN32 工具程序,可以对硬盘物理扇区进行各种操作,可以监测、分析扇区中的数据变化,从而发现NTFS 文件系统的优越性能是如何通过扇区数据存储体现的。

虽然这些工具程序在本书中是为了探索NTFS 文件系统的扇区存储规律而编写的,但是它们在磁盘扇区的读写与分析领域是具有通用性的,因为这些工具程序是对物理硬盘进行操作的,是不受操作系统和文件系统限制的。在探索其他文件系统的扇区存储规律方面,在修复系统参数方面和恢复硬盘、U 盘、存储卡数据方面,可以开拓更多的应用空间。

本书用具体的演示实例,对21 个WIN32 工具程序的使用,对NTFS 文件系统的基本特性、扇区分配、EFS 加密、数据压缩、数据属性,对修改位图数据隐藏用户的机密文件,对NTFS 逻辑盘的数据恢复等进行了详细的分析和介绍。

作者对NTFS 文件系统的扇区存储规律所进行的探索,可以为读者继续进行此项工作起到启示和借鉴的作用。NTFS 文件系统具有众多的优越性能,完全揭示其扇区存储规律,还有待于更多技术分析人员的不懈努力。

在对演示实例的操作与分析中,有很多内容在目前是没有资料可查的。特别是笔者介绍的隐藏文件的方法、恢复EFS 加密文件数据的方法、恢复NTFS 压缩文件数据的方法,都是其他书籍中没有涉及的领域。

由于作者水平有限,书中难免出现某些疏漏,敬请读者批评指正。

本篇主要介绍 NTFS文件系统的基本特性和扇区存储特征。同时,为了能与其他主流文件系统进行比较,以加深对 NTFS文件系统的认识,本篇还介绍了 FAT16 和FAT32两种文件系统的基本特性,以及它们在硬盘扇区中的存储规律。

NTFS文件系统虽然与两种 FAT 文件系统不同,但它们在扇区存储规律上,还是有某些共通或相似的地方的。

本书讲述的两大主题,第一是使用作者编写的 WIN32工具程序,对硬盘扇区进行各种操作;第二是使用读写物理硬盘扇区的方法,去探索 NTFS文件系统的扇区存储规律。掌握了 NTFS文件系统的扇区存储规律,就能使操作者不受操作系统和文件系统的限制,实现一些用其他方法无法完成的操作目的。譬如从系统已被破坏的硬盘上恢复文件;排除一些常见的由于系统数据受损,而出现的硬盘逻辑故障;通过修改位图文件的扇区数据,来达到隐藏机密文件的目的;移植被 EFS加密的文件数据;移植被压缩的文件数据;通过直接修改扇区的字节数据,取得原先没有的操作权限,等等。

硬盘在分区以后,其每一个逻辑驱动器都必须建立起完整的数据结构,才能正常使用。FAT文件系统和NTFS文件系统的数据结构大部分都不相同,只在存储系统分区数据的扇区上,有某些相同或相似的地方。

FAT 文件系统的数据结构由6 部分组成,分别是主引导记录、主分区表或分区链表、分区引导记录、文件分配表、文件目录表和数据区。这里需要说明的是,主引导记录和主分区表都只有一个,共同存储在一个扇区中。如果使用CHS(柱面数、磁头数、扇区数)寻址方式,这个扇区是0 柱面0 磁头1 扇区;如果使用线性寻址方式,这个扇区是0 号扇区。从硬盘分区后的区域结构上划分的话,该扇区可以认为是属于第1 个逻辑驱动器,也就是通常所说的C 盘。而其他的逻辑驱动器就没有主引导记录和主分区表了,在这些逻辑驱动器所属的第1 个系统隐藏扇区上,只有分区链表。

NTFS文件系统的数据结构中,用于系统引导的部分基本与FAT 文件系统相同,如主引导记录、主分区表或分区链表、分区引导记录这3 部分。不过在这3 部分中,很多字段的数据所表示的内容是完全不同的,只是都有相同的称呼罢了。

FAT 文件系统的另外3 部分,即文件分配表、文件目录表和数据区,在NTFS文件系统中则不存在。NTFS文件系统使用的是“磁盘上的任何事物都为文件”的存储模式,甚至连系统使用的引导文件数据,都作为文件存储在磁盘上。

了解文件系统的数据结构和扇区存储规律,是对物理硬盘扇区进行读写操作的基础,也是将扇区读写技术应用于系统修复和文件恢复的先决条件。因为一个硬盘上有很多逻辑驱动器,这些逻辑驱动器可能使用不同的文件系统,而对于不同的文件系统,读写与分析扇区数据的方法是完全不相同的。

本章先介绍FAT 文件系统的数据结构。

硬盘的主引导记录也称MBR,存储在0柱面0磁头1扇区。如果读写扇区时采用线性寻址方式,则该扇区的编号为“0”。在本书后面的章节里,扇区地址全部使用线性寻址方式来表示。该扇区的 512 字节有 3 部分内容,除了主引导记录外,还有分区表和结束标志55AA。

主引导记录的作用非常重要,它是硬盘启动时最先加载的扇区数据。下面通过分析硬盘的启动过程,来说明它的重要性。

(1)计算机系统接通电源以后,主板 BIOS加电进行自检。自检的内容很多,是一个很复杂的过程,这里只介绍与硬盘有关的部分。

(2)将硬盘第1个扇区,也就是0柱面0磁头1扇区(线性寻址时是0号扇区)的内容读入内存。

(3)检查结束标志,也就是扇区最后两个字节的值是否等于“aa55H”(存储顺序是低字节在前,高字节在后)。若不等则打印屏幕提示,然后死机。

(4)执行主引导记录中的程序,将控制权转交给主引导程序。

(5)主引导程序首先将自己读入内存,然后查找在分区表中是否有活动分区。找到活动分区以后,将分区引导记录读入内存。

(6)检查结束标志是否等于“aa55H”,然后执行分区引导记录中的启动程序,将控制权交给操作系统。

(7)操作系统加载系统文件,计算机启动。

通过对以上过程的分析可以看出,如果主引导记录不正常,后面所有的启动过程都不可能正常执行。

有一种特殊情况,使计算机启动过程的前两步与上面介绍的不一样。如果硬盘上安装了多系统引导软件,如Partition Magician分区软件,则该软件将主引导记录替换成自己的一段程序。这段程序将BIOS引向软件设置的专用分区,然后根据操作者的选择激活某一个分区,再进入正常的启动过程。类似Partition Magician这样的分区软件还有很多,它们各有自己的特点,这些第三方软件都不在本书的讨论范围之内。通常情况下,一块硬盘上只有一个主引导记录。

现在用“读硬盘扇区数据.EXE”程序将一块硬盘的主引导记录读出,程序运行界面如图1-1所示。“读硬盘扇区数据.EXE”程序将在《工具篇》中介绍,现在先使用该程序的运行结果。

图 1-1 所示的左图是程序运行的主窗口。在主窗口的编辑框中显示了数值“10084”,这是主引导记录所在扇区中,全部字节的累加算术和。为什么要取这个数值的原因将在《工具篇》中详细说明。

图1-1所示的右图是程序运行后弹出的对话框。该对话框中显示了512字节的十六进制值,每行显示16字节,共显示32行。

在图1-1中,位移从00H 到1bdH 就是主引导记录。如果用扇区内的字节编号来表示某一字节,设起始号为1,就是从第1 到第446字节。为什么要使用位移和扇区内编号这两种计算方式呢?因为在今后分析扇区数据时,或者是手工编制扇区中的字节数据时,某些场合用编号计算是比较方便的。

譬如在《工具篇》中介绍的“修改扇区文件数据.EXE”程序,可以将每个扇区的512字节,按照每行16字节,一共32行的格式显示在屏幕上。如果从1开始编号,则感觉很有对称性,容易查找某一字节。如果用位移值计算,就感觉不太方便。

字节位移是从0开始计数,而字节编号是从1开始编号,所以对同一字节来说,字节编号的值要比字节位移的值大1。

位移从 1beH 到1fdH 是分区表,字节编号为 447到510。有关分区表的内容在下一节讨论。

图1-1

最后两字节是结束标志“55 AA”。因为两字节组成一个字,写入磁盘的顺序是低字节在前,高字节在后,所以“55 AA”写成十六进制应为“aa55H”。

结束标志“55 AA”是查找系统数据扇区的标志,据此对扇区进行搜索,可用于寻找主引导记录、主分区表或分区链表所在的扇区地址,也可以具此查找分区引导记录的扇区地址。

主引导记录扇区所在的磁道,通常称为0磁道,它属于隐藏磁道,这个磁道的63个扇区属于隐藏扇区。操作系统的所有命令,除了 FDISK 以外都不能访问它们。就连格式化程序FORM AT,对这些隐藏扇区也无能为力。

主引导记录和主分区表的数据,只占用了0磁道的第1个扇区,系统对其他的62个扇区弃之不用。正因为如此,0磁道的剩余62个扇区就成了一些病毒程序代码、操作系统的引导代码、应用软件用于自我保护的识别标记、BIOS功能扩展程序代码的栖息之地。

经常监测并分析0磁道的扇区数据变化,就能发现很多不为人知的秘密,作者举一例来说明这个问题。

美国的MACROMEDIA 公司堪称网页制作软件的鼻祖,该公司的三大软件颇具影响力。这三款软件是:网页制作软件DREAMWEAVER MX、图象处理软件FIREWORKS MX 和动画制作软件FLASH MX。

这三款软件有试用版,从操作者安装使用开始,时间限制为30天。超过试用期后,软件就不能运行了。即使重新安装操作系统和这三款软件,甚至将硬盘格式化或重新分区,也无济于事。

那么这三款软件采用了什么保护机制呢?作者通过对0磁道扇区数据的监测,发现了这三款软件的一个秘密。

这三款软件中的每一款软件安装以后,都会向0磁道的第32扇区写入一部分识别代码。当操作者对逻辑盘进行格式化,或是对整个硬盘重新分区时,所运行的程序都不会访问第32扇区,所以软件的时间限制仍然有效。

作者用扇区清零程序将32扇区的数据清掉,然后再安装这三款软件的试用版,则可以继续使用了。

采取这种保护方式的软件还有很多,只要经常监测0磁道并用心去分析,就能发现许多不为人知的秘密。

下面用作者使用的两块硬盘运行“监视 0 磁道变化.EXE”程序,将两块硬盘的 0 磁道 63个扇区的数据分别读出,然后进行比较。所使用的工具程序在《工具篇》中再详细介绍。

先看一块新硬盘的显示数据,如图1-2所示。

图1-2

图1-2所示的扇区编号没有使用线性寻址的表示方法,而是使用了1~63的编号方式,这是为了强调在硬盘的结构中,每磁道有63个扇区的虚拟物理概念。

从图1-2所示的扇区字节算术和可以看出,只有第1扇区写有数据,其他62个扇区全部为0。这是因为该硬盘使用不久,还没有写入其他程序的垃圾代码。

再看一块老硬盘的显示数据,如图1-3所示。

如图1-3所示,除了第1扇区写有系统引导数据以外,还有很多扇区也写有数据。与第1 扇区字节算术和相同的,如第 6 扇区,是作者备份的系统数据,目的是日后出现引导故障时修复硬盘。与第1扇区字节算术和不相同的扇区,就是硬盘使用三年多来,各种应用软件写入的垃圾代码。

图1-3

主分区表占用0号扇区(线性寻址)的64字节,位移从1beH 到1fdH,字节编号为447到510。它共有4个分区表项,每个分区表项占16字节。一般只使用2个分区表项,另外2个分区表项全为0。分区表项的格式见表1-1。

表1-1  分区表项各字段值的内容

注:偏移量和字节编号是第1个分区表项的值,后面的分区表项按照相同的规律递增。

通常说的分区表指的是主分区表,另外在扩展分区的每一个逻辑驱动器中,都有一个分区链表,对它们的解读方法基本是相同的。

下面将图1-1所示的两个分区表项单独列出来进行分析。

分区表项一。(位移1beH 至1cdH,编号447到462)

第1个分区表项记录的是本分区的有关参数。

将16字节按表1-1的格式分为8段,分别进行说明。

第1、2、4、5段与表中的内容一样,不必重复。

第3段是2字节,表示扇区值和柱面值,因为本书介绍的工具程序使用线性寻址方式,所以对本字段的内容就没有必要详细解读了。

第6段是2字节,也表示扇区值和柱面值。

第7段是一个双字,存储顺序低字节在前,高字节在后,写成十六进制是“0000003fH”,十进制是“63”。

第8段是一个双字,它的值是十六进制为“003ffa86H”,十进制为“4192902”。

分区表项二。(位移1ceH 至1ddH,编号463到478)

第2个分区表项记录的是下一分区的有关参数。

将16字节按表1-1的格式分为8段,各字段的解读方法与第1个分区表项相同,就不重复说明了。

分区链表的字段组成与解读方法与主分区表基本相同,读者可自行分析研究。需要说明的是,最后一个逻辑驱动器的分区链表中,只使用了1个分区表项,其他3个分区表项的字节数据全为0。

硬盘的主引导记录只有一个,存储在硬盘的线性0号扇区上。而硬盘的分区引导记录不止一个,每一个逻辑驱动器都有一个分区引导记录。如果将一个硬盘分为C、D、E、F、G5个逻辑驱动器,就应该有5个分区引导记录,分别存储在各个逻辑驱动器的第1个逻辑扇区中。

分区引导记录主要由4部分组成。

(1)BIOS参数记录块BPB(BIOS Parameter Block)。

(2)磁盘标志记录表。

(3)分区引导记录代码区。

(4)结束标志“55 AA”。

与本书内容相关的是第1和第4部分,对第2和第3部分不进行讨论。

BIOS参数记录块BPB(简称BPB 表)所记录的有关参数,能帮助操作者确定分区的容量大小、文件分配表 FAT 的位置和大小、文件目录表 FDT 的位置。BPB 表的结构与使用的文件系统有关,本节讨论FAT16和FAT32两种文件系统的BPB 表结构。

结束标志“55 AA”是系统识别引导扇区的标识,也是使用工具程序对硬盘扇区进行搜索,用于寻找分区引导记录所在扇区地址的依据。

FAT16文件系统BPB 表从扇区字节位移0bH 开始,用字节编号计算,就是第12字节,BPB 表共占用25字节。

FAT16文件系统BPB 表的结构见表1-2。

表1-2  FAT16文件系统BPB表的结构

下面用“读硬盘扇区数据.EXE”程序将一个逻辑驱动器的引导记录读出来,然后结合表1-2进行分析,程序运行界面如图1-4所示。

图1-4

BPB 表占用的字节数较多,各个字段值所表示的内容也较为复杂。为了便于分析,下面将BPB 表的内容单独列出来。

从第12字节开始,将25字节按表1-2的格式分为12段,分别进行说明。

第1段是1个字,它的值为200H,等于512,说明每个扇区有512字节。

第2段是1字节,值为64,说明每个簇包含64个扇区,则每个簇的字节数是:

64× 512=32768。关于簇的概念,在后面有关章节中再作介绍。

第3段是1个字,值为1,说明有1个保留扇区。

第4段是1字节,值为2,说明有2个FAT 表。

第5段是1个字,值为512,说明有512个根目录登记项数。因为每个根目录登记项固定占用32字节,据此可算出FDT 表总共占用32个扇区。

第6段是1字,在硬盘中设为0。

第7段是1字节,固定为f8H。

第8段是1个字,值为256,说明每个FAT 表占用256个扇区。

第9段是1个字,值为63,说明每个磁道划分成63个扇区。

第10段是1个字,值为255,说明磁头数最大是255,这个数值的含义需要进一步解释。这个参数并不是硬盘的物理磁头数,它是 BIOS磁盘服务程序为了管理大容量硬盘,采用位移变换后形成的值。在CHS扇区寻址方式中,柱面用10位二进制数表示,其最大值为1024。硬盘的柱面数一般都超过了1024,因此BIOS磁盘服务程序采用了减少柱面数,增加磁头数的移位算法。

举例说明一下,假如一个硬盘有8192个柱面和16个磁头。很明显在CHS寻址方式中,无法表示全部柱面数。这时由 BIOS磁盘服务程序将柱面数换算成 8192÷ 8=1024,将磁头数换算成16× 8=128。这样既保证硬盘的容量不变,又能使操作系统或应用程序访问到所有的硬盘扇区。

第11段是1个双字,值为63,说明有63个隐藏扇区。

第12段是1个双字,值为4 192 865,这是逻辑驱动器的总扇区数,但它不包含第11段中的隐藏扇区数。

FAT32文件系统BPB 表也从扇区字节位移0bH 开始,占用53字节。因为FAT16文件系统中的有些磁盘参数在 FAT32 文件系统中已不适用,必须进行扩充。具体做法是将 FAT16文件系统中使用的 25字节仍然保留,适用的数据项继续使用,需要扩充的数据项移到后面的28字节里去。目前这28字节只使用了很少一部分,剩下的字节全为 0,供系统继续扩充时使用。

FAT32文件系统BPB 表的结构见表1-3。

表1-3  FAT32文件系统BPB 表的结构

现在将使用FAT32文件系统的一个逻辑驱动器的引导记录读出来,结合表1-3进行分析。程序运行界面如图1-5所示。

图1-5

为了便于分析,将BPB 表内容分两部分单独列出来,分段进行介绍。

(1)前25字节。

与FAT16的BPB 表相同的数据项不再分析,只分析不同的部分。

第2段的值是8,即每簇有8个扇区。可以看出FAT32的簇比FAT16的簇小得多,这就是FAT32能够节省磁盘空间的原因。因为数据是按簇存储的,即使一个很小的文件也必须至少分配给它一个簇的存储空间,这个簇里没有使用的扇区就不能再分配给其他文件使用了。而FAT16的簇比较大,所以浪费的磁盘空间就多一些。

第3段的值是32,即保留了32个扇区。因为FAT32文件系统的引导记录要占用多个扇区,所以将原来的1个保留扇区增加到32个。

第5段和第8段因需要扩充,所以弃之不用,将有关数据转移到后面的28字节里去。

(2)后28字节。

第1段的参数是每个FAT 表占用的扇区数,值是7994。可以看出FAT32文件系统的簇虽然小了,但FAT 表占用的扇区数却增加了很多。这就是FAT32文件系统的文件检索速度比FAT16文件系统慢的原因。

第3段是根目录起始簇号,值为2。有2个簇被系统占用。

第5段的值是6,说明引导记录占用6个扇区。

FAT 文件系统在管理磁盘上的用户文件时,使用了文件分配表的管理方式。不过系统引导所需要的数据,不在文件分配表的管理范围之内。在这一点上与NTFS文件系统的存储方式是完全不相同的,NTFS文件系统将磁盘上的所有事物都看作文件,不管是用户的还是系统的。

文件分配表在FAT 文件系统中占有非常重要的地位,对文件的所有操作,包括读、写、修改和复制,都要依赖于文件分配表中的有关记录。正因为如此,当初设计者将文件分配表作了两份相同的拷贝存储在磁盘上。

操作系统或应用程序在将数据写入一个磁盘文件时,必须在磁盘上找到可以使用的未用扇区。反过来要将数据从磁盘文件中读出时,也要在磁盘上找到已经储存了相应数据的有关扇区。要查找扇区必须知道扇区的地址,文件分配表FAT 就是记录扇区地址的。

因为硬盘的扇区非常多,如果将每个扇区的地址都记录在文件分配表里,势必造成文件分配表体积庞大,查找时效率将会很低。为解决这个问题,采用了将扇区分组管理的方法。分组的过程称作扇区分簇,是由高级格式化程序在格式化磁盘时完成的。

扇区分簇以后,将每个簇的地址记录到文件分配表FAT 里去。由于一个簇能包含很多扇区,所以文件分配表的体积减小了,查找的速度就提高了。

一个簇能包含多少扇区,是由文件系统和分区的大小决定的,在使用 FAT16 和 FAT32两种文件系统时,分区大小和簇大小以及每簇扇区数的关系见表1-4。

表1-4  分区大小与簇的对应关系

当使用一个新格式化的逻辑驱动器时,文件数据存放的簇号是连续的。使用一段时间以后,由于经常对文件进行删除、拷贝和修改操作,每个文件分配的簇号就不一定是连续的了。为了确保在存取文件时能够检索到所有连续或不连续的扇区地址,文件分配表采用了“簇链”的记录方式。

当需要从磁盘上读取一个文件时,首先从文件目录表中找到该文件的目录登记项。继而从目录登记项的有关字段,查到分配给该文件的第一个簇号,根据第一簇号的内容可以计算出两组数据。

其中一组数据指出了文件在数据区DATA 里的第一簇扇区首地址,从第一簇扇区首地址开始,数据是连续存放的,连续存放多少个扇区由分区格式和分区大小决定,表 1-4 中列出了它们的对应关系。

另外一组数据指出了 FAT 表内簇登记项的地址,如果其值是结束标志“ffffH”(FAT16格式)或“0fffffffH”(FAT32格式),说明文件至此已经结束。如果不是结束标志,则该登记项的值为第二个簇号,据此又可以计算出两组数据,继而确定文件在数据区里第二簇扇区首地址和FAT 表内第二个簇登记项的地址。

继续重复上面的过程,就可以得到文件在DATA 区里的全部数据,以及文件在FAT 表里所有簇登记项的地址。

详细了解文件数据存取的全过程,就可以从遭到破坏、不能启动的硬盘上,利用读取物理硬盘扇区的工具程序把文件数据读出来。

当需要在磁盘上建立一个新文件时,首先顺序检索FAT 表,找到第一个可用簇,可用簇登记项的值为“0000H”(FAT16)或“00000000H”(FAT32)。将该簇作为起始簇,写入文件目录表FDT 的相关登记项的起始簇字段中。然后继续检索后面的可用簇,找到以后将其簇号写入第一个可用簇项内。

按照以上过程进行下去,将满足文件长度所需的簇数全部找到。使每一个簇项的值指向下一个所需簇项,在最后的簇登记项内写入结束标志“ffffH”(FAT16)或“0fffffffH”(FAT32),于是一条能够检索整个文件的“簇链”就形成了。

当需要对文件进行扩展时,先检索FAT 表,找到1可用簇。将簇项的内容置为结束标志,并将文件原来的最后簇项值修改为指向此可用簇。以此类推,直到满足文件的全部扩展要求。

当删除文件时,除了将文件目录表中登记项的第1字节改为e5H,还要把该文件在FAT表的“簇链”中所对应的簇项全部清零,这些被清零的簇项又可以供其他文件使用。不过在删除文件的操作结束以后,目录登记项的其他字段仍然保存完好,只是文件名的第1字节变成了e5H,并且文件存储在扇区里的所有数据仍然存在。这时只要FAT 表中被清零的簇项没有被新文件使用,就可以运行相关软件恢复被删除的文件。

FAT 表记录了磁盘文件对磁盘使用情况的信息,其中包含所有未分配的、已分配的或标记为坏的盘簇的信息。

FAT 表只记录磁盘文件对磁盘的占用信息,对于系统保留的控制信息并不由FAT 表中的盘簇表示。这些保留信息包括引导扇区、分区表、FAT 表本身占用的扇区以及文件目录表FDT占用的扇区。

FAT 表在磁盘文件系统中的地位是非常重要的,为了使磁盘文件的操作安全可靠,文件系统的设计者们制订了两个内容相同的FAT 表。虽然当第一个FAT 表出错时,操作系统并不利用第二个FAT 表去修复它,但技术人员可以使用有关的软件,用第二个FAT 表去修复它。

当硬盘的系统控制信息遭到轻微的破坏时,可以通过各种方法去修复它。如上面所讲的四部分系统保留信息,在某一部分出现错误时,可以采用从其他计算机上移植的方法,或是采用手工编制扇区数据的方法进行修复。

但是当这些控制信息严重损坏,譬如分区表链和分区引导记录严重损坏时,上述方法就无能为力了。一般来说,在这种情况下只有重新分区、格式化,硬盘上的所有数据也就全部丢失了。

硬盘的系统控制信息遭到破坏时,一般情况下FAT 表被破坏的可能性比较小。特别是第2个FAT 表一般能够保存完好,因为第2个FAT 表很少受到应用程序的访问。这时如果使用物理硬盘扇区的读写技术,就有可能从硬盘上恢复出重要数据来。这种操作的对象是针对整个硬盘,而不用考虑硬盘的分区情况,也不用考虑硬盘上安装的是什么操作系统。

查找FAT 表首扇区地址的方法很简单,可以根据FAT 表的特征标记,使用查找扇区特征的工具程序进行查找。不管是 FAT16 文件系统还是 FAT32 文件系统,每个 FAT 表的首扇区里前两字节都是F8 FF。

操作系统为了管理磁盘上的目录和文件,在特定的扇区上建立了一个文件目录表FDT,它是由高级格式化程序FORM AT 在格式化磁盘时建立的。

FAT16分区格式的FDT 表占用固定的32个扇区,扇区地址紧跟在第2个FAT 表之后。FAT32分区格式没有固定的FDT 表,在第2个FAT 表之后就是数据区DATA。目录名和文件名也作为数据对待,存放在数据区内。

两种分区格式都使用一个32字节长的“目录登记项”,来说明目录或文件的有关特性。FAT16 分区的目录登记项存放在 FDT 表里,FAT32 分区的目录登记项存放在数据区里。表1-5列出了目录登记项的各字段内容。

表1-5  目录登记项各字段值的内容

表1-5 将一个目录登记项的32字节划分为8个字段,下面对其中比较重要的字段进行分析。

第1段是文件名,占用8字节。如果一个文件名不足8字节,则不足的部分填充空格,文件名与扩展名中间的圆点忽略。

第2段是文件扩展名,同样遵守上述规定,不过扩展名不足3个字符的情况较少。

第4段对FAT16和FAT32两种文件系统有所不同,FAT32因为需要管理大于16位的簇,所以将簇的高16位存储在这个字段中,低16位的存储位置与FAT16相同。

第7段是文件的起始簇号,FAT 文件系统一系列的寻址过程都是由此开始的。

第8段用一个双字记录文件的字节长度。

数据区DATA 的所有扇区都划分成以簇为单位的逻辑结构,每一个簇在FAT 表里都有一个簇登记项与之对应。

在对硬盘的引导故障进行修复时,一般只访问主引导记录、分区表和分区引导记录,极个别的情况下可能访问到FAT 表和FDT 表,而DATA 区是访问不到的。

FAT16文件系统的DATA 区紧接在FDT 表之后。FAT32文件系统因为没有FDT 表,所以紧接在第二个FAT 表之后的就是DATA 区。

FAT16文件系统由于能被目前所有的操作系统所识别,所以在硬盘分区时使用得极为普遍。特别是安装多操作系统的硬盘,有时必须在主分区(C 盘)使用FAT16文件系统。如果使用不能被某个操作系统识别的文件系统,则该操作系统就不能顺利安装。

现在的硬盘越来越大,硬盘上安装的应用软件越来越多,而适合这些应用软件运行的操作系统不尽相同,特别是编程人员使用的计算机,一般都安装两三个操作系统。用于多操作系统引导的有关文件,必须存储在 FAT16格式的分区中,才能被不同的操作系统加载使用。

所以在当前主流文件系统中,尽管FAT16存在着许多缺点,但仍然得到了广泛的使用。

FAT16文件系统的磁盘扇区是这样分配的。

在使用FAT16文件系统的分区内,第一个扇区是分区表(C盘)和分区链表(D盘和以后的盘),其中C盘的第一个扇区还包含主引导记录。严格地讲,分区表所在的扇区不属于任何分区,但是从物理空间上它们又靠得很近,为了今后在计算扇区编号时比较容易找到规律,暂且将分区表这样划分。

之后是系统隐藏扇区,包括含有分区表或分区链表在内的扇区,一共占用63个扇区,实际上就是一个磁道所包含的扇区。

系统隐藏扇区之后是分区引导记录,占用一个扇区。

再往后是两份相同的文件分配表FAT1和FAT2,每份 FAT 表占用多少个扇区,由分区的大小而定,分区大所占用的扇区就多,具体数值可从分区引导记录的BPB 表中查得,查找方法可参考第1章的内容。

紧接FAT 表之后是文件目录表FDT,固定占用32个扇区,每个扇区可容纳16个登记项,每个登记项的长度是32字节。

FDT 表之后是数据区DATA,数据区内的扇区是按照簇来管理的,簇的大小由分区大小而定,它们之间的关系可参考第1章的内容。

扇区分配的情况见表2-1。

表2-1  FAT16文件系统的扇区分配

详细了解文件系统的扇区分配是排除硬盘逻辑故障的重要基础。下面以作者使用的硬盘为例,介绍FAT16文件系统的扇区地址的寻址计算方法。

在进行扇区寻址和计算的过程中,需要用到后面《工具篇》中介绍的一些工具程序,本章先使用这些程序的执行结果,程序的详细运行方法在后面的章节中再作介绍。

作者使用的计算机上挂接了两块硬盘,为了在以后进行扇区扫描时节省时间,特意选用了两块小容量的硬盘。一块容量是6.2GB,接在第一IDE 接口上,硬盘编号是“0”。另一 块容量是40GB,接在第二IDE 接口上,硬盘编号是“1”。

现在将1号硬盘作为主要操作对象,该硬盘划分成C、D、E、F、G、H、I七个逻辑驱动器,将0号硬盘作为辅助操作对象。1号硬盘的前五个逻辑驱动器的容量都是2GB,除了F 盘使用NTFS文件系统,其余的C、D、E、G 盘都使用FAT16文件系统。后两个逻辑驱动器使用FAT32文件系统,H 盘的容量是10GB,I盘的容量是18GB。

下面以E 盘为例,介绍FAT16文件系统的扇区分配。

运行“备份系统扇区数据.EXE”程序,就可以将硬盘上所有的逻辑驱动器的系统扇区数据,备份到文件中进行保存。每个逻辑驱动器备份两个扇区,其中一个是存储分区表或分区链表的扇区,另一个是存储分区引导记录的扇区。当分区引导记录占用多个扇区时,如FAT32和NTFS文件系统,只备份第一个扇区的数据。

程序运行以后,除了每个逻辑驱动器建立两个备份文件之外,还建立了一个扇区号的备查文件。目的是当系统引导出现故障时,可以将备份出来的数据,再按照原来的扇区号写回去,就可以修复硬盘。

扇区号备查文件的内容如下。

Boot sector number:

1: 0

2: 63

3: 4192965

4: 4193028

5: 8385930

6: 8385993

7: 12578895

8: 12578958

9: 16771860

10: 16771923

11: 20964825

12: 20964888

13: 41447700

14: 41447763

根据扇区号备查文件中的记录,可以读出E 盘存储分区链表的扇区号是“8385930”。再运行“查看硬盘扇区数据.EXE”程序,将“8385930”号扇区的数据显示在对话框中,程序的运行结果如图2-1所示。

图2-1

因为E 盘不是第一个逻辑驱动器,所以在图2-1所示的对话框显示的数据中,没有主引导记录,只有分区链表。

找到字节位移1c6H 开始的4字节,也就是字节编号455-458,扇区数据中的字节值是“3F00 00 00”。这是一个双字,由于存储时的顺序是低字节在前,高字节在后,因此这个双字写成十六进制的形式是“0000003fH”,换算成十进制是“63”。

这个数值是分区前的扇区数,也可以看作是系统保留的扇区数。文件系统在检索文件的过程中,需要进行扇区号计算时,是从分区引导记录存储的扇区号开始的,系统保留扇区不计算在内。

在这63个系统保留扇区中,只有最前面的扇区写有数据,其余62个扇区空置不用。系统保留扇区之后,就是存储分区引导记录的扇区。用8385930加上63,就得到分区引导记录的扇区号是“8385993”。

运行“查看硬盘扇区数据.EXE”程序,将“8385993”号扇区的数据显示在对话框中,程序的运行结果如图2-2所示。

在图2-2所示的对话框显示的数据中,与当前讨论的问题相关的是BPB 表,其他的内容不在本书讨论的范围。

解读E 盘BPB 表的内容,可以参考第1章中的表1-2来进行。为了简化叙述的过程,在描述扇区中某一个字节的位置时,只使用字节编号,暂时就不再使用字节位移的概念了。

现在找到第23字节开始的两字节,存储在扇区中的数据是“0001”,也就是“0100H”,十进制是“256”。这一个字段的值,记录的是每个FAT 表占用的扇区数。

图2-2

先读出第一FAT表的第一个扇区,因为FAT16文件系统的分区引导记录只占用1个扇区,而紧接在分区引导记录之后的就是FAT 表,所以第一FAT 表的首扇区号是“8385993”加上1,即“8385994”。

运行“查看硬盘扇区数据.EXE”程序,将“8385994”号扇区的数据显示在对话框中,程序的运行结果如图2-3所示。

图2-3

在第1章中曾经介绍过,FAT16文件系统和FAT32文件系统有一个共同的特点,它们的FAT 表的首扇区的前两字节是F8 FF,图2-3所示的对话框显示的数据符合这个特征。

用第一FAT表的首扇区号加上每个FAT 表占用的扇区数,就是第二FAT 表的首扇区号。具体计算方法是8385994+256=8386250。

运行“查看硬盘扇区数据.EXE”程序,将“8386250”号扇区的数据显示在对话框中,程序的运行结果如图2-4所示。

图2-4

将图2-4所示的对话框显示的数据与图2-3所示数据比较一下,可以发现它们完全相同。因此当第一 FAT 表意外损坏时,可以将第二 FAT 表的数据拷贝到第一 FAT 表相对应的扇区中去,覆盖损坏的数据,就可以修复文件系统。

接下来继续计算文件目录表FDT 的扇区地址。将第二FAT 表的首扇区号,加上每个FAT表占用的扇区数,就是FDT 的首扇区号,具体计算方法是8386250+256=8386506。

运行“查看硬盘扇区数据.EXE”程序,将“8386506”号扇区的数据显示在对话框中。可是FDT 表的首扇区不象FAT 表的首扇区那样,有一个“F8FF”的判断标志,如何验证显示的就是首扇区呢?为了消除这个疑问,可以在显示了“8386506”号扇区的数据以后,再打开一个对话框,显示的是其前一个扇区,即“8386505”号扇区的数据。通过两个对话框数据的比较,就能验证这个问题,程序的运行结果如图2-5所示。

如图2-5所示,左边的对话框显示的是“8386505”号扇区的数据,右边的对话框显示的是“8386506”号扇区的数据。因为“8386505”号扇区属于第二FAT 表的最后一个扇区,而一般情况下FAT 表不会被写满,所以该扇区的数据为0。由此可以验证出,“8386506”号扇区确是FDT 表的首扇区。

图2-5

如果将 “8386506”号扇区的数据用字符方式显示出来,就能观察到存储在E 盘的部分目录或文件名。在WINDOWS2000的32位图形界面下,有些特殊字符不容易显示,使用辅助的16位程序,显示效果要好一些。打开WINDOWS2000的“命令提示符”窗口,在命令行运行程序READSF.EXE,显示效果如图2-6所示。

图2-6

现在将图2-6的截图画面解释一下。执行程序时在命令行输入“readsf /rc”,readsf是可执行文件名,/rc 是命令行开关,设定程序用字符方式显示文件内容。回车后程序显示提示行“Enter file name :”,输入需要显示数据的文件名“fdtfile”,该文件中备份的是“8386506”号扇区的数据,是由“查看硬盘扇区数据.EXE”程序建立的。

在显示的字符内容中,上面几行的第一个字符都是“σ”,这个ASCII字符的值是e5H,表示原来的文件已被删除。下面有几行显示出目前存储的目录或文件名,如在第11行显示的“NTCPP”就是一个目录名。

最后计算数据区DATA 的首扇区地址。因为FAT16文件系统的FDT 表占用固定的32个扇区,所以用FDT 表的首扇区号加上32,就是数据区的首扇区号,计算结果是“8386538”。为了验证这种推导是否正确,仍然采用前面的方法,将其前一个扇区的数据并列显示在对话框中加以比较。程序的运行界面如图2-7所示。

图2-7

如图2-7所示,左边的对话框显示的是“8386537”号扇区的数据,右边的对话框显示的是“8386538”号扇区的数据。因为“8386537”号扇区属于FDT 表的最后一个扇区,而一般情况下FDT 表不会被写满,所以该扇区的数据为0。由此可以验证,“8386538”号扇区确实是数据区DATA 的首扇区。

FAT32 文件系统可以认为是扩展了的 FAT16 文件系统,因为它的数据结构基本上与FAT16 文件系统相同。如 FAT 表的结构是相同的,只不过簇登记项使用了 32 位的标识符;文件目录登记项的字段记录基本是一样的,只不过没有放在固定的FDT 表中,而是存储在数据区中。这种扩充是计算机技术飞速发展的需要,其中最主要的原因是硬盘容量的快速增长。

FAT32文件系统的扇区分配与FAT16文件系统相比较,有一些地方不相同,主要表现在以下几个方面。

(1)FAT32文件系统使用32位簇标识符,但保留了高4位,实际上只有28位簇标识符,可以访问228个簇。而FAT16文件系统使用16位簇标识符,只能访问216个簇。

(2)由于每个簇占用的扇区数的减少,使得簇的数量大大增加,因此每个FAT 表占用的扇区数也大大增加了。

(3)FAT32文件系统没有固定的FDT 表,将文件和目录登记项都作为数据对待,与其他数据一样存储在数据区DATA 中。

(4)分区引导记录占用6个扇区,并且有两个相同的拷贝,共占用12个扇区。FAT 表之前的保留扇区数增加到32个。

FAT32文件系统的扇区分配如表2-2所示。

表2-2  FAT32文件系统的扇区分配

现在以作者的1号硬盘中的H 盘为例,说明对FAT32文件系统各部分扇区的寻址计算方法。

根据2.2节中的扇区号备查文件记录,可以读出H 盘存储分区链表的扇区号。因为每一个逻辑驱动器备份两个扇区数据,所以与H 盘对应的扇区应该是第11和第12个记录。第11个记录是分区链表扇区号,读出其值是“20964825”,第12个记录是分区引导记录的首扇区号。

运行“查看硬盘扇区数据.EXE”程序,将“20964825”号扇区的数据显示在对话框中,程序的运行结果如图2-8所示。

图2-8

因为H 盘不是第一个逻辑驱动器,所以在图2-8所示对话框显示的数据中,没有主引导记录,只有分区链表。

找到字节位移1c6H 开始的4字节,也就是字节编号455-458,扇区数据中的字节值是“3F00 00 00”,换算成十进制是“63”。

这个数值是系统隐藏的扇区数,用 20964825 加上 63,就得到分区引导记录的首扇区号是“20964888”。

运行“查看硬盘扇区数据.EXE”程序,将“20964888”号扇区的数据显示在对话框中,程序的运行结果如图2-9所示。

图2-9

FAT32文件系统的分区引导记录有两个相同的拷贝,每个拷贝占用6个扇区。所以将扇区号20964888加上6,就得到第二份拷贝的首扇区号是“20964894”。

运行“查看硬盘扇区数据.EXE”程序,将“20964894”号扇区的数据显示在对话框中,程序的运行结果如图2-10所示。

将图 2-9 所示的对话框与图 2-10 所示的对话框的内容比较一下,可以发现它们完全一样。

现在计算第一FAT 表的首扇区地址。前面曾讲过,FAT32文件系统的分区引导记录一共保留了32个扇区。所以用分区引导记录的首扇区号加上32,就得到第一FAT 表的首扇区地址,计算方法是20964888+32=20964920。

图2-10

运行“查看硬盘扇区数据.EXE”程序,将“20964920”号扇区的数据显示在对话框中,程序的运行结果如图2-11所示。

图2-11

在图2-11所示的对话框显示的数据中,前两个字节的值是“F8 FF”,这是FAT 表的首扇区标志,不管是FAT16文件系统,还是FAT32文件系统,都具有这种扇区特征。

要继续计算第二FAT 表的首扇区地址,首先必须根据某一个字段值计算出每个FAT 表占用的扇区数。

参考第1章中表1-3的内容,知道在FAT32文件系统的BPB 表中,每个FAT 表占用的扇区数,记录在分区引导记录扇区中的第37-40的4字节中。

在图2-9或图2-10中,读出该字段的值是“0D 27 00 00”,十六进制是“270dH”,十进制是“9997”。于是就得到第二FAT 表首扇区地址的计算方法是20964920+9997=20974917。

运行“查看硬盘扇区数据.EXE”程序,将“20974917”号扇区的数据显示在对话框中,程序的运行结果如图2-12所示。

图2-12

将图 2-11 所示的对话框与图 2-12 所示的对话框中显示的数据比较一下,可以发现它们完全相同。

因为FAT32文件系统没有FDT 表,所以找到第二FAT 表以后,最后查找的就是数据区DATA 了。用第二FAT 表的首扇区号,加上每个FAT 表占用的扇区数,就得到数据区的首扇区地址。计算方法是20974917+9997=20984914。

运行“查看硬盘扇区数据.EXE”程序,将“20984914”号扇区的数据显示在对话框中。为了验证该扇区是DATA 的首扇区,仍然采用以前的方法,将其前一个扇区的数据并列显示出来,进行比较判断。程序的运行结果如图2-13所示。

如图2-13所示,左边对话框显示的是前一个扇区的数据,全部字节都是0,由此可以验证计算结果是正确的。

图2-13

前面曾讲过,FAT32文件系统将文件目录登记项作为数据对待,也存储在数据区中,存储格式与 FAT16 基本相同。现在将图 2-13 右边对话框中的数据,用字符方式显示出来验证一下。为了使字符显示的效果好一些,可以运行 16 位程序 READSF.EXE,程序运行后的显示界面如图2-14所示。

图2-14

相关图书

识数寻踪:WinHex应用与数据恢复开发秘籍
识数寻踪:WinHex应用与数据恢复开发秘籍
数据修复技术与典型实例实战详解
数据修复技术与典型实例实战详解

相关文章

相关课程