Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active June 3, 2023 07:26
Show Gist options
  • Save hiroyuki-sato/24af37c10a2bc1eb1de8 to your computer and use it in GitHub Desktop.
Save hiroyuki-sato/24af37c10a2bc1eb1de8 to your computer and use it in GitHub Desktop.
Virshの使い方

virshの使い方

手順

  • poolの定義
  • volumeの作成
  • ゲストOSの作成

Poolの作成

Poolはストレージ領域を定義します。

/var/lib/libvirt/images_test というところをpool領域として定義します。コマンドを実行する前にディレクトリを作成しておきます。

ディレクトリの作成

# mkidr /var/lib/libvirt/images_test

XMLファイルの用意

次のような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>

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

ゲストOSの定義

<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、が削除されてなくなる

poolを削除

 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment