2016年7月24日日曜日

KVM用のiSCSI領域作りなおすよ

前回書いた通り、iSCSIのKVM領域を作り直そうと思っている。
で、作り直すとして、どうやってやるか?
やり方は何種類か考えられるけど、どのやり方を実施しようか。
  1. 一旦バックアップを取り、vg自体を作り直す。
  2. 新しいLUNをvgに組み込んで、pvmoveで新しいLUNに移動させる
  3. 新しいLUNからlvを作り、一つずつ中身をコピー(移動)する
2番は正直なところ、実施できるかわからない。
LVMシンプロビジョニング領域の場合、おそらくthin pool自体をpvmoveさせることになると思うけど、この場合は移動してもthin poolのままだ。
また、thin poolから作ったlvを移動させることが出来るか不明だ。

3番は、今まで作ったlv名vg名と異なる名前の領域を作り、そちらに(OSコマンドで)移動させることになる。
この場合、名前を後から変更する(vgchange / lvchange)ことになるが、その後の運用にどう影響が出るか分からない。

そのため、今回は1番を利用することにする。
流れは以下の想定だ。
  1. 3つのlv領域(/etc/libvirt、/var/lib/libvirt、/var/log/libvirt)をそれぞれNASのCIFS領域にバックアップ(tarを使用する想定)
  2. 念のため、/etc/fstab上の3つのマウント情報をコメント化
  3. 3つの領域をアンマウント
  4. 3つのlv削除→thin pool削除→vg削除→pv削除→パーティション削除→ディスク削除
  5. NASから、当該LUNをiSCSIターゲットから外し、領域を削除
  6. NAS側で新しいLUNを作成(この時、シンプロビジョニング&スナップショット不可で作成)、iSCSIターゲットに接続
  7. 新しく見えてきたディスクでパーティション作成→pv作成→vg作成→lv作成→ファイルシステム作成
  8. /etc/fstabのコメントを元に戻す
  9. 3つの領域をマウント
  10. 3つの領域を書き戻す
  11. 最後に、tarで取っておいたバックアップを削除
かなりの大手術になる。しっかり手順を確認しておこう。
また、事前準備として、NASのCIFS領域のマウントと、3つのマウントポイントのパーミッションや所有オーナー、グループも確認しておこう。
(aquarius) $ sudo mount /media/backup
(aquarius) $ df /media/backup

(aquarius) $ ls -ld /etc/libvirt /var/lib/libvirt /var/log/libvirt

では、それぞれの手順に従って進めていこう。
  1. 3つのlv領域(/etc/libvirt、/var/lib/libvirt、/var/log/libvirt)をそれぞれNASのCIFS領域にバックアップ(tarを使用する想定)
    (aquarius) $ cd /etc
    (aquarius) $ sudo tar cvSf /media/backup/etc_libvirt.tar libvirt
    (aquarius) $ cd /var/lib
    (aquarius) $ sudo tar cvSf /media/backup/lib_libvirt.tar libvirt
    (aquarius) $ cd /var/log
    (aquarius) $ sudo tar cvSf /media/backup/log_libvirt.tar libvirt
    (aquarius) $ ls -l /media/backup/*.tar

  2. 念のため、/etc/fstab上の3つのマウント情報をコメント化
    (aquarius) $ sudo vi /etc/fstab

  3. 3つの領域をアンマウント
    (aquarius) $ sudo umount /etc/libvirt
    (aquarius) $ sudo umount /var/lib/libvirt
    (aquarius) $ sudo umount /var/log/libvirt
    (aquarius) $ df

  4. 3つのlv削除→thin pool削除→vg削除→pv削除→パーティション削除→ディスク削除
    (aquarius) $ sudo lvchange -a n vg-kvm/lv-etc-libvirt
    (aquarius) $ sudo lvchange -a n vg-kvm/lv-var-lib-libvirt
    (aquarius) $ sudo lvchange -a n vg-kvm/lv-var-log-libvirt
    (aquarius) $ sudo lvremove -f vg-kvm/lv-etc-libvirt
    (aquarius) $ sudo lvremove -f vg-kvm/lv-var-lib-libvirt
    (aquarius) $ sudo lvremove -f vg-kvm/lv-var-log-libvirt

    (aquarius) $ sudo vgdisplay -v vg-kvm
    (aquarius) $ sudo lvchange -a n vg-kvm/lv-kvmthin
    (aquarius) $ sudo lvremove -f vg-kvm/lv-kvmthin

    (aquarius) $ sudo vgdisplay -v vg-kvm
    (aquarius) $ sudo vgremove vg-kvm

    (aquarius) $ sudo pvremove /dev/sdc1

    (aquarius) $ sudo parted /dev/sdc rm 1
    (aquarius) $ sudo parted /dev/sdc print

    (aquarius) $ sudo bash -c "echo 1 > /sys/block/sdc/device/delete"
    (aquarius) $ ls -l /dev/sd*

  5. NASから、当該LUNをiSCSIターゲットから外し、領域を削除
    各NASのマニュアルに従ってくれい。

  6. NAS側で新しいLUNを作成(この時、シンプロビジョニング&スナップショット不可で作成)、iSCSIターゲットに接続
    こちらも、各NASのマニュアルに従ってくれい。

  7. 新しく見えてきたディスクでパーティション作成→pv作成→vg作成→lv作成→ファイルシステム作成
    (aquarius) $ sudo parted /dev/sdc print
    (aquarius) $ sudo parted /dev/sdc mklabel gpt
    (aquarius) $ sudo parted /dev/sdc mkpart primary ext4 0% 100%
    (aquarius) $ sudo parted /dev/sdc toggle 1 lvm
    (aquarius) $ sudo parted /dev/sdc print

    (aquarius) $ sudo pvcreate /dev/sdc1
    (aquarius) $ sudo vgcreate vg-kvm /dev/sdc1
    (aquarius) $ sudo vgdisplay -v vg-kvm

    (aquarius) $ sudo lvcreate -L 32M -n lv-etc-libvirt     vg-kvm
    (aquarius) $ sudo lvcreate -L 50G -n lv-var-lib-libvirt vg-kvm
    (aquarius) $ sudo lvcreate -L  2G -n lv-var-log-libvirt vg-kvm

    (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

  8. /etc/fstabのコメントを元に戻す
    (aquarius) $ sudo vi /etc/fstab

  9. 3つの領域をマウント
    (aquarius) $ sudo mount -a
    (aquarius) $ df

  10. 3つの領域を書き戻す
    (aquarius) $ cd /etc
    (aquarius) $ sudo tar xvSf /media/backup/etc_libvirt.tar
    (aquarius) $ cd /var/lib
    (aquarius) $ sudo tar xvSf /media/backup/lib_libvirt.tar
    (aquarius) $ cd /var/log
    (aquarius) $ sudo tar xvSf /media/backup/log_libvirt.tar

    (aquarius) $ ls /etc/libvirt
    (aquarius) $ ls /var/lib/libvirt
    (aquarius) $ ls /var/log/libvirt

    (aquarius) $ ls -ld /etc/libvirt /var/lib/libvirt /var/log/libvirt

  11. 最後に、tarで取っておいたバックアップを削除
    の前に、仮想マシンが動くかどうかは確認しておこう。
    (aquarius) $ virsh list --all
    (aquarius) $ virsh dominfo aries
    (aquarius) $ virsh start aries
    (aquarius) $ virsh list --all
    (aquarius) $ virsh dominfo aries

    (aquarius) $ virsh domdisplay aries

    仮想マシンにログインして、syslog等確認したらシャットダウンをしておくこと。
    (aries) $ sudo shutdown -h now

    (aquarius) $ virsh list --all

    では、バックアップしたものは削除しておく。
    (aquarius) $ sudo rm /media/backup/etc_libvirt.tar
    (aquarius) $ sudo rm /media/backup/lib_libvirt.tar
    (aquarius) $ sudo rm /media/backup/log_libvirt.tar
これで作り直しは完了だが、最初にマウントしておいたcifs領域をアンマウントするのを忘れないように。
(aqaurius) $ sudo umount /media/backup

もし余裕があれば、aquariusを再起動して、再度マウントされるか確認しておくのもいいだろう。
(aquairus) $ sudo shutdown -r now
(aquarius) $ df

ちなみに、使っているNASキット、内部は組み込み用にカスタマイズされたLinuxのようで、iSCSIのLUNは、1つずつ大きなファイルになっている。
これを見てみると、今回用意したファイルは確かに見た目上100GBあるのだが、duで確認してみると、1.6GB程度しかない。
これは、ariesの仮想ディスクとしても実際に確保されているサイズが1.4GB程度で、その他細かいファイルが幾つか存在することと、管理上ある程度使用されている領域の合計だと考えられる。
やっと、NAS側でちゃんとシンプロビジョニングが使えるようになったよ…。

今回はここまで。

0 件のコメント:

コメントを投稿