稀疏檔案

稀疏檔案(英語:sparse file)是一種計算機檔案,它能嘗試在檔案內容大多為空時更有效率地使用檔案系統的空間。它的原理是以簡短的信息(元數據)表示空數據塊,而不是在在磁碟上占用實際空間來存儲空數據塊。只有真實(非空)的數據塊會按原樣寫入磁碟。

基本介紹

  • 中文名:稀疏檔案
  • 外文名:sparse file
  • 性質計算機檔案
  • 領域:計算機
簡介,缺點,Unix中的稀疏檔案,創建,刪除,複製,通過標準輸入,

簡介

在讀取稀疏檔案時,檔案系統會按元數據在運行時將這些透明轉換為“真實”的數據塊,即填充為零。應用程式不會察覺這個轉換。
大多數現代的檔案系統支持稀疏檔案,包括大多數Unix變種和NTFS。蘋果的HFS+不提供稀疏檔案支持,但在OS X中,虛擬檔案系統層支持在任何受支持檔案系統中存儲稀疏檔案,包括HFS+。2016年6月在WWDC宣布的蘋果檔案系統(APFS)支持稀疏檔案。稀疏檔案常被用在磁碟映像、資料庫快照、日誌檔案和科學套用中。
稀疏檔案的優勢是,它分配的存儲空間只在需要時使用:這樣節省了磁碟空間,並且可以創建很大的檔案,即使檔案系統中的可用空間不足。這也減少了首次寫入的時間,因為系統不會分配“跳過”的空間。如果初始分配需要寫入全零到空間,這也使得系統不必寫入兩次。

缺點

稀疏檔案的缺點包括:稀疏檔案可能碎片化;檔案系統的空餘空間報告可能產生誤導;包含稀疏檔案的檔案系統被填滿可能產生意外效果,例如只是重寫現有檔案的內容時遭遇磁碟已滿或超出配額錯誤——開發者未預料到檔案可能被稀疏;使用非顯式支持的電腦程式複製稀疏檔案可能會複製整個內容,即未壓縮的檔案大小,包括未實際在磁碟上分配的零空間——也就是使稀疏檔案失去稀疏屬性。稀疏檔案也不是被所有備份軟體和套用支持。不過,VFS的實現迴避了先前兩個缺點。在Windows上載入稀疏的執行檔(exe或dll)可能需要更多時間,因為檔案不被映射到記憶體和快取。

Unix中的稀疏檔案

稀疏檔案通常對用戶透明(不可見)處理。但在某些情況下,稀疏檔案會與正常檔案顯現出差異。

創建

Unix命令:
dd of=sparse-file bs=1k seek=5120 count=0
將創建一個5MB大小的檔案,但不在磁碟上存儲數據(僅存儲元數據)。(GNUdd也有此表現,因為它調用ftruncate來設定檔案大小;其他實現可能是只創建一個空檔案)。 如果truncate命令可用,也可以使用它:
truncate -s 5M <filename>

刪除

ls命令的-s選項會以塊為單位顯示已占用的空間。
ls -ls sparse-file
或者,du命令將列印占用的空間,而ls列印明面的大小。在一些非標準的du版本中,--block-size=1選項列印位元組而非塊單位的占用空間,因而可以與ls的輸出比較:
du --block-size=1 sparse-file ls -l sparse-file

複製

一般來說,GNU版本的cp是檢測檔案是否為稀疏檔案的較好方式,所以
cp sparse-file new-file
創建一個新檔案,它將是稀疏性質。但是,GNU版本的cp沒有--sparse=WHEN選項。這尤為有用,如果一個已保存檔案包含長串零塊且非稀疏方式保存(即長串的零塊已被完全寫入並占用磁碟空間)。用此命令可以節省磁碟空間:
cp --sparse=always file1 file1_sparsed
在某些例如FreeBSD的cp實現中,--sparse選項不被支持,將始終展開稀疏檔案。這些系統上的可行替代方案是使用rsync的--sparse選項代替cp。遺憾的是--sparse無法與--inplace組合使用,因此通過網路rsync巨大檔案時始終會浪費網路和磁碟頻寬。

通過標準輸入

cp --sparse=always /proc/self/fd/0 new-sparse-file < somefil

相關詞條

熱門詞條

聯絡我們