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

提供:UnixClassWiki
ナビゲーションに移動 検索に移動

LVM スナップショット

LVMを使ってスナップショットを取る方法を説明します。ここでは以下の説明をします。

  1. スナップショット用LVの作成
  2. dumpを使ってのスナップショットのバックアップ
  3. スナップショットのファイルシステムのマウント


ここでのスナップショットとは、それまでの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_snap /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_snap
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.


脚注



目次


このページへのショートURL: http://uc2.h2np.net/i/51.html