File-Copy
在複製時,考慮的是:實際尺寸還是外觀尺寸?
我想知道我是否有一個表觀大小為 1 GiB 但實際大小為 0 B 的文件可以復製到例如具有 512 kiB 可用空間的 USB 快閃記憶體棒?
您可以使用以下方法創建文件:
dd if=/dev/null of=big-file bs=1 seek=1GiB
現在您可以看到外觀和實際尺寸:
du --apparent-size -hs big-file
注意:刪除
--apparent-size
選項以獲取實際大小。所以,主要的問題是:將文件複製到某個目錄時要考慮哪個大小,比如硬碟驅動器、USB 快閃記憶體棒、DVD 等?
真實大小。
目標文件的。
最簡單的實現是不要嘗試提前預測。
除此之外,還需要一小部分作為成本。這種成本將更加難以預測。
對稀疏文件的支持因文件系統和製作副本的程序而異。最值得注意的是,FAT 文件系統不支持稀疏文件。
GNU
cp
自動檢測和處理稀疏文件。它不會提前檢查空間。(基於 GNU coreutils 8.29 的文件)預設情況下,稀疏的 SOURCE 文件由粗略的啟發式檢測,相應的 DEST 文件也變得稀疏。那是 選擇的行為
--sparse=auto
。指定--sparse=always
在 SOURCE 文件包含足夠長的零字節序列時創建稀疏 DEST 文件。請注意,文件系統可以有不同的塊大小。這會導致稀疏文件使用的空間量增加,甚至減少!
(寫入文件數據通常還需要佔用自己空間的內部文件系統結構。這沒有顯示在文件大小中 - 既不是實際大小,也不是表觀大小。在傳統的 UNIX 文件系統設計中,您還需要一個空閒的 inode。空間可用於 inode 由 顯示
df -i
。最明顯的是,您需要一些空間來儲存文件名:-);這通常顯示在父目錄的大小中。這在我可以通過創建大量空文件來耗盡磁碟空間的問題中具體討論嗎?)