Sou um novo usuário do Linux e ainda estou aprendendo. Pelo que entendi, o tar
comando (por si só e sem opções como z
, j
ou J
) não compacta arquivos por padrão. Ele apenas agrupa vários arquivos em um único. Abaixo está meu teste.
root@u2004:~# du -sh /etc/
11M /etc/
root@u2004:~# tar cf etc.tar /etc
tar: Removing leading `/' from member names
root@u2004:~# du -sh etc.tar
6.6M etc.tar
root@u2004:~#
Como você pode ver, os arquivos no /etc
diretório são 11M no total. Depois de arquivá-los em um único arquivo, o novo arquivo compactado terá 6,6 M. De onde vem a diferença de tamanho? É porque os arquivos são escritos de forma contígua e compactados?
O
du
, por padrão, mede o tamanho do arquivo em 'blocos'. Assim, cada arquivo pequeno (que é menor que um bloco) ocupa o máximo do bloco, conforme necessário, e o restante fica vazio. Mas não pode ser usado por outro arquivo (já que um bloco pode pertencer a apenas um arquivo). E, portanto, você tem uma certa quantidade de bytes 'desperdiçados'.Por
tar
outro lado, concatena todos os arquivos. Muito menos espaço 'desperdiçado'.Você pode usar a tecla
-b
paradu
se quiser ver uma melhor previsão do tamanho do tar.Significado se você correr
Você obterá números muito mais próximos em tamanho um do outro. A diferença virá das descrições dos arquivos. Um tamanho do diretório no primeiro caso e tamanho do cabeçalho tar no segundo.
Para investigar mais a fundo, você pode começar com:
Isso lhe dirá em qual dispositivo físico esse diretório está localizado (coluna Filesystem)
Defina seu dispositivo aqui e você obterá o tamanho do bloco nesse dispositivo.
Se você fizer
du /some_test_dir
isso e esse diretório estiver vazio - você obterá um tamanho de bloco.Se você agora colocar um arquivo (ou muitos arquivos), todos com comprimento zero,
du
o diretório ainda fornecerá um tamanho de bloco - isso porque os arquivos não estão ocupando nenhum espaço e as informações sobre eles é armazenado dentro do bloco do diretório.Para o próximo teste, crie neste diretório N arquivos cada um deles com tamanho menor que um bloco. O tamanho real não importa, tem que ser maior que zero, menor que um bloco. Agora
du
no diretório lhe dará(N+1)*block
. Aqui cada arquivo terá um bloco e um diretório em si leva um bloco.Se você tiver muitos arquivos (quantos depende do sistema de arquivos), o próprio diretório pode aumentar de tamanho para armazenar informações de arquivos nele. Mas o tamanho do diretório sempre será um múltiplo do tamanho do bloco.