du 随着时间的推移显示不同的数字,并且文件大小不合理地小

du 随着时间的推移显示不同的数字,并且文件大小不合理地小

我在 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显示底层存储大小(例如块数乘以某个因子),但我仍然希望始终打印相同的确定性结果。

到底是怎么回事?

答案1

在某些文件系统上,像 ZFS 和 Btrfsdu,没有--apparent-size的结果随时间变化

无法保证文件系统不会随着时间的推移而延迟、重新排列、压缩、重复数据删除或以其他方式修改物理存储。

因此,plaindu可以随时给出不同的结果。


详细示例:在调用strace -v上运行du显示显示从 -type 系统调用返回的数据stat;第一的:

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, ...

相关内容