主要内容
一、NTFS系统结构原理
二、编码实现NTFS磁盘删除文件扫描
三、编码实现NTFS磁盘删除文件恢复
工具截图
第一部分 NTFS系统结构原理
NTFS是Windows NT引入的新型文件系统,由于NTFS的结构复杂,内容繁多,这里仅对NTFS卷上的底层结构做分析。
1. 基本概念
在NTFS格式中,文件以簇的形式分配。最小的单位为扇区,N个扇区为一簇。其中,N的值由引导扇区规定。卷与簇的关系如下表。
卷大小(分区大小) | 每簇的扇区 | 缺省的簇大小 |
小于等于512MB | 1 | 512字节 |
513MB~1024MB(1GB) | 2 | 1024字节(1KB) |
1025MB~2048MB(2GB) | 4 | 2048字节(2KB) |
大于等于2049MB | 8 | 4KB |
2. 基本结构
NTFS格式磁盘的数据分为4大部分。
引导区 | 主文件列表 | 系统文件 | 文件数据区 |
l 引导区(Partition boot sector):所有的磁盘格式都有这个区,占用了磁盘的第一个扇区。
l 主文件列表(Master File Table,MFT):它记录了卷上所有的文件,每一个文件对应表中的一条记录。NTFS中目录也是以文件的形式存在的。因此,每一个目录也可以看作一个文件。
l 系统文件(System files):NTFS系统一共有16个系统文件,和8个保留文件。
l 文件数据区(File area):存放文件数据。
3. 引导区
字节偏移 | 长度(字节) | 常用值 | 意义 |
0x00 | 3 | 0xEB5290 | JMP指令 |
0x03 | 4 | “NTFS” | 文件系统 ID |
0x0B | 2 | 0x0200 | 每扇区字节数 |
0x0D | 1 | 0x08 | 每簇扇区数 |
0x0E | 2 |
| 保留扇区 |
0x10 | 3 |
| 总为0 |
0x13 | 2 |
| NTFS未使用,为0 |
0x15 | 1 |
| 介质描述 |
0x16 | 1 |
| 总为0 |
0x18 | 2 |
| 每磁道扇区数 |
0x1A | 2 |
| 磁头数 |
0x1C | 4 |
| 隐含扇区 |
0x20 | 4 |
| NTFS未使用,为0 |
0x24 | 4 |
| NTFS未使用,为0 |
0x28 | 8 |
| 扇区总数 |
0x30 | 8 |
| $MFT的逻辑簇号 |
0x38 | 8 |
| $MFTMirr的逻辑簇号 |
0x40 | 4 |
| 每MFT记录簇数 |
0x44 | 4 |
| 每索引簇数 |
0x48 | 8 |
| 卷标 |
0x50 | 4 |
| 校验和 |
0x54 | 430 |
| 引导代码 |
0x1FE | 2 | 0x55AA | 引导扇区标志 |
4. 主文件列表(MFT)
l MFT是一个对应的数据库,由一系列的文件记录组成。卷中每一个文件都有一个文件记录(对于大型文件还可能有多个记录与之相对应)。主文件表本身也有它自己的文件记录。
l 实际上,MFT自身也是一个文件,因此,主文件列表的第一个记录就是它自身。MFT的每个记录都有一个编号,这里我们称它为ID号。这个ID从0开始。我们知道MFT自身是NTFS系统的第一个文件,所以文件$MFT的ID号为0。
l MFT和其他23个文件一起(共24个),组成所谓的“Metafiles”(元文件,也是之前提到的System files,系统文件)。这24个文件中,前16(ID为0-15)个文件是固定的,剩下的8个文件为保留文件。
l 用户的文件(也包括目录)的MFT中的ID号从24开始排。用户每添加一个文件ID号加1,当某文件被删除时,与之对应的MFT记录将被空出来,如果此时再次添加文件,系统会优先填充ID小的空位。
l 无论簇的大小,文件记录大小都是1K。理论上MFT在卷中的分配空间(占12%)。
逻辑上,MFT在卷中会占用一块连续的空间,但实际情况$MFT可能会被分散在磁盘的几个不同的区域。甚至,可能在元文件的部分就被拆分开。
5. 系统文件(System files)
序号(ID) | 元文件 | 功能 |
0 | $MFT | 主文件列表本身 |
1 | $MFTMirr | 主文件表的部分镜像 |
2 | $LogFile | 日志文件 |
3 | $Volume | 卷文件 |
4 | $AttrDef | 属性定义列表 |
5 | $Root | 根目录 |
6 | $Bitmap | 位图文件,文件$Bitmap标识的是该卷中簇的占用情况。它用一位代表一簇。为0代表此簇空闲,为1代表此簇已使用 |
7 | $Boot | 引导文件 |
8 | $BadClus | 坏簇文件 |
9 | $Secure | 安全文件 |
10 | $UpCase | 大写文件 |
11-15 | $Extend | 扩展文件(一共5个文件) |
16-23 | 保留 |
|
下节地址:http://blog.csdn.net/A00553344/archive/2009/12/19/5039884.aspx