Por que “tar -cSf file.tar source” fica sem memória?

3

Eu estou tentando fazer o backup de 66 gigabytes para um NAS fazendo um tarball, mas "tar -cSf ..." sai com um erro de "memória esgotada" após o gigabyte 62. Minha máquina Linux tem um gigabyte de RAM e um gigabyte de espaço de troca.

(edit) Eu tentei novamente sobre onde o tar desistiu e o tar rapidamente desistiu novamente, então parece que ele pode estar tendo problemas para lidar com um arquivo especial.

Esses dados são surpreendentemente resistentes ao backup. O rsync é 4 vezes mais lento que o tar porque o NAS não é muito rápido e sai no meio com 'conexão redefinida pelo peer'; 'cp' não funciona bem no compartilhamento cifs porque não pode criar os arquivos especiais. Existe uma maneira melhor?

    
por joeforker 15.05.2009 / 13:48

3 respostas

3

-S está fazendo alguma verificação de arquivos esparsos (aqueles em que nem todas as extensões de arquivo são fisicamente alocadas no disco). Isso pode estar ficando sem memória. Tente executá-lo sem o -S (compacte-o se realmente quiser) e veja se isso resolve o problema.

tar cf foo.tar *

ou

tar czf foo.tar.gz *
    
por 15.05.2009 / 19:59
5

Eu não sei porque, mas posso sugerir que você tente algo como

tar -L 32212254720 -f piece1.tar -f piece2.tar -f piece3.tar <path>

que criará um arquivo para cada 30 GB. Se você atingir a marca de 120 GB, precisará adicionar um quarto arquivo (-f piece4.tar)

Se isto ainda falhar você poderia tentar com pequenos pedaços e escrever um script para gerar a linha de comando (porque uma linha de comando com argumentos 80 -f seria difícil de escrever :-))

    
por 15.05.2009 / 14:26
3

Tente passar a opção --hard-dereference. Isso desabilitará o rastreamento de link físico, que requer memória proporcional ao número de inodes que estão sendo armazenados em backup. Também pode ser interessante tentar stracing o processo tar enquanto ele tenta fazer o backup do arquivo com problema.

    
por 15.05.2009 / 19:49