| Works
KVMの仮想マシンにディスクを追加
ここのところ、検証環境の仮想マシンにディスクを追加してくれという依頼が度々あったのでメモです。
別に私が検証環境の管理/運用担当なわけではないので、これくらいはエンジニア各自でやってほしいところです。
検証環境のハイパーバイザはKVM(CentOS 7)です。
わざわざゲストOSのシャットダウンを依頼するのも面倒なので、基本的にはオンラインで追加してゲストOSのユーザーに確認を依頼。うまく認識できていなければ念のため再起動をしてもらうという流れでやってました。
最初は一回限りのつもりで手作業でしたが、何度も続けてやることになったので簡単なスクリプトにしています。
#!/bin/bash
VM_NAME="vm01"
ADD_SIZE="100G"
VD_DEV="sdc"
# 空の仮想ディスク作成
VD_FILE=${VM_NAME}-${VD_DEV}.qcow2
cd /var/lib/libvirt/images
if [ -f ${VD_FILE} ]; then
echo "${VD_FILE} : already exists"
exit 1
fi
qemu-img create -f qcow2 ${VD_FILE} ${ADD_SIZE}
# オンラインで仮想マシンに接続
virsh attach-device ${VM_NAME} <(cat <<EOF
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/var/lib/libvirt/images/${VD_FILE}'/>
<target dev='${VD_DEV}' bus='virtio'/>
</disk>
EOF
)
# 設定の永続化
virsh attach-device ${VM_NAME} --config <(cat <<EOF
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/var/lib/libvirt/images/${VD_FILE}'/>
<target dev='${VD_DEV}' bus='virtio'/>
</disk>
EOF
)
exit 0
対象の検証環境では仮想ディスクを作るときのファイル名を"<ホスト名>-<デバイスID>"というルールにしているので、ディスク追加時のデバイスの重複は"/var/lib/libvirt/images"以下のファイル名をチェックすればいいかなと。
"virsh"のオプションで与えるXMLとかいちいち覚えきれないので、何かやったら整理して再利用可能なように残しておかないと毎回同じ事を調べる羽目になるんですよね…。