2016年7月20日水曜日

ホスト・ゲストの構成を確認しよう

前回で、libvirt管理下のKVM仮想マシンが一つ作れた。
今回はこれの詳細(ホスト側、ゲスト側)を確認したい。

詳細確認は、主にvirshコマンドで実施可能。
なので、1つずつ確認してみる。

ちなみに、KVMやqemu、Xenでは、仮想マシンのことを「Domain」と呼んでいるらしい。従って、virshコマンドにおけるドメインは、仮想マシンのことを指すぞ。

まずは仮想マシンの基本情報を…。
$ virsh list --all
$ virsh dominfo aries
$ virsh dumpxml aries

コマンドを実行してみると分かると思うけど、2つ目は仮想マシンの簡単な概要が表示される。
3つ目は前回も実行したから分かると思うけど、仮想マシンの構成情報がXML形式で出力される。

この中で、仮想ディスクの情報を見てみると、以下のようになっている。
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/aries.qcow2'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>

詳細は色々と調べてみないとはっきりしたことは言えないが、一つだけ間違いないのは、ホストOS上の /var/lib/libvirt/images/aries.qcow2 というファイルが、仮想マシン上のHDDになっている、ということだ。
では、このHDDの状態を確認してみる。
$ virsh pool-list --all

libvirtでは、仮想HDDを置く領域を「プール」と表現している。また、実際の仮想HDDを「ボリューム」と表現している。
上記コマンドで、default と iscsivol という2つのプールが表示されたのではないだろうか?
iscsivol は、OSをインストールする時の.isoファイルが配置されていた場所なので、virt-install が自動的に作ったものだと想定出来る。

となると、default の中に、仮想マシンのHDDが定義されているのだろう。
$ virsh pool-info default
$ virsh pool-dumpxml default

1つ目は、そのプールの簡単な概要だ。
2つ目が、そのプール定義の詳細を表すxmlデータの出力だ。
一部を省略して記載すると、以下の内容になった。
<pool type='dir'>
  <name>default</name>
  <uuid>略</uuid>
  <capacity unit='bytes'>略</capacity>
  <allocation unit='bytes'>略</allocation>
  <available unit='bytes'>略</available>
  <source>
  </source>
  <target>
    <path>/var/lib/libvirt/images</path>
    <permissions>
      <mode>0711</mode>
      <owner>0</owner>
      <group>0</group>
    </permissions>
  </target>
</pool>

このデータで分かるのは、
  • プールの形式はDirectory
  • パスは/var/lib/libvirt/images
という点だ。(他にもあるが…)

つまり、このプールに仮想ディスクを作成すると、/var/lib/libvirt/images 以下に配置される、ということになる。

具体的な仮想ディスクの詳細を見てみる。
$ virsh vol-list --pool default
$ virsh vol-info aries.qcow2 --pool default
$ virsh vol-dumpxml aries.qcow2 --pool default

2つ目のコマンドを実行すると、容量と割り当てという2つの項目に気がつくはずだ。
私の環境では、
容量:2.00GiB
割当:1.37GiB
となっている。

これは、当該ファイルがスパースファイルと呼ばれる形式で作られており、見た目は2GiBあるように見えるが、実際に物理HDD上は1.37GiBしか(まだ)利用されていない、ということを意味している。
実際にファイルのサイズを見てみよう。
$ ls -lh /var/lib/libvirt/images/aries.qcow2
$ du -h /var/lib/libvirt/images/aries.qcow2

前者はサイズが約2.1G、後者は1.4Gと表示された。
ゲストOS(aries)側で使用量が増えれば、後者の出力結果が徐々に2Gに近づいていくはずだ。

また、dumpxmlでは構成が出力される。こちらは今は詳細を見ないが、軽く目を通しておいてもいいだろう。

続いて、仮想マシンのネットワーク関連を見てみる。
$ virsh dumpxml aries

出力内容のうち、ネットワークに関する部分をピックアップしてみると以下の通りだ。
<interface type='network'>
  <mac address='52:54:00:76:db:ef'/>
  <source network='default'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

soruce networkがdefaultになっている。これが、前回確認したdefaultネットワークのことだ。
今はネットワークはdefaultしか定義されていないので、これ以外に接続することは出来ない。
別途、ネットワークを作った時に、source networkの違いが分かるようになると思う。

一応、もう一度見ておく。
$ virsh net-list --all
$ virsh net-info default
$ virsh net-dumpxml default

3つ目のコマンドで、以下の出力が確認できる。
<network>
  <name>default</name>
  <uuid>略</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:25:36:ed'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

これを見る限り、このdefaultネットワークに接続したゲストOSは、dhcpクライアントに設定していたら、192.168.122.2~192.168.122.254のドレかのIPアドレスが渡され、更に192.168.122.1をルータにして外部とのやり取りが行われるのではないだろうか?
そして、192.168.122.1のアドレスを持つルータは、52:54:00:25:36:edというmacアドレスを持っているのではないだろうか?

次回、実際にゲストOSを起動して確認してみることにする。

というわけで、今回はココまで。

0 件のコメント:

コメントを投稿