磁盘数据结构笔记Word格式.docx
《磁盘数据结构笔记Word格式.docx》由会员分享,可在线阅读,更多相关《磁盘数据结构笔记Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
![磁盘数据结构笔记Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/24/9c7cf4d6-a6cc-44eb-a162-bad88714ad3a/9c7cf4d6-a6cc-44eb-a162-bad88714ad3a1.gif)
在MBR里放不多于三个主分区(通常一个),剩下的分区则由EBR扩展分区引导记录(与MBR结构相像的分区结构)里说明。
一个EBR不够用时,可以增加另一个EBR,如此像一根根链条一样地接下去。
5、DBR(DOSBootRecord),就是每个逻辑盘的最前的一个扇区里,用于引导和加载相应文件管理系统的一些系统代码。
也称作操作系统引导扇区(OBR)
MBR:
主引导记录(CHS:
0柱0磁头1扇区)
00010203040506070809ABCDEF
EB
5E
00
02
3F
FF
80
……………………………………………………………………………………………………………………………………………………………………………
46
42
01
07
FE
55
AA
分区表:
扇区倒数第五行,倒数第二个字节开始,64个字节
:
引导代码446字节(白字为PE启动标志):
分区表64个字节:
结束标志55AA
1
2
分区引导标志
起始
磁头号
3
4
5
6
7
8
9
10
11
12
13
14
15
16
扇区
柱面号
分区
类型符
结束
本分区之前使用的扇区数
本分区的总扇区数
引导标志:
80H表示活动分区;
00H表示非活动分区。
分区类型符:
00H表示该分区未用;
06H——FAT16基本分区;
05H——扩展分区;
0FH——(LBA模式)扩展分区
07H——NTFS分区;
83H——
Linux分区;
0BH——FAT32基本分区;
0CH——(LBA模式)FAT32分区
扇区数:
要倒过来计算(如分区表上3F000000,实际计算时为0000003F,转换成10进制63)
FAT32分区结构
隐藏扇区
(不在分区总数内)
保留扇区(DBR中0E-0F字节)
FAT1
FAT2
根目录FDT
数据区
其他
DBR
1-5扇区
DBR副本
其余
DBR24-27字节
紧跟着FAT2
物理0扇区
逻辑0扇区
逻辑6扇区
FAT32以“F8FFFF0F”开始,可搜索计算保留扇区及FAT扇区数
可通过搜索根目录下文件或文件夹名,字符选ASCII/Codepage
A
B
C
D
E
F
58
90
OEMID
每扇区字节数
每簇扇区数
保留扇区
FAT数
根目录项数
小扇区数
介质F8
总为0
每磁道扇区数
磁头数
当前分区前面的隐含扇区
20
分区大小扇区数
每FAT扇区数
扩展标志
系统版本
根目录在DATA区起始簇号
30
DBR备份扇区
保留
40
标签
分区序号
卷标
50
FAT32
引导程序开始
……
………………………………………………………………………………………………………………………………………………………………
1F0
JUMP指令及OEMID:
BPB(BIOSParameterBlock,BIOS参数块):
引导程序:
MagicNumber(结束标志字)
重建FAT32的DBR需要这么几个参数:
保留扇区数、FAT表个数(通常为2)、每FAT扇区数、根目录簇号(通常为2号簇)、每簇扇区数、分区前隐含扇区数及分区大小扇区数(这两项可在该分区的分区表项中找到)
步骤1.通过搜索位于扇区偏移0字节处的"
F8FFFF"
寻找FAT表..进而确定文件系统类型(FAT16/32)..
步骤2.寻找根目录,来计算出FAT的大小(FAT1被破坏可用此方法)..及保留扇区数..
步骤3.计算簇大小..利用两个子目录的起始扇区号差和他们的簇号差..就可以得到簇的大小..
每簇扇区数=(分区大小扇区数-保留扇区-FAT扇区数×
FAT表数)/(FAT扇区数×
512字节/4)
步骤4.从分区表项得到隐含扇区数与分区大小.
文件系统扇区:
DBR后面一个扇区
52
61
41
1E0
72
空闲簇数
下一个空闲簇簇号
FAT表项:
F8
F0
2号FAT项
3号FAT项
4号FAT项
6号FAT项
7号FAT项
1、FAT表项由4个字节构成,从0开始编号,每个表项映射1个簇(编号即是簇号),0号1号表项系统占用,用户数据从2号表项开始;
2、如果文件占用多个簇,则第一个表项记录下一个表项的编号(即簇号),若文件结束了“0FFFFFFF”表示,“00000000”表示对应簇未使用;
3、定位FAT:
MBR分区表得到分区的起始扇区;
分区的DBR的BPB参数得到保留扇区(偏移0E-0F)、FAT表个数(偏移10)、FAT表大小(偏移24-27);
FAT1=分区起始扇区+DBR保留扇区,FAT2=FAT1+FAT表大小
4、也可搜索0号表项值“F8FFFF0F”定位FAT扇区
数据区:
由根目录+子目录+文件内容
5、数据区以簇为单位存储,根目录一般在2号簇,定位根目录=数据区起始扇区+每簇扇区数*2
6、根目录下的文件和目录都放在根目录区中,子目录下的文件和目录都放在子目录区中;
7、目录项分四类:
卷标目录项,“.”和“..”目录项,短文件目录项(8.3格式),长文件目录项
8、每个目录项占32个字节,记录着一个目录或文件(也可能多个目录项记录一个文件或目录);
文件主名
扩展名
属性
创建时分秒
创建年月日
访问年月日
起始簇号高位
修改时分秒
修改年月日
起始簇号低位
文件大小(字节)
时分秒和年月日的算法:
十进制值=时
十进制值=分
十进制值*2=秒
十进制值+1980=年
十进制值=月
十进制值=日
文件属性字节:
00-读写01-只读02-隐藏04-系统08-卷标10-子目录20-存档
NTFS分区结构
(不在扇区总数内)
元文件$BOOT
元文件$MFTMirr
根目录
元文件$FMT
剩余扇区
备份DBR
启动代码
$MFT备份,仅4条MFT记录
INDX
所有文件FMT记录,FMT占2扇区
BOOT占2簇
XP:
NTLDR
Win7:
bootmgr
占1簇
4E
54
53
NTFS未使用为0
隐含扇区数
空
分区扇区总数
$MFT的起始簇号(LCN)
$MFTMirr的起始簇号(LCN)
每MFT记录的大小(簇数)
每索引的大小(簇数)
检验和
…………………………………………………………………………………………………………………………………………………………………
重建NTFS的DBR需要的参数:
簇大小、隐含扇区数、分区扇区数、$MFT起始簇号、$MFTMirr起始簇号
步骤1.通过搜索$MFTMirr,利用80属性的起始VCN及分配大小来计算出簇大小(每簇的扇区数=$MFT分配大小÷
所占簇数÷
512)
步骤2.通过分区表得到隐含扇区数...分区大小(MBR表分区大小=DBR分区大小+1)
步骤3.通过$MFTMirr中的$MFT..Runlist得出$MFT的起始簇号
步骤4.通过$MFTMirr中的$MFTMirr..Runlist得出$MFTMirr的起始簇号
步骤5.如果分区表破坏,可以通过查找元文件$Bitmap,根据$Bitmap所占空间计算总扇区数(NTFS分区所占扇区=$Bitmap文件大小×
8位/字节×
每簇扇区数);
通过$MFTMirr所在扇区、对应簇号,计算出DBR(逻辑0簇)所在扇区(也就是隐藏扇区数)。
关于MFT的重点概念:
1、NTFS文件系统用文件来记录所有信息,文件由属性组成,对应一条MFT记录(文件记录块),一个文件记录块固定大小为1K,占两个扇区;
所有文件的MFT记录都有一个文件来管理(就是$MFT),也就是0号MFT记录所指向的文件。
2、元数据文件:
记录一些非常重要的文件系统数据,包括用于文件定位和恢复的数据结构、引导程序数据以及整个卷的分配位图等信息。
元文件不能直接访问的,MFT将开头的16个文件记录块保留用于这些元数据文件。
3、每个文件都有一条MFT记录,MFT记录由记录头和属性组成,一个文件可以有多个属性(属性头+属性),属性分常驻属性(ResidentAttr)和非常驻属性(NoResidentAttr);
当文件的属性内容>
700字节时,使用非常驻属性,将属性内容外挂到磁盘的其他位置,这些位置由数据运行runs片来描述。
4、不同属性相同的地方在于属性头,即要么常驻属性头要么非常驻属性头,不同属性的属性内容各不相同,在磁盘上的分布结构也不同,作用也不同。
MFT记录头
FILE
更新序列号偏移
固定列表大小
日志文件序列号LSN
序列号SN
硬连接数
第一个属性偏移
标志字节
文件记录实时大小(字节)
文件记录分配大小(字节)
基本文件记录中的文件索引号
下一个自由ID
0000
本MFT记录号
边界
MFT的使用标记
MFT30文件属性(属性头+属性体,6.5行)
属性长度(包含本头部)
属性标志
属性名长度
属性名偏移
标志
属性ID标志
属性体大小
属性头大小
索引
父目录记录号
序列号
文件创建时间
文件修改时间
MFT更改时间
最后一次访问时间
文件分配大小
文件实际大小
文件标志
用于EAS和重解析
60
文件名长度
命名空间
以Unicode方式标识的文件名
MFT80数据流属性(目录的话A0)
80H
属性
$DATA
容纳文件数据(未命名数据流),文件的大小一般指是未命名数据流的大小,没有长度限制,当它为常驻时,数据长度最小。
它的结构为属性头加上数据流,如果数据流太大,则标记为非常驻,以运行的方式索引到外部。
例如找一个MP3文件,从它的MFT
项中0x80属性中可以看到它一定是非常驻,它的运行所指向的一系列簇就是音乐文件数据流
簇流的起始虚拟簇号(VCN)总从0开始
簇流的结束虚拟簇号(VCN)
簇流列表的偏移
压缩单位大小
为属性内容分配的空间大小字节数
属性内容实际占用的大小字节数
属性内容初始大小字节数
簇流列表(runlist)
属性标志:
00-长驻属性01-非常驻属性
标志(0C-0D):
0001-压缩文件4000-加密文件8000-系统文件
偏移:
相对于本属性头
簇流列表3140009601:
31后面字节0x40是簇流片段占用的簇数,后面3个字节0X019600是相对起始簇号
MFT结束标志:
FFFFFF
索引记录结构
I
N
X
更新序号偏移
更新序号的大小与排列
该索引缓冲在索引分配中的索引VCN
索引入口的偏移(相对于0x18)
索引入口的大小(相对于0x18)
索引入口的分配大小(相对于0x18)
更新序列号
更新序列排列(2S-2字节)
exFAT分区结构
(不在分区扇区总数内)
FAT
数据区(簇单位)
其他隐藏扇区
DBR24-27字节计算FAT扇区数(长度)
位图文件
大写转换表
分区表或DBR40-47字节
逻辑
0-11扇区
12-23扇区
搜索偏移0“F8FFFF0F”确定FAT表起始扇区;
搜索“FFFF”确定起始位置,2号簇
搜索“00000100”,固定5836B,占1簇
紧接大写转换表文件,一般5号簇
逻辑0-11扇区:
0引导扇区,1-8扩展引导扇区,9OEM信息记录,10保留,11引导校验扇区;
备份12-23扇区对应0-11扇区。
76
OEMID
隐藏扇区数
FAT起始扇区号
FAT扇区数
首簇起始扇区号
分区总簇数
根目录起始簇号
卷ID
文件系统版本
卷标志
介质描述
70
己用比例
引导代码开始
0.每扇区字节数:
假设此处值为N,则扇区大小字节数为2的N次方,通常9
1.隐藏扇区数:
可以从分区表中查看,如果分区表破坏请按重建分区表操作
2.扇区总数:
可以从分区表查看
3.FAT起始扇区数:
通过搜索FAT表的头标志“F8FFFF0F”所在扇区-分区开始扇区号(相对于DBR,不包含隐藏扇区)
4.首簇起始扇区号:
虽然只有一个FAT,但该处值并不一定等于FAT表起始扇区+FAT大小扇区数,FAT表分配的空间与簇起始扇区之间可能会有未使用的扇区;
簇位图文件一般占用数据区的第一个簇,所以首簇起始扇区号的计算通过找簇位图文件的开始位置,搜索“FFFF”找到簇位图文件的起始扇区-分区开始扇区
5.每簇扇区数:
假设此处为N,则簇大小为2的N次方簇。
位图文件之后就是大写转换表文件,大写转换表文件的内容是固定的,前4个字节是“00000100”,通过搜索这4个字节就能找到大写转换表文件的开始扇区,与簇位图文件起始扇区相减得到簇位图文件大小,再通过分析FAT表可知簇位图文件占用簇的个数,相除可得到每簇扇区数
6.根目录起始簇号:
簇位图文件总是开始于数据区的2号簇,通过分析FAT表可知簇位图文件占用簇的个数,簇位图文件之后是大写转换表文件,固定5836个字节,结合每簇扇区数可知大写转换表文件占用的簇的个数,而大写转换表文件之后就是根目录的开始
7.分区总簇数:
前面已经知道首簇起始扇区号,每簇扇区数;
用数据区的总扇区数除以每簇扇区数,就是分区的总簇数了
8.FAT扇区数:
用分区的总簇数来计算FAT扇区数。
(分区总簇数+2)*4/512(取大于这个值的簇大小的整数倍,簇位图前保留0号、1号簇)