MAGAZINE

ルーターマガジン

インフラ/運用

LVMスナップショットによるバックアップと別ホストへのリストア<高速化編>

2023.09.07
Pocket

この記事は こちらの続きになります。

また、ddコマンド、scpコマンドの高速化をしたい人にも参考になると思います。

sshを挟んだddコマンド実行

前回の記事では、ssh接続で他のサーバー(ホスト)に接続し、スナップショット領域に対して、ddコマンドを使用することで、スナップショットを作成した瞬間のディスクのコピー(クローン)を作成するコマンドを紹介しましたが、速度が異常に遅い結果となっていました。

[user@snapshot-test-2 /]# ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap" | dd of=/dev/mapper/lvm--to-original2

10477568+0 records in
10477568+0 records out
5364514816 bytes (5.4 GB) copied, 836.689 s, 6.4 MB/s

今回はこちらの高速化に成功したのでご紹介いたします。

sshを挟んだddコマンドの高速化

結果として、sshの暗号化方式とddコマンドのブロックサイズを変えることで高速化に成功しました。

まずブロックサイズですが、bs=にサイズを渡すことで指定できます。デフォルトが512バイトなので、それより大きい値で自分の環境にあうサイズを探してください。弊社の環境では、512kbがよさそうでした。

$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=4k" | dd of=/dev/mapper/lvm--to-original2 bs=4k
5364514816 バイト (5.4 GB) コピーされました、 42.3573 秒、 127 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=32k" | dd of=/dev/mapper/lvm--to-original2 bs=32k
5364514816 バイト (5.4 GB) コピーされました、 41.0692 秒、 131 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=64k" | dd of=/dev/mapper/lvm--to-original2 bs=64k
5364514816 バイト (5.4 GB) コピーされました、 41.1307 秒、 130 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 40.1353 秒、 134 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=1024k" | dd of=/dev/mapper/lvm--to-original2 bs=1024k
5364514816 バイト (5.4 GB) コピーされました、 40.6452 秒、 132 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=2048k" | dd of=/dev/mapper/lvm--to-original2 bs=2048k
5364514816 バイト (5.4 GB) コピーされました、 40.5137 秒、 132 MB/秒
$ ssh guest@ip_address "dd if=/dev/mapper/lvm--from-snap bs=4096k" | dd of=/dev/mapper/lvm--to-original2 bs=4096k
5364514816 バイト (5.4 GB) コピーされました、 41.822 秒、 128 MB/秒

次にsshの暗号化方式です。暗号化方式は-cで指定できます。弊社環境では、aes128-ctrがよさそうでした。 こちらも同様に複数の方式でテストして環境にあう方式を選んでください。 このオプションはscpでも指定できますので、scpでファイル転送が遅いと感じるときは指定するといいかもしれません。

$ ssh guest@ip_address -c "aes128-ctr" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 24.3003 秒、 221 MB/秒
$ ssh guest@ip_address -c "aes192-ctr" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 29.8496 秒、 180 MB/秒
$ ssh guest@ip_address -c "aes256-ctr" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 30.0221 秒、 179 MB/秒
$ ssh guest@ip_address -c "aes128-gcm@openssh.com" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 26.7767 秒、 200 MB/秒
$ ssh guest@ip_address -c "aes256-gcm@openssh.com" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 27.7839 秒、 193 MB/秒
$ ssh guest@ip_address -c "chacha20-poly1305@openssh.com" "dd if=/dev/mapper/lvm--from-snap bs=512k" | dd of=/dev/mapper/lvm--to-original2 bs=512k
5364514816 バイト (5.4 GB) コピーされました、 46.8311 秒、 115 MB/秒

<おまけ>スナップショットによる復元

作成したスナップショットが有効な状態であれば、スナップショット作成時のディスク状態に戻すことができます。

$ lvscan
  ACTIVE   Original '/dev/lvm-from/original' [<5.00 GiB] inherit
  ACTIVE   Snapshot '/dev/lvm-from/snap' [3.00 GiB] inherit
$ lvs
 LV       VG       Attr       LSize  Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
  original lvm-from owi-a-s--- <5.00g
  snap     lvm-from swi-a-s---  3.00g      original 0.00

lvscanでsnapshotがACTIVE状態であれば復元が可能です。 またlvsコマンドのData%の項目でスナップショットの何%が使用されたかがわかります。 復元するときは必ず、どちらのディスクもアンマウントしておきましょう

$ umount /dev/mapper/lvm--from-original
$ umount /dev/mapper/lvm--from-snap

以下のコマンドで復元できます。スナップショットを取った瞬間に戻るので実行は慎重にやりましょう。

$ lvconvert --merge /dev/lvm-from/snap
Pocket

CONTACT

お問い合わせ・ご依頼はこちらから