du e ls reportam tamanho de diretório diferente?

1

Ao tentar verificar se uma operação de cópia foi concluída com êxito (ou pelo menos que ela não ignorou nenhum arquivo), executei du -b dentro do diretório de origem e de destino e mostrei uma diferença de cerca de 100 KB.

Então, fui rastreando a diferença e encontrei um (de vários) diretório de folhas onde du informa uma diferença no tamanho total da cópia e do original.

O mais estranho é que ls -l mostra esses diretórios como perfeitamente idênticos!

Aqui estão as duas saídas nos dois diretórios diferentes:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

vs.

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

Observe como o tamanho relatado por du -b é menor que o informado por ls -l e que difere para os dois diretórios. A saída inteira de ls -l é idêntica para ambos os diretórios.

Não há links simbólicos ou arquivos de sistema neste diretório. É apenas um monte de arquivos .jpg (uma cópia direta do cartão SD de uma câmera) e um arquivo Thumbs.db que o Windows criou para eles (via samba) ...

Estou faltando alguma coisa sobre como esses comandos devem funcionar?

(Estou executando o Debian Wheezy e uname -a outputs Linux ... 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux )

    
por Markus A. 17.12.2014 / 09:52

2 respostas

0

Depois de adicionar a opção -a a ls , obtive:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -al --block-size=1
total 5292867584
drwxr-xr-x 2 markus markus     12288 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

vs.

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -als --block-size=1
total 5292871680
drwxr-xr-x 2 markus markus     16384 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

Observe a diferença no tamanho do . -directory, que corresponde exatamente à diferença relatada por du -b .

Além disso, parece que o total relatado por ls está realmente em blocos e não em bytes. Então a resposta é meio que @jcbermu sugerida, mas ao contrário:

Sim, ambos estão certos, mas ls informa o tamanho total em blocos fs usados (mas tamanhos de arquivo individuais em bytes) e du -b relatórios bytes.

A diferença entre a origem e o destino que estou vendo é causada por uma diferença no tamanho relatado para . . De onde isso vem, é outra história. Provavelmente porque um reservou mais entradas de diretório em algum momento do que o outro. Mas pelo menos agora não me preocupo mais com o fato de que algo ficou perdido no processo de cópia. O próximo passo é descobrir como informar du para ignorar . e .. em seus totais e isso deve resolver meu problema.

    
por 17.12.2014 / 11:26
3

Ambos estão certos.

  • ls mostra os bytes exatos dos arquivos
  • du está mostrando o uso do disco, que é diferente porque o sistema armazena os arquivos usando blocos.

Você pode encontrar o tamanho do bloco que seu sistema de arquivos está usando com este comando:

blockdev --getbsz <partition>

Por exemplo:

blockdev --getbsz /dev/sda1
    
por 17.12.2014 / 10:23

Tags