Por que o `du --apparent-size` às vezes diminui em mais de 90%?

8

Estou trabalhando em um software que cria pacotes Pacman (que basicamente são tarballs com alguns arquivos de metadados especiais). O conjunto de testes cria alguns pacotes e compara o pacote resultante com um resultado esperado registrado.

Um dos campos nos metadados registrados no pacote é o tamanho instalado do pacote, determinado pela execução du -s --apparent-sizeno diretório raiz antes de tará-lo.

Tudo isso funciona perfeitamente nas minhas caixas locais do Arch Linux onde desenvolvo. Os pacotes, incluindo o tamanho instalado em bytes (nem kilobytes, bytes!), São reproduzidos exatamente toda vez que eu executo o teste.

Agora também habilitei esse teste no Travis, onde ele é executado (pelo que entendi nos documentos do Travis) em um contêiner baseado no Ubuntu 12.04. Lá, o teste passa na maioria das vezes. Na maioria das vezes. Às vezes, calcula os tamanhos instalados que estão desativados em 80-99%.

Aqui está um exemplo de teste que falha: https://travis-ci.org/holocm/holo/builds/89326780 (o teste logo antes do êxito). Uma das diferenças relevantes é

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

O mais intrigante disso é que isso acontece apenas algumas vezes, sem padrão aparente. O teste organiza os mesmos arquivos de sempre, é executado du -s --apparent-sizena árvore resultante e chega a um resultado completamente errado. Eu tentei reproduzir isso em uma VM do Ubuntu 12.04 e, embora eu tenha visto ele aparecer lá uma ou duas vezes, também não pude ver nenhum padrão surgindo lá que me ajudasse a reproduzir o problema.

Talvez alguém aqui tenha uma idéia do que poderia causar esse problema?

EDIT: Oh, há um padrão que eu observei, na verdade. dué executado uma vez para cada caso de teste. Quando falhar no primeiro caso de teste, falhará em todos os casos de teste nesta execução.

Stefan Majewsky
fonte
1
Para esclarecer, todas as entradas na árvore do sistema de arquivos em questão são arquivos, links simbólicos e diretórios simples e contíguos. Não há arquivos esparsos. Não há arquivos de dispositivo, FIFOs ou qualquer outro negócio descolado.
Stefan Majewsky 4/15
Quais são os sistemas de arquivos?
Mark Wagner
@ Marcos Wagner: É AUFS, de acordo com docs.travis-ci.com/user/workers/container-based-infrastructure
Stefan Majewsky
Algumas possibilidades: (1) o tamanho relatado está correto, mas em alguns casos existem alguns arquivos obsoletos restantes de outras operações (2) Não tenho certeza do AUFS, mas no NFS, os arquivos obsoletos excluídos serão renomeados .nfsNNNNNNNNN e podem contar para o inconsistência de tamanho. Como você tem certeza de que os tamanhos informados estão incorretos? Você pode tentar os subdiretórios e arquivos individuais, para que o local exato da inconsistência possa ser verificado?
Prem
1
O problema que você tem é o AUFS .... verifique os problemas associados a ele, verifique os motivos pelos quais não estão nos kernels mais recentes, verifique a "estabilidade", verifique a "integridade do POSIX".
precisa saber é o seguinte

Respostas:

1

Bem, fui solicitado a colocar isso como resposta por @derobert

O problema que você tem é o AUFS .... verifique os problemas associados a ele, verifique os motivos pelos quais não estão nos kernels mais recentes, verifique a "estabilidade", verifique a "integridade do POSIX". - Hvisage 24/01 às 20:55

Hvisage
fonte