Pertama pastikan bahwa volume logis tidak di-mount. Jika ya dan Anda ingin membuat "salinan panas", buat snapshot terlebih dahulu dan gunakan ini sebagai gantinya:
lvcreate --snapshot --name transfer_snap --size 1G
Saya harus mentransfer banyak data (7TB) antara dua Server yang terhubung 1Gbit, jadi saya perlu cara tercepat untuk melakukannya.
Haruskah Anda menggunakan SSH?
Menggunakan ssh tidak perlu dipertanyakan, bukan karena enkripsi (jika Anda memiliki CPU dengan dukungan AES-NI, itu tidak terlalu menyakitkan) tetapi karena buffer jaringannya. Itu tidak scaling dengan baik. Ada versi Ssh yang ditambal yang mengatasi masalah ini, tetapi karena tidak ada paket yang telah dikompilasi, itu tidak terlalu nyaman.
Menggunakan Kompresi
Saat mentransfer gambar disk mentah, selalu disarankan untuk menggunakan kompresi. Tetapi Anda tidak ingin kompresi menjadi hambatan. Kebanyakan alat kompresi unix seperti gzip adalah single-threaded, jadi jika kompresi memenuhi satu CPU, itu akan menjadi hambatan. Untuk alasan itu, saya selalu menggunakan pigz, varian gzip yang menggunakan semua core CPU untuk kompresi. Dan ini perlu Anda ingin naik ke dan di atas kecepatan GBit.
Menggunakan Enkripsi
Seperti yang dikatakan sebelumnya, ssh lambat. Jika Anda memiliki CPU AES-NI, ini seharusnya tidak menjadi hambatan. Jadi alih-alih menggunakan ssh, kita dapat menggunakan openssl secara langsung.
Kecepatan
Untuk memberi Anda Ide tentang dampak kecepatan komponen, berikut adalah hasil saya. Itu adalah kecepatan transfer antara dua sistem produksi membaca dan menulis ke memori. Hasil aktual Anda bergantung pada kecepatan jaringan, kecepatan HDD, dan kecepatan CPU sumber! Saya melakukan ini untuk menunjukkan bahwa setidaknya tidak ada penurunan kinerja yang besar.
Simple nc dd:
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 47.3576 s, 106 MB/s
+pigz compression level 1 (speed gain depends on actual data):
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 38.8045 s, 130 MB/s
+pigz compression level 5:
network traffic: 2.43GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 44.4623 s, 113 MB/s
+compression level 1 + openssl encryption:
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 43.1163 s, 117 MB/s
Kesimpulan: menggunakan kompresi memberikan peningkatan yang nyata, karena mengurangi ukuran data banyak. Ini bahkan lebih penting jika Anda memiliki kecepatan jaringan yang lebih lambat. Saat menggunakan kompresi, perhatikan penggunaan cpu Anda. jika penggunaannya sudah maksimal, Anda dapat mencoba tanpanya. Menggunakan kompresi sebagai dampak kecil pada sistem AES-NI, hanya karena ia mencuri 30-40% cpu dari kompresi.
Menggunakan Layar
Jika Anda mentransfer banyak data seperti saya, Anda tidak ingin terganggu oleh pemutusan jaringan klien ssh Anda, jadi sebaiknya mulai dengan layar di kedua sisi. Ini hanya sebuah catatan, saya tidak akan menulis tutorial layar di sini.
Ayo Salin
Instal beberapa dependensi (pada sumber dan tujuan):
apt install pigz pv netcat-openbsd
lalu buat volume pada tujuan dengan ukuran yang sama dengan sumbernya. Jika tidak yakin, gunakan lvdisplay pada sumber untuk mendapatkan ukuran dan buat target yaitu:
lvcreate -n lvname vgname -L 50G
selanjutnya, siapkan tujuan untuk menerima data:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
dan ketika siap, mulai transfer pada Sumber:
pv -r -t -b -p -e /dev/vgname/lvname | pigz -1 | openssl aes-256-cbc -salt -pass pass:asdkjn2hb | nc <destip/host> 444 -q 1
Catatan: Jika Anda mentransfer data secara lokal atau tidak peduli tentang enkripsi, cukup hapus bagian openssl dari kedua sisi. Jika Anda peduli, asdkjn2hb adalah kunci Enkripsi, Anda harus mengubahnya.