Compreendendo os diferentes tamanhos de diretório

5

Ao comparar

root@debian:~# du -s /backup/test1/
5605364 /backup/test1/

dois diretórios com du ,

root@debian:/etc/init.d# du -s /data/test1/
5605360 /data/test1/

du me diz que há uma pequena diferença no tamanho total de cada diretório.

Diff, por outro lado, me diz que ambos os diretórios são idênticos:

root@debian:/etc/init.d# diff -r /data/test1/ /backup/test1/

Qual é o motivo?

    
por Rene 22.06.2014 / 16:14

3 respostas

6

du informa o "uso do disco" dos arquivos, não a contagem exata de bytes contida em cada arquivo. a página man de du diz:

du - estimate file space usage

é inteiramente possível que o mesmo conjunto de arquivos use uma quantidade diferente de espaço em disco. isso é por causa das complexidades do sistema de arquivos. para obter mais informações sobre o uso do disco no sistema de arquivos, leia a seguinte pergunta e respostas: link .

diff compara o conteúdo dos arquivos. diff não se importa com quantos bytes um arquivo realmente usa no sistema de arquivos. ele só se importa com os bytes nos arquivos .

se você quiser que du relate a contagem exata de bytes para cada arquivo, use --apparent-size .

    
por 22.06.2014 / 17:44
3

Desde que você não deu os detalhes, há espaço para especulação / adivinhação.

Eu diria que / data e / backup estão montados em diferentes partições que são formatadas usando diferentes tamanhos de bloco. Isso resultaria em uma medida ligeiramente diferente do espaço em disco usado fisicamente, já que um (ou mais) blocos adicionais (ou menos) são necessários.

Você pode verificar isso rapidamente executando df e copiando a /dev/... parte dos pontos de montagem /data e /backup e alimentando-os para file -s

por exemplo,

file -s /dev/sda1
    
por 22.06.2014 / 17:40
2

Isso provavelmente se deve a diferenças no tamanho dos diretórios individuais nas duas árvores de diretórios. Cada diretório é representado no disco por alguns blocos de disco que armazenam os nomes dos arquivos no diretório. Esses blocos são às vezes chamados de "arquivo de diretório". Quando você executa "ls -l" ou "ls -s", o campo de tamanho de um diretório é o tamanho desse arquivo de diretório.

Quando você cria um arquivo em um diretório, o nome do arquivo é adicionado ao arquivo do diretório. Se o arquivo de diretório não contiver espaço suficiente, ele poderá ter que ser ampliado adicionando outro bloco de disco. Quando você exclui um arquivo de um diretório, o nome do arquivo é removido do arquivo de diretório, deixando algum espaço não utilizado. O espaço não utilizado pode ser usado para armazenar outro nome de arquivo. Mas não é retornado ao sistema operacional, portanto, o arquivo de diretório pode aumentar de tamanho, mas nunca diminui.

Se você fosse comparar as árvores de diretório lado a lado, provavelmente descobriria que alguns dos diretórios correspondentes tinham tamanhos diferentes. Isso geralmente significa que um diretório costumava ter mais arquivos nele, ou arquivos com nomes maiores, ou tinha muita "suposição" de criação / exclusão de arquivos no passado.

Quando diff compara dois diretórios, ele verifica apenas se os dois diretórios possuem os mesmos nomes. Ele não verifica o espaço não utilizado nos respectivos arquivos de diretório e não se importa se os dois arquivos de diretório são realmente do mesmo tamanho.

    
por 22.06.2014 / 19:31

Tags