2007/10/01

XenとLVM・その3・スナップショットLVの利用

前回および前々回で、Logical Volume Manager (LVM)の論理ボリューム(logical volume, LV)に直接XenのDomUイメージを作成する方法について述べた。このときのLVは、いわゆるリニア(linear)LVだったが、代わりにスナップショット(snapshot)LVを使うとディスクをケチることができる、と言う話。

スナップショットLVは通常、LVをバップアップするのに使用される。オリジナルのLVのスナップショットを撮ると、その後オリジナル側が変更されても、スナップショット側はスナップショットを撮った時点の内容が保持されている。ただし、スナップショットLVに割り当てた容量以上にオリジナルが変更されてしまうと、スナップショットは完全性を失うので注意が必要だ。
このスナップショットLVは、見た目にはオリジナルのLVと同様に扱える。例えば、オリジナルLVがファイルシステムとしてフォーマットされていれば、スナップショットLVを適当な場所にマウントすることができる。例えば、次のようなことができる(下線部がユーザ入力)。
# mount
/dev/mapper/VolGroupXX-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
# echo 'it is a time to creation' > /root/test.txt
# lvcreate --snapshot --size=1G --name=LogVol00-1.0 /dev/VolGroupXX/LogVol00
Logical volume "LogVol00-1.0" created
# echo 'after hours' > /root/test.txt
# cat /root/test.txt
after hours
# mkdir /tmp/mnt
# mount /dev/VolGroupXX/LogVol00-1.0 /tmp/mnt
# cat /tmp/mnt/root/test.txt
it is a time to creation
# umount /tmp/mnt
# lvremove /dev/VolGroupXX/LogVol00-1.0
Do you really want to remove active logical volume "LogVol00-1.0"? [y/n]: y
Logical volume "LogVol00-1.0" successfully removed
#
ここまでは、普通のスナップショットLVの使い方だ。

逆に、スナップショットLVは、オリジナルLVとは独立に変更できる。例えば、上の様にマウントした後、/tmp/mnt/root/test.txtを編集できる。これを利用して、DomUのイメージを準備する。
DomUのイメージの大部分は、OSに利用されるシステムファイルで、ほとんど変更されることはない。この点に着目して、変更部分だけをスナップショットLVに保存するとディスク容量を節約できる。
例えば、既に/dev/VolGroupXX/LogVolDc1をイメージとするDomU dc1が存在していたとする。設定ファイルは、/etc/xen/dc1だ。これをオリジナルとして、新しいDomU dc2をスナップショットLV上に作成する。以下の様に作業する。
# lvcreate --size 1G --snapshot --name LogVolDc2 /dev/VolGroupXX/LogVolDc1
Logical volume "LogVolDc2" created
# grep -v 'uuid =' /etc/xen/dc1 | sed 's/dc1/dc2/
s/00:16:3e:1d:89:01/00:16:3e:1d:89:02/
s/LogVolDc1/LogVolDc2/' > /etc/xen/dc2; echo "uuid = \"`uuidgen`\"" >> /etc/xen/dc2

#
元のdc1の設定からの変更点は、UUID、MACアドレスおよびイメージ(LV)名だ。UUIDは変更しなくても動くが、変えた方がよい(例えば、クラスタの仮想マシンフェンスでは、重複の可能性が相対的に高いVM名ではなく、重複する可能性が相対的に低いUUIDを指定する場合がある)。コマンドuuidgenを使用すると、新規にUUIDが生成される。MACアドレスについては、他のVMと重ならないように下3オクテットを変更する(ちなみに、上3オクテット00:16:3eは、Xensource, Inc.に割当てられたOUI)
後は、通常の手順通り、xm create -c dc2として起動すればよい。

ただし、スナップショットLVに割当た容量以上に変更があると、不具合が発生するはずだ。なので、スナップショットLVの使用率は、常に監視しておくべきだ。以下の様に実行する。
# lvs /dev/VolGroupXX/LogVolDc2
LV VG Attr LSize Origin Snap% Move Log Copy%
LogVolDc2 VolGroupXX swi-ao 1.00G LogVolDc1 1.70
#
この例では、スナップショットLV LogVolDc2に割り当てた容量1.00GBの内、1.70%を消費していることが判る。

XenとLVM・その1・インストール時
XenとLVM・その2・イメージファイルからの移行
XenとLVM・その3・スナップショットLVの利用
XenとLVM・その4・ベンチマーク

0 件のコメント: