從 FAT 文件系統(tǒng)到 NTFS 的磁盤分區(qū)轉(zhuǎn)換需要一定的可用磁盤空間,以用于建立 NTFS 磁盤結(jié)構(gòu)。本文介紹使用 Convert.exe 將 FAT 轉(zhuǎn)換為 NTFS 的步驟并討論轉(zhuǎn)換所需要的空間。
FAT 和 NTFS 使用不同的磁盤結(jié)構(gòu)表示文件的空間分配。這些結(jié)構(gòu)通常被稱作圖元數(shù)據(jù)或文件系統(tǒng)的開銷。
FAT 文件系統(tǒng)的圖元數(shù)據(jù)由下列各項(xiàng)組成:即引導(dǎo)扇區(qū)、一個(gè)或多個(gè)文件分配列表、一定大小的根目錄結(jié)構(gòu)以及與子目錄中的文件數(shù)目相關(guān)的每個(gè)子目錄的可變空間。
與 FAT 和 NTFS 相關(guān)的另一種開銷與兩種文件系統(tǒng)按一定大小的簇分配磁盤空間有關(guān)。這些分配單元或簇的實(shí)際大小是在格式化時(shí)確定的,默認(rèn)大小取決于卷的大小。對于大小相近的卷而言,NTFS 所默認(rèn)的簇的大小小于 FAT 的默認(rèn)大小。
由于文件數(shù)據(jù)的空間僅可以按整個(gè)簇的數(shù)量進(jìn)行分配,所以在 FAT 卷上即使一個(gè)字節(jié)文件最后也將使用相當(dāng)于一個(gè)簇的磁盤空間。NTFS 的情況與 FAT 類似,但是相比 FAT 稍微復(fù)雜一些,在本文中將不做詳細(xì)介紹。
與 FAT 一樣,NTFS 有一定數(shù)量的容量開銷與一定數(shù)量的各個(gè)文件的開銷。為了支持 NTFS 的高級功能(如可恢復(fù)性、安全性、大容量支持等等),NTFS 圖元數(shù)據(jù)開銷稍大于 FAT 圖元數(shù)據(jù)開銷。另一方面,由于 NTFS 簇開銷小于 FAT 簇開銷,即使不使用 NTFS 文件壓縮,NTFS 卷上通常也能存儲不多于但至少也會等同于 FAT 卷上的數(shù)據(jù)量。
為避免在轉(zhuǎn)換過程中由于轉(zhuǎn)換失敗而使文件受到破壞的可能性,Convert.exe 必須使用 FAT 文件系統(tǒng)所認(rèn)可的可用空間建立 NTFS 圖元數(shù)據(jù)。這樣,如果轉(zhuǎn)換無法完成,用戶文件的 FAT 表示仍舊有效。使得該方法復(fù)雜化的原因在于其中一個(gè) NTFS 數(shù)據(jù)扇區(qū)必須占用磁盤上的指定位置,同時(shí)數(shù)量有限的某些其它結(jié)構(gòu)必須占用臨接扇區(qū)。
轉(zhuǎn)換過程的一般概述如下:
- 為固定位置的 NTFS 結(jié)構(gòu)與其它臨接數(shù)據(jù)(如有必要)創(chuàng)建一些空位(即重新分配 FAT 簇)并保存新的 FAT。例如,如果由于不可讀的原因,必要的扇區(qū)無法使用,轉(zhuǎn)換過程會失敗且 FAT 卷與試圖轉(zhuǎn)換前的狀態(tài)將保持一致。
- 在 FAT 可用空間中創(chuàng)建 NTFS 基本數(shù)據(jù)結(jié)構(gòu)。它們是適用于任何 NTFS 卷的固定大小的表示結(jié)構(gòu)。這些表的大小可能因卷的大小而有所不同,但這并不取決于卷上的文件的個(gè)數(shù)。
- 在 FAT 可用空間中創(chuàng)建 NTFS 主控文件表與目錄列表。該步驟所需的空間是可變的并取決于在 FAT 卷上的文件總個(gè)數(shù)。
- 將那些由 FAT 指定結(jié)構(gòu)所使用的 NTFS 簇在 NTFS 位圖中標(biāo)記為可用。轉(zhuǎn)換完成之后,F(xiàn)AT 圖元數(shù)據(jù)開銷可以重新作為 NTFS 的可用空間。
- 寫 NTFS 引導(dǎo)扇區(qū)。這是導(dǎo)致卷被識別為 NTFS 而非 FAT 的最后一步操作。如果轉(zhuǎn)換在此步驟之前的任一步驟失敗,該卷將仍將是有效的 FAT 卷并將識別為 FAT 卷。
由于在任何時(shí)候均有可能發(fā)生崩潰,上述過程最大限度減小了磁盤破壞的可能性。
備注:幾乎所有寫操作是到 FAT 可用空間的,因此轉(zhuǎn)換失敗會使 FAT 保持原樣。
例如,只有當(dāng)轉(zhuǎn)換失敗可能會引起問題時(shí),我們才寫入非可用空間,這些情況包括:
- 在步驟 1 的最后,當(dāng)“轉(zhuǎn)換”覆蓋 FAT 時(shí)。重新分配簇的算法可以保證:如果在該過程中出現(xiàn)轉(zhuǎn)換失敗,CHKDSK 將可以修復(fù)磁盤而不丟失任何數(shù)據(jù)。
- 在步驟 5,寫引導(dǎo)扇區(qū)時(shí)。如果在該步驟中出現(xiàn)故障,且正在轉(zhuǎn)換的卷是系統(tǒng)分區(qū)(用于引導(dǎo)系統(tǒng)的活動(dòng)主分區(qū)),就有可能使系統(tǒng)停留在它無法開始的狀態(tài)。發(fā)生這種情況(一般不可能發(fā)生)時(shí),仍有可能使用啟動(dòng)軟盤啟動(dòng)系統(tǒng)。
Convert.exe 根據(jù)在 FAT 卷上預(yù)先存在文件的個(gè)數(shù)以及卷的大小進(jìn)行計(jì)算以統(tǒng)計(jì)出在開始轉(zhuǎn)換之前需要多少可用空間。對于標(biāo)準(zhǔn)硬件(每個(gè)扇區(qū)有 512 字節(jié)的硬盤),計(jì)算方法為:
- 開始時(shí),將卷的大?。ㄒ宰止?jié)為單位)除以 100。如果該值小于 1,048,576,則取 1,048,576。如果該值大于 4,194,304,則取 4,194,304。
- 對上述值加上以字節(jié)為單位的卷大小除以 803 的數(shù)值。
- 對上述值加上卷上的文件與目錄的個(gè)數(shù)乘以 1280 的數(shù)值。
- 對上述值加上 196,096。
除上述算法之外,如果在 FAT 卷上有擴(kuò)展屬性信息,Convert.exe 將考慮所需要的額外空間。擴(kuò)展屬性信息通常不提供,而且在系統(tǒng)已運(yùn)行 OS/2 且使用擴(kuò)展屬性時(shí)才考慮提供。
上述算法基本上反映了由 Convert.exe 所執(zhí)行的算法。在給定系統(tǒng)上所獲得的實(shí)際結(jié)果可能會稍微有所不同。
備注:這是在嘗試轉(zhuǎn)換之前 Convert.exe 所需要的可用空間。該算法考慮了在 FAT 可用空間中可能遇到壞扇區(qū)的可能性。但是,在卷有足夠可用空間可以開始轉(zhuǎn)換且發(fā)現(xiàn)磁盤空間的重要碎片不可用的情況下,轉(zhuǎn)換過程可能會失敗。如上所述,這將不會導(dǎo)致磁盤損壞。卷應(yīng)自動(dòng)退回為 FAT 的狀態(tài)。