%20%D1%84%D0%B0%D0%B9%D0%BB%20%D0%B8%D0%B7%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B3%D0%BE%20tar.gz%2C%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%2F%D0%B4%D0%B8%D1%81%D0%BA%D0%B0%3F.png)
Я знаю, что можно извлечь один файл из 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