Disk-Usage

du 隨著時間的推移顯示不同的數字,以及不合理的小文件大小

  • May 26, 2020

我在 bash 腳本中執行這樣的東西:

set -x
time convert 'cat.png' -quality 100 test.webp
time convert 'cat.png' -quality 100 test.jpeg

du -h test.webp test.jpeg

它通常會像這樣列印輸出:

+ du -h test.webp test.jpeg
512  test.webp
387K test.jpeg

512webp 文件的字節數似乎小到不可思議,對吧?

當我du -h在終端中執行之後,它會顯示不同的大小(這更合理)。

我知道du沒有--apparent-size顯示底層儲存大小(例如塊數乘以某個因子),但我仍然希望它始終列印相同的確定性結果。

到底是怎麼回事?

在某些文件系統上,例如 ZFS 和 Btrfsduwithout的結果--apparent-size隨著時間而變化

無法保證文件系統不會隨著時間的推移延遲、重新排列、壓縮、重複數據刪除或以其他方式修改物理儲存。

因此,plaindu可以隨時給出不同的結果。


詳細範例:strace -vdu呼叫顯示上執行顯示從stat-type 系統呼叫返回的數據;第一的:

newfstatat(AT_FDCWD, "test.webp", { ... st_blksize=131072, st_blocks=1, st_size=464124, ...

不久之後:

newfstatat(AT_FDCWD, "test.webp", { ... st_blksize=131072, st_blocks=1029, st_size=464124, ...

引用自:https://unix.stackexchange.com/questions/589034