tar: extraer un archivo único (pequeño) de un tar.gz grande, ¿uso de memoria/disco?

tar: extraer un archivo único (pequeño) de un tar.gz grande, ¿uso de memoria/disco?

Soy consciente de que puedes extraer un solo archivo de tar.

tar -xf file.tar.gz /small/single/file

Tengo la intención de ejecutar esto en un sistema integrado con disco/ram limitado. Me gustaría saber cómo maneja este comando archivos tar grandes.

¿Extraer un solo archivo hace que todo el tarball se descomprima en la memoria? No me importa descomprimirlo todo, pero siempre que lo haga con un pequeño búfer.

Digamos que tengo 100 MB de RAM disponibles y 5 MB de espacio en disco disponibles. Además, /small/single/filetiene menos de 5 MB. Además, el archivo tar de origen es de 500 MB. ¿Puedo extraer con seguridad /small/single/file?

Respuesta1

La respuesta probablemente dependa de la implementación que taresté utilizando, pero de manera realista, esperaría que la mayoría de las implementaciones procesen el tarball utilizando un búfer relativamente pequeño. Usando GNU taren un bzip2tarball comprimido de 2GiB, para extraer un solo archivo, obtengo

64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps

(usando GNU time). Como puede ver, el tamaño máximo residente es inferior a 5MiB.

Respuesta2

Para minimizar el uso de RAM/disco, recomendaría usar tuberías como esta:

gzip -dc file.tar.gz| tar -f - /small/single/file

información relacionada