absmiddle Fragmentation / 磁碟碎裂


[解說] jackei@Maxwell (晶煢): 一般較專門的書籍, 會提到 External & Internal Fragmentation ◆ External Fragmentation (外部碎裂) 由於檔案會不斷讀寫, 可用的磁碟空間會被劃分為許多小區域. (跑磁碟重組程式時應 該看的很清楚?) 雖然擁有足夠的總合磁碟空間, 但檔案就放不下了. 比如說, 要放置 100KB 的檔案, 剩餘空間為 70KB, 80KB 的不連續區間, 雖然總共有 150KB, 但實際 上放不下去, 這些空間就造成了浪費, 稱做外部碎裂. 浪費的程度, 視磁碟容量大小, 檔案平均大小, 配置演算法 (Best Fit, First Fit...) 而定. 一般來說, 分配 N 個 區間將會遺失其它的 0.5N; 也就是說, 平均有 1/3 的空間會浪費掉, 這就是所謂的 50-Percent Rule. 可怕!? (這種方法大概只會在舊式電腦的軟碟上出現) 不過... 這只有在檔案系統採 連續配置 (Contiguous Allocation) 才會發生. DOS, Win95 所用的 FAT 是 鏈結配置 (Linked Allocation), WinNT 所用的 NTFS 是 索引 配置 (Index Allocation) 都不會發生. (所以上面一段都是廢話:P) 鏈結或是索引配 置將磁碟分割為許多的基本單位. 比如說, 10KB 為一單位. 放置 100KB 的檔案, 就 分為十等份分別放置. 至於要怎麼放, 怎麼連結分散的檔案, 不同檔案系統有不同的 做法, 在此暫時打住. 由於不需要連續配置, 就不會有塞不下去浪費掉的情況發生. 大問題解決了, 小問題又跑出來了. ◆ Internal Fragmentation (內部碎裂) 剛剛提到, 將磁碟分割為許多的基本單位. 如果有個 38KB 的檔案, 會佔掉多少空間? 答案是 40KB. 10+10+10+8 為什麼是 40? 最後那 8KB 塞入 10KB 的區間後, 雖然剩 下 2KB 的空間但無法再利用了.(檔案資料結構設計使然) 平均每配置一個檔案, 會浪 費 5KB (10/2, 機率使然) 的空間. 基本單位越小, 所浪費的空間也就越少. 常聽人 說 FAT16 浪費空間道理何在? FAT16 的 16 代表它使用 16 個 bit 來表示基本單位. 也就是只能有 2^16=65536 個. 一個 128MB 的小分割區, 一個單位就是 128MB/65536 =2KB. 一個 2GB 的大分割區呢? 一個單位 2048MB/65536=32KB, 浪費空間爆增! 所以說, 基本單位越小越好?... 那也未必. ◆ 所謂的 Fragmentation (磁碟碎裂) 越小的基本單位代表越 "多" 的基本單位. 存取一個檔案要花更多次數 (時間) 搜尋. 再者, 檔案分的越細, 散佈在磁碟上就越雜亂, 這就是一般所謂的 磁碟碎裂. 畫個圖看看... 相同的數字代表相同的檔案 | 1 | 2 | 3 | 2 | 3 | 2 | <= 大的基本單位 |1|2|3|1|2|3|2|2|3|2|2|3| <= 小的基本單位 誰的碎裂嚴重? 誰存取會辛苦些? 凡事有利有弊... 基本單位越小, 空間利用率越好 = 磁碟碎裂越嚴重, 存取效率降低 ◆ Defragmentation (磁碟重組) 磁碟碎裂在磁碟不斷存取後越形嚴重. FAT 的磁碟重組方式大致上有幾種做法: 1.把所有檔案往前壓緊 (Compact), 空出最大的可用空間, 稍後配置時較容易連續. 2.重組所有檔案, 比如說 |1|2|1|2|2|1| => |1|1|1|2|2|2|, 減少搜尋時間. 3.常用的檔案擺在前頭, 常變動的檔案放在後頭. Win95 內附的磁碟重組只能做到 1, Norton Utility 的 Speedisk 還考慮到 2, 3. ◆ FAT16, FAT32, NTFS 的 Fragmentation 以上講的是基本的特性, 真正檔案系統的實作還有許多效能上的改良. 拿 Win95 的 FAT (VFAT) 來說, 在配置檔案時會先尋找到至少 0.5MB 的連續空間才 配置, 如此多少降低了碎裂的程度. FAT32 的單位遠較 FAT16 小, 空間的利用率的確 好很多, 但另一方面就是存取效能的下降. (理論上一定比 FAT16 慢) NTFS 的基本單位 (0.5KB-4KB) 比 FAT32 (0.5KB-32KB) 更小, 磁碟空間的利用率一 定比較好? 那也未必. NTFS 的 MFT (Master File Table, 相對於 FAT 的 FAT, File Allocation Table, 記錄檔案資訊的列表.) 遠比 FAT 大. (NTFS 的保密性, 可回復 性其來有自.) 若在小磁碟上(<512MB), "浪費" 掉的空間足以抵掉內部碎裂小的優勢 而有餘. NTFS 在大容量磁碟上才能說是利用率較佳. NTFS 的基本單位小, 磁碟碎裂一定比 FAT 嚴重? 那也未必. NTFS 是 索引配置, 盡 量將檔案配置在附近減少碎裂. 細節我並不清楚, 也許是像 BSD 的 磁柱群 (Cylinder Group) 觀念. 檔案傾向配置在連續磁柱上, 使得存取時磁頭移動距離最小. 只有在 常擴充檔案, 或是剩下的可用空間太小時, 磁碟碎裂較容易發生.
上一層目錄