最初に、論理ボリュームがマウントされていないことを確認してください。それがあり、「ホットコピー」を作成する場合は、最初にスナップショットを作成し、代わりにこれを使用します。
lvcreate --snapshot --name transfer_snap --size 1G
2つの1Gbit接続サーバー間で大量のデータ(7TB)を転送する必要があるため、そのために可能な限り高速な方法が必要でした。
SSHを使用する必要がありますか?
sshの使用は、暗号化のためではなく(AES-NIをサポートするCPUを使用している場合、それほど害はありません)、ネットワークバッファーのためです。それらはうまくスケーリングされていません。この問題に対処するパッチが適用されたSshバージョンがありますが、プリコンパイルされたパッケージがないため、あまり便利ではありません。
圧縮を使用する
生のディスクイメージを転送するときは、常に圧縮を使用することをお勧めします。ただし、圧縮がボトルネックになることは望ましくありません。gzipのようなほとんどのUNIX圧縮ツールはシングルスレッドであるため、圧縮が1つのCPUを飽和させると、ボトルネックになります。そのため、すべてのCPUコアを圧縮に使用するgzipバリアントであるpigzを常に使用します。そして、これはGBit以上の速度にしたいのに必要です。
暗号化を使用する
前に言ったように、sshは遅いです。AES-NI CPUを使用している場合、これがボトルネックになることはありません。したがって、sshを使用する代わりに、opensslを直接使用できます。
スピード
コンポーネントの速度への影響のアイデアを提供するために、ここに私の結果があります。これらは、メモリの読み取りと書き込みを行う2つのプロダクションシステム間の転送速度です。実際の結果は、ネットワーク速度、HDD速度、ソースCPU速度に依存します!少なくともパフォーマンスの大幅な低下がないことを示すためにこれを行っています。
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
結論:圧縮を使用すると、データサイズが大幅に削減されるため、顕著な高速化が得られます。ネットワーク速度が遅い場合、これはさらに重要です。圧縮を使用する場合は、CPUの使用状況を確認してください。使用量が上限に達した場合は、使用せずに試すことができます。AES-NIシステムへのわずかな影響として圧縮を使用すると、圧縮から30〜40%のCPUを盗むためだけに私見されます。
画面を使用する
私のような大量のデータを転送している場合、sshクライアントのネットワーク切断によって中断されたくないので、両側の画面から開始した方がよいでしょう。これは単なるメモであり、ここではスクリーンチュートリアルを作成しません。
コピーしましょう
いくつかの依存関係をインストールします(ソースと宛先に):
apt install pigz pv netcat-openbsd
次に、ソースと同じサイズのボリュームを宛先に作成します。不明な場合は、ソースでlvdisplayを使用してサイズを取得し、ターゲットを作成します。例:
lvcreate -n lvname vgname -L 50G
次に、データを受信するための宛先を準備します。
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
そして準備ができたら、ソースで転送を開始します。
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
注:データをローカルに転送する場合、または暗号化を気にしない場合は、両側からOpenssl部分を削除するだけです。気になる場合は、asdkjn2hbが暗号化キーであるため、変更する必要があります。