LVMを使ってスナップショット

提供:UnixClassWiki
2013年8月15日 (木) 14:39時点におけるHironobu (トーク | 投稿記録)による版 (→‎現在のLVの状態の確認)
ナビゲーションに移動 検索に移動

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.



目次