特集
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

前のページ | 1 2 3 4 5 | 次のページ

[佐藤大輔,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.