@ pdo jawaban baik, tetapi orang dapat meningkatkan kecepatan dengan buffer dan kompresi yang baik dan menambahkan progress bar.
Seringkali jaringan menjadi penghambat dan kecepatan bervariasi dari waktu ke waktu. Oleh karena itu, ada baiknya Anda melakukan buffer data sebelum mengirimnya melalui jaringan. Ini bisa dilakukan dengan pv
.
Selain itu, seseorang biasanya dapat meningkatkan kecepatan dengan algoritma kompresi yang tepat. Gzip (seperti yang digunakan di atas) adalah algoritma kompresi cepat, tetapi secara umum zstandard ( zstd
) (dan untuk rasio kompresi tinggi LZMA / LZMA2 ( xz
) akan memampatkan lebih baik dan lebih cepat pada waktu yang sama. Xz dan zstd baru memiliki dukungan multi-inti yang sudah ada Untuk menggunakan gzip dengan beberapa core pigz bisa digunakan.
Berikut adalah contoh untuk mengirim data dengan bilah kemajuan, buffering, dan kompresi zstandard melalui jaringan:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
Yang pertama pv
adalah untuk menunjukkan kemajuan ( p ), perkiraan waktu ( e ), laju transfer ( r ), laju rata-rata ( a ), total byte yang ditransfer ( b ). Ukuran total diperkirakan dengan du
dan ditambahkan ke pilihan ukuran ( s ). Kemajuan diukur sebelum kompresi dan buffering, karena itu tidak terlalu akurat, tetapi masih bermanfaat.
zstd
digunakan dengan pengaturan kompresi 14 . Jumlah ini dapat dikurangi atau ditingkatkan tergantung pada jaringan dan kecepatan CPU sehingga zstd sedikit lebih cepat dari kecepatan jaringan. Dengan empat core pada Haswell, 3,2 GHz CPU 14 memberikan kecepatan sekitar 120 MB / s. Dalam contoh, mode panjang 31 (menggunakan jendela 2 GB, membutuhkan banyak RAM, tetapi sangat bagus misalnya untuk mengompres dump database) digunakan. The T0 pilihan menetapkan jumlah benang untuk jumlah core. Orang harus menyadari bahwa bersama dengan mode lama pengaturan ini menggunakan banyak memori.
Masalah dengan zstd adalah sebagian besar sistem operasi tidak memberikan versi> = 1.3.4. Versi ini diperlukan untuk dukungan multi-inti dan panjang yang tepat. Jika tidak tersedia, itu dapat dikompilasi dan diinstal dari https://github.com/facebook/zstd dengan adil make -j4 && sudo make install
. Alih-alih zstd, kita juga bisa menggunakan xz atau pigz. xz lambat tetapi kompres sangat baik (bagus untuk koneksi lambat), pigz / gzip cepat tapi kompres tidak begitu baik.
pv
kemudian digunakan lagi, tetapi untuk buffering ( q
untuk senyap, C
untuk mode tanpa sambungan [selalu diperlukan untuk buffering] dan B
untuk mengatur ukuran buffer).
Dalam contoh buffer juga digunakan di sisi penerima. Ini seringkali tidak perlu (karena dekompresi dan kecepatan penulisan hard disk paling tinggi daripada kecepatan jaringan), tetapi biasanya juga tidak membahayakan.