tar --извлечь один (маленький) файл из большого tar.gz, использование памяти/диска?

tar --извлечь один (маленький) файл из большого tar.gz, использование памяти/диска?

Я знаю, что можно извлечь один файл из tar.

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

Я собираюсь запустить это на встроенной системе с ограниченным диском/оперативной памятью. Я хотел бы узнать, как эта команда обрабатывает большие tarballs.

Приводит ли извлечение одного файла к распаковке всего tarball в память? Я не против распаковки всего, но при условии, что это будет происходить с небольшим буфером.

Допустим, у меня доступно 100 МБ оперативной памяти и 5 МБ свободного места на диске. Кроме того, /small/single/fileменьше 5 МБ. Кроме того, исходный tarball составляет 500 МБ. Могу ли я безопасно извлечь /small/single/file?

решение1

Ответ, вероятно, зависит от реализации, которую tarвы используете, но реалистично я бы ожидал, что большинство реализаций обработают tarball, используя относительно небольшой буфер. Используя GNU tarна 2GiB bzip2-сжатом tarball, чтобы извлечь один файл, я получаю

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

(используя GNU time). Как видите, максимальный размер резидента составляет менее 5 МБ.

решение2

Чтобы минимизировать использование оперативной памяти/диска, я бы рекомендовал использовать такие каналы:

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

Связанный контент