概述
在 NTFS 卷使用“文件”来描述所有存储在它之上的数据。这些数据可分为两类: 元数据文件和常规文件。元数据文件包含了这个 NTFS 卷的相关信息,常规文件则包含用户数据。
卷的结构:
下面是一个 Win2k 卷的文件列表
表项 |
文件名 |
操作系统 |
描述 |
0 |
$MFT |
|
主文件表 – 卷上每一个文件的索引 |
1 |
$MFTMirr |
|
MFT 表前四个表项(记录)的备份 |
2 |
$LogFile |
|
事务日志文件 |
3 |
$Volume |
|
序列号,创建时间, dirty flag ? |
4 |
$AttrDef |
|
属性定义 |
5 |
. (dot) |
|
卷(分区)的根目录 |
6 |
$Bitmap |
|
包含卷的簇图(已经使用的和空闲的) |
7 |
$Boot |
|
卷的引导记录 |
8 |
$BadClus |
|
列出在卷上的坏簇 |
9 |
$Quota |
NT |
配额信息 |
9 |
$Secure |
2K |
卷所用的安全描述符 |
10 |
$UpCase |
|
校对用大写字母表 |
11 |
$Extend |
2K |
一个目录,包含 $ObjId, $Quota, $Reparse, $UsnJrnl |
|
|
|
|
12-15 |
<Unused> |
|
标为已使用但是空的 |
16-23 |
<Unused> |
|
标为未使用 |
|
|
|
|
Any |
$ObjId |
2K |
分配给每一个文件的唯一标识( ID ) |
Any |
$Quota |
2K |
配额信息 |
Any |
$Reparse |
2K |
再分解点信息 |
Any |
$UsnJrnl |
2K |
加密日志 |
|
|
|
|
> 24 |
A_File |
|
一个普通文件 |
> 24 |
A_Dir |
|
一个普通目录 |
... |
... |
|
... |
注意:
未用的表项
在一个刚格式化的卷上,从 0x0B 到 0x0F 的表项被标为已使用用,但实际上是空的。从 0x10 到 0x17 表项被标为空闲,没有被占用。只有这个卷在重负荷下运行时这种情况才会改变。
当 $MFT 文件有很多碎片而无法放进一个文件记录时则需要一个扩展记录。如果此新记录被简单地分配在这个 $MFT 文件尾时就会出现问题,为什么呢?因为描述这个新记录位置的 $DATA 属性本身就在这个新记录里面。因此这个新记录就会从 0X0F 表项往后分配。因为 $MFT 文件最少占 16 个文件记录,所以一直存在。如果从 0X 0F 到 0X17 表项也被用完,那么更后面的,未作保留的表项将会被占用。
这个结果也许不会限制到 $MFT 文件,但是我们需要更多证明。
其它信息:
由于某些原因, $ObjId, $Quota, $Reparse and $UsnJrnl 表项序号不在 24 以下,这一点它们跟其它的元数据文件不一样。还有,每一个系统文件的序号总是等于它们的 MFT 表项序号,从不更改。
感谢:特别感谢开放源代码项目 Linux-NTFS Project 众多的 Linux 爱好者们,正因为他们多年来的不懈努力才使得 NTFS 文件系统的面纱被慢慢的揭开,并且通过开放源代码的威力让更多的编程爱好者在本文档的基础上编写了丰富的开源数据恢复及系统恢复等灾难拯救项目,你可以通过以下网址访问本项目位于 sourceforge.net 的原英文站点(http://linux-ntfs.sourceforge.net)
此版中文译本翻译、校正、注释并首发于补天时代 http://www.iqwork.com