Я обычно сжимаю использование tar zcvf
и распаковываю использование tar zxvf
(используя gzip по привычке).
Недавно я получил четырехъядерный процессор с гиперпоточностью, поэтому у меня 8 логических ядер, и я заметил, что многие из ядер не используются во время сжатия / распаковки.
Можно ли как-нибудь использовать неиспользуемые ядра, чтобы сделать это быстрее?
Ответы:
Вы можете использовать pigz вместо gzip, который выполняет сжатие gzip на нескольких ядрах. Вместо использования опции -z вы должны передать это через pigz:
По умолчанию pigz использует количество доступных ядер, или восемь, если не может запросить это. Вы можете запросить больше с -pn, например, -p 32. pigz имеет те же параметры, что и gzip, поэтому вы можете запросить лучшее сжатие с -9. Например
источник
Вы также можете использовать tar-флаг "--use-compress-program =", чтобы указать tar, какую программу сжатия использовать.
Например, используйте:
источник
tar - dir_to_zip | pv | pigz > tar.file
PV помогает мне оценить, вы можете пропустить это. Но все же легче написать и запомнить.man tar
говорит так, как и это .zstd
это самый быстрый инструмент для этого. Заметное ускорение при сжатии и распаковке. Используйтеtar -cf --use-compress-program=zstdmt
для этого многопоточность.Общий подход
Есть вариант для
tar
программы:Вы можете использовать многопоточную версию архиватора или утилиту сжатия.
Самые популярные многопоточные архиваторы - это pigz (вместо gzip) и pbzip2 (вместо bzip2). Например:
Архиватор должен принять -d. Если ваша утилита замены не имеет этого параметра и / или вам нужно указать дополнительные параметры, используйте каналы (добавьте параметры при необходимости):
Ввод и вывод однопоточных и многопоточных совместимы. Вы можете сжимать, используя многопоточную версию, и распаковывать, используя однопоточную версию, и наоборот.
p7zip
Для сжатия p7zip вам понадобится небольшой скрипт оболочки, подобный следующему:
Сохраните его как 7zhelper.sh. Вот пример использования:
XZ
Что касается многопоточной поддержки XZ. Если вы используете версию 5.2.0 или выше XZ Utils, вы можете использовать несколько ядер для сжатия, установив
-T
или--threads
установив соответствующее значение с помощью переменной среды XZ_DEFAULTS (напримерXZ_DEFAULTS="-T 0"
).Это фрагмент man для версии 5.1.0alpha:
Однако это не будет работать для распаковки файлов, которые также не были сжаты с включенной многопоточностью. От человека для версии 5.2.2:
Перекомпиляция с заменой
Если вы собираете tar из исходников, вы можете перекомпилировать с параметрами
После перекомпиляции tar с этими опциями вы можете проверить вывод справки tar:
источник
pigz
) включено только при чтении из файла. Обработка STDIN на самом деле может быть медленнее.xz
вариант. Это самый простой, но эффективный подход.export XZ_DEFAULTS="-T 0"
перед вызовомtar
с опцией-J
для xz сжатие работает как шарм.Вы можете использовать ярлык
-I
для--use-compress-program
переключения tar и вызыватьpbzip2
сжатие bzip2 на нескольких ядрах:источник
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Если вы хотите иметь больше гибкости с именами файлов и параметрами сжатия, вы можете использовать:
Шаг 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Эта команда будет искать файлы, которые вы хотите заархивировать, в этом случае
/my/path/*.sql
и/my/path/*.log
. Добавьте столько,-o -name "pattern"
сколько хотите.-exec
выполнит следующую команду, используя результатыfind
:tar
Шаг 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
простой параметр замены строки Он удалит путь к файлам из архива, так что корень архива становится текущим каталогом при извлечении. Обратите внимание, что вы не можете использовать-C
опцию для изменения каталога, поскольку вы потеряете преимуществаfind
: все файлы каталога будут включены.-P
говоритtar
использовать абсолютные пути, поэтому не вызывает предупреждение «Удаление начального` / 'из имен членов ». В--transform
любом случае ведущий '/' должен быть удален .-cf -
говоритtar
использовать имя тарбола, которое мы укажем позже{} +
использует всеfind
найденные ранее файлыШаг 3:
pigz
pigz -9 -p 4
Используйте столько параметров, сколько хотите. В данном случае
-9
это уровень сжатия и-p 4
количество ядер, выделенных для сжатия. Если вы запустите это на сильно загруженном веб-сервере, вы, вероятно, не захотите использовать все доступные ядра.Шаг 4: имя архива
> myarchive.tar.gz
В заключение.
источник
Относительно новым (де) инструментом сжатия, который вы можете рассмотреть, является zstandard . Он отлично справляется с использованием запасных ядер и добился некоторых компромиссов, когда речь идет о степени сжатия и времени (де) сжатия. Он также легко настраивается в зависимости от ваших требований к степени сжатия.
источник