手順
- poolの定義
- volumeの作成
- ゲストOSの作成
Poolはストレージ領域を定義します。
/var/lib/libvirt/images_test というところをpool領域として定義します。コマンドを実行する前にディレクトリを作成しておきます。
# mkidr /var/lib/libvirt/images_test
次のようなXMLファイルを用意します。
- name: poolの領域として仕様されます。
- path: poolとして利用するパスを絶対パスで指定します。
XMLファイル
# cat /tmp/pool_test
<pool type='dir'>
<name>default</name>
<source>
</source>
<target>
<path>/var/lib/libvirt/images_test</path>
<permissions>
<mode>0755</mode>
<owner>-1</owner>
<group>-1</group>
</permissions>
</target>
</pool>
# virsh pool-define /tmp/pool_test
Pool default defined from /tmp/pool_test
poolが定義されてるかはpool-listコマンドで確認をすることができます。
# virsh pool-list --all
Name State Autostart
-----------------------------------------
default inactive no
--allをつけない場合、activeでないプールは表示されません。
[root@gorilla libvirt]# virsh pool-list
Name State Autostart
-----------------------------------------
OS起動時に、poolが自動的に起動するようにするためにはautostartを設定します。
# virsh pool-autostart default
Pool default marked as autostarted
実行後Autstartがyesに変わります。
[root@gorilla libvirt]# virsh pool-list --all
Name State Autostart
-----------------------------------------
default inactive yes
poolの利用を開始するのにはpool-startを実行します。
[root@gorilla libvirt]# virsh pool-start default
Pool default started
poolが開始していることを確認します。
[root@gorilla libvirt]# virsh pool-list --all
Name State Autostart
-----------------------------------------
default active yes
定義したpool内にOSが利用するストレージを作成します。ストレージを作成する際に予め用意したテンプレートのディスクを利用します。
virsh vol-listコマンドを実行します。
# virsh vol-list default
Name Path
-----------------------------------------
まだなにもボリュームが定義されていないため、なにもエントリが表示されません。
- pool内に空のイメージを作成します。容量は120GBです。
- /var/lib/libvirt/template/centos6.imgをテンプレートディスクで利用します。
/tmp/vol_sample というファイルの中身は次のととりです。
<volume>
<name>test2.img</name>
<capacity unit="G">120</capacity>
<target>
<format type='qcow2'/>
<permissions>
<owner>0</owner>
<group>0</group>
<mode>0600</mode>
<label>virt_image_t</label>
</permissions>
</target>
<backingStore>
<path>/var/lib/libvirt/template/centos6.img</path>
<format type='qcow2'/>
<permissions>
<owner>0</owner>
<group>0</group>
<mode>0600</mode>
<label>virt_image_t</label>
</permissions>
</backingStore>
</volume>
poolの場所を指定して、新しくボリュームを作成します。
# virsh vol-create default /tmp/vol_sample
Vol test2 created from /tmp/vol_sample
確認
### ファイルの状態確認
指定されたpool内に、新しくボリュームが作成されていることが確認できます。 Copy on Writeのため、作成したディスクは120GBあるのに、実際は192Kしかありません。
# file /var/lib/libvirt/images_test/test2.img
/var/lib/libvirt/images_test/test2.img: QEMU QCOW Image (v2), has backing file (path /var/lib/libvirt/template/centos6.img), 128849018880 bytes
lsでも見てみます。
# ls -lh /var/lib/libvirt/images_test/test2.img
-rw-------. 1 root root 194K Dec 10 05:01 /var/lib/libvirt/images_test/test2.img
<domain type='kvm'>
<name>test</name>
<memory unit='KiB'>524288</memory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' />
<source file='/var/lib/libvirt/images_test/test2.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<!--
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target port='0'/>
</console>
<input type='mouse' bus='ps2'/>
-->
<serial type='pty'>
<source path='/dev/pts/4'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/4'>
<source path='/dev/pts/4'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<interface type='bridge'>
<source bridge='brbond0'/>
<model type='virtio'/>
</interface>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us' />
<video>
<model type='cirrus' vram='9216' heads='1'/>
</video>
</devices>
</domain>
[root@gorilla libvirt]# virsh create /tmp/guest_test
Domain test created from /tmp/guest_test
ゲストOSでは、console=ttyS0,115200n8を有効化します。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 console=ttyS0,115200n8 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
仮想マシンを削除するにはdesroyを実行します。
ボリュームを削除すると、ファイルも削除されます。
# virsh vol-delete --pool default test2
Vol test2 deleted
ls /var/lib/libvirt/images_test/test、が削除されてなくなる
virsh pool-list
Name State Autostart
-----------------------------------------
default active no
# virsh pool-destroy default
Pool default destroyed
[root@gorilla libvirt]# virsh pool-list --all
Name State Autostart
-----------------------------------------
default inactive no
[root@gorilla libvirt]# virsh pool-undefine default
Pool default has been undefined
# virsh vol-clone test2.img test4.img --pool default
Vol test4.img cloned from test2.img