Czy istnieje równoległy archiwizator plików (jak tar)?


40

Czy jest coś do równoległej archiwizacji plików?

Tar jest świetny, ale nie używam archiwów taśmowych i dla mnie ważniejsze jest to, że archiwizacja odbywa się szybko (z kompresją jak bzip2), ponieważ mam smp.


7
tar jest czymś więcej niż tylko taśmami. Nazwa pierwotnie pochodzi od taśmy, ale obecnie widzę, że jest używana głównie, gdy chcesz umieścić rzeczy w jednym pliku w celu redystrybucji, zachowując informacje o strukturze katalogów z opcjonalną kompresją.
Kevin M.

vbtechsupport.com/1614 testuje tutaj całkiem sporo narzędzi do kompresji równoległej, jednak nie znalazłem jeszcze równoległej wersji tar
p4guru

Żadna z podanych odpowiedzi (w tym zaakceptowana) nie obsługuje katalogów , o ile wiem - obsługują pliki . Widzę tylko, że jestem zipw stanie obsłużyć katalogi: |
warren

1
Właściwie, co zwykle zrobić, to spakować katalogi w tararchiwach, a następnie skompresować pakiet za pomocą kompresora pliku (jak gzip, pigzitp). Możesz to zrobić w dwóch krokach, ale także w jednym kroku , ponieważ mogą pracować na strumieniach danych ze standardowego wejścia / wyjścia. Wyniki są bardzo podobne zip, ale bardziej wszechstronne.
gerlos

Odpowiedzi:


36

Myślę, że szukasz pbzip2:

PBZIP2 to równoległa implementacja kompresora plików bzip2 z sortowaniem bloków, który wykorzystuje pthreads i osiąga prawie liniowe przyspieszenie na maszynach SMP.

Zajrzyj na stronę główną projektu lub sprawdź swoje ulubione repozytorium pakietów.


1
Możesz także spróbować pigzi pxzdla równoległych implementacji gzipi xz. Możesz kompresować za pomocą polecenia podobnego tar c dir | pigz -c > dir.tar.gzi dekompresować za pomocą pigz -cd dir.tar.gz | tar xf -.
gerlos

3
Polecenia dzisiaj byłyby tar -cf dir.tar.gz -I pigz diri tar -xf dir.tar.gz -I pigz. xzJest również wątek: użyj XZ_OPT=-T0 tar -cJf dir.tar.gz diri XZ_OPT=-T0 tar -xJf dir.tar.gz.
Bogaty

21

7zip może działać na wielu wątkach, gdy otrzyma -mmtflagę, ale tylko podczas kompresji do archiwów 7z, które oferują doskonałą kompresję, ale generalnie są wolniejsze niż zip do tworzenia archiwów. Zrób coś takiego:

7z a -mmt foo.7z /opt/myhugefile.dat

7z jest ładnym archiwizatorem, z dobrym wsparciem do kontrolowania kompromisów między współczynnikiem kompresji a czasem komp / dekompresji, losowym dostępem a lepszą kompresją i tym podobne. Jednak nie przechowuje prawie tyle metadanych, co tar, tracisz właściciela / uprawnienia.
Peter Cordes

Wygląda na to, że ta opcja jest domyślnie włączona - przynajmniej nie mam przy niej wzrostu wydajności, a wyjście 7z ma linię o liczbie rdzeni mojego procesora w obu przypadkach.
Andrey Starodubtsev

14

OP zapytał o archiwizację równoległą, a nie kompresję równoległą.

Jeśli materiał źródłowy pochodzi z systemu plików, w którym różne katalogi / pliki mogą znajdować się na różnych dyskach, lub nawet na jednym szybkim dysku, który przekracza prędkość wejściową narzędzia (narzędzi) kompresującego, wówczas rzeczywiście może być korzystne posiadanie wielu strumieni danych wejściowych wchodzenie w warstwy kompresji.

Istotne pytanie brzmi: jak wygląda wyjście z archiwum równoległego? To już nie jest tylko pojedynczy deskryptor pliku / stdout, ale deskryptor pliku dla wątku.

Przykładem tego jest do tej pory tryb zrzutu równoległego Postgresql pg_dump, w którym zrzut jest wykonywany do katalogu, w którym wątki pracują nad zestawem tabel do utworzenia kopii zapasowej (kolejka robocza z wieloma wątkami zużywa kolejkę).

Nie jestem pewien, czy istnieją jakieś równoległe archiwizatory, które są w głównym nurcie. Nastąpił włamanie do Tar Solaris do użytku na ZFS: http://www.maier-komor.de/mtwrite.html

Istnieje kilka dedykowanych narzędzi do tworzenia kopii zapasowych, które z powodzeniem uruchamiają wiele wątków, ale znacznie więcej niż tylko podział obciążenia według katalogu na wysokim poziomie.


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

zastąp pigzswoim ulubionym programem do kompresji równoległej. Powodem użycia tarjest to, że może przechowywać właściciela, grupę, uprawnienia. Te metadane są często przydatne (np. Przywracanie drzewa katalogów w złożonym systemie).


4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
Wszystkie opcje AFAIK dla tar mogą być używane normalnie wraz z -Iopcją, która jest taka sama jak --use-compress-program. Tak więc np. tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."Można zastosować do opcji wielowątkowej za pomocą pigzas tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". To najlepsza, najbardziej odpowiednia odpowiedź, IMHO. Dzięki @uDude! :)
ILMostro_7,

10

pigz jest równoległą implementacją gzip, ale tak naprawdę może używać tylko wielu procesorów do kompresji, a nie dekompresji.


2
Przeprowadziłem kilka eksperymentów i pigzwydaje się, że potrafię używać wielu wątków także podczas dekompresji. Spróbuj porównać wydajność time tar xf dir.tar.gzi time pigz -cd dir.tar.gz | tar xf -(na moim 4-rdzeniowym procesorze zajmuje to nieco mniej niż połowę czasu).
gerlos

4
@gerlos Korzystanie timez potoku spowoduje tylko wykonanie pierwszego polecenia. Z pigzdokumentacji : „Dekompresji nie można zrównoleglać, przynajmniej nie bez specjalnie przygotowanych strumieni deflacji w tym celu. W rezultacie pigz używa jednego wątku (głównego wątku) do dekompresji, ale utworzy trzy inne wątki do odczytu, pisanie i sprawdzanie obliczeń, które w niektórych okolicznościach mogą przyspieszyć dekompresję ”.
augurar

1
Jest też Pixz .
Marc.2377,

8

tarjest po prostu formatem archiwum, który jest bardzo dobry w dokładnym powielaniu plików i zachowaniu drzewa katalogów oraz oryginalnych atrybutów plików. TAR jest bardzo dobry do tworzenia kopii zapasowych, ponieważ wszystko jest zachowane. Używam pbzip2do kompresji archiwów tar, których używam do tworzenia kopii zapasowych systemu z bardzo dobrymi wynikami.

to polecenie powinno załatwić sprawę.

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

pbzip2 można zastąpić innym narzędziem do kompresji, ale ostrzegam, kompresja LZMA (podobnie jak pxz) używa TON RAM podczas kompresji / dekompresji dużych plików (próbowałem uruchomić 8 wątków z 8 GB pamięci RAM, a pxz zaczął zamieniać się na dysk).



1

Jeśli chodzi o kompresję, xzponieważ około wersji 5.2 obsługuje kompresję równoległą za pomocą -Topcji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.