Есть ли параллельный файловый архиватор (например, tar)?

40

Есть ли что-то для параллельного архивирования файлов?

Tar хорош, но я не использую ленточные архивы, и для меня более важно, чтобы архивирование происходило быстро (со сжатием, как bzip2), так как у меня есть smp.

supercheetah
источник
7
tar - это больше, чем просто ленты. Название изначально пришло с ленты, но сейчас я вижу, что оно используется в основном для случаев, когда вы хотите поместить вещи в один файл для перераспределения, сохраняя при этом информацию о структуре каталогов с необязательным сжатием.
Кевин М
vbtechsupport.com/1614 достаточно много инструментов для параллельного сжатия, однако пока не найдено параллельной версии tar
p4guru
Ни один из предоставленных ответов (включая принятый) не обрабатывает каталоги , насколько я могу судить - они обрабатывают файлы . Я вижу zipтолько возможность справиться с каталогами: |
Уоррен
1
На самом деле мы обычно упаковываем каталоги в tarархивы, а затем сжимаем пакет с помощью файлового компрессора (например gzip, pigzи т. Д.). Вы можете сделать это в два шага, но также и в один шаг , так как они могут работать с потоками данных из стандартного ввода / вывода. Результаты очень похожи zip, но более универсальны.
Герлос

Ответы:

36

Я думаю, что вы ищете pbzip2:

PBZIP2 является параллельной реализацией файлового компрессора bzip2, который использует pthreads и достигает почти линейного ускорения на машинах SMP.

Загляните на домашнюю страницу проекта или проверьте ваш любимый репозиторий пакетов.

echox
источник
1
Вы также можете попробовать pigzи pxzдля параллельных реализаций gzipи xz. Вы можете сжать используя команду like tar c dir | pigz -c > dir.tar.gzи распаковать используя pigz -cd dir.tar.gz | tar xf -.
герлос
3
Команды сегодня были бы tar -cf dir.tar.gz -I pigz dirи tar -xf dir.tar.gz -I pigz. Также xzесть нарезка: используйте XZ_OPT=-T0 tar -cJf dir.tar.gz dirи XZ_OPT=-T0 tar -xJf dir.tar.gz.
Богатый
21

7zip может работать в нескольких потоках, если ему присвоен -mmtфлаг, но только при сжатии в 7z-архивы, которые предлагают отличное сжатие, но обычно медленнее, чем zip, для создания архивов. Сделайте что-то вроде этого:

7z a -mmt foo.7z /opt/myhugefile.dat
fschmitt
источник
7z - хороший архиватор, с хорошей поддержкой для контроля компромиссов между степенью сжатия и временем комп / дек, произвольным доступом и лучшим сжатием и тому подобным. Однако, он не хранит почти столько же метаданных, сколько tar, вы теряете владельца / разрешения.
Питер Кордес
Похоже, эта опция включена по умолчанию - по крайней мере, у меня нет прироста производительности, и в выводе 7z есть строка о количестве ядер моего процессора в обоих случаях.
Андрей Стародубцев
14

ОП спрашивал о параллельном архивировании, а не о параллельном сжатии.

Если исходный материал поступает из файловой системы, где разные каталоги / файлы могут находиться на разных дисках, или даже на одном быстром диске, который превышает скорость ввода инструмента (ов) сжатия, тогда действительно может быть полезно иметь несколько входных потоков вдаваясь в слои сжатия.

Напрашивается важный вопрос: как выглядит выход из параллельного архива? Это больше не просто дескриптор файла / stdout, а дескриптор файла на поток.

Примером этого до сих пор является режим параллельного дампа Postgresql pg_dump, в котором он создает дамп в каталог с потоками, работающими над набором таблиц для резервного копирования (рабочая очередь с несколькими потоками, потребляющими очередь).

Я не уверен ни в каких реальных параллельных архиваторах, которые являются господствующими. Был взломан Solaris Tar для использования на ZFS: http://www.maier-komor.de/mtwrite.html

Есть несколько специальных инструментов резервного копирования, которые успешно запускают несколько потоков, но гораздо больше, которые просто распределяют нагрузку по каталогам на высоком уровне.

robbat2
источник
11
tar --use-compress-program=pigz  ....

заменить pigzна вашу любимую программу параллельного сжатия. Причина использования tarзаключается в том, что он может хранить владельца, группу, разрешения. Эти метаданные часто полезны (например, восстановление дерева каталогов в сложной системе).

uDude
источник
4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN
1
Все параметры AFAIK для tar можно использовать вместе с -Iпараметром, который совпадает с параметром --use-compress-program. Так, например, tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."можно применить к многопоточному варианту, используя pigzas tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Это самый лучший, самый подходящий ответ, ИМХО. Спасибо @uDude! :)
ILMostro_7
10

pigz - это параллельная реализация gzip, но она может использовать только несколько процессоров для сжатия, а не для распаковки.

Джей Хакер
источник
2
Сделал несколько экспериментов, и на pigzсамом деле, кажется, может использовать несколько потоков также при распаковке. Попробуйте сравнить вывод time tar xf dir.tar.gzи of time pigz -cd dir.tar.gz | tar xf -(на моем 4-ядерном процессоре это занимает чуть меньше половины времени).
герлос
4
@gerlos Использование timeв конвейере только время первой команды. Из pigzдокументации : «Распаковка не может быть распараллелена, по крайней мере, без специально подготовленных потоков дефляции для этой цели. В результате pigz использует один поток (основной поток) для распаковки, но создаст три других потока для чтения, написание и проверка вычислений, которые могут ускорить декомпрессию при некоторых обстоятельствах. "
augurar
1
Там также pixz .
Marc.2377
8

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

эта команда должна сделать свое дело.

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 может быть заменено другой утилитой сжатия, но имейте в виду, что сжатие LZMA (например, pxz) использует ОДНО ОЗУ при сжатии / распаковке больших файлов (я попытался запустить 8 потоков с 8 ГБ ОЗУ, и pxz начал подмену на диск).

lovot
источник
4

Еще один соперник lbzip2. Это очень похоже на pbzip2

Фелипе Альварес
источник
1

Что касается сжатия, xzтак как в версии 5.2 поддерживается параллельное сжатие через -Tопцию.

peterph
источник