NTFS中存儲了兩份MFT備份以防MFT文件損壞,兩個MFT備份的具體起始位置都存儲在引導扇區中。
引導扇區是從NTFS文件系統的第壹個扇區開始,以55 AA結尾。我們主要關註前88字節的信息,其中重要的就是“NTFS”標識、扇區大小、每簇扇區數、MFT起始簇以及MFT備份MFTMirr位置這些信息。我們可以根據MFT起始簇信息找到MFT,或者根據MFT備份MFTMirr位置找到MFT的另外壹個MFT備份。如下圖所示:
MFT是什麽,什麽作用?
在NTFS中,整個卷的所有文件信息(包括MFT本身、數據文件、文件夾等等)都存儲在MFT。每壹個文件在 MFT 中都有壹個或多個 MFT 項記錄文件屬性信息。而且每項大小是固定的(壹般為1KB),MFT保留了前16項用於特殊文件記錄,稱為元數據。
可以根據MFT快速的找到文件的詳細信息和具體位置等。
壹個MFT項包括MFT頭和關於文件的4條屬性,以FF FF FF FF結尾。
在壹個MFT項中前56字節是MFT頭部信息,其中比較重要的是FILE標識、第壹個屬性的偏移和flags。
flags顯示了此文件是否是正常文件,或者是刪除文件等。
每條屬性都包含屬性頭和屬性結構。每條屬性的前4字節顯示該屬性的類型,不同類型的屬性有不同的屬性結構。
具體屬性頭的大小根據是否是常駐屬性來進行計算。
是否是常駐屬性根據屬性頭的第9個字節判斷,1為非常駐,0為常駐。
如果是非常駐屬性,屬性頭大小為64;如果是常駐屬性,屬性頭大小為24字節。
常駐和非常駐的區別:
常駐屬性是直接保存再MFT中,非常駐屬性保存再MFT之外的其他地方。如果文件或文件夾小於1500字節,那麽它們的所有屬性,包括內容都會常駐在MFT中。
不同類型的屬性有不同的屬性結構,這裏主要介紹10H屬性、30H屬性和80H屬性。
關於文件傳統屬性,對照下表:
這個屬性比較重要,包含了文件的詳細資料和父目錄的參考號等。根據父目錄參考號可以知道文件之間的父子關系,從而構建文件的子父關系。
其實在10H屬性中已經描述了文件的部分信息(時間、標誌等),30H屬性主要關註父目錄的參考號、文件名命名空間和文件名。
NTFS通過為壹個文件創建多個30H屬性實現POSIX (Portable Operating System Interface, 可移植操作系統接口) 式硬連接,每個30H屬性都有自己的詳細資料和父目錄;壹個硬連接刪除時,就從MFT中刪除這個文件名,最後壹個硬連接被刪除時,這個文件就算是真正被刪除了。
LCN(logical cluster number):整個文件卷的相對位置,單位(簇)。
VCN(virtual cluster number):文件內部的相對位置,單位(簇)。
每個運行列表中第壹個字節的低4位表示運行簇大小(filesize)的len,高4位表示起始簇(start)的len。如果壹個運行列表後面的第壹個字節是00,說明運行列表結束,後面的數值暫時不用管;如果不是00,則是下壹個運行列表開始。
0x00~0x3F 是屬性頭;運行列表在橘黃色框中,0x40開始,可以得到運行列表 33 40 BC 00 00 00 0C。
分析如下:
首先0x33,低4位是3,表示緊隨其後的3Byte 0xBC40作為運行簇大小(簇個數),即文件所占總大小;高4位是3,表示簇大小之後的3個Byte 0x0C0000 是起始簇,即文件起始,這裏是說的是LCN。
分析如下:
第壹個運行列表,首先是0x31,低4位是1,表示緊接著的1Byte(03)是運行簇大小;高4位是3,表示緊接著3Byte(65 9A 00)是起始簇,這裏說的是LCN;
第二個運行列表,首先是0x11,低4位是1,表示緊接著的1Byte(01)是運行簇大小;高4位是1,表示緊接著3Byte(13)是起始簇,這裏說的是VCN。
註意,只有第壹個運行列表的起始簇說的是LCN,從第二個運行列表開始每個運行列表的起始簇都說的是VCN。想要得到LCN需要按下面的公式計算:
第n個運行列表的LCN = 第壹個運行列表的起始簇(LCN) + 第二個運行列表的起始簇(VCN) +...+第n個運行列表的起始簇(VCN)
1、從引導扇區找到“MFT起始簇”或者”MFT備份MFTMirr位置“;
2、根據“MFT起始簇”或者”MFT備份MFTMirr位置“找到第壹個MFT項(1KB),第壹個MFT項就是$MFT的屬性內容;
3、在第壹個MFT項中找到80H屬性,根據80H屬性的屬性結構找到文件起始和總大小;
4、上面3找到的就是MFT文件的起始和總大小了。
MFT文件是對NTFS中全部MFT(卷上的所有文件,包括文件名、時間戳、流名和數據流所在的群集號列表、索引、安全標識符以及諸如“只讀”、“壓縮”、“加密”之類的文件屬性)的存儲,可以根據MFT文件快速的查找卷上的所有文件;而MFTMirr文件是對MFT文件中比較重要項的復制,壹般是4KB。
參考:
blogs.com/mwwf-blogs/archive/2015/05/04/4467687.html
/view/f204bb89e518964bce847cae.html
備註:如果想了解其他類型的屬性,詳見參考文章。