Saya perlu mentransfer file vdisk KVM 20 GB , menyimpan root filesystem dari CentOS 6.5 VM, dari satu server lab ke yang lain. Ukuran file yang besar dan fakta bahwa saya pernah memampatkan file vdisk menjadi beberapa ratus mega-byte membuat saya secara naluriah mengaktifkan kompresi dengan scp
tetapi saya terkejut melihat kecepatan transfer yang agak rendah. Kemudian saya mencoba bzip2
dalam kombinasi dengan ssh
dan cat
terkejut. Berikut ini adalah ringkasan metode dan throughput rata-rata.
scp -C vm1-root.img [email protected]:/mnt/vdisks/
, 11 MB / s.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
, 5 MB / s. Hasil yang lebih rendah ini mendorong pencarian di Internet.scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/
, 13 MB / s. Penggunaan-c arcfour
seperti ini disarankan dalam satu jawaban di serverfault. Itu hampir tidak membantu. Akhirnya, saya menonaktifkan kompresi.scp vm1-root.img [email protected]:/mnt/vdisks/
, 23 MB / s.
Bukankah seharusnya kompresi lebih cepat?
EDIT: Saya tidak tahu mengapa pertanyaannya dibatalkan. Saya pikir ada sesuatu yang bisa dipelajari di sini.
Setelah menerima ssh(1)
tip halaman manual dari @sven, saya mencoba beberapa metode alternatif transfer file yang tidak melibatkan kompresi, keduanya dengan hasil yang lebih baik.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
, 26 MB / s.nc -l 5678 > /mnt/vdisks/vm1-root.img
pada penerima dannc 192.168.161.62 5678 < vm1-root.img
pada pemancar, 40 MB / s. Port tersebut5678
adalah porta arbitrer yang tersedia.
Menggunakan nc
ternyata menjadi metode penyalinan tercepat!
Di masa lalu, scp -C
telah bekerja dengan sangat baik kapan pun saya berpikir akan melakukannya. Misalnya, saat mentransfer syslogs ( /var/log/messages*
) berukuran beberapa GB. Laju transfer tanpa kompresi beberapa ratus KB / s akan meningkat menjadi 1-2 MB / s. Contoh ini jatuh dalam kasus koneksi yang lambat seperti yang telah ditunjukkan di halaman manual.
Saya punya kasus di mana, gambar vdisk yang baru dibuat untuk partisi 20 GB memiliki ukuran terkompresi hanya 200 MB. Dengan kecepatan transfer sekitar 25 MB / s, kita bisa menyalin hanya dalam 8 detik, bukan lebih dari 13 menit! Jelas, scp
tanpa kompresi tidak efisien dalam kasus ini dan scp -C
bahkan lebih buruk.
Saya kira, pelajaran utama yang dipelajari di sini adalah bahwa, scp -C
harus dianggap hanya sebagai kenyamanan. Jika suatu file dapat dikompres secara signifikan, maka lebih baik kompres terlebih dahulu pada sumbernya, transfer formulir terkompresi dan akhirnya tekan kompres pada tujuan. Alat yang melakukan kompresi dan dekompresi dengan cepat (mis. Pbzip2 ) akan sangat membantu.
sumber
scp
termasuk waktu yang dihabiskan untuk mengompresi / mendekompresi. Nilai yang dilaporkan akan tampak mengejutkan jika bukan ini masalahnya.Selain itu, di atas kompresi, nc mendapatkan tingkat terbaik karena juga tidak mengenkripsi. Dan kompresi non-lossy bergantung pada menemukan bagian data yang berlebihan, yang bila dilakukan pada tingkat jaringan Anda dapat melihat maksimum [ukuran buffer] byte di mana ketika dilakukan dengan seluruh file terlebih dahulu, itu [ukuran file] byte di mana untuk berburu dan mengolah kalimat byte duplikat.
Juga untuk memindahkan gambar disk, Anda harus menggunakan alat filesystem-sadar seperti ntfsclone / partclone karena bahkan kompresi tidak dapat mengalahkan hanya melewatkan blok yang tidak terisi - tingkat transfer Anda tidak terbatas jika Anda tidak perlu mentransfer data apa pun. Juga jangan lupa untuk menghancurkan swap dan file hibernasi pada partisi windows atau Anda menyalin sampah itu hanya akan membuang dan membuat ulang pula.
sumber