Apakah ada pengarsipan file paralel (seperti tar)?

40

Apakah ada sesuatu di luar sana untuk pengarsipan file secara paralel?

Tar itu hebat, tapi saya tidak menggunakan arsip kaset, dan lebih penting bagi saya bahwa pengarsipan terjadi dengan cepat (dengan kompresi seperti bzip2) karena saya punya smp.

supercheetah
sumber
7
tar lebih dari sekadar kaset. Nama ini awalnya berasal dari tape, tetapi belakangan ini saya melihatnya digunakan sebagian besar ketika Anda ingin memasukkan beberapa hal ke dalam satu file untuk didistribusikan sambil mempertahankan informasi struktur direktori dengan kompresi opsional.
Kevin M
ada beberapa alat kompresi paralel yang diperbandingkan di sini vbtechsupport.com/1614 namun belum menemukan versi paralel tar
p4guru
Tidak ada jawaban yang disediakan (termasuk yang diterima) menangani direktori , sejauh yang saya tahu - mereka menangani file . Saya hanya melihat zipmampu menangani direktori: |
warren
1
Sebenarnya, apa yang biasanya kita lakukan adalah mengemas direktori di tararsip, dan kemudian kompres paket menggunakan kompresor berkas (seperti gzip, pigz, dll). Anda dapat melakukannya dalam dua langkah, tetapi juga dalam satu langkah tunggal , karena mereka dapat bekerja pada aliran data dari input / output standar. Hasilnya sangat mirip zip, tetapi lebih fleksibel.
gerlos

Jawaban:

36

Saya pikir Anda mencari pbzip2:

PBZIP2 adalah implementasi paralel dari kompresor pemilah blok bzip2 yang menggunakan pthreads dan mencapai percepatan linear dekat pada mesin SMP.

Lihat beranda proyek atau periksa repositori paket favorit Anda.

echox
sumber
1
Anda juga dapat mencoba pigzdan pxzuntuk implementasi paralel dari gzipdan xz. Anda dapat mengompres menggunakan perintah like tar c dir | pigz -c > dir.tar.gzdan decompress using pigz -cd dir.tar.gz | tar xf -.
gerlos
3
Perintah hari ini adalah tar -cf dir.tar.gz -I pigz dirdan tar -xf dir.tar.gz -I pigz. Juga di xzutas: gunakan XZ_OPT=-T0 tar -cJf dir.tar.gz dirdan XZ_OPT=-T0 tar -xJf dir.tar.gz.
Kaya
21

7zip dapat berjalan di banyak utas saat diberi -mmtbendera, tetapi hanya saat mengompresi ke arsip 7z, yang menawarkan kompresi hebat tetapi umumnya lebih lambat daripada zip untuk membuat arsip. Lakukan sesuatu seperti ini:

7z a -mmt foo.7z /opt/myhugefile.dat
fschmitt
sumber
7z adalah pengarsip yang bagus, dengan dukungan yang baik untuk mengendalikan pertukaran antara rasio kompresi dan waktu kompilasi, akses acak vs kompresi yang lebih baik, dan hal-hal seperti itu. Namun, itu tidak menyimpan metadata hampir sebanyak tar, Anda kehilangan pemilik / izin.
Peter Cordes
Sepertinya opsi ini aktif secara default - setidaknya saya tidak punya peningkatan kinerja dengan itu dan output 7z memiliki garis tentang jumlah core CPU saya dalam kedua kasus.
Andrey Starodubtsev
14

OP bertanya tentang pengarsipan paralel, bukan kompresi paralel.

Jika bahan sumber berasal dari sistem file di mana direktori / file yang berbeda mungkin berada di disk yang berbeda, atau bahkan disk cepat tunggal yang melebihi kecepatan input alat kompresi, maka memang dapat bermanfaat untuk memiliki beberapa aliran input masuk ke lapisan kompresi.

Pertanyaan yang bermakna adalah, seperti apa output dari arsip paralel? Ini bukan lagi hanya satu file deskriptor / stdout, tetapi file deskriptor per utas.

Contoh dari hal ini sejauh ini adalah mode dump paralel Postgresql pg_dump, di mana ia dibuang ke direktori, dengan utas yang bekerja di atas set tabel yang akan dicadangkan (antrian kerja w / beberapa utas yang mengonsumsi antrian).

Saya tidak yakin ada pengarsip paralel paralel yang arus utama. Ada peretasan untuk Solaris Tar untuk digunakan di ZFS: http://www.maier-komor.de/mtwrite.html

Ada beberapa alat cadangan khusus yang berhasil menjalankan beberapa utas, tetapi banyak lagi yang hanya membagi beban kerja dengan direktori pada tingkat tinggi.

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

ganti pigzdengan program kompresi paralel favorit Anda. Alasan penggunaannya taradalah karena dapat menyimpan izin pemilik, grup,. Metadata itu sering berguna (misalnya, memulihkan pohon dir dalam sistem yang kompleks).

uDude
sumber
4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN
1
Semua opsi, AFAIK, untuk tar dapat digunakan secara normal bersama dengan -Iopsi, yang sama dengan --use-compress-program. Jadi, misalnya tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."dapat diterapkan ke opsi multi-threaded menggunakan pigzas tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Ini adalah jawaban terbaik, paling tepat, IMHO. Terima kasih @uDude! :)
ILMostro_7
10

pigz adalah implementasi paralel dari gzip, tetapi hanya dapat benar-benar menggunakan banyak prosesor untuk kompresi, bukan dekompresi.

Jay Hacker
sumber
2
Melakukan beberapa percobaan, dan pigzsebenarnya tampaknya dapat menggunakan beberapa utas juga saat dekompresi. Coba bandingkan keluaran dari time tar xf dir.tar.gzdan time pigz -cd dir.tar.gz | tar xf -(pada CPU 4-core saya, ini membutuhkan waktu kurang dari separuh waktu).
gerlos
4
@gerlos Menggunakan timepada pipeline hanya akan mengatur waktu perintah pertama. Dari pigzdokumentasi : "Dekompresi tidak dapat diparalelkan, setidaknya tidak tanpa aliran deflate yang disiapkan secara khusus untuk tujuan itu. Akibatnya, pigz menggunakan utas tunggal (utas utama) untuk dekompresi, tetapi akan membuat tiga utas lainnya untuk dibaca, menulis, dan memeriksa perhitungan, yang dapat mempercepat dekompresi dalam beberapa keadaan. "
augurar
1
Ada juga Pixz .
Marc.2377
8

tarhanyalah sebuah format arsip yang sangat baik dalam menduplikasi file secara tepat dan menjaga struktur direktori dan atribut file asli. TAR sangat baik untuk membuat cadangan, karena semuanya terpelihara. Saya gunakan pbzip2untuk mengompresi arsip tar yang saya gunakan untuk cadangan sistem dengan hasil yang sangat bagus.

perintah ini harus melakukan triknya.

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

pbzip2 dapat diganti dengan utilitas kompresi yang berbeda, tetapi berhati-hatilah, kompresi LZMA (seperti pxz) menggunakan TON RAM ketika mengompresi / mendekompresi file besar (saya mencoba menjalankan 8 utas dengan 8GB RAM, dan pxz mulai bertukar ke disk).

sayang
sumber
4

Pesaing lainnya adalah lbzip2. Ini sangat mirip dengan pbzip2

Felipe Alvarez
sumber
1

Sejauh kompresi dipertimbangkan, xzkarena sekitar versi 5.2 mendukung kompresi paralel melalui -Topsi.

peterph
sumber