為什么文件占用的空間會大於文件實際大小.


如果你檢查文件夾的屬性,你會看到文件大小(Size)和文件在磁盤上的大小 (Size on disk).

這兩個值或多或少有點差異,這取決於你用的文件系統和文件類型.

有可能兩個值之間會相差1GB甚至更多 .

你可以在Windows Explorer中右擊任意文件夾然后在右鍵菜單中選擇屬性(properties)來驗證.

如果文件夾中有大量文件,可能需要一段時間才能顯示完畢.

以下截圖中你可以看到,有0.2GB( Gigabyte )的差異,相對總數來說並不大.然而不同情況下可能有很大的差異.

size on disk

那么為什么有差異呢?

原因在於文件系統(file systems )和簇(cluster sizes)大小.這里不打算講太多細節的東西,每個文件系統Windows都支持.比如NTFS或者FAT32, 都用簇(clusters)的概念

簇是一個磁盤空間的最小單元  微軟官方解說如下:

簇大小是一個磁盤用來存儲文件的最小單位. 如果一個文件大小不是簇的偶數倍,額外的空間必須用來儲存這個文件,直至到簇的下一個偶數倍數。(這個是直翻的感覺不太好理解,按照我對簇的理解應該是… 如果一個文件沒有超過一個或多個簇的大小,那么簇剩余的空間也會分配給這個文件.直到下個文件才會用新的簇保存.)

一些默認的簇大小:

  • NTFS 2 GB - 16 TB drives - 4 KB
  • FAT16 1 GB - 2 GB drives - 32 KB
  • FAT16 2 GB - 4 GB drives - 64 KB
  • FAT32 256 MB - 8 GB drives - 4 KB

想象下這個情景: 如果你有 1 Gigabyte FAT16 的磁盤. 在上面存儲了1000個大小為 1 Kilobyte 的文件.

屬性對話框中的文件大小會顯示 1,000 Kilobyte, 而文件在磁盤上的大小會顯示 32,000 Kilobyte (1000x32KB) ,共 31,000 Kilobyte的差異.

每個文件的大小是 1 Kilobyte, 然后浪費 31 Kilobyte . 原因這個磁盤簇的大小是32 Kilobyte.

這個問題在Fat32和NTFS的文件系統上有所減小,因為這兩個系統默認的簇大小是4 Kilobyte. 不過一些USB 設備,或者老系統可能還是用FAT16文件系統.

隨着容量的增加,這個又一次成為了問題. 一個64TB的NTFS卷是32kb .

查看磁盤的簇大小

cluster size windows

  1. 按下Windows鍵,然后輸入CMD ,右擊顯示的cmd.exe然后在右鍵菜單中選擇以管理員運行.
  2. 在命令行窗口中輸入 chkdsk  盤符(比如 chkdsk d:) 然后等待執行完成.
  3. 檢查 "bytes in each allocation unit" 這一項. 他是字節(bytes)單位. 如果你要轉為KB(Kilobytes), 除以1024就可以了. 以圖中的例子來說 , 4096 bytes就是4 Kilobyte (4096 / 1024 = 4).

我們能做什么?

基於具體存儲使用,我們可以減少簇的大小:

  1. 用Fat32 或 NTFS 代替FAT16(14年的文檔..我感覺FAT16實在太遙遠了,這年頭還用FAT16的估計也轉不到FAT32和NTFS). 不過這個可能無法實現,比如有些文件系統就是要求FAT16格式. 如果沒有這樣的需求,你最好轉一下,用來節省空間. 你可以用命令行工具 CONVERT進行轉換.比如你要把文件系統轉為ntfs , 你可以打這個命令CONVERT d: /fs:ntfs (注 : FAT文件系統的原有數據不會丟失).
  2. 分區的時候.你同樣可以減少每個盤的簇大小.默認情況下 512 MB FAT16 分區簇大小是 16KB, 1GB是32KB.

英文原文在此,轉載請注明出處.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM