搜索
您的当前位置:首页正文

分区体系与文件系统

来源:星星旅游
慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

分区体系概述:

因使用环境不同,分区的管理方式会有所不同,也因此而出现了各种不同的分区体系,如DOS分区体系、Apple分区体系、BSD分区体系等。

分区:

1、DOS(Disk Operating System)分区

Microsoft将使用DOS分区体系的硬盘称为“主引导记录(Master Boot Recorder, MBR)”磁盘,这是相对于使用“全局ID分区表(GUID Partition Table, GPT)”磁盘而言的。主要特性:

①最多支持4个主分区(一般为3个主分区+1个扩展分区,扩展分区中可包含无限制的逻辑分区)

②单卷容量最大支持2TB(TeraBytes)DOS分区体系硬盘布局:MBR主文件系统分区1主文件系统分区2主文件系统分区3主扩展分区二级文件系统分区1二级扩展分区1…二级文件系统分区2二级扩展分区2……图1:DOS分区图示

⑴MBR(Master Boot Recorder,主引导记录)

当计算机启动并完成自检后,首先会寻找磁盘的MBR并读取其中的引导记录,然后将系统控制器交给它。

MBR由446字节的引导代码、64字节的主分区表及2个字节的签名值“55AA”组成。

字节偏移(16进制)00——1BD1BE——1CD1CE——1DD1DE——2ED1EE——1FD

字节数44616161616

描述引导代码分区表项1分区表项2分区表项3分区表项4

1

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

1FE——1FF2

签名值(55AA)

引导代码的作用:启动分区、多系统引导分区表项:

字节偏移(16进制)字节数描述00——001可引导标志(0x80:可引导,0x00:不可引导)01——0304——0405——0708——0B0C——0F

31344

分区起始CHS地址分区类型

分区结束CHS地址

分区起始LBA地址(Little-endian顺序)分区大小扇区数(Little-endian顺序)

ps: CHS(Cylinder/Head/Sector,柱面/磁头/扇区),LBA(Logic Block Address,逻辑区块地址)⑵EBR(Extended Boot Recorder,扩展引导记录)

扩展分区是为了解决4个主分区表项无法满足使用需要的问题而提出的。EBR扇区前446字节为空,有4个分区表项(只使用2个),签名值\"55AA\"2、GPT(GUID Partition Table)分区

GPT(GUID Partition Table)分区体系是Windows Server 2003中的一种新型磁盘架构,是一种基于计算机可扩展固件接口(EFI)使用的磁盘分区架构。

与主引导记录(MBR)分区相比,GPT具有更多优点:

⑴、允许磁盘有多大128个分区(MBR磁盘最多只能有4个主分区,或者3个主分区加一个扩展分区和无限制的逻辑驱动器;Apple分区数无限制);

⑵、支持高达18千兆字节(EB, exabytes)的卷大小(MBR、Apple磁盘支持最大为2TB);

⑶、允许将主磁盘分区表和备份磁盘分区表用于冗余;⑷、支持唯一的磁盘和分区ID(GUID);⑸、性能更加稳定GPT分区体系硬盘布局:0号扇区(保护MBR)1号扇区(EFI信息)2-33号扇区(分区表)GPT分区部分备份Microsoft保留分区基本数据分区…剩余扇区图2:GPT分区图示

GPT磁盘可以分为两大部分:保护MBR和EFI部分。⑴保护MBR(0号扇区)

在这个扇区中包含一个DOS分区表,分区表内只有一个表项,这个表项描述了一个类型值为0xEE的分区,大小为整个磁盘(FFFFFFFF)。这个分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不是图对其进行格式化等操作,多以该扇区被称为“保护MBR”,实际上EFI根本不使用这个分区表。

GPT磁盘的0号扇区保留分区表和“55AA”标志,但只使用一个分区表项,描述一个大

2

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

小为整个磁盘、分区类型为0xEE的分区。⑵EFI信息区域(GPT头)

EFI信息区起始于磁盘的1号扇区,通常只占用这个一个扇区。GPT磁盘创建后,有GPT头定义分区表的位置和大小。Windows限定分区表项为128个。GPT头还包含头和分区表的校验和,这样就可以及时发现错误或者改变。

EFI(Extensible

Firmware

Interface,可扩展固件接口)是Intel为全新类型的pc固件的体系结构、接口和服务提出的建议标准。它是计算机固件、硬件和操作系统之间的一种新型接口。EFI对于基于Itanium计算机的用途与基于x86计算机中的BIOS相同,但EFI已扩展为具有以下功能:

①以一致的方式启动任何兼容的操作系统;

② 一种简易的方式为新的可启动设备添加EFI驱动程序,而不需要更新计算机固件。EFI信息扇区结构:相对字节偏移(16进制)00——0708——0B0C——0F10——1314——1718——1F20——2728——2F30——3738——4748——4F50——5354——5758——5B5C——1FF

字节数844448888168444366

说明

签名(ASCII码“EFI PART”)版本

EFI信息大小字节数

EFI信息(对于备份则为备份EFI信息)CRC校验和保留

当前EFI信息的LBA扇区号备份EFI信息的LBA扇区号GPT分区区域起始LBAGPT分区区域结束LBA磁盘GUID

GPT分区表起始LBA分区表项数

每分区表项占用字节数分区表CRC校验和保留

⑶分区表区域

GPT磁盘的2―33号扇区被系统保留用作存放GPT磁盘的分区表,以描述GPT区域内的各个分区。分区表共占用32个扇区,每个分区表项占用128个字节,32个扇区共可以存放128个分区表项 (32*512/128=128) 。

分区表中每个表项由起始和结束地址、类型值、名字、属性标志、和GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。

GPT分区表项数据结构:相对字节偏移(16进制)00——0F10——1F20——2728——2F30——3738——7F3、Apple分区

3

Created And Edited by Grant Zhang 2013.12

字节数161688872

说明

分区类型GUID分区唯一GUID分区起始LBA分区结束LBA分区属性

分区名的Unicode码

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

Apple分区是苹果机使用的一种分区体系,Apple磁盘并不像MBR磁盘那样在引导扇区中建立分区表而是单独使用一部分扇区存储分区表项(通常起始于整个磁盘的第二个扇区),而且这个分区表区域也有一个分区表项指向它,描述它的起始位置及大小信息,所以我们把分区表区域成为“分区表分区”。

Apple分区体系中,分区表不只描述文件系统分区,对分区表本身所处的区域也使用一个分区表项进行描述,甚至磁盘中的空闲空间也会有分区表项对其进行描述。

在Apple磁盘中,并不是所有的分区都是有文件系统的。只有用于存储用户数据的分区才会建立相应的文件系统。苹果机使用单独的区域存放硬件驱动,这部分区域不会建立文件系统,但会在分区表中对其位置及大小进行描述。主要特性:

①Apple分区体系没有分区数量限制,它的分区表可以描述任意个分区。(其实最多描述h'FFFFFFFF个分区)

②在Apple分区体系中除0号扇区外,其它所有的区域都有分区表项指向它,包括分区表分区本身以及磁盘尾部的空闲空间。Apple分区体系磁盘布局:

0号扇区分区表分区…………空闲空间图3:Apple分区图示

⑴Apple分区0号扇区

0x00——0x01:2个字节,这两个字节一定为0x4552(ER),可理解为签名。0x02——0x03:2个字节,每扇区字节数,一般为h'512

0x04——0x07:4个字节,本磁盘扇区数。(可知最大支持容量为2T)

⑵分区表项数据结构

Apple用一个专门的分区存储分区表项,这个分区就是起始于1号扇区的分区表分区。分区表分区是磁盘的第一个分区,有一系列大小为512byte的分区表项组成,每个分区表项描述一个分区,包括分区的起始扇区号、分区大小、分区类型以及卷名等信息。(除0号扇区外,其余的所有扇区一定属于某个分区表项所描述的空间。如第一个分区表项就是描述分区表自身的分区表项,第一个分区表项位于磁盘的1号扇区)

Apple分区表项数据结构:相对字节偏移(16进制)00——0102——0304——0708——0B0C——0F10——2F30——4F50——5354——5758——5B5C——5F

字节数2244432324444

说明

签名(0x504D)保留总的分区个数本分区起始扇区号本分区大小扇区数分区名(ASCII码)分区类型(ASCII码)本分区内数据起始扇区号本分区内数据区大小扇区数分区状态

引导代码起始扇区号

4

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

60——6364——6768——6B6C——6F70——7374——7778——8788——1FF

44444416376

引导代码大小扇区数引导装载程序地址保留

引导代码目录指针保留

引导代码校验和处理器类型保留

4、BSD分区

BSD分区体系是一些BDS Unix服务器,如FreeBSD、OpenBSD、NetBSD。并不是某个特定的格式!5、Sun Solaris分区

Sun Microsystem公司的Solaris操作系统可以应用于大型服务器和桌面系统。

5

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

文件系统:

1、FAT文件系统

FAT(File

Allocation

Table,文件分配表)文件系统是Windows使用的一种文件系统,它的发展经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统特性:

①采用“簇”作为数据单元。所有的簇从2开始编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。

②在FAT文件系统中,文件系统的数据记录在“引导扇区”中。引导扇区位于整个文件系统的0号扇区,是文件系统隐藏扇区(保留区)的一部分,我们称其为DBR(DOS Boot Recorder, DOS引导记录)扇区,DBR中记录着文件系统在磁盘上的起始位置、大小、FAT表个数及大小等相关信息。

③在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。(因为只有存储用户数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有的簇都位于数据区内。其它文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理)文件系统的起始扇区为0号扇区。

④FAT文件系统中两种重要的数据结构:文件分配表和目录项

文件和文件夹内容存储在簇中,如果一个文件或一个文件夹需要多于一个簇的空间,则用FAT表来描述如何找到另外一个簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统的主要区别在于FAT项大小的不同。

FAT文件系统的每个文件和文件夹都被分配一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其它一些元数据。

元数据:任何文件或目录,都会有一个名字,我们将其统称为“文件名”。除文件名外,文件或目录还会有其它一些描述信息,如大小、时间信息等,我们将这些描述信息统称为文件或目录的元数据。FAT文件系统的整体布局:保留区FAT1FAT2数据区图4:FAT32文件系统结构图示

保留区中包含DBR等信息。

FAT1和FAT2紧跟在保留区后,FAT2紧跟在FAT1后。FAT2后面即为数据区的起始位置。数据区被划分为一个个的“簇”,用于存储用户数据。1.1、FAT32

⑴、引导扇区

引导扇区(DBR扇区)是FAT32文件系统的第一个扇区,包含以下基本信息:每扇区字节数、每簇扇区数、保留扇区数、FAT表个数、文件系统大小(扇区数)、每FAT表大小(扇区数)、根目录起始簇号、其它附加信息。

①通过每个FAT表的大小扇区数乘以FAT表的个数就可以得到FAT区域的大小;

②通过保留扇区数和FAT区域的大小就可以得到数据区的起始位置,也就得到了文件系统的第一簇的位置;

③由根目录的簇号和第一簇的位置就可以得到根目录的位置;

6

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

④引导扇区中包含8个字符的类型标识,内容为“FAT32”、“FAT16”、“FAT12”。FAT32引导扇区结构:字节偏移(16进制)00——0203——0A0B——0C0D——0D0E——0F10——1011——1213——1415——1516——1718——191A——1B1C——1F20——2324——2728——292A——2B2C——2F30——3132——3334——3F40——4041——4142——4243——4647——5152——595A——1FD1FE——1FF字节数382121221222444224221211141184102含义汇编指令,跳转到引导代码处文件系统标识(ASCII码)每扇区字节数(一般为0x200)每簇扇区数(2的整数次幂,最大不超过64)保留扇区数FAT表个数,通常为2根目录最多可容纳目录项数,FAT32不使用此处,置0扇区总数(小于32M时使用此处)介质描述符每个FAT表的大小扇区数,FAT32不适用此处,置0每磁道扇区数磁头数分区前已用扇区数(隐藏扇区数)指DBR扇区相对于磁盘0号扇区的扇区偏移文件系统扇区总数每个FAT表大小扇区数(FAT32使用此处,FAT12/16不使用)标记,确定FAT表的工作方式版本号根目录起始簇号,通常为2号簇FSINFO所在扇区号,通常为1号扇区备份引导扇区的位置,通常为6号扇区未使用BIOS Int 13H设备号未使用扩展引导标志卷序列号卷标(ASCII码),建立文件系统时用户指定文件系统格式(ASCII码)未使用签名值(“55AA”)备份机制:

0号扇区——DBR; 6号扇区——DBR备份

1号扇区——FSINFO;7号扇区——FSINFO备份2号扇区—— 8号扇区——2号扇区备份⑵、FSINFO信息扇区

FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一个可用簇的簇号等信息,以供操作系统作为参考。

FSINFO信息扇区一般位于文件系统的1号扇区,结构如下:字节偏移(16进制)00——03

字节数4

含义

扩展引导标志(52526141)

7

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

04——1E31E4——1E71E8——1EB1EC——1EF1F0——1FD1EE——1EF

480444142

未使用

FSINFO签名(72724161)空闲簇数下一可用簇号未使用

“55AA”标志

⑶FAT32的FAT表

位于保留区后的是FAT区,由两个完全相同的FAT(File Allocation Table,文件分配表)表组成,FAT文件系统的名字也是因此而来。

FAT表特性:

①FAT32中每个簇的簇地址,使用32bit(4个字节)记录在FAT表中。FAT表中所有字节位置以4个字节为单位进行划分,并对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。我们称FAT中的这些地址为FAT表项,FAT表项中记录的值成为FAT表项值。

②当文件系统被创建(格式化操作)时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统时也会创建根目录,也就是为根目录分配一个簇的空间,通常为2号簇,所以2号簇所对应的2号FAT表项也会被写入一个结束标记(0x0F FFFFFF)。

③如果某个簇未被分配使用,它所对应的FAT表项内的FAT表项值用0进行填充,表示该FAT表项所对应的簇未被分配使用。

④当某个簇已经被分配使用时,则它对应的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记(0x0F FFFFFF)。

⑤如果某个簇存在坏扇区,则整个簇会用FAT表项值0x0FFFFFF7标记为坏簇并不再使用,这个坏簇标记就记录在它所对应的FAT表项中。

⑥由于簇号起始于2,所有FAT表的0号表项与1号表项不与任何簇对应。FAT32的0号表项值总是“F8FFFF0F”。

⑦新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用簇的情况。

⑧对文件或目录进行删除操作时,它们所对应的FAT表项将会被清空,设置为0以表示其所对应的簇处于未分配状态。⑷FAT32的数据区

根目录:

虽然原则上FAT32允许根目录位于数据区中的任何位置,但通常情况下它都是位于2号簇。也就是说,根目录大多数情况下会位于数据区的起始处。

根目录在文件系统建立时即已被创建,其目的就是存储子目录(也称为文件夹)或文件的目录项。每个目录项的大小为32个字节。

定位根目录:

在FAT32文件系统中根目录大小为1个簇。

数据区起始扇区号=保留扇区数+每个FAT表大小扇区数×FAT表个数

某簇的起始扇区号=保留扇区数+每个FAT表大小扇区数×FAT表个数+(该簇簇号-2)×每簇扇区数

8

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

1.2、FAT12/16

FAT12因每个FAT项大小为12bit而得名,是早期的软盘所使用的一种文件系统,目前已基本不再使用。

FAT16的每个FAT项则为16bit,可支持的最大容量为2GB,曾一度为容量较小的U盘的主要文件系统格式。

FAT12和FAT16文件系统的主要布局是相同的,所不同的只是它们所使用不同大小的FAT项而已。它们与FAT32文件系统最大的区别有两点:一是FAT项大小不同;二是对根目录的管理不同。FAT32的根目录虽然通常位于2号簇,但理论上FAT32允许它位于数据区中的任何簇位置的。但FAT12/16则将根目录固定在数据区的开始处,且不使用簇对其进行管理。它的大小用“根目录下可建立的最多目录项数”记录在DBR中,根目录之后的数据区才是2号簇的起始处。

FAT12/16文件系统的整体布局:保留区FAT1FAT2根目录数据区图5:FAT12/16文件系统结构图示

FAT12/16的DBR扇区数据结构:字节偏移(16进制)00——0203——0A0B——0C0D——0D0E——0F10——1011——1213——1415——1516——1718——191A——1B1C——1F20——2324——2425——2526——2627——2A2B——3536——3D3F——1FD字节数382121221222441124118448含义汇编指令,跳转到引导代码处文件系统标识(ASCII码)每扇区字节数(一般为0x200)每簇扇区数(2的整数次幂,最大不超过64)保留扇区数,FAT12一般为1FAT表个数,通常为2根目录最多可容纳目录项数,通常为512扇区总数(小于32M时使用此处)介质描述符每个FAT表的大小扇区数,FAT32不适用此处,置0每磁道扇区数磁头数分区前已用扇区数(隐藏扇区数)指DBR扇区相对于磁盘0号扇区的扇区偏移文件系统扇区总数BIOS Int 13H设备号未使用扩展引导标志卷序列号卷标(ASCII码),建立文件系统时用户指定ASCII码文件系统类型,标准值包括FAT、FAT12、FAT16未使用9

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

1FE——1FF2

签名值(“55AA”)

由于FAT12/16的保留扇区通常为1,所以FAT1直接跟在DBR扇区后面,也就是起始于1号扇区。

⑴FAT12的FAT表

FAT12的每个FAT项实用12bit,也就是说2个FAT项占用3个字节。FAT12的FAT表,前三个字节为标志字节“F0FFFF”。

FAT12实用FAT表项值0xFF7作为坏簇标记,使用0xFFF作为文件结束标记。⑵FAT16的FAT表

FAT16的FAT表以16bit为一个FAT项,FAT16使用FAT表项值0xFFF7作为坏簇标记,使用0xFFFF作为文件结束的标记。FAT12/16的根目录:

FAT12/16的根目录与FAT32的根目录从数据结构上看没有任何区别,只是位置固定起始位于FAT2之后的扇区,大小在建立文件系统时即已确定,在文件系统存续期间不可更改。它的位置大小在DBR中给出。

根目录起始=保留扇区数+每个FAT表大小扇区数×FAT表个数2号簇起始扇区=根目录起始扇区+根目录大小扇区数1.3、FAT64(exFAT)

FAT64又称为exFAT,是后来推出的一种支持大容量磁盘的FAT文件系统格式。1.4、在数据拷贝中的FAT文件系统分析

我们不需要关注文件在FAT表中的“表链”,只需要知道哪些簇有数据,哪些簇没有数据。由于FAT表项和物理簇是绝对对应的,我们可以通过分析FAT表得知存储设备哪些物理地址有有效数据,哪些地址不是有效数据。

10

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

2、NTFS文件系统

NTFS(New Technologies File System)是Microsoft推出的一种新型文件系统。

2.1、NTFS的设计思想是基于稳定性、安全性并支持大容量的存储设备,主要特性有:

①提供容错结构日志,可以有效保护系统的安全。NTFS是一个可恢复的文件系统。②可升级性基于使用常规数据结构对特殊数据结构进行处理。即NTFS将所有的数据都视为文件,通常在其它文件系统中被隐藏的管理数据在NTFS中也被存储在文件中,文件系统管理数据可以像普通文件一样被存放在文件系统内的任何位置。所以NTFS文件系统不像其它文件系统那样有特定的布局结构,这个文件系统都被视为数据区,任何扇区都可以分配给文件使用。这是它与其它文件系统的最大不同之处。这就使得数据结构可以随时根据需要对文件系统进行调整。

NTFS文件系统与其它文件系统唯一相同之处就是都将引导扇区放在卷起始的第一个扇区。

③NTFS支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS分区上的压缩文件进行读写时不需要事先由其它程序进行解压缩。

当对文件进行读取时,文件将自动进行解压缩。文件关闭或保存时会自动对文件进行压缩

④在NTFS分区上,可以为共享资源、文件夹以及文件设置访问权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通过网络的共享文件夹或文件进行访问的网络用户。

⑤NTFS对大容量的支持非常好,最大支持卷大小为2TB

⑥NTFS与FAT文件系统一样,也使用“簇”作为数据存取的最小单位。但因为它将所有的数据,包括文件系统管理数据也作为文件进行管理,所以NTFS文件系统中的所有扇区都被分配以簇号,并从0开始对所有的簇进行编号,文件系统的0号扇区为0号簇的起始位置。

2.2、NTFS与FAT文件系统完全不同,它采取了不同的方式对文件系统中的数据进行管理,甚至包括文件系统管理数据本身。在NTFS中引入了一些全新的概念和机构:

⑴、MFT(Master File Table,主文件表)由一个个的MFT项(也称为文件记录)组成,每个MFT项占用1024字节的空间。每个MFT项的前部几十个字节有着固定的头结构,用了描述本MFT项的相关信息。后面的字节用于存放“属性”。每个文件和目录的信息都包含在MFT中,每个文件和目录在表中至少有一个MFT项。除引导扇区外,访问其他任何一个文件前都要先访问MFT,在MFT中找到该文件的MFT项,根据MFT项中记录的信息找到文件内容并对其进行访问。

⑵属性,在NTFS中,所有与数据相关的信息都被称为“属性”,文件名属性、日期与时间属性,文件内容被称为“数据属性”。NTFS与其它文件系统最大的不同之处就在于,大多数文件系统是对文件的内容进行读写,而NTFS则是对保护文件内容的属性进行读写。

⑶NTFS元文件,NTFS文件系统被创建时,会同时建立一些重要的系统信息。这些系统信息也全是以文件的形式存在,被称为元文件。元文件的文件名都是以“$”符号开头,表示其为隐藏的系统文件,用户不可直接访问。2.3、NTFS中的元文件共有17个,分别说明如下:

$MFT:主文件表,也就是将整个MFT看成是一个文件。我们访问一个MFT项时,实际就是访问$MFT文件中的某个文件记录。

$MFTMirr:MFT前几个MFT项的备份,NTFS也将其作为一个文件来看待。$LogFile:日志文件

11

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

$Volume:卷文件,包含卷标和其它版本信息

$AttrDef:属性定义列表文件,定义每种属性的名字和类型$Root:根目录文件

$Bitmap:位图文件,它的数据属性的每个bit对应文件系统中的一个簇,用以描述簇的分配情况

$Boot:引导文件,DBR扇区就是引导文件的第一个扇区$BadClus:坏簇记录文件

$Quota(NTFS4):早期的NT系统中记录磁盘配额信息$Secure:安全文件

$UpCase:大小写字符转换表文件

$Extend metadata directory:扩展元数据目录$ Extend\\$Reparse:重解析点文件$ Extend\\$UsnJrnl:变更日志文件$ Extend\\$Quota:配额管理文件$ Extend\\$ObjId:对象ID文件2.4、NTFS文件系统的整体布局:引导区用户数据MFT区用户数据MFT备份用户数据DBR备份图6:NTFS文件系统结构图示

⑴引导区。引导区包含DBR和引导代码,一般系统为其分配16个扇区但未全部使用。⑵MFT区。这个MFT区是一个连续的簇空间,除非其它的空间已全部被分配使用,否则不会在此空间存储用户文件或目录。默认情况下,Microsoft将文件系统的12.5%保留给MFT,当文件系统的其它部分被写满后才会暂时使用这部分空间,一旦用户数据区有了足够的空间,就会立即收回原来让出的MFT空间。

⑶MFT备份区。由于MFT的重要性,在文件系统中部为其保留了一个备份,不过这个备份MFT很小,只是MFT前几个项的备份。

⑷引导扇区备份扇区。在卷的最后一个扇区,保存了一份DBR扇区的备份。这个扇区虽然包含在分区表描述的该分区大小中,但却不在DBR描述的文件系统大小范围之内。DBR描述文件系统大小时,总是比分区表描述的扇区数小1个扇区。因此,严格来讲,这个扇区属于该NTFS卷,但却不属于该文件系统。2.5、引导扇区

NTFS的引导扇区也位于文件系统的0号扇区,这是它与FAT文件系统在布局上的唯一相同之处,其结构如下:

字节偏移(16进制)字节数00——02303——0A0B——0C0D——0D0E——0F10——1415——15

821251

含义

跳转指令

OEM名(明文“NTFS”)每扇区字节数

每簇扇区数

保留扇区数(Microsoft要求置0)未使用(Microsoft要求置0)介质描述符

12

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

16——1718——191A——1B1C——1F20——2324——2728——2F30——3738——3F40——4041——4344——4445——4748——4F50——5354——1FD1FE——1FF

2224448881413844262

未使用(Microsoft要求置0)

每磁道扇区数(Microsoft称不对此处值进行检查)每柱面磁头数(Microsoft称不对此处值进行检查)隐含扇区数(Microsoft称不对此处值进行检查)未使用(Microsoft要求置0)未使用(此处总是“80008000” Microsoft称不对此处值进行检查)

文件系统扇区总数(此值总比分区表描述的扇区总数小1)MFT起始簇号MFT备份起始簇号每MFT项大小未使用

每个索引的大小簇数未使用序列号校验和

引导代码

签名值(“55AA”)

2.6、$MFT文件

$MFT文件实际上就是整个MFT表,使用0号MFT项对其自身进行描述。$MFT包含一个$BITMAP属性,用来描述MFT项的分配使用情况。

$MFTMirr文件使用1号MFT项。

$LogFile文件即事务型日志文件,使用2号MFT项

$Volume文件即卷文件,包含卷标和版本信息,使用3号MFT项$AttrDef文件即属性定义表(Attribute Definition Table)使用4号MFT项,用以定义文件系统的属性名和标识。其中存放了文件系统所支持的所有文件属性类型。

$Root文件即根目录文件,使用5号MFT项。$Root文件的索引属性中保存了存放在该卷根目录下的所有文件和目录的索引。在第一次访问一个文件后,NTFS可以保留该文件的MFT引用,这样,以后就可以直接对该文件进行访问。

$Bitmap文件即位图文件,使用6号MFT项,它的数据属性用于描述文件系统中所有簇的分配情况。其中每一个bit对应卷中的一个簇,并说明该簇是否已被分配使用。它以字节为单位,每个字节的最低位对应的簇跟在前一个字节的最高位所对应的簇之后。

$Boot文件即引导文件,存放着系统的引导代码。使用7号MFT项,它是NTFS文件系统中唯一要求必须位于特定位置的文件,它的$DATA属性总是起始于文件系统的第一个扇区,也就是起始于文件系统的0号扇区,0号扇区的引导扇区就是这个文件的起始扇区。

$Secure文件即安全文件,占用9号MFT项MFT项结构:

MFT头(0x00-0x37)属性头属性内容图7:MFT项结构图示

每个MFT项的大小为1024个字节,分为两个部分:一部分为MFT头,另一部分为属性

13

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

列表。MFT头的结构很小,其它空间属于属性列表区域,用于存储各种特定类型的属性。属性有很多类型,每种类型的属性都有自己的内部结构。但其大体结构都可以分成两个部分:属性头和属性内容。由于属性有常驻属性和非常驻属性之分,所以属性头的结构也有所差别,但不管是常驻属性还是非常驻属性,它们的属性头的前16个字节的结构是相同的。MFT头:

Window并没有规定MFT头的结构,不同操作系统可能定义不同。我们并不需要过多关注MFT头内容。

属性头:

属性头用以说明该属性的类型、大小及名字,同时还包含压缩和加密标志。属性类型使用一个基于数据类型的数字表示。一个MFT项中可以同时存在几个同一类型的属性。常驻属性的属性头:

字节偏移(16进制)字节数00——03404——0708——0809——090A——0B0C——0D0E——0F10——1314——1516——1617——17

4112224211

含义

属性类型

属性长度字节数(包括属性头)

是否为常驻属性标志,0x00-常驻;0x01-非常驻属性名长度,没有属性名则设为0属性名位置偏移

标志(压缩、加密、稀疏)属性ID标识

属性内容大小(不包括属性头)

属性内容相对于本属性头起始位置的偏移(也就是属性头的长度)索引标志无意义含义

属性类型

属性长度字节数(包括属性头)

是否为常驻属性标志,0x00-常驻;0x01-非常驻属性名长度,没有属性名则设为0属性名位置偏移

标志(压缩、加密、稀疏)属性ID标识

簇流的起始VCN(Virtual Cluster Number,虚拟簇号)簇流的结束VCN

簇流列表相对于本属性头起始位置的偏移压缩单位大小未使用

为属性内容分配的空间大小字节数,大小是簇的整倍数该属性内容实际占用字节数属性内容初始大小

非常驻属性的属性头:

字节偏移(16进制)字节数00——03404——0708——0809——090A——0B0C——0D0E——0F10——1718——1F20——2122——2324——2728——2F30——3738——3F

41122288224888

14

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

40——

常规属性类型及其定义:属性类型值(16进制)102030405060708090A0B0C0C0D0E0100

属性类型名

DATA RUN(Added by Grant_Zhang)

含义

标准属性,包含文件或目录的基本信息,如只读、系统属性等

属性列表

文件名,Unicode码表示的文件名,以及最后访问、最后修改及创建时间卷信息

安全描述符,文件的访问控制及安全属性卷名

卷信息,文件系统及其他标志文件内容索引根属性

来源于索引根属性的索引树节点$MFT文件及索引的位图符号链接,只存在于NTFS V1.2中重解析点

扩展属性信息,用于向后兼容OS/2(HPFS)扩展属性,用于向后兼容OS/2(HPFS)EFS加密属性,包含实现EFS加密的相关信息

$STANDARD_INFORMATION$ATTRIBUTE_LIST$FILE_NAME$VOLUME_VERSION$SECURITY_DESCRIPTOR$VOLUME_NAME$VOLUME_INFORMATION$DATA$INDEX_ROOT$INDEX_ALLOCATION$BITMAP$SIMBOLIC_LINK$REPARSE_POINT$EA_INFORMATION$EA

$LOGGED_UTILITY_STREAM

2.7、数据属性

每个文件都有数据属性($DATA),这个属性容纳的是文件的内容。数据属性的大小没有限制,甚至可以为0字节。每个文件都有一个没有名字的数据属性,一些工具将这个没有名字的数据属性命名为“$DATA”。MFT项也可以有附加的$DATA属性,但附加的$DATA属性必须有属性名。附加$DATA属性又称为ADS(Alternate Data Streams)。

非常驻的数据属性,其MFT项中的属性内容是一个簇流的列表,由簇流列表说明它真正的数据属性内容存储的位置。簇流列表由一个或几个簇流项组成。最后一个簇流项结束处的下一个字节被设置为0x00,表示已经没有簇流项。第一个簇流项描述第一个簇流的位置信息时是相对于文件系统的起始处而言的;第二个簇流描述第二个簇流的位置信息时是相对于第一个簇流的起始位置而言;第三个簇流项描述第三个簇流的位置时则是相对于第二个簇流的起始位置而言。

每个簇流项用以描述簇流的位置及长度信息的部分占用的字节数是变化的,但至少为一个字节。一个簇流项可以分成以下三部分:

①第一个字节为第一部分,它又被分成高4bit和低4bit两部分。低4bit的有效位说明第二部分的字节数,高4bit的有效位说明第三部分的字节数。

②第二部分从第二个字节开始,长度为第一部分的低4bit描述的字节数,用以说明簇流的长度,即该簇流包含的簇数。

③第三部分跟在第二部分之后,长度为第一部分的高4bit描述的字节数,用以说明簇流的起始簇号

15

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

图8:DATA RUN信息解析图示

该簇流项表示:簇流起始位置为0x088F9F号簇,簇流长度为0x0C个簇。2.8、$Bitmap文件

定位$Bitmap文件的存储位置,即$DATA属性,需要访问$MFT文件并定位其6号MFT项,找到该MFT项中描述$Bitmap的$DATA属性,获取DATA RUN信息。进而定位到$Bitmap文件在文件系统中存储位置。2.9、在数据拷贝中的NTFS文件系统分析

由于NTFS文件系统中$Bitmap文件描述了该文件系统中所有簇的使用情况,所以只需要找到$Bitmap文件在文件系统中的存储位置,就可以知道哪些地址簇是有效数据,哪些地址簇不是有效数据。

16

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

3、EexX文件系统

Ext2、Ext3和Ext4是许多Linux操作系统发行版本的默认文件系统,一般情况下将其统称为ExtX。ExtX基于UFS(Unix File System),是一种快速、稳定的文件系统。ExtX在整个文件系统中用多个位置存放重要数据结构的备份,使得其具有良好的可恢复性。3.1、ExtX文件系统主要特性:

⑴ExtX将整个文件系统划分为许多个“块(Block)”,用“块”作为数据的存储单元。同时,将整个文件系统内的所有块划分为若干个“块组”。

①“块”类似于FAT或NTFS文件系统中的“簇”,由若干个连续的扇区组成,通常为2个扇区(1024个字节)、4个扇区(2048个扇区)、8个扇区(4096个扇区),这个值的大小会记录在位于文件系统2-3号扇区的超级块中。

②所有的块都被赋予一个地址,块地址由0开始进行编号,0号块起始于文件系统的第一个扇区。

③所有的块被划分成若干个相等的“块组”,每个块组包含同样数量的“块”。但由于整个文件系统可能会不是块组大小的整倍数,因此最后一个块组有可能小于其它块组。

④如果超级块中定义了在文件系统开始处设定保留区域,则保留区域不属于任何块组,0号块组也相应的跟在保留扇区后面开始。

⑵ExtX的基本布局信息存储在一个称为“超级块”的结构中,第一个超级块位于文件系统的2号扇区,占用两个扇区的大小。ExtX默认激活一种称为“稀疏超级块”的特性。“稀疏超级块”特性就是只在某些块组中存放超级块的备份,而不是在所有的块组中都存放超级块的备份。ExtX文件系统整体结构:

块组0块组1块组2块组n-1块组n图9:ExtX文件系统结构图示

ExtX文件系统第一个块组结构:保留超级块组描述符表块位图i节点位图i节点表数据区图10:块组结构图示

⑴0——

1号扇区保留为引导代码扇区,如果没有引导代码,则该两个扇区为空,全部用0填充。

⑵2——3号扇区为超级块:①“超级块”由基本信息组成,如块大小、总块数、每块组块数、及第一个块前保留块数,还有i-节点数和每块组i-节点数等。

②超级块中还有一些非实质性的数据,如卷名、最后写入时间、最后挂载时间及挂载路径等,还有用以判定文件系统是否干净、是否需要调用一致性检查的标志。

③超级块中还保存有空闲i-节点和空闲块的记录信息,用于在分配新的i-节点和新块时使用。

17

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

⑶“组描述符表”起始于超级块后面的“块”,组描述符表的起始位置在超级块中加以描述。

注意,组描述符表是起始于超级块后面的“块”,也就是说,如果超级块位于0号块中,则组描述符表起始于1号块;如果超级块位于1号块,则组描述符表起始于2号块。当块大小为1024个字节(两个扇区)或2048个字节(4个扇区)时,组描述符表就起始于超级块后面的扇区,即4号扇区,而如果块大小为4096个字节,则组描述符与超级块间就会有4个扇区的空闲空间,这是因为0——

7号扇区为0号块,组描述符必须起始于超级块所在的块后面的块,而这时超级块位于0号块内,组描述符表就必须起始于1号块,也就是8号扇区。

“组描述符表”是由文件系统中全部块组的描述信息组成,每个组描述符信息占用32个字节。如果格式化时使用默认的参数,则通常情况下整个组描述符表的大小不会超过一个块组。组描述符表在每个块组中都会有一个备份,但激活了稀疏超级块特征的情况除外。

默认情况下,稀疏超级块特性被激活,即并不是在每个块组中都有超级块和组描述符的备份。

⑷跟在组描述符表所在的Block块后面的是“块位图块”。Linux创建文件系统时,会将每组的块数定义为与每块中的bit数相等,所以,块位图的大小也就等于一个块的大小。块位图管理块组中块的分配情况,它的起始位置在组描述符中给出。它的字节大小可以用组中的块总数除以8计算出来。

⑸跟在块位图块后面的是Block块,是“i-node(i-节点)位图块”,也只占用一个Block块。i-节点位图管理组中i-节点的分配情况,它的起始位置也在组描述符中给出。它的大小字节数可以通过每组i-节点数除以8计算出来。

⑹跟在i-节点位图块后面的则是“i-节点表”。ExtX文件系统中使用“i-node(i节点)”存储文件及目录的元数据,每个i-node的大小固定为128字节大小,所有的i-node存放在i-node表中,每个块组中都有一个本块组的i-node表。

⑺在i-节点后面的则是真正的数据区。ExtX文件系统中,文件名使用“目录项”进行存储,目录项存储在为其父目录分配的块中。目录项的结构比较简单,它由文件的名字和指向这个文件的i-node项的指针组成。3.2、超级块数据结构偏移(十六进制)00——0304——0708——0B0C——0F10——1314——1718——1B1C——1F20——2324——2728——2B2C——2F

字节数444444444444

含义

文件系统总的i-节点数文件系统总块数为文件系统预保留的块数空闲块数空闲i-节点数0号块起始块号

块大小(此值为需要将1024左移的位数)片段大小(与块大小字段完全相同)每个块组所含块数每个块组所含片段数每块组i-节点数最后挂载时间

18

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

30——3334——3536——3738——393A——3B3C——3D3E——3F40——4344——4748——4B4C——4F50——5152——5354——5758——595A——5B5C——5F60——6364——6768——7778——8788——C7C8——CBCC——CCCD——CDCE——CFD0——DFE0——E3E4——E7E8——EBEC——3FF

4222222444422422444161664411216444788

最后写入时间当前挂载数最大挂载数

签名标志“53EF”文件系统状态错误处理方式辅版本级别

最后进行一致性检查时间一致性检查间隔时间创建本文件系统的操作系统主版本级别默认UID保留块默认GID保留块第一个非保留i-节点每个i-节点结构的大小本超级块所在的块组号兼容特征标志非兼容特征标志只读兼容特征标志文件系统ID卷名最后挂载路径位图使用运算法则文件再分配块数目录再分配块数未使用日志ID日志i-节点日志设备

孤立i-节点表头

未使用

3.3、块组描述符表和块组描述符

块组描述符表也称为组描述符表,它起始于超级块所在块的下一个块,它是一个列表,由文件系统中描述每个块组的组描述符组成,文件系统中的每个块组都在这个表中拥有一个包含改组相关信息的描述项。

如果没有激活稀疏超级块特征,则在每个块组中都会有一个组描述符表的备份。但通常Linux会默认激活稀疏超级块特征,因此只会在某些块组中存在组描述符表的备份,其它的块组中则没有。在没有超级块备份及组描述符备份的块组中,也不会为超级块和组描述符保留空间。

通常每个块组中除文件内容外,还会有管理数据,如超级块、组描述符表、i-节点表、i-节点位图块和块位图块,组描述符中说明了这些数据的存储位置。每个块组描述符占用32个字节,起数据结构如下:偏移(十六进制)

字节数

含义

19

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

00——0304——0708——0B0C——0D0E——0F10——1112——1F

44422214

块位图起始地址(块号)i-节点位图起始地址(块号)i-节点表起始地址(块号)该块组中的空闲块数该块组中的空闲i-节点数该块组中的目录数未使用

3.4、块(Block)

在超级块中,有一个“第一个数据块起始位置”值,就是描述0号块组的起始位置的。Linux默认激活“稀疏超级块”特性,因此,除0号块组外,后面的其它块组并不全部都有超级块及组描述符表的备份。如果一个块组含有超级块和组描述符表的备份,则超级块占用该块组的0——

1号扇区,组描述符起始于1号块,如果是一个没有超级块和组描述符表备份的块组,则它的第一个块将会被块位图块占用,第二个块则被i-节点位图块占用。

块大小结构:

①块大小为1024字节时,0——1号扇区组成0号块;超级块占用2——

3号扇区的1号块;组描述符表紧跟在超级块之后,占用4——5号扇区,即2号块;6——7号扇区为3号块,由块位图块占用;8——9号块位4号块,由i-节点位图占用;跟在i-节点位图后面,由10号扇区开始的5号块开始为i-节点表,占用若干个块;再后面则是数据区。其详细结构如下图所示:

图11:块大小为1024字节时的结构

②块大小为2048字节时,0——1号扇区为保留扇区;超级块占用2——3号扇区两个扇区(注意:这时,0——

3号扇区共同组成0号块。同时,因为超级块位于0号块中,所以第一个数据块的起始位置就是0号块了);组描述符表占用1号块;块位图块占用2号块;i-节点位图块占用3号块;i-节点表起始于4号块;其详细结构如下图所示:

20

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

图12:块大小为2048字节时的结构

③块大小为4096字节时,0号块包括0——1号扇区的保留区域、2——3号的超级块区域及4——

7号扇区的空闲空间;组描述符表起始于1号块,这时它与超级块直接就会有4个扇区的空闲空间(4——7号扇区);2号块被块位图块占用;3号块为i-节点位图块;i-节点表起始于4号块。

图13:块大小为4096字节时的结构

总结:

⑴、超级块一定位于2——3号扇区,占用两个扇区。⑵、组描述符表可能紧跟超级块之后,或者位于1号块。

⑶、块位图块一定紧跟组描述符表块。3.5、块位图

块位图中每个bit对应一个块,即每个字节对应8个块。如果某个块已被分配使用,则与该块对应的块位图的bit位被置“1”,未被使用的块对应的bit位则为“0”

。一个字节的最低位所对应的块接在前一字节的最高位所对应的块之后。也就是说,读取字节时由左向右,但读取字节内的bit时则是由右向左。

块位图只描述本块组内的块的分配情况,它的第一个字节的第一个bit描述的位置是指“本块组的0号块”,而不是整个文件系统的0号块。

某个块在本块组的内部块号与在整个文件系统内的块号间可以这样计算:

在整个文件系统内的块号 = 在本块组内的内部块号 + 本块组在文件系统内的起始块号3.6、在数据拷贝中的ExtX文件系统分析

我们仍然只需知道哪些扇区存储着有效数据,所以只需分析所有块组中的块位图块即可。

判断整个文件系统中有多少个块组可根据超级块中的描述:块组数=文件系统总块数/每个块组所含块数(+1)

定位每个块组的块位图块所在的位置只需分析第一个超级块中的组描述符表即可。

21

Created And Edited by Grant Zhang 2013.12

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

4、UFS文件系统

UFS(Unix

File

System)文件系统是泛Unix类型操作系统所使用的文件系统。它存在很多变种,并应用于不同的操作系统中,如HP-UX、FreeBSD、NetBSD、OpenBSD、Apple OS X、Sun Solaris等。

目前最主要的变种是UFS1和UFS2。

Created And Edited by Grant Zhang 2013.12

22

慧鱼科技有限公司 分区体系与文件系统分析交流 Rev 1.0

5、HFS文件系统

HFS+文件系统是苹果机的Mac操作系统所使用的一种文件系统。Mac操作系统早期使用HFS文件系统,HFS+是HFS的升级版本,在HFS的基础上做了一些重要改进。

Created And Edited by Grant Zhang 2013.12

23

因篇幅问题不能全部显示,请点此查看更多更全内容

Top