磁盘&文件系统
目录
一、
零、MBR DPT EBR.............................................................................................................................. 2
1、MBR 主引导记录/扇区 .........................................................................................................2
2、EBR 分区表........................................................................................................................... 3
FAT32 文件系统.................................................................................................................3
1、 基本介绍 ........................................................................................................................ 3
2、 FAT 表 ............................................................................................................................. 4
(1)FAT12 16 32 区别...................................................................................................4
(2)FAT 表结构及作用...................................................................................................4
3、 数据区 ............................................................................................................................ 6
(1)根据簇号得到在 FAT 中的扇区号和偏移: ..........................................................6
(2)目录项 FDT............................................................................................................... 6
二、NTFS 文件系统........................................................................................................................... 9
1、基本介绍.............................................................................................................................. 9
(1)DBR Dos Boot Record............................................................................................9
(2)$boot 文件 .............................................................................................................10
(3)$MFT 文件 ............................................................................................................... 11
2、具体讲文件记录 ................................................................................................................11
【文件记录头】..............................................................................................................11
【属性】 .......................................................................................................................... 12
三、查找一个文件过程 .................................................................................................................. 21
1、思路.................................................................................................................................... 21
2、手动查找的过程 ................................................................................................................21
四、彻底删除文件 .......................................................................................................................... 26
1、系统删除文件的过程 ........................................................................................................26
2、我们安全删除需要做的事情............................................................................................26
3、我们安全删除的思路 ........................................................................................................27
五、代码实现 .................................................................................................................................. 28
1、模块及关键代码 ................................................................................................................28
(1)交互模块 ................................................................................................................28
(2)安全删除总控模块 ................................................................................................28
(3)覆盖文件内容模块 ................................................................................................28
(4)改写文件名模块 ....................................................................................................28
2、涉及函数和数据结构 ........................................................................................................28
零、MBR DPT EBR
1、MBR 主引导记录/扇区
【磁盘第一个的扇区】,开机后第一个访问,0 柱面 0 磁道 1 扇区,512 字
节,包括【446 字节的引导程序】和【64 字节的 DPT 磁盘分区表】和【2 字节的
55AA 结束标志】。
(1)引导程序:检查 DPT 是否正确->系统硬件自检完成后将控制权交给硬
盘上的引导程序(如 GRUB),不依赖 OS,可修改,可实现多系统引导。
(2)DPT 作用:对四个分区(可小于 4)的信息进行描述,其中每个分区的
信息占据 16 个字节,16 个字节的定义如下:
由于其对分区数的限制,所以引出拓展分区,理论上可划分为无数个逻辑分
区,其中逻辑驱动器的引导记录是链式的,每个逻辑分区都有一个类似 MBR 的
EBR
2、EBR 分区表
其第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的
EBR,第三、第四项未用到。
MBR 分区表中最多一个扩展分区,但可再细分为逻辑分区
Linux 中硬盘命名为 sda1-sda4 或者 has1-has4,在 MBR 硬盘中逻辑分区号
只能从 5 开始
MBR 分区表中一个分区最大容量为 2T,因为用 2 字节表示起始结束扇区,且
每个分区的起始柱面必需在这个 disk 的前 2T 内
为了配合这个,引入了新的 INT13,不再使用寄存器传递硬盘的寻址,而是
内存里的地址包(存了 LBA 地址),再分情况处理。
3、虽然 MBR 只占了一个扇区,但是其后的 62 个扇区,即 0 柱面 0 磁道的 63 个
扇区都被占用。且分区是从 0 磁道之后的,操作系统也无法读取到。
一、 FAT32 文件系统
1、基本介绍
FAT32 文件系统中【逻辑盘】由 DBR 及其保留扇区(又称引导区,与 NTFS 相
似)、FAT1、FAT2 和 DATA 四个部分组成
DBR 及其保留扇区(与 NTFS 类似,但其中 BPB 有 53 字节,扩展 BPB 有 26
字节,含义有区别;从第一个扇区开始,详见下面的区别对比)
FAT1:FAT 的含义是文件分配表,这个是主 FAT
FAT2:是 FAT1 的备份
DATA:数据区,包含目录区域
2、FAT 表
(1)FAT12 16 32 区别
因 FAT 中记录任意一簇的二进制位数,如 FAT16 最大可以表示的簇号为
0xFFFF, 以 32K(最多只支持 64 个扇区)为簇的大小的话,FAT16 可以管理的最
大磁盘空间为:32KB×65535=2048MB,这就是为什么 FAT16 不支持超过 2GB 分区
的原因(DOS 下)。
此外,FAT32 的引导区使用了 3 个扇区,其后还留有若干个【保留扇区】,
而 FAT16 无保留扇区。
此外,FAT32 的 root 区(根目录区)不再是固定区域大小,而 FAT16 是,详
见书本 P18.
(2)FAT 表结构及作用
FAT 表有 2 份,FAT1 紧跟 DBR,具体位置由 DBR 的 BPB 参数指定,FAT2 紧跟
FAT1。FAT 表由 FAT 表项构成,把 FAT 表项简称为 FAT 项。
FAT 项(对于 FAT32,是 32 位为一个 FAT 项,即 4 字节表示一个簇)
每一项都有固定编号,从 0 开始,前两个 FAT 项(0 号、1 号)为文件系统
保留使用。用户的数据存放在分区的数据区,以簇为单位,每个簇都会映射到
FAT 表中的唯一一个 FAT 项,从 2 号 FAT 项开始。
用户文件至少占用 1 个簇,若一个文件占用很多个簇,则第一个 FAT 项纪录
下一个 FAT 项的编号(簇号),若文件结束了,则用 0F FF FF FF 表示。
FAT 的主要作用是标明分区存储的介质及簇的使用情况。
定位 FAT 绝对位置的方法
S1.从 MBR 中得到此分区的起始扇区,定位到此扇区
S2.从该扇区的 DBR 中的 BPB 中得知 DBR 的保留扇区、FAT 表的个数、FAT 表的
大小
S3.则 FAT1 起始地址=分区起始扇区+DBR 保留扇区,FAT2=FAT1 起始地址+FAT1
大小
举例:
上面是从第 0 项开始的,第 0 项和第 1 项暂时就不用看了,从第 2 项开始,
为 0F FF FF FF,表示这是一个小文件,只占用一个簇就结束了,然后第 3、4
项也是的。
第 5 簇中存放的数据是 6,这又是一个文件或文件夹的首簇。其内容为第 6
簇,就是说接下来的簇位于第 6 簇——〉FAT 表指引我们到达 FAT 表的第 6 簇指
向,上面写的数据是 7,就是说接下来的簇位于第 7 簇——〉FAT 表指引我们到
达 FAT 表的第 7 簇指向……直到根据 FAT 链读取到扇区相对偏移 0×20~0×24,
也就是第 8 簇,上面写的数据是 9,也就是指向第 9 簇——〉第 9 簇的内容为”
0F FF FF FF”,意即此文件已至尾簇。
2、数据区
数据区在 FAT2 后面,包含 3 部分:【根目录】、【子目录】和【文件内容】,
数据区以簇为单位进行存储,2 号簇被分配给根目录。
(1)根据簇号得到在 FAT 中的扇区号和偏移:
扇区号 = 簇号*4/每个扇区的字节数 + 隐藏扇区数 + 保留扇区数
扇区偏移 = 簇号*4%每个扇区的字节数
根据簇号得到起始扇区号:
簇号起始扇区 = (簇号-2)* 每个簇的扇区数 + 隐藏扇区数 + 保留扇区
数 + FAT 数*每个 FAT 占扇区数
(2)目录项 FDT
分区根目录下的文件和目录都放在根目录区中,子目录中的文件和目录都放
在子目录区中,且每 32 个字节为 1 个【目录项 FDT】,每个目录项记录着一个
目录或者文件(或多对一)。
目录项分为四类:【卷标目录项(分区名)】、【.和..目录项】、【短文
件名目录项】、【长文件名目录项】。FAT 第 0xB 个字节可以判别是长文件目录
项还是短文件目录项。
短文件名目录项(32 个字节)
文件名的“8.3”格式,此格式支持主文件名不能超过 8 字节,扩展名不能
超过 3 字节。短文件名目录始终存放在一个目录项中。
32 个字节的表示如下:
FAT32 长文件目录项 32 个字节的表示:
FDT 第 1 字节又表明了该文件的状态,它有如下四种取值方式:
a.
b.
c.
00H–目录项的空目录。
E5H–表示该目录项曾经使用过,但文件已被删除。
2EH–表示子目录下的两个特殊文件 “. “或 “.. “目录项
d. 其它任何字符–表示一个文件名(或目录名)的第一个字符的 ASCII 码值.