Чи є паралельний архіватор файлів (наприклад, tar)?


40

Чи є щось там для паралельного архівування файлів?

Тар - це чудово, але я не використовую стрічкові архіви, і мені важливіше, що архівування відбувається швидко (із стисненням, як bzip2), оскільки у мене є smp.


7
дьоготь - це не просто стрічки. Назва спочатку походить від стрічки, але в наші дні я бачу, що вона використовується в основному тоді, коли ви хочете помістити речі в один файл для перерозподілу, зберігаючи інформацію про структуру каталогів з додатковим стисканням.
Кевін М

тут досить багато інструментів паралельного стиснення, орієнтованих на vbtechsupport.com/1614, однак ще не знайшли паралельну версію tar
p4guru

Жодна із наданих відповідей (включаючи прийняту) не обробляє каталоги , наскільки я можу сказати - вони обробляють файли . Я бачу лише zipвміння обробляти каталоги: |
warren

1
На насправді, що ми зазвичай робимо це пакет каталогів в tarархівах, а потім стиснути пакет , використовуючи файл компресора (наприклад gzip, pigzі т.д.). Ви можете зробити це в два етапи, але також в один єдиний крок , оскільки вони можуть працювати на потоках даних зі стандартного вводу / виводу. Результати дуже схожі на zip, але більш універсальні.
герлос

Відповіді:


36

Я думаю, ти шукаєш pbzip2:

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

Перегляньте домашню сторінку проекту або перегляньте улюблене сховище пакунків.


1
Ви також можете спробувати pigzі pxzдля паралельних реалізацій gzipта xz. Ви можете стиснути, використовуючи команду типу tar c dir | pigz -c > dir.tar.gzта декомпресувати за допомогою pigz -cd dir.tar.gz | tar xf -.
gerlos

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

7z - хороший архіватор, з хорошою підтримкою для контролю компромісів між коефіцієнтом стиснення та часом комп / розкладання, випадковим доступом проти кращого стиснення тощо. Однак він не зберігає майже стільки метаданих, як tar, ви втрачаєте власника / дозволи.
Пітер Кордес

Схоже, ця опція за замовчуванням увімкнена - принаймні, у мене немає підвищення продуктивності, і вихід 7z має ряд про кількість ядер мого процесора в обох випадках.
Андрій Стародубцев

14

ОП запитала про паралельне архівування, а не паралельне стиснення.

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

Важливим стає питання, як виглядає вихід з паралельного архіву? Це вже не лише один дескриптор файлу / stdout, а дескриптор файлу на потік.

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

Я не впевнений у будь-якому фактичному паралельному архіві, який є основним. Стався злом Solaris Tar для використання на ZFS: http://www.maier-komor.de/mtwrite.html

Є кілька виділених інструментів резервного копіювання, які успішно запускають декілька потоків, але багато іншого, що просто розділяє навантаження за каталогами на високому рівні.


11
tar --use-compress-program=pigz  ....

замініть pigzулюблену програму паралельного стиснення. Причина використання tarполягає в тому, що вона може зберігати власника, групу, дозволи. Ці метадані часто корисні (наприклад, відновлення дерева dir у складній системі).


4
tar -c - використання-компрес-програма = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
Усі параметри, AFAIK, для дьогтю можна використовувати звичайно разом із -Iваріантом, який такий самий, як --use-compress-program. Так, наприклад, tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."можна застосувати до багатопотокового варіанту, використовуючи pigzяк 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і з time pigz -cd dir.tar.gz | tar xf -(на моєму 4-ядерному процесорі це займає трохи менше половини часу).
gerlos

4
@gerlos Використання timeна конвеєрі виконає лише першу команду. З pigzдокументації : "Декомпресія не може бути паралельною, принаймні, без спеціально підготовлених потоків дефляції для цієї мети. В результаті pigz використовує одну нитку (основну нитку) для декомпресії, але створить три інші нитки для читання, написання та перевірка розрахунку, який може прискорити декомпресію за певних обставин ".
серпень

1
Там також пікс .
Марк.2377,

8

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

ця команда повинна виконати трюк.

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

pbzip2 можна замінити іншою утилітою стиснення, але застережте, що при стисненні / розпакуванні великих файлів при стисненні LZMA (як pxz) використовується TON RAM (я намагався запустити 8 потоків з 8 ГБ оперативної пам’яті, і pxz почав замінюватися на диск).



1

Що стосується стиснення, xzоскільки приблизно версія 5.2 підтримує паралельне стиснення через -Tопцію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.