%20de%20um%20grande%20tar.gz%2C%20uso%20de%20mem%C3%B3ria%2Fdisco%3F.png)
Estou ciente de que você pode extrair um único arquivo do tar
.
tar -xf file.tar.gz /small/single/file
Pretendo rodar isso em um sistema embarcado com disco/ram limitado. Gostaria de saber como este comando lida com tarballs grandes.
A extração de um único arquivo faz com que todo o tarball seja descompactado na memória? Não me importo de descompactar tudo, mas desde que faça isso com um pequeno buffer.
Digamos que eu tenha 100 MB de RAM disponíveis e 5 MB de espaço em disco disponível. Além disso, /small/single/file
tem menos de 5 MB. Além disso, o tarball de origem tem 500 MB. Posso extrair com segurança /small/single/file
?
Responder1
A resposta provavelmente depende da implementação que tar
você está usando, mas, realisticamente, esperaria que a maioria das implementações processasse o tarball usando um buffer relativamente pequeno. Usando GNU tar
em um bzip2
tarball compactado de 2GiB, para extrair um único arquivo, recebo
64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps
(usando GNU time
). Como você pode ver, o tamanho máximo do residente é inferior a 5 MiB.
Responder2
Para minimizar o uso de RAM/disco, eu recomendaria usar pipes como este:
gzip -dc file.tar.gz| tar -f - /small/single/file