Самый быстрый способ извлечь tar.gz

42

Есть ли способ извлечь файл tar.gz быстрее, чем tar -zxvf filenamehere?

У нас большие файлы, и мы пытаемся оптимизировать работу.

Джастин
источник
2
Вы находите, что $ tar -zxvfметод связан с IO или CPU?
EEAA
1
Поверьте процессор, как я могу проверить, хотя?
Джастин
5
Не напрямую связаны, но «г» не требуется , так как 2004 / смола v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Ответы:

57

pigz - это параллельная версия gzip. Хотя он использует только один поток для распаковки, он запускает 3 дополнительных потока для чтения, записи и проверки вычислений. Ваши результаты могут отличаться, но мы видим значительное улучшение в декомпрессии некоторых наших наборов данных. После установки pigz файл tar можно извлечь с помощью:

pigz -dc target.tar.gz | tar xf -

TIMS
источник
11
+1. FWIW, вы также можете написать это как tar -xvf --use-compress-program=pigz filenamehere. ( -zсоставляет --use-compress-program=gzip.) В качестве альтернативы, вы можете даже сделать gzipсимволическую ссылку pigzи продолжать использовать -zxvf.
Руах
2
@ruakh, я должен был поставить -xfпосле --use-compress-program=pigz, или я получил ошибку. По какой-то причине это было не быстрее, чем при использовании gzip.
Джондерри
Ибо bzip2есть pbzip2( pдля параллели). tar --use-compress-program=pbzip2 -xvf file.tar.bz2,
AlfC
Есть ли способ использовать pvкоманду, чтобы показать прогресс, или эквивалент, при этом используя --use-compress-program=pigzфлаг? Во время сжатия я могу сделать gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourData, но не уверен, как это сделать во время разархивирования / распаковки.
Стефан Ласевски
13

если в tar-шарике много много-много маленьких файлов, отмените параметр 'v', попробуйте еще раз!

анонимный
источник
3
Я никогда не использую -v param. Не знаю, зачем людям так много шума в консоли.
Eimantas
9
@Eimantas Когда вы распаковываете что-то, содержащее много файлов размером в несколько гигабайт, вам понадобится некоторая индикация прогресса. :)
Майкл Хэмптон
@TimHughes: это действительно здорово знать, пожалуйста, напишите в качестве отдельного ответа!
Смчи
Майкл Хэмптон: если у вас файлы размером в несколько гигабайт, но есть большие списки небольших файлов, у вас есть веская причина не использовать -v, в моих локальных тестах это делает tar очень медленным, особенно если у вас есть tar, запущенный на удаленном сервере. через терминал я смотрю каталог du -s, чтобы я мог наблюдать за ростом каталога ...
Luciano Andress Martini
Возможно, стоит использовать --checkpoint=NUMBER( отображать сообщения о ходе выполнения каждую запись NUMBERth ) вместо -v.
Стефан Ласевский
6

Если вы хотите увидеть прогресс, используйте что-то вроде pv. Вот пример:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Тим Хьюз
источник