lvm のディスクを丸ごとぜんぶ別のサーバーに移植する
ん~なんとなく、ゴリっと付け替えればそのまま動きそうな気がするんですが……
まずは準備
とにかくまずは、新しくディスクを受け取る側のサーバーで lvm まわり一式を emerge します。
# emerge -av lvm2 These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] dev-libs/libaio-0.3.110::gentoo USE="-static-libs {-test}" ABI_X86="(64) -32 (-x32)" 0 KiB [ebuild N ] dev-util/boost-build-1.62.0-r1::gentoo USE="-examples -python {-test}" PYTHON_TARGETS="python2_7" 82533 KiB [ebuild N ] dev-libs/boost-1.62.0-r1:0/1.62.0::gentoo USE="nls threads -context -debug -doc -icu -mpi -python -static-libs -tools" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7 python3_4 (-python3_5)" 0 KiB [ebuild N ] sys-block/thin-provisioning-tools-0.4.1::gentoo USE="{-test}" 0 KiB [ebuild N ] sys-fs/lvm2-2.02.145-r2::gentoo USE="readline systemd thin udev (-clvm) (-cman) -corosync -device-mapper-only -lvm1 -lvm2create_initrd -openais (-selinux) (-static) (-static-libs)" 0 KiB Total: 5 packages (5 new), Size of downloads: 82533 KiB Would you like to merge these packages? [Yes/No] y
特に気になる USE もないので、なにも変更せずにどーん。
* Messages for package sys-fs/lvm2-2.02.145-r2: * Notice that "use_lvmetad" setting is enabled with USE="udev" in * /etc/lvm/lvm.conf, which will require restart of udev, lvm, and lvmetad * if it was previously disabled. * Make sure the "lvm" init script is in the runlevels: * # rc-update add lvm boot * * Make sure to enable lvmetad in /etc/lvm/lvm.conf if you want * to enable lvm autoactivation and metadata caching.
このサーバー systemd なんだけどなw
# systemctl list-unit-files | grep lvm lvm2-lvmetad.service disabled lvm2-monitor.service disabled lvm2-pvscan@.service static lvm2-lvmetad.socket disabled
lvmetad
と lvm2-monitor
あたりを起動しとけばいいのかな?
# systemctl start lvm2-lvmetad # systemctl status -l lvm2-lvmetad * lvm2-lvmetad.service - LVM2 metadata daemon Loaded: loaded (/usr/lib64/systemd/system/lvm2-lvmetad.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2017-04-10 12:37:34 JST; 8s ago Docs: man:lvmetad(8) Main PID: 1298 (lvmetad) CGroup: /system.slice/lvm2-lvmetad.service `-1298 /sbin/lvmetad -f
ふむ。とりあえず普通に起動して常駐しますね。
# systemctl start lvm2-monitor # systemctl status -l lvm2-monitor * lvm2-monitor.service - Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling Loaded: loaded (/usr/lib64/systemd/system/lvm2-monitor.service; disabled; vendor preset: disabled) Active: active (exited) since Mon 2017-04-10 12:37:56 JST; 9s ago Docs: man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8) Process: 1302 ExecStart=/sbin/lvm vgchange --monitor y --ignoreskippedcluster (code=exited, status=0/SUCCESS) Main PID: 1302 (code=exited, status=0/SUCCESS)
こっちは起動してすぐ落ちてしまった…… [Service] Type=oneshot
になってるから、たぶんそういうもんなんでしょう。とりあえずは lvm2-lvmetad
だけ自動起動させればいいかな。
# systemctl enable lvm2-lvmetad Created symlink from /etc/systemd/system/sysinit.target.wants/lvm2-lvmetad.service to /usr/lib64/systemd/system/lvm2-lvmetad.service.
カーネルサポートを組み込んでみる
別に / とか /usr みたいなシステム領域を lvm 上に持たせるワケでもないのでカーネルレベルの設定も必須ではないような気もしますが……
# cd /usr/src/linux # make menuconfig
--- Multiple devices driver support (RAID and LVM) < > RAID support (NEW) < > Block device as cache (NEW) <*> Device mapper support [ ] request-based DM: use blk-mq I/O path by default (NEW) [ ] Device mapper debugging support (NEW) [ ] Keep stack trace of persistent data block lock holders (N < > Crypt target support (NEW) <M> Snapshot target <M> Thin provisioning target < > Cache target (EXPERIMENTAL) (NEW) < > Era target (EXPERIMENTAL) (NEW) < > Mirror target (NEW) < > RAID 1/4/5/6/10 target (NEW) < > Zero target (NEW) < > Multipath target (NEW) < > I/O delaying target (NEW) [*] DM uevents < > Flakey target (NEW) < > Verity target support (NEW) < > Switch target support (EXPERIMENTAL) (NEW) < > Log writes target support (NEW)
……一応これぐらいは入れてみますか。カーネルの設定が終わったら、お約束の手順を実行します。
# make -j3 && make modules_install # mount /boot # cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/kernel-4.9.6-gentoo-r1-fs01.20170410.01 # grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/kernel-4.9.6-gentoo-r1.20170205.01 Found linux image: /boot/kernel-4.9.6-gentoo-r1-fs01.20170410.01 Found linux image: /boot/kernel-4.4.39-gentoo.20170204.04 done # umount /boot # systemctl reboot
あとは……?
/etc/lvm/lvm.conf とかは、そもそももとの環境でも何か変更したような形跡がないですね……こんなもんでいいかな?
ディスクをくっつけてみる
現行のサーバーも既存のサーバーもシャットダウンして、仮想ゲストのディスク割り当てをします。
virsh # attach-disk --domain fs01 --source /dev/sdc --target vdc --targetbus virtio --config Disk attached successfully virsh # attach-disk --domain fs01 --source /dev/sdd --target vdd --targetbus virtio --config Disk attached successfully virsh # attach-disk --domain fs01 --source /dev/sde --target vde --targetbus virtio --config Disk attached successfully virsh # attach-disk --domain fs01 --source /dev/sdf --target vdf --targetbus virtio --config Disk attached successfully virsh # attach-disk --domain fs01 --source /dev/sdg --target vdg --targetbus virtio --config Disk attached successfully virsh # attach-disk --domain fs01 --source /dev/sdh --target vdh --targetbus virtio --config Disk attached successfully virsh # domblklist fs01 Target Source ------------------------------------------------ vda /dev/vg001/lv101 vdb /dev/vg001/lv102 vdc /dev/sdc vdd /dev/sdd vde /dev/sde vdf /dev/sdf vdg /dev/sdg vdh /dev/sdh
これ、kvm って1つのボリュームリソースを同時に複数のドメインに割り当てることができるんですね……同時起動したらどうなるんだろう。怖くて試せないですけどねw いや単純にデバイスが掴めないって起動エラーになりそうな気もしますが。
さて起動してみます。
virsh # start fs01
結果
# pvs PV VG Fmt Attr PSize PFree /dev/vdc1 fs01_vg01 lvm2 a-- 1.82t 0 /dev/vdd1 fs01_vg01 lvm2 a-- 1.82t 142.31g /dev/vde1 fs01_vg11 lvm2 a-- 1.82t 0 /dev/vdf1 fs01_vg11 lvm2 a-- 1.82t 158.25g /dev/vdg1 fs01_vg01 lvm2 a-- 1.82t 354.69g /dev/vdh1 fs01_vg11 lvm2 a-- 1.82t 354.75g # vgs VG #PV #LV #SN Attr VSize VFree fs01_vg01 3 4 0 wz--n- 5.46t 497.00g fs01_vg11 3 3 0 wz--n- 5.46t 513.00g # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert fs01_lv51 fs01_vg01 -wi-a----- 4.79t fs01_lv52 fs01_vg01 -wi-a----- 160.00g fs01_lv53 fs01_vg01 -wi-a----- 8.00g fs01_lv99 fs01_vg01 -wi-a----- 16.00g fs01_lv61 fs01_vg11 -wi-a----- 4.79t fs01_lv62 fs01_vg11 -wi-a----- 160.00g fs01_lv63 fs01_vg11 -wi-a----- 8.00g
ふっつ~に見えるじゃないですか。あっさり。
# mount /dev/fs01_vg01/fs01_lv51 /mnt/test # df -hT /mnt/test Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/fs01_vg01-fs01_lv51 ext4 4.8T 4.5T 74G 99% /mnt/test
結局、一番最初に思ったとおり「なんとなく、ゴリっと付け替えればそのまま動き」ました。