为什么 `du --apparent-size` 有时会相差 90% 以上?

为什么 `du --apparent-size` 有时会相差 90% 以上?

我正在开发一个构建 Pacman 包的软件(基本上是带有一些特殊元数据文件的 tarball)。测试套件构建一些包,然后将生成的包与记录的预期结果进行比较。

包中记录的元数据字段之一是包的安装大小,该大小是通过du -s --apparent-size在打包之前在根目录上运行来确定的。

所有这些在我开发的本地 Arch Linux 机器上都运行得很好。每次运行测试时,都会准确地再现这些包,包括其安装的大小(以字节为单位)(甚至不是千字节,字节!)。

现在我还在 Travis 上启用了此测试,它在基于 Ubuntu-12.04 的容器上运行(据我从 Travis 文档中了解到)。在那里,测试大部分时间都会通过。最多时代的。有时,它计算出的安装尺寸有 80-99% 的偏差。

下面是一个失败的测试示例:https://travis-ci.org/holocm/holo/builds/89326780(考试就在那之前成功。)相关差异之一是

@@ -37,7 +37,7 @@
             pkgdesc = my foo bar package
             url = 
             packager = Unknown Packager
-            size = 37728
+            size = 1464
             arch = any
             license = custom:none
             replaces = foo-bar<2.1

令人费解的是,这种情况只在某些时候发生,没有明显的模式。该测试一如既往地排列相同的文件,du -s --apparent-size在生成的树上运行,并得出完全错误的结果。我尝试在 Ubuntu 12.04 VM 上重现此问题,虽然我看到它在那里出现一两次,但我也看不到那里出现任何可以帮助我重现问题的模式。

也许这里有人知道什么可能导致这个问题?

编辑:哦,实际上我观察到了一种模式。du每个测试用例运行一次。当第一个测试用例失败时,本次运行中的所有测试用例都将失败。

答案1

嗯,@derobert 提示我将此作为答案

你遇到的问题是 AUFS ....检查与之相关的问题,检查它不在最新内核中的原因,检查它的“稳定性”,检查它的“POSIX 完整性”。 – Hvisage 1 月 24 日 20:55

相关内容