1. NTFS 中所有都是文件,包括無數(shù)據(jù),都是以文件形式進(jìn)行訪問。
元數(shù)據(jù)文件包括:
$Mft $MftMirr $LogFile $Volume $AttrDef $BitMap $Boot $BadClus $Quota $UpCase $Cairo。
2. 普通文件(目錄)的信息都是通過屬性/值對(duì)來表示的。
3. $MFT 中記錄了所有文件的文件記錄,文件記錄大小一般為 1K。也就是每個(gè)文件都會(huì)在 $MFT 文件中存放一份記錄,且這個(gè)文件記錄一般為 1K 大小。
文件記錄里一般也是屬性-值對(duì)來組織。
4. 文件屬性包括
#define$UNUSED (0X0)
#define$STANDARD_INFORMATION (0x10)
#define$ATTRIBUTE_LIST (0x20)
#define$FILE_NAME (0x30)
#define$OBJECT_ID (0x40)
#define$SECURITY_DESCRIPTOR (0x50)
#define$VOLUME_NAME (0x60)
#define$VOLUME_INFORMATION (0x70)
#define$DATA (0x80)
#define$INDEX_ROOT (0x90)
#define$INDEX_ALLOCATION (0xA0)
#define$BITMAP (0xB0)
#define$SYMBOLIC_LINK (0xC0)
#define$EA_INFORMATION (0xD0)
#define$EA (0xE0)
#ifdef_CAIRO_
#define$PROPERTY_SET (0xF0)
#endif // _CAIRO_
#define$FIRST_USER_DEFINED_ATTRIBUTE (0x100)
#define $END (0xFFFFFFFF)
5. 如果一個(gè)數(shù)據(jù)屬性太大而導(dǎo)致一個(gè)文件記錄不夠存儲(chǔ),則會(huì)使用行串(run)來組織,一般一個(gè)文件的數(shù)據(jù)就是由這些行串表來組織起來的。對(duì)于非數(shù)據(jù)屬性,也可以這么做。
其實(shí)準(zhǔn)確地說,并不一定是一個(gè)數(shù)據(jù)屬性,而是一個(gè)非駐留屬性,即文件記錄并不能記錄一個(gè)屬性的所有內(nèi)容時(shí),那么文件記錄中只會(huì)保留屬性頭和行串信息,在數(shù)據(jù)區(qū)域里,這些行串信息所代表的數(shù)據(jù),才表示這個(gè)屬性。
6. 如果一個(gè)文件記錄不能存儲(chǔ)下所有屬性或?qū)傩灶^,也就是一個(gè)文件的屬性太多時(shí)(常常是因?yàn)閿?shù)據(jù)區(qū)太碎,導(dǎo)致屬性頭中的行串太多),則其它屬性會(huì)分配其它文件記錄來存儲(chǔ),在 $ATTRIBUTE_LIST 里面會(huì)有串聯(lián)信息(文件引用)。那么第一個(gè) MFT 記錄被稱為 base file record。
7. 文件(記錄)引用:指該文件在 MFT 中的位置。
8. 文件目錄,對(duì)于小的文件目錄,它的子文件及目錄的文件引用信息被存放在 $INDEX_ROOT 屬性中(不是 $DATA),對(duì)于大目錄,用 B-樹用來存放這些信息。B-樹中的每一項(xiàng),除了包含文件名(目錄名)外,還包含相應(yīng)的文件記錄引用以及時(shí)間戳和大小等。$INDEX_ALLOCATION 記錄了這些緩沖的行串信息。位圖屬性記錄中緩沖區(qū)中哪些 VNC 被使用。所以 $INDEX_ROOT, $INDEX_ALLOCATION, $BITMAP 構(gòu)建了這個(gè) B-樹。
9. $INDEX_ALLOCATION 記錄了目錄項(xiàng)的所有行串。
10. 行串表示為<Header Length Offset> ,表達(dá)式為 <0xXY Legnth(占用 x 個(gè)簇) Offset(y 起始簇號(hào))>,比如: 0x31 0x06 0x12 0x34 0x56 ,表示 Length 為一個(gè)字節(jié),偏移為 3 個(gè)字節(jié),即表示從 簇號(hào)為 0x563412 開始的 0x06 個(gè)簇的空間。
行串計(jì)算的偏移是相對(duì)的,且是有符號(hào)的,第二個(gè)行串的偏移是根據(jù)第一個(gè)行串的偏移得來的。即拿第二個(gè)行串的偏移加上第一個(gè)行串的偏移,才得到第二個(gè)行串的真正偏移。