O mesmo conteúdo de pasta, mas tamanhos diferentes em unidades diferentes, por quê?

O mesmo conteúdo de pasta, mas tamanhos diferentes em unidades diferentes, por quê?

Tenho três cópias da mesma pasta, mas os tamanhos são diferentes. Por que?

Eu tenho uma pasta "Documentos" que copiei de um lvm criptografado no disco rígido da minha área de trabalho para uma partição luks criptografada em uma unidade externa. Em seguida, copiei esta pasta da unidade externa para um lvm criptografado no disco rígido do meu laptop.

Portanto, tenho três cópias da mesma pasta:

  • Área de Trabalho
  • Unidade externa
  • Computador portátil

Eu usei diffentre desktop e unidade externa -> sem diferenças.

Eu usei diffentre laptop e unidade externa -> sem diferenças.

Mas tenho tamanhos de pasta diferentes para os três casos.

Eu tenho usado

du -bs --apparent-size Documents

para medir os tamanhos. Aqui estão os resultados:

  • Área de trabalho: 1735750760
  • Unidade externa: 1735742568
  • Computador portátil: 1735746664

Então, notamos que há uma pequena diferença entre os tamanhos. Pequena diferença, mas ainda está lá. Eu estava me perguntando por que isso acontecia. Você tem uma explicação?

Responder1

Você deve ter notado que a diferença entre as diferentes pastas é a seguinte:

    Desktop:        1735750760
                  -       8192
    External drive: 1735742568  
                  +       4096  
    Laptop:         1735746664  

Na minha experiência, essas diferenças de blocos de 4K geralmente resultam de alterações nos tamanhos dos diretórios. Se você comparar os tamanhos dos diretórios em si (em sistemas de arquivos ext geralmente múltiplos de 4K), poderá encontrar a diferença.
(por exemplo, os diretórios às vezes ficam menores quando são reestruturados durante uma operação de cópia e as entradas excluídas são eliminadas)

Para encontrar diretórios com tamanhos diferentes, você terá que compará-los entre si. O script a seguir pode ajudá-lo com isso:

#!/bin/bash
DIR1="${1%/}/"
DIR2="${2%/}/"

diff \
  <(find $DIR1 -type d -printf "%k %p\n" | sed -e "s|$DIR1||" | sort -k2) \
  <(find $DIR2 -type d -printf "%k %p\n" | sed -e "s|$DIR2||" | sort -k2)

Copie o código para um novo arquivo (por exemplo, dircomp.sh) e torne-o executável chmod +x dircomp.sh. Então chame de like ./dircomp.sh /home/lemenhir/ /media/lemenhir/ExternalDrive/.

A saída agora deve listar apenas diretórios com tamanhos diferentes e pode ter esta aparência:

< 4 Documents/Appartement/Bail
> 8 Documents/Appartement/Bail

onde as linhas que começam com <estão listando os diretórios localizados no diretório fornecido como o primeiro parâmetro (por exemplo, /home/lemenhir/) e as linhas que começam com >estão listando os diretórios localizados no diretório fornecido como o segundo parâmetro (por exemplo, /media/lemenhir/ExternalDrive/) .

Se aparecerem linhas únicas, o diretório não existe no diretório oposto.

Espero que isto ajude.

informação relacionada