¿Por qué a veces `du --apparent-size` está apagado en más del 90%?

8

Estoy trabajando en un software que crea paquetes Pacman (que básicamente son tarballs con algunos archivos especiales de metadatos). El conjunto de pruebas crea algunos paquetes, luego compara el paquete resultante con un resultado esperado registrado.

Uno de los campos en los metadatos registrados en el paquete es el tamaño instalado del paquete, determinado al ejecutarse du -s --apparent-sizeen el directorio raíz antes de tar' taring.

Todo esto funciona perfectamente en mis cuadros locales de Arch Linux donde desarrollo. Los paquetes, incluido su tamaño instalado en bytes (¡ni siquiera kilobytes, bytes!) Se reproducen exactamente cada vez que ejecuto la prueba.

Ahora también he habilitado esta prueba en Travis, donde se ejecuta (hasta donde yo entiendo de los documentos de Travis) en un contenedor basado en Ubuntu-12.04. Allí, la prueba pasa la mayoría de las veces. La mayoría de las veces A veces, calcula los tamaños instalados que están apagados en un 80-99%.

Aquí hay un ejemplo de una prueba que falla: https://travis-ci.org/holocm/holo/builds/89326780 (La prueba justo antes de eso tuvo éxito). Una de las diferencias relevantes es

@@ -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

Lo sorprendente de esto es que solo sucede algunas veces, sin un patrón aparente. La prueba organiza los mismos archivos de siempre, se ejecuta du -s --apparent-sizeen el árbol resultante y llega a un resultado completamente incorrecto. Intenté reproducir esto en una VM Ubuntu 12.04, y aunque lo vi aparecer allí una o dos veces, tampoco pude ver ningún patrón que me ayudara a reproducir el problema.

Tal vez alguien aquí tiene una idea de qué podría causar este problema.

EDITAR: Oh, hay un patrón que observé, en realidad. duse ejecuta una vez para cada caso de prueba. Cuando falla para el primer caso de prueba, fallará para todos los casos de prueba en esta ejecución.

Stefan Majewsky
fuente
1
Para aclarar, todas las entradas en el árbol del sistema de archivos en cuestión son archivos contiguos simples, enlaces simbólicos y directorios. No hay archivos dispersos. No hay archivos de dispositivo, FIFO o cualquier otro negocio funky.
Stefan Majewsky
¿Qué son los sistemas de archivos?
Mark Wagner
@ Mark Wagner: Es AUFS, de acuerdo con docs.travis-ci.com/user/workers/container-based-infrastructure
Stefan Majewsky
Algunas posibilidades: (1) el tamaño informado es correcto, pero en algunos casos quedan algunos archivos obsoletos de otras operaciones (2) No estoy seguro de AUFS, pero en NFS, los archivos obsoletos eliminados se renombrarán .nfsNNNNNNNN y estos podrían contar para el inconsistencia de tamaño. ¿Cómo está seguro de que los tamaños informados son incorrectos? ¿Puede probar du en los subdirectorios y archivos individuales, para que se pueda verificar la ubicación exacta de la inconsistencia?
Prem
1
El problema que tiene es AUFS ... verifique los problemas asociados con él, verifique las razones por las que no está en los núcleos más recientes, verifique su "estabilidad", verifique que esté "completo en POSIX".
Hvisage

Respuestas:

1

Bueno, @derobert me ha pedido que responda esto

El problema que tiene es AUFS ... verifique los problemas asociados con él, verifique las razones por las que no está en los núcleos más recientes, verifique su "estabilidad", verifique que esté "completo en POSIX". - Hvisage 24 de enero a las 20:55

Hvisage
fuente