特集
2003/08/08 13:00:00 更新
特集:LVMによるディスクパーティションの動的化(後編) (4/5)
スナップショットでバックアップコストを下げる
LVMの機能で有効なものの1つとして、スナップショット機能も見逃せない。この機能を使うと、その時点のディスク状態を「凍結」させることができるのだ。うまく利用すると、サーバの動作とバックアップを並行して行うことも可能なため、いちどは試してみる価値があるだろう。
スナップショットを作成するためには、「lvcreate」に「--snapshot」スイッチ(「-s」でも可)を付加させることで可能だ。この際に差分領域を「-L」で、LV名を「-n」で指定する必要がある。
この差分領域とは、スナップショット作成後に書き込みが生じた際に書き込む領域のことだ。しかし、この領域を使い切ってしまうと、その時点でスナップショットが破棄されてしまうため注意が必要である。うかつに容量を小さくすることもできない。
なお、Red Hat Linux 9の2003年7月時点の最新カーネル(kernel-2.4.20-8および、2.4.20-9)では、マウント中のパーティションに対し、スナップショットは(コマンド上では成功するものの)実際にマウントできないという問題がある。カスタムカーネルの場合には、うまく動作すると思われる(実際、TurboLinux Enterprise Server 8のカーネル上では問題が無い)が、ここではRed Hat Linux 9のカーネルに準じて話を進めよう。
ここでは、VG「system」上にLV「work」を作成している。このLVは、512MBのサイズを持ち、ext3でフォーマットしてある。この中に現在、「densuke」ディレクトリを作成し、ファイルが置いてある状態例だ。
$ mount | grep /dev/system/work /dev/system/work on /mnt/misc type ext3 (rw) $ pwd /mnt/misc/densuke $ ls Liquid_Melody_01.ogg Liquid_Melody_03.ogg Liquid_Melody_05.ogg Liquid_Melody_02.ogg Liquid_Melody_04.ogg Liquid_Melody_06.ogg |
それでは、このパーティションのスナップショットを作成してみる。今回は差分領域を128MBとしておこう。
$ cd $ pwd # ホームディレクトリへ戻ったかを確認 /home/densuke $ sudo umount /mnt/misc # いちどunmountする Password: $ sudo /sbin/lvcreate -s -nsnap -L128m /dev/system/work |
ここでは、差分領域を128MB確保したworkのスナップショット「snap」を作成する。
lvcreate -- WARNING: the snapshot will be automatically disabled once it gets full lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/system/snap" lvcreate -- doing automatic backup of "system" lvcreate -- logical volume "/dev/system/snap" successfully created |
この時点では、LV「snap」と「work」が同じ内容である。唯一異なるのは、LV「snap」が「読み込みのみ可能」という状態なことだ。そのため、実際にそれぞれをmountしてみると、次のようになってしまう。
$ sudo mount /dev/system/work /mnt/misc $ sudo mount /dev/system/snap /mnt/misc2 mount: ブロックデバイス /dev/system/snap は書き込み禁止です、読込み専用でマウントします |
スナップショットに書き込みが可能のはおかしなことになるため、これが問題だというわけではない。そして、この時点では内容に差はない。
$ ls /mnt/misc/densuke # 本来のパーティション Liquid_Melody_01.ogg Liquid_Melody_03.ogg Liquid_Melody_05.ogg Liquid_Melody_02.ogg Liquid_Melody_04.ogg Liquid_Melody_06.ogg $ ls /mnt/misc2/densuke # スナップショット Liquid_Melody_01.ogg Liquid_Melody_03.ogg Liquid_Melody_05.ogg Liquid_Melody_02.ogg Liquid_Melody_04.ogg Liquid_Melody_06.ogg |
しかし、ここで別のファイルをコピーしてみると変化が生じる。
$ scp yuzu:/home/densuke/MP3/parquets/parquets-01.ogg \ /mnt/misc/densuke/ densuke@yuzu's password: parquets-01.ogg 100% |*****************************| 7969 KB 00:13 $ ls Liquid_Melody_01.ogg Liquid_Melody_04.ogg parquets-01.ogg Liquid_Melody_02.ogg Liquid_Melody_05.ogg Liquid_Melody_03.ogg Liquid_Melody_06.ogg |
スナップショットには変化が発生しないのだ。
$ ls /mnt/misc2/densuke/ Liquid_Melody_01.ogg Liquid_Melody_03.ogg Liquid_Melody_05.ogg Liquid_Melody_02.ogg Liquid_Melody_04.ogg Liquid_Melody_06.ogg |
スナップショットの使用中に、スナップ元のパーティションへの書き込み(リネームや削除も含む)が発生した場合には、スナップショット作成の際に確保させた「差分領域」へ書き込むのである。
リネームや削除に関しても、それに関する情報をスナップショットに蓄積していくこととなり、スナップショットが解放された時点で差分領域の情報を実際に書き込むことになる。このため、スナップショットが有効なのは差分領域へ書き込める範囲であり、それを超える処理が発生した場合には破壊されてしまうということだ。差分領域の使用率は、「lvdisplay」コマンドで確認することができる。
$ sudo /sbin/lvdisplay /dev/system/snap --- Logical volume --- LV Name /dev/system/snap VG Name system LV Write Access read only LV snapshot status active destination for /dev/system/work LV Status available ↑ LV # 5 このパーティションがスナップショットであることを示している # open 1 LV Size 512 MB Current LE 128 Allocated LE 128 snapshot chunk size 64 KB Allocated to snapshot 70.83% [89.25 MB/126 MB] ← 現在の使用率 Allocated to COW-table 2 MB Allocation next free Read ahead sectors 1024 Block device 58:5 |
実際に差分領域を使い切った場合には、スナップショットの破壊が発生することになる。この場合にはカーネルメッセージに、次のように見られるはずだ。
lvm -- giving up to snapshot /dev/system/work on /dev/system/snap: out of space |
[佐藤大輔,ITmedia]
Copyright © ITmedia, Inc. All Rights Reserved.