ざっと書きます。
いままではVMWare ESXiで構築・運用していたけど、今回はKVMでやってみることになり、調べてみると仮想マシンのスナップショットを取るときqcow形式だと一時的にマシンがロックされてしまうので、lvmスナップショットでやろうかなと思ってます。
その検証のため、OSはUbuntu、lvmでシステムを、ファイルシステムはxfsで構築してみました。
他のサイト情報を参考に、lvmのsnapshot用の領域をVolumeGroupに追加しつつLogicalVolumeに割り当て、lvcreateコマンドでスナップショットを取る。ここまでは良かったのですが、じゃあこのスナップショットをマウントして内容を確認しようとすると…
root@ubuntu-vm:~# mount -o ro /dev/KVMSPOOL01/snap /snapshot/ mount: wrong fs type, bad option, bad superblock on /dev/mapper/KVMSPOOL01-snap, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so.
エラーになってしましました…
内容をみるとファイルシステムタイプがおかしいよ、って書いてあるので、それじゃオプションを付けましょうで試してみると…
root@ubuntu-vm:~# mount -t xfs -o ro /dev/KVMSPOOL01/snap /snapshot/ mount: wrong fs type, bad option, bad superblock on /dev/mapper/KVMSPOOL01-snap, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so.
同じエラー orz..
こうなりゃあ、ログを見なければという流れなので、とりあえず /var/log/syslog(/var/log/messages はUbuntuにはないのね)をみてみると…
12:10:25 ubuntu-vm kernel: [ 316.274919] XFS (dm-5): Filesystem has duplicate UUID 2f64d646-d63f-401d-9557-f7f9ebd7ee88 - can't mount 12:10:35 ubuntu-vm kernel: [ 326.873009] XFS (dm-5): Filesystem has duplicate UUID 2f64d646-d63f-401d-9557-f7f9ebd7ee88 - can't mount 12:10:52 ubuntu-vm kernel: [ 343.262673] XFS (dm-5): Filesystem has duplicate UUID 2f64d646-d63f-401d-9557-f7f9ebd7ee88 - can't mount 12:11:53 ubuntu-vm kernel: [ 405.038251] XFS (dm-5): Filesystem has duplicate UUID 2f64d646-d63f-401d-9557-f7f9ebd7ee88 - can't mount 12:12:07 ubuntu-vm kernel: [ 418.663716] XFS (dm-5): Filesystem has duplicate UUID 2f64d646-d63f-401d-9557-f7f9ebd7ee88 - can't mount
uuidが重複してマウントできないだと…
Google先生に先人の知恵はないかと検索してみるとすぐにヒット。
XFSに関するトラブル対処
http://ysano.ysnet.org/archives/309
uuidを見ないでマウントすることができるとのことで
mount -t xfs -o ro,nouuid /dev/KVMSPOOL01/snap /snapshot/
/var/log/syslogにも…
12:46:02 ubuntu-vm kernel: [ 2453.564914] XFS (dm-5): Mounting V5 Filesystem 12:46:02 ubuntu-vm kernel: [ 2453.759496] XFS (dm-5): Starting recovery (logdev: internal) 12:46:02 ubuntu-vm kernel: [ 2453.828882] XFS (dm-5): Ending recovery (logdev: internal)
マウントできたようです。
ただ、先人はそれからいじくっているとInput/Output Errorが発生しているとのことでxfs_repairをかけているけど、自分はスナップショットだしReadOnlyでマウントしているし、ということでこの辺りは無視w。
あー、でも、なんかのことを想定してext4にでもしておいた方がいいのかなー
(なんかのことって何だよ。)
他のサイト情報ではsnapshotを溢れさすことも実施していたので自分も試してみましたが、自分はちょっと観点を変えて、snapshot領域がマウント済みだった場合の挙動を確認してみました。
まずは現状の確認…
root@ubuntu-vm:~# df Filesystem 1K-blocks Used Available Use% Mounted on udev 16429924 0 16429924 0% /dev tmpfs 3289788 9048 3280740 1% /run /dev/mapper/VgGroup1-LvGroup--root 26353080 1938332 24414748 8% / tmpfs 16448924 0 16448924 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 16448924 0 16448924 0% /sys/fs/cgroup /dev/sda1 492268 125612 366656 26% /boot /dev/mapper/KVMSPOOL01-LvGroup--kvm 1906350632 10273044 1896077588 1% /kvm tmpfs 100 0 100 0% /run/lxcfs/controllers tmpfs 3289788 0 3289788 0% /run/user/1000 /dev/mapper/KVMSPOOL01-snap 1906350632 10240276 1896110356 1% /snapshot
ちゃんとスナップショット領域(/dev/mapper/KVMSPOOL01-snap)をマウントしていますね。
(dfで表示されるスナップショット領域って、snapshot対象のものと同じで表示されるんですね)
ちょっと、こねくり回してsnapshotの使用状況を見てみると…
root@ubuntu-vm:/snapshot# lvdisplay /dev/KVMSPOOL01/snap --- Logical volume --- LV Path /dev/KVMSPOOL01/snap LV Name snap VG Name KVMSPOOL01 LV UUID ditjSR-18mE-xyEd-GX4c-l7GO-aBCL-Pl2GA6 LV Write Access read/write LV Creation host, time ubuntu-vm, 2016-06-09 12:10:06 +0900 LV snapshot status active destination for LvGroup-kvm LV Status available # open 1 LV Size 1.78 TiB Current LE 465645 COW-table size 1.00 GiB COW-table LE 256 Allocated to snapshot 3.43% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:5
3.43%更新されたようです。
もうちょっと、こねくり回してsnapshot状況を確認すると…
root@ubuntu-vm:/snapshot# lvdisplay /dev/KVMSPOOL01/snap --- Logical volume --- LV Path /dev/KVMSPOOL01/snap LV Name snap VG Name KVMSPOOL01 LV UUID ditjSR-18mE-xyEd-GX4c-l7GO-aBCL-Pl2GA6 LV Write Access read/write LV Creation host, time ubuntu-vm, 2016-06-09 12:10:06 +0900 LV snapshot status active destination for LvGroup-kvm LV Status available # open 1 LV Size 1.78 TiB Current LE 465645 COW-table size 1.00 GiB COW-table LE 256 Allocated to snapshot 81.87% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:5
81.87%使用、いぇい。
最後のこねくり回してsnapshot状況を確認すると…
root@ubuntu-vm:/snapshot# lvdisplay /dev/KVMSPOOL01/snap --- Logical volume --- LV Path /dev/KVMSPOOL01/snap LV Name snap VG Name KVMSPOOL01 LV UUID ditjSR-18mE-xyEd-GX4c-l7GO-aBCL-Pl2GA6 LV Write Access read/write LV Creation host, time ubuntu-vm, 2016-06-09 12:10:06 +0900 LV snapshot status INACTIVE destination for LvGroup-kvm LV Status available # open 0 LV Size 1.78 TiB Current LE 465645 COW-table size 1.00 GiB COW-table LE 256 Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:5
はい、溢れました。
この状況で/var/log/syslogを確認してみると
13:02:26 ubuntu-vm lvm[1936]: WARNING: Snapshot KVMSPOOL01-snap is now 81.87% full. 13:03:35 ubuntu-vm kernel: [ 3506.938646] device-mapper: snapshots: Invalidating snapshot: Unable to allocate exception. 13:03:35 ubuntu-vm lvm[1936]: WARNING: Snapshot KVMSPOOL01-snap changed state to: Invalid and should be removed. 13:03:35 ubuntu-vm lvm[1936]: Unmounting invalid snapshot KVMSPOOL01-snap from /snapshot. 13:03:39 ubuntu-vm kernel: [ 3510.579361] XFS (dm-5): Unmounting Filesystem
アンマウントしているというログが確認できます。ちなみに、81.87%時点でWARNINGも発報していました。
もちろん、dfでも
root@ubuntu-vm:/# df Filesystem 1K-blocks Used Available Use% Mounted on udev 16429924 0 16429924 0% /dev tmpfs 3289788 9076 3280712 1% /run /dev/mapper/VgGroup1-LvGroup--root 26353080 1938332 24414748 8% / tmpfs 16448924 0 16448924 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 16448924 0 16448924 0% /sys/fs/cgroup /dev/sda1 492268 125612 366656 26% /boot /dev/mapper/KVMSPOOL01-LvGroup--kvm 1906350632 10409236 1895941396 1% /kvm tmpfs 100 0 100 0% /run/lxcfs/controllers tmpfs 3289788 0 3289788 0% /run/user/1000
スナップショット領域が無くなっています。
このことにより、スナップショットを取ってその領域をマウントしrsyncなどを使ってバックアップを取っているときにスナップショット領域が溢れてしまうとアンマウントされてしまって、元がない状態になって--deleteオプションをつけてrsyncなんかしていたらバックアップ先が無くなってしまうのではないのかなという疑問がでてきました。