A discrepância é provavelmente causada pelo arquivo mais esparsamente ocupado no disco antigo.
De qualquer forma, primeiro vamos verificar se o arquivo e os números de inode são os mesmos:
- emite
find <path> | wc -l
em ambos os pontos de montagem. O número de arquivos / diretórios é o mesmo? - emite
df -i
. O número de inodes é o mesmo?
Se a resposta a ambas as perguntas for sim, a diferença pode ser explicada por um arquivo mais escasso no novo disco. Mas o que são arquivos esparsos? Em suma, arquivos esparsos são arquivos normais que são menores do que aparentam. Isso é possível graças a um recurso de sistemas de arquivos (relativamente) modernos que, em vez de escrever todos os zeros em um arquivo, simplesmente definem um sinalizador dizendo ao sistema "esse arquivo (ou parte dele) está cheio de zeros, não me deixe escrever todos eles ".
Por padrão, du
informa o espaço real ocupado pelo arquivo e não o tamanho aparente. Para mostrar o tamanho aparente, use du --apparent-size
(para outras opções, consulte du manpage )
Para um exemplo prático, você pode criar um arquivo esparso usando o comando truncate test.img -s 1G
. Conforme relatado por ls
, o arquivo recém-criado tem 1 GB de tamanho, mas se você tentar du -hs test.img
, verá um tamanho de arquivo muito pequeno (possivelmente zero!). Como isso é possível? Como dito acima, o moderno sistema de arquivos às vezes "mente" aos aplicativos, relatando um tamanho alocado que não existe na realidade. Do outro lado, du -hs --apparent-size test.img
imprimirá o mesmo tamanho que ls
.
Quando você começar a escrever em um arquivo esparso, o sistema de arquivos alocará dinamicamente o espaço necessário. Por exemplo, a emissão de dd if=/etc/services of=test.img conv=notrunc,nocreat
gravará alguns dados no arquivo test.img anteriormente todo esparso. Agora, a execução de du -hs test.img
reportará os ~ 600 KB alocados para armazenamento de dados.
Uma implicação óbvia, mas muito importante, é que o suporte a arquivos esparsos só pode otimizar arquivos com preenchimento zero (ou parte deles). No mesmo momento em que você escreve em um arquivo, seu espaço alocado começa a crescer. Este é um evento verdadeiro se você gravar outros zeros no arquivo, a menos que o aplicativo saiba como lidar com arquivos esparsos (nesse caso, o aplicativo informará ao sistema de arquivos que ele vai gravar todos os zeros e otimizar o sistema de arquivos). / p>
E se você quiser realmente pré-alocar algum espaço? Então você pode usar fallocate test.img -l 1G
. Se você executar ls; du -hs test.img; du -hs --apparent-size test.img
, verá que todas as ferramentas relatam o mesmo tamanho, porque o arquivo foi realmente totalmente alocado pela chamada fallocate
.
Em resumo, é possível que, durante a cópia, alguns arquivos tenham sido recriados de maneira menos esparsa, substituindo seções esparsas por zeros "reais". Para usar o arquivo esparso com rsync
você precisou usar a opção -S
.