LVMを使ってスナップショット
LVM スナップショット
LVMを使ってスナップショットを取る方法を説明します。
ここでのスナップショットとは、それまでのLVのイメージを保持しつつ、LV自体はそのまま読み書きできる状態にしておくことによってバックアップなどを取ることが可能になる機能です。
現在のLVの状態の確認
ここではlv_rootのスナップショットを取る方法を説明します。lv_rootは次のようになっています。
# lvscan ACTIVE '/dev/vg_c0/lv_root' [7.74 GiB] inherit ... # lvdisplay --- Logical volume --- LV Path /dev/vg_c0/lv_root LV Name lv_root VG Name vg_c0 ... LV Size 7.74 GiB
スナップショット用LVを作成
現在のVGのFree PEを確認します。
# vgdisplay --- Volume group --- VG Name vg_c0 ... VG Size 12.00 GiB PE Size 4.00 MiB Total PE 3072 Alloc PE / Size 2990 / 11.68 GiB Free PE / Size 82 / 328.00 MiB ...
PE量で82、サイズで328MiBが利用可能なので、それを全て使いスナップショット用のLVを作成します。
# lvcreate -s -l +82 -n lv_root_snap /dev/vg_c0/lv_root Logical volume "lv_root_snap" created
/dev/vg_c0/lv_root_snap が /dev/vg_c0/lv_root のスナップショットとなります。 その時点から、328MiB分の領域を使い切るまでは追加する(正確には領域を使い切るまで)ことが可能です。
# lvscan ACTIVE Original '/dev/vg_c0/lv_root' [7.74 GiB] inherit ACTIVE Snapshot '/dev/vg_c0/lv_root_snap' [328.00 MiB] inherit
バックアップ
たとえばdumpコマンドではブロックデバイスをバックアップ中に、その内容が書き換わるとうまくバックアップできません。 そのような時に、スナップショットを使えば、そのスナップショットを作った時のLVの状態がダンプできます。
# dump -0 -f /backup/lv_root_snap.dump /dev/vg_c0/lv_root_snap
ファイルシステムとしてマウントすることも可能です。この時、読み書き可能としてマウントしてしまうと領域の破壊が発生するので必ずリードオンリーでマウントして下さい。
# mkdir /mnt/lv_root_snap/ # mount -o ro /dev/vg_c0/lv_root /mnt/lv_root_snap/ # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_c0-lv_root 7992464 2148300 5444540 29% / ....
/dev/mapper/vg_c0-lv_root_snap
7992464 2129188 5463652 29% /mnt/lv_root_snap
LVの開放
スナップショット用に作ったLVの容量を越えてしまうと、オリジナルの領域に書き込みも含め無効(inactive)になり、以降、エラーになります。
ですから、スナップショット作業が住んだならば、スナップショット領域を開放しておかなければなりません。
# lvremove /dev/vg_c0/lv_root Do you really want to remove active logical volume lv_root_snap? [y/n]: y<RET> Logical volume "lv_root_snap" successfully removed Logical volume vg_c0/lv_root contains a filesystem in use.
目次へ