2016年7月21日木曜日

仮想マシンをiSCSIに移すよ

さて、新しい仮想マシン(aries)をlibvirt配下で作ったのはいいけど、これらの実体はドコにあるのだろうか?
ブツとしては
  • 構成情報
  • 仮想HDDイメージ
の2種類あるはずだ。
(仮想HDDイメージは、これまでの調査で/var/lib/libvirt/imagesにあることが分かっているが)

ソレとは別に、
  • ストレージプール定義
  • 仮想ネットワーク定義
等も、何処かに保存されているはずだ。

こういう場合、それっぽいファイルを探してみればだいたいの予想が出来る。

というわけで探してみよう。
(aquarius) $ sudo updatedb
(aquarius) $ sudo locate aries

検索に引っかかったファイルのウチ、関係ありそうなのは以下だ。
  • /etc/libvirt/qemu/aries.xml
  • /var/lib/libvirt/images/aries.qcow2
  • /var/log/libvirt/qemu/aries.log

一つ目は、仮想マシンの定義だろう。
二つ目は、ariesが使っている仮想HDDイメージファイルで、これまでも確認済みだ。
三つ目は、.logになっていることから、稼働ログか何かだろう。

この辺りのファイル・ディレクトリを漁ってみると、他にも何かあるかもしれない。

ネットワークの定義は/etc/libvirt/qemu/networksにあった。
ストレージプールの定義は/etc/libvirt/storageにあった。

それ以外にも、/etc/libvirtや/var/lib/libvirt以下には色々ファイルがあるし、/var/log/libvirtには幾つかディレクトリがある。
ということは、以下の3つをiSCSI領域に移すようにすればいいのかな?
  • /etc/libvirt
  • /var/lib/libvirt
  • /var/log/libvirt

当然、全部で100GBもあるわけじゃない。
iSCSIストレージ側で100GBのLUNを作って、ホストマシン(aquarius)に見せよう。
(piscesを作った時に使ったiSCSIターゲットに100GBのLUNを追加するだけでいいはずだ。)

LUNを追加したら、ホストOS側(aquarius)でディスクデバイスを確認してみよう。
(aquarius) $ dmesg

自分の環境では、sdcとして認識された。

このディスクを使って領域を作成する。ざっくり以下のように。

pv名 pvサイズ vg名 プール名 lv名 lvサイズ FS type マウントポイント
/dev/sdc1 100GB(あるだけ) vg-kvm lv-kvmthin lv-etc-libvirt 32MB ext4 /etc/libvirt
lv-var-lib-libvirt 50GB ext4 /var/lib/libvirt
lv-var-log-libvirt 2GB ext4 /var/log/libvirt

まずはディスクパーティションの作成
(aquarius) $ sudo parted /dev/sdc print
(aquarius) $ sudo parted /dev/sdc mklabel gpt
(aquarius) $ sudo parted /dev/sdc mkpart primary 0% 100%
(aquarius) $ sudo parted /dev/sdc toggle 1 lvm
(aquarius) $ sudo parted /dev/sdc print

続いて、phisical volume(pv)の作成
(aquarius) $ sudo pvs
(aquarius) $ sudo pvcreate /dev/sdc1
(aquarius) $ sudo pvs
(aquarius) $ sudo pvdisplay /dev/sdc1

そしたら、volume group(vg)の作成
(aquarius) $ sudo vgs
(aquarius) $ sudo vgcreate vg-kvm /dev/sdc1
(aquarius) $ sudo vgs
(aquarius) $ sudo vgdisplay -v vg-kvm

続いて、LVM Thin Provisioning用にThinPoolを作成。
(aquarius) $ sudo lvcreate -l 100%FREE -T vg-kvm/lv-kvmthin
(aquarius) $ sudo lvs vg-kvm/lv-kvmthin
(aquarius) $ sudo lvdisplay -v vg-kvm/lv-kvmthin

1つずつlvを作ろう
(aquarius) $ sudo lvcreate -T vg-kvm/lv-kvmthin -n lv-etc-libvirt     -V 32M
(aquarius) $ sudo lvcreate -T vg-kvm/lv-kvmthin -n lv-var-lib-libvirt -V 50G
(aquarius) $ sudo lvcreate -T vg-kvm/lv-kvmthin -n lv-var-log-libvirt -V  2G

(aquarius) $ sudo lvs vg-kvm
(aquarius) $ sudo lvdisplay vg-kvm/lv-etc-libvirt
(aquarius) $ sudo lvdisplay vg-kvm/lv-var-lib-libvirt
(aquarius) $ sudo lvdisplay vg-kvm/lv-var-log-libvirt

ファイルシステム作成
(aquarius) $ lsblk

(aquarius) $ sudo mkfs.ext4 /dev/vg-kvm/lv-etc-libvirt
(aquarius) $ sudo mkfs.ext4 /dev/vg-kvm/lv-var-lib-libvirt
(aquarius) $ sudo mkfs.ext4 /dev/vg-kvm/lv-var-log-libvirt

そしたら、1つずつデータをコピーしよう。(仮想マシンは止まっていること!)
(aquarius) $ sudo mkdir /mnt/libvirt

(aquarius) $ sudo mount /dev/vg-kvm/lv-etc-libvirt /mnt/libvirt
(aquarius) $ ls /mnt/libvirt
(aquarius) $ sudo bash -c "cd /etc ; tar cSf - libvirt | (cd /mnt ; tar xSf - )"
(aquarius) $ ls -al /etc/libvirt /mnt/libvirt
(aquarius) $ sudo umount /mnt/libvirt

(aquarius) $ sudo mount /dev/vg-kvm/lv-var-lib-libvirt /mnt/libvirt
(aquarius) $ ls /mnt/libvirt
(aquarius) $ sudo bash -c "cd /var/lib ; tar cSf - libvirt | (cd /mnt ; tar xSf - )"
(aquarius) $ ls -al /var/lib/libvirt /mnt/libvirt
(aquarius) $ sudo umount /mnt/libvirt

(aquarius) $ sudo mount /dev/vg-kvm/lv-var-log-libvirt /mnt/libvirt
(aquarius) $ ls /mnt/libvirt
(aquarius) $ sudo bash -c "cd /var/log ; tar cSf - libvirt | (cd /mnt ; tar xSf - )"
(aquarius) $ ls -al /var/log/libvirt /mnt/libvirt
(aquarius) $ sudo umount /mnt/libvirt

(aquarius) $ sudo rmdir /mnt/libvirt

これでデータ類はコピー出来た。後はマウントするだけだ。
念の為に、前のディレクトリはリネームしておく。
(aquarius) $ sudo mv /etc/libvirt /etc/libvirt.orig
(aquairus) $ sudo mkdir /etc/libvirt
(aquarius) $ sudo mount /dev/vg-kvm/lv-etc-libvirt /etc/libvirt
(aquarius) $ df /etc/libvirt
(aquairus) $ sudo chown root:root /etc/libvirt
(aquarius) $ sudo chmod 755 /etc/libvirt
(aquarius) $ ls -ld /etc/libvirt.orig /etc/libvirt

(aquarius) $ sudo mv /var/lib/libvirt /var/lib/libvirt.orig
(aquairus) $ sudo mkdir /var/lib/libvirt
(aquarius) $ sudo mount /dev/vg-kvm/lv-var-lib-libvirt /var/lib/libvirt
(aquarius) $ df /var/lib/libvirt
(aquairus) $ sudo chown root:root /var/lib/libvirt
(aquarius) $ sudo chmod 755 /var/lib/libvirt
(aquarius) $ ls -ld /var/lib/libvirt.orig /var/lib/libvirt

(aquarius) $ sudo mv /var/log/libvirt /var/log/libvirt.orig
(aquairus) $ sudo mkdir /var/log/libvirt
(aquarius) $ sudo mount /dev/vg-kvm/lv-var-log-libvirt /var/log/libvirt
(aquarius) $ df /var/log/libvirt
(aquairus) $ sudo chown root:root /var/log/libvirt
(aquarius) $ sudo chmod 755 /var/log/libvirt
(aquarius) $ ls -ld /var/log/libvirt.orig /var/log/libvirt

この状態で一度、kvmの状態確認してみよう。
(aquarius) $ virsh list --all
(aquarius) $ virsh pool-list --all
(aquarius) $ virsh vol-list --pool default
(aquarius) $ virsh net-list --all

前回と同じように、起動停止もしてみよう。
(aquarius) $ virsh start aries
virt-viewer(Remote Viewer)で接続確認もしておく。
(aries) $ sudo shutdown -h now

更新先を確認
(aquarius) $ sudo ls -l /var/lib/libvirt/images /var/lib/libvirt.orig/images

自動マウントするように、fstabにも書いておこう。
(aquarius) $ sudo vi /etc/fstab
以下の行を追記する
--ココから
/dev/mapper/vg--kvm-lv--etc--libvirt /etc/libvirt ext4 _netdev 0 0
/dev/mapper/vg--kvm-lv--var--lib--libvirt /var/lib/libvirt ext4 _netdev 0 0
/dev/mapper/vg--kvm-lv--var--log--libvirt /var/log/libvirt ext4 _netdev 0 0
--ココまで

マウントが正しく出来るか確認を。
(aquarius) $ sudo umount /var/log/libvirt
(aquarius) $ sudo umount /var/lib/libvirt
(aquarius) $ sudo umount /etc/libvirt

(aquarius) $ df
(aquarius) $ sudo mount -a
(aquarius) $ df

最後に再起動して、正しくマウントされるかを確認。
(aquarius) $ sudo shutdown -r now
(aquarius) 再ログインして
(aquarius) $ df

どうやら動いているっぽい。
まぁ、今のゲストOS(aries)は、また作り直せるから、仮に何か問題があったら作りなおそう。
というわけで、リネームしておいた3ディレクトリを削除する。
(aquarius) $ sudo rm -rf /etc/libvirt.orig
(aquarius) $ sudo rm -rf /var/lib/libvirt.orig
(aquarius) $ sudo rm -rf /var/log/libvirt.orig

今回はこれでおしまい。

0 件のコメント:

コメントを投稿