Untuk kompres file besar terlebih dahulu baru transfer atau rsync -z? mana yang tercepat?

14

Saya punya satu ton relativitas file data kecil tetapi membutuhkan sekitar 50 GB dan saya perlu mereka ditransfer ke mesin yang berbeda. Saya mencoba memikirkan cara paling efisien untuk melakukan ini.

Pikiran saya adalah gzip semuanya kemudian rsync dan dekompres, bergantung pada rsync -z untuk kompresi, gzip kemudian gunakan rsync -z. Saya tidak yakin mana yang paling efisien karena saya tidak yakin bagaimana tepatnya rsync -z diimplementasikan. Adakah ide tentang opsi mana yang paling cepat?


sumber

Jawaban:

11

Anda tidak dapat "gzip semuanya" karena gzip hanya mengkompres satu file, Anda dapat membuat file tar dan gzip menjadi "gzip semuanya" tetapi Anda akan kehilangan kemampuan rsync untuk menyalin hanya file yang dimodifikasi.

Jadi pertanyaannya adalah: apakah lebih baik menyimpan file yang saya butuhkan untuk rsync gziped atau mengandalkan opsi -z rsync.
Jawabannya mungkin Anda tidak ingin file di-zip di server Anda? Saya kira ya, jadi saya tidak melihat bagaimana Anda bisa mengelola file gzip sebelum melakukan rsync.

Mungkin Anda tidak memerlukan kemampuan rsync hanya menyalin file yang dimodifikasi? Dalam hal ini mengapa menggunakan rsync daripada melakukan scp dari file tar.gz yang berisi barang-barang Anda?

Pokoknya untuk menjawab pertanyaan, rsync gzip akan sedikit kurang efisien daripada file gzip dengan gzip. Mengapa karena rsync akan gzip data chunk by chunk, jadi kumpulan data yang lebih kecil akan digunakan untuk membuat tabel yang digunakan gzip untuk melakukan kompresi, kumpulan data yang lebih besar (gzip akan menggunakan seluruh file sekaligus) memberikan tabel kompresi yang lebih baik. Tetapi perbedaannya akan sangat sangat kecil dalam banyak kasus tetapi dalam kasus yang sangat jarang perbedaannya bisa lebih penting (jika Anda memiliki file yang sangat besar dengan partern yang sangat panjang berulang kali pada file tetapi jauh dari satu sama lain) (Ini adalah contoh yang sangat sederhana)

radius
sumber
1
Dari cara saya membaca pertanyaannya, dia akan mengompres untuk mendapatkan lebih dari kawat dan kemudian dekompresi sisi lain. Saya akan menggunakan kompresi asli rsync di atas gzip, hanya karena mengompresi dan mendekompresi 50GB dapat menghabiskan banyak waktu. Kemudian lagi, jika sebagian besar file teks, mereka akan dikompresi dengan baik. Opsi ketiga: salin file ke drive USB.
3
@Randolph Potter: ya waktu hilang untuk mengompresi 50GB secara lokal maka rsync akan lebih tinggi daripada menggunakan rsync -z, toh jika dia ingin mengambil keuntungan dari rsync itu sendiri (hanya menyalin file yang diubah) kompresi tidak dapat dilakukan sebelumnya
radius
poin yang sangat bagus. +1 untuk Anda :-)
Ingat juga bahwa gzip adalah kompresor aliran.
Falcon Momot
6

Jika Anda hanya menyalin data satu kali, rsync tidak akan menjadi kemenangan besar. Jika Anda suka gzip, (atau tar + gzip, karena Anda memiliki banyak file), Anda dapat mencoba sesuatu seperti:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

Itu akan mendapatkan kompresi yang Anda cari dan salin langsung tanpa melibatkan rsync.

Slartibartfast
sumber
Saya mungkin akan menggunakan --lzop untuk itu, bukannya gzip ... lebih cepat dan lebih rendah cpu overhead dan masih memiliki rasio kompresi yang baik untuk teks
underrun
5

@radius, nit kecil untuk memilih cara gzipkerjanya - gzipadalah algoritma kompresi berbasis blok, dan cukup sederhana. Seluruh file tidak dipertimbangkan untuk tabel kompresi - hanya setiap blok. Algoritme lain dapat menggunakan seluruh isi file dan ada beberapa yang menggunakan konten beberapa blok atau bahkan blok berukuran bervariasi. Salah satu contoh yang menarik adalah lrzip, oleh penulis yang sama dengan rsync!

gzipAlgoritma kurus pada .

Jadi, secara ringkas, menggunakan rsync -zkemungkinan akan menghasilkan kompresi yang sama seperti gziping pertama - dan jika Anda melakukan transfer diferensial, lebih baik karena rsyncalgoritma diffing.

Yang mengatakan, saya pikir seseorang akan menemukan bahwa scpketukan biasa rsyncuntuk transfer non-diferensial - karena akan memiliki overhead yang jauh lebih sedikit daripada rsyncalgoritma (yang akan tetap menggunakan scpunder-the-hood!)

Jika jaringan Anda memang menjadi hambatan, maka Anda ingin menggunakan kompresi pada kabel.

Jika disk Anda adalah penghambat, saat itulah streaming ke file terkompresi akan lebih baik. (misalnya, netcatdari satu mesin ke yang lain, mengalir ke gzip -c)

Biasanya, jika kecepatan adalah kunci, mengompres file yang sudah ada sebelumnya adalah pemborosan.

TIMTOWTDI, YMMV, IANAL, dll.

Hercynium
sumber
2

Menurut orang ini mungkin lebih cepat digunakan rsync -z, meskipun saya kira itu akan menjadi seefisien mengompresi setiap file terlebih dahulu sebelum mentransfer. Itu harus lebih cepat daripada mengompresi aliran tar, seperti yang disarankan oleh orang lain.

Dari halaman manual:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.
Insyte
sumber
1
Saya akan menyarankan menggunakan --compress-level = 1 dengan rsync -z jika Anda memiliki jaringan yang cepat. Anda ingin jaringan menjadi hambatan Anda, bukan CPU atau IO disk, untuk meminimalkan waktu transfer total. Jika jaringan lambat, menggunakan default -z (yang setara dengan gzip -6 saya pikir) mungkin masih membuat proses jaringan terikat.
rmalayter
1

Karena kedua scp file terkompresi dan rsync akan mengambil waktu transfer yang sangat mirip, "cara paling efisien untuk melakukan ini" akan menjadi kompresi on-the-fly daripada transfer kompres, transfer.

Selain "tahan luntur", pertimbangan lain meliputi:

rsync dapat dengan mudah dimulai kembali jika tidak semua file ditransfer.

rsync dapat digunakan untuk memelihara file di mesin remote.

tar lokal atau gzip membutuhkan ruang lokal.

Pertimbangan penggunaan port untuk mesin target dan firewall: 1) scp menggunakan port 22 (secara default) yang mungkin tidak dapat diterima. 2) port pengguna rsync 873 (secara default)

Saya tidak yakin mengapa radius mengharapkan poster asli TIDAK ingin file yang tidak di-zip disimpan.

DGerman
sumber