23.18. デバイス

この XML 要素のセットすべては、ゲスト仮想マシンのドメインに提供されるデバイスを説明するために使用されます。以下のデバイスのすべては、メイン <devices> 要素の子として示されます。
以下の仮想デバイスがサポートされています。
  • virtio-scsi-pci - PCI バスストレージデバイス
  • virtio-blk-pci - PCI バスストレージデバイス
  • virtio-net-pci - PCI バスネットワークデバイス (virtio-net としても知られる)
  • virtio-serial-pci - PCI バス入力デバイス
  • virtio-balloon-pci - PCI バスメモリーバルーンデバイス
  • virtio-rng-pci - PCI バス乱数ジェネレーターデバイス

重要

ベクターの番号が 33 以上の値に設定されている virtio デバイスが作成される場合、デバイスは Red Hat Enterprise Linux 7 ではなく、Red Hat Enterprise Linux 6 上のゼロの値に設定されているように動作します。結果として生じるベクター設定の不一致により、いずれかのプラットフォームの virtio デバイスのベクターの番号が 33 以上に設定されている場合は移行エラーが生じます。そのため、ベクター値を 33 以上に設定することは推奨されません。virtio-balloon-pci および virtio-rng-pci を例外とするすべての virtio デバイスは vector 引数を許可します。

  ...
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
  </devices>
  ...

図23.27 デバイス - 子要素

<emulator> 要素のコンテンツは、デバイスモデルエミュレーターのバイナリーへの完全修飾パスを指定します。この capabilities XML は、それぞれの特定ドメインタイプ、またはアーキテクチャーの組み合わせに対して使用するための推奨されるデフォルトエミュレーターを指定します。

23.18.1. ハードドライブ、フロッピーディスク、CD-ROM

ドメイン XML のこのセクションは、<disk> 要素でフロッピーディスク、ハードディスク、CD-ROM または準仮想化ドライバーが指定されている場合などの、ディスクに類するデバイスを指定します。

    <disk type='network'>
      <driver name="qemu" type="raw" io="threads" ioeventfd="on" event_idx="off"/>
      <source protocol="sheepdog" name="image_name">
        <host name="hostname" port="7000"/>
      </source>
      <target dev="hdb" bus="ide"/>
      <boot order='1'/>
      <transient/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>

図23.28 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 1


    <disk type='network'>
      <driver name="qemu" type="raw"/>
      <source protocol="rbd" name="image_name2">
        <host name="hostname" port="7000"/>
      </source>
      <target dev="hdd" bus="ide"/>
      <auth username='myuser'>
        <secret type='ceph' usage='mypassid'/>
      </auth>
    </disk>

図23.29 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 2


    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="http" name="url_path">
        <host name="hostname" port="80"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>

図23.30 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 3


    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="https" name="url_path">
        <host name="hostname" port="443"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="ftp" name="url_path">
        <host name="hostname" port="21"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>

図23.31 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 4


    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="ftps" name="url_path">
        <host name="hostname" port="990"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source protocol="tftp" name="url_path">
        <host name="hostname" port="69"/>
      </source>
      <target dev='hdc' bus='ide' tray='open'/>
      <readonly/>
    </disk>
    <disk type='block' device='lun'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/sda'/>
      <target dev='sda' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='3' unit='0'/>
    </disk>

図23.32 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 5


    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/sda'/>
      <geometry cyls='16383' heads='16' secs='63' trans='lba'/>
      <blockio logical_block_size='512' physical_block_size='4096'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='blk-pool0' volume='blk-pool0-vol0'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/2'>
        <host name='example.com' port='3260'/>
      </source>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>

図23.33 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 6


    <disk type='network' device='lun'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/1'>
       iqn.2013-07.com.example:iscsi-pool
        <host name='example.com' port='3260'/>
      </source>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='sda' bus='scsi'/>
    </disk>
    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>

図23.34 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 7


    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-pool' volume='unit:0:0:2' mode='direct'/>
      <auth username='myuser'>
        <secret type='chap' usage='libvirtiscsi'/>
      </auth>
      <target dev='vda' bus='virtio'/>
    </disk>
     <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/tmp/test.img' startupPolicy='optional'/>
      <target dev='sdb' bus='scsi'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' discard='unmap'/>
      <source file='/var/lib/libvirt/images/discard1.img'/>
      <target dev='vdb' bus='virtio'/>
      <alias name='virtio-disk1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </disk>
  </devices>
  ...

図23.35 デバイス - ハードドライブ、フロッピーディスク、CD-ROM サンプル 8

23.18.1.1. disk 要素

<disk> 要素は、ディスクを説明するためのメインコンテナーです。type 属性は <disk> 要素と使用できます。以下のタイプが許可されます。
  • file
  • block
  • dir
  • network
詳細は、libvirt のアップストリームのページ を参照してください。

23.18.1.2. source 要素

ディスクソースを表します。ディスクソースは、以下のようにディスクタイプ属性に依存します。
  • <file>: file 属性は、ディスクが存在するファイルへの完全修飾パスを指定します。
  • <block>: dev 属性は、ディスクとなるホストデバイスへの完全修飾パスを指定します。
  • <dir>: dir 属性は、ディスクとして使用されるディレクトリーへの完全修飾パスを指定します。
  • <network>: protocol 属性は、要求されたイメージへのアクセスに使用されるプロトコルを指定します。可能な値は nbdiscirbdsheepdog、および gluster です。
    • protocol 属性が rbdsheepdog、または glusterである場合は追加の属性 name が必須となります。この属性は、使用されるボリュームおよびイメージを指定します。
    • protocol 属性が nbd の場合、name 属性は任意となります。
    • protocol 属性が isci の場合、name 属性には、ターゲットの名前とスラッシュで区切られた論理ユニット番号が含まれる場合があります。たとえば、iqn.2013-07.com.example:iscsi-pool/1 のようになります。指定されない場合、デフォルト LUN はゼロになります。
  • <volume>: 基盤のディスクソースは pool および volume 属性によって表されます。
    • <pool>: ディスクソースが存在するストレージプール (libvirt によって管理される) の名前。
    • <volume>: ディスクソースとして使用されるストレージボリューム (libvirt によって管理される) の名前。
      volume 属性の値は、virsh vol-list [pool-name] の Name 列からの出力です。
ディスクタイプが network の場合、source は接続するホスト物理マシンを指定するために使用される type='dir'type='network' などの hostサブ要素を 0 個以上持つことがあります。CD-ROM やフロッピー (device 属性) を表す file ディスクタイプでは、ソースファイルにアクセスできない場合にディスクの処理方法のポリシーを定義することが可能です。これを行うには、以下の値の 1 つを使用して startupPolicy 属性を設定します。
  • mandatory は、何らかの理由でない場合に失敗します。これはデフォルトの設定です。
  • requisite は、ブート時にない場合に失敗します。移行/復元/復帰の時点でない場合にドロップします。
  • optional: 起動の試行時に見つからない場合にドロップします。

23.18.1.3. mirror 要素

この要素は、ハイパーバイザーが BlockCopy 操作を開始する場合に見られます。ここで、属性ファイルの <mirror> ロケーションには、最終的には、属性形式のファイル形式 (ソースの形式と異なる可能性がある) で、ソースと同じコンテンツが含まれることになります。ready 属性がある場合、ディスクはピボットできることが認識されます。それ以外の場合、ディスクはおそらく依然としてコピーを続けます。現在のところ、この要素は出力でのみ有効であり、入力では無視されます。

23.18.1.4. target 要素

<target> 要素は、ディスクがゲスト仮想マシン OS に公開されるバス/デバイスを制御します。dev 属性は、論理デバイス名を示します。指定される実際のデバイス名は、ゲスト仮想マシン OS 内のデバイス名にマップされるとは保証されません。オプションのバス属性は、エミュレートするディスクデバイスのタイプを指定します、使用できる値はドライバー固有の値で、通常は idescsivirtiokvmusbsata などになります。省略された場合、バスタイプはデバイス名のスタイルから推定されます。たとえば、'sda' という名前のデバイスは、通常 SCSI バスを使用してエクスポートされます。オプションの属性の tray は、リムーバブルディスク (CD-ROM やフロッピーディスクなど) のトレイの状態を示し、値は open または closed にすることができます。デフォルト設定は closed です。

23.18.1.5. iotune 要素

オプションの <iotune> 要素は、デバイスごとに異なる可能性のある値と共に、追加のデバイスごとの I/O チューニングを提供する機能を提供します (ドメインにグローバルに適用される blkiotune 要素と比較)。この要素には、以下のオプションのサブ要素があります (サブ要素がなにも指定されていない場合や 0 の値で指定されている場合は制限がないことを意味するため注意してください)。
  • <total_bytes_sec>: 1 秒あたりのバイト単位の合計スループット制限を指定します。この要素には <read_bytes_sec><write_bytes_sec> は使用できません。
  • <read_bytes_sec>: 1 秒あたりのバイト単位の読み込みスループット制限を指定します。
  • <write_bytes_sec>: 1 秒あたりのバイト単位の書き込みスループット制限を指定します。
  • <total_iops_sec>: 1 秒あたりの合計 I/O 操作を指定します。この要素には <read_iops_sec><write_iops_sec> は使用できません。
  • <read_iops_sec>: 1 秒あたりの読み取り I/O 操作。
  • <write_iops_sec>: 1 秒あたりの書き込み I/O 操作。

23.18.1.6. ドライバー要素

オプションの <driver> 要素は、ディスクを提供するために使用されるハイパーバイザードライバーに関連する詳細を指定することを許可します。以下のオプションを使用することができます。
  • ハイパーバイザーが複数のバックエンドドライバーをサポートする場合、name 属性は、プライマリーバックエンドドライバーの名前を選択し、オプションのtype 属性はサブタイプを提供します。
  • オプションの cache 属性はキャッシュの仕組みを制御します。可能な値は、defaultnonewritethroughwritebackdirectsync (writethrough と似ていますがホスト物理マシンのページキャッシュを迂回します)、および unsafe (ホスト物理マシンはディスク I/O をすべてキャッシュすることがあり、ゲスト仮想マシンからの同期リクエストは無視されます) です。
  • オプションの error_policy 属性は、ハイパーバイザーがディスクの書き込みまたは読み込みエラーでどのように動作するかを制御します。可能な値は、stopreportignore、および enospace です。error_policy のデフォルト設定は report です。また、読み取りエラーの動作のみを制御するオプションの rerror_policy もあります。rerror_policy の指定がない場合は、error_policy が読み取りエラーと書き込みエラーの両方に使用されます。rerror_policy の指定がある場合は、読み取りエラーの error_policy が上書きされます。また、enospace は読み取りエラーの有効なポリシーではないため、error_policyenospace に設定され、rerror_policy の指定がない場合、読み取りエラーのデフォルト設定である report が使用されます。
  • オプションの io 属性は、I/O 上の特定のポリシーを制御します。kvm ゲスト仮想マシンは、threads および native をサポートします。オプションの ioeventfd 属性により、ユーザーは virtio ディスクデバイスのドメイン I/O の非同期処理を設定できます。デフォルトはハイパーバイザーによって設定されます。許可される値は on および off です。これを有効にすると、別のスレッドが I/O を処理する間にゲスト仮想マシンを実行することが可能になります。通常、I/O の間にシステムの CPU の使用率が高くなるゲスト仮想マシンに適しています。しかし、過負荷のホスト物理マシンによってゲスト仮想マシンの I/O の待機時間が長くなる可能性があります。デフォルト設定を変更せず、ハイパーバイザーに設定の判断を委ねることが推奨されます。

    注記

    ioeventfd は、disk XML セクションおよび device XML セクションの <driver> 要素に含まれます。disk XML セクションの場合は virtIO ディスク、device XML セクションの場合は SCSI ディスクに影響を与えます。
  • オプションの event_idx 属性は、デバイスイベント処理のいくつかの側面を制御し、on または off のいずれかに設定できます。これが on の場合、ゲスト仮想マシンに対する割り込みと終了の数が減少します。デフォルトはハイパーバイザーによって決定され、デフォルト設定は on になります。この動作が必要ない場合、off に設定すると強制的にこの機能をオフにすることができますが、デフォルトの設定を変更せずに、ハイパーバイザーに設定の判断を委ねることが推奨されます。
  • オプションの copy_on_read 属性は、読み取りのバッキングファイルをイメージファイルにコピーするかどうかを制御します。許可される値は on または <off> です。copy-on-read は同じバッキングファイルセクターに繰り返しアクセスしないようにします。そのため、バッキングファイルが通信速度の遅いネットワーク上に存在する場合に便利です。デフォルトでは copy-on-readoff になっています。
  • discard='unmap' を設定すると破棄サポートを有効にできます。同じ行を discard='ignore' に置き換えると無効にすることができます。デフォルト設定は discard='ignore' です。

23.18.1.7. 追加のデバイス要素

以下の属性は、device 要素内で使用することができます。
  • <boot>: ディスクがブート可能であることを指定します。

    追加のブート値

    • <order>: ブートシーケンス時にデバイスが試行される順序を決定します。
    • <per-device> boot 要素は、BIOS ブートローダーセクションの一般的な boot 要素と共に使用することができません。
  • <encryption>: ボリュームの暗号化方法を指定します。
  • <readonly>: デバイスがゲスト仮想マシンによって変更できないことを示します。この設定は、attribute <device='cdrom'> のディスクのデフォルトです。
  • <shareable>: デバイスがドメイン間で共有されることが予期されることを示します (ハイパーバイザーおよび OS がこれをサポートする場合)。shareable が使用される場合、cache='no' がそのデバイスに使用される必要があります。
  • <transient>: ゲスト仮想マシンが終了するときに、デバイスコンテンツへの変更が自動的に元に戻されることを示します。一部のハイパーバイザーでは、ディスクを transient とマークすると、ドメインが移行またはスナップショットに関与しなくなります。
  • <serial>: ゲスト仮想マシンのハードドライブのシリアル番号を指定します (例: <serial>WD-WMAP9A966149</serial>)。
  • <wwn>: 仮想ハードディスクまたは CD-ROM ドライブの WWN (World Wide Name) を指定します。これは、16 進法の 16 桁番号で構成される必要があります。
  • <vendor>: 仮想ハードディスクまたは CD-ROM デバイスのベンダーを指定します。8 文字以下の印刷可能な文字である必要があります。
  • <product>: 仮想ハードディスクまたは CD-ROM デバイスの製品を指定します。16 文字以下の印刷可能な文字である必要があります。
  • <host>: nameport、および transportsocket の 4 つの属性をサポートします。これらの属性はそれぞれホスト名、ポート番号、トランスポートタイプ、およびソケットへのパスを指定します。この要素の意味と要素の数は、以下のように protocol 属性によって異なります。

    追加のホスト属性

    • nbd: nbd-server を実行しているサーバーを指定し、1 台のホスト物理マシンのみに使用できます。
    • rbd: RBD タイプのサーバーを監視し、1 つ以上のホスト物理マシンに使用することができます。
    • sheepdog: sheepdog サーバーの 1 つを指定し (デフォルトは localhost:7000)、1 つのホスト物理マシンに使用できるか、またはいずれのホスト物理マシンにも使用できません。
    • gluster: glusterd デーモンを実行しているサーバーを指定し、1 台のホスト物理マシンのみに使用できます。transport 属性に対する有効な値は、tcprdma、または unix です。指定のない場合は tcp が仮定されます。トランスポートが unix の場合、socket 属性は unix ソケットへのパスを指定します。
  • <address>: ディスクをコントローラーの指定スロットに関連付けします。通常、実際の <controller> デバイスは推測できますが、明示的に指定することもできます。type 属性は必須で、通常 pci またはdrive になります。pci コントローラーでは、busslot、および function の追加の属性と、任意の domain および multifunction が必要です。multifunction のデフォルトは off です。drive コントローラーでは、追加の属性である controllerbustarget、および unit を利用でき、各属性のデフォルト設定は 0 になります。
  • auth: ソースにアクセスするのに必要な認証資格情報を提供します。これには、認証時に使用するユーザー名を特定する必須属性 username と、必須属性 type を持つサブ要素 secret が含まれます。
  • geometry: geometry 設定をオーバーライドする機能を提供します。ほとんどの場合 S390 DASD ディスクまたは旧式の DOS ディスクで役立ちます。以下のパラメーターを取ることができます。
    • cyls: シリンダーの数を設定します。
    • heads: ヘッドの数を指定します。
    • secs: トラックごとのセクター数を指定します。
    • trans: BIOS-Translation-Mode (変換モード) を指定し、nonelba、または auto を値とすることができます。
  • blockio: 以下のブロックデバイスプロパティーによるブロックデバイスのオーバーライドを許可します。

    blockio オプション

    • logical_block_size: ゲスト仮想マシン OS にレポートし、ディスク I/O の最小単位を記述します。
    • physical_block_size: ゲスト仮想マシンのオペレーティングシステムにレポートし、ディスクデータの位置合わせに関連するディスクのハードウェアセクターサイズを記述します。

23.18.2. ファイルシステム

ゲスト仮想マシンから直接アクセスできるホスト物理マシンのファイルシステムディレクトリーにあります。

 [...]
  <devices>
    <filesystem type='template'>
      <source name='my-vm-template'/>
      <target dir='/'/>
    </filesystem>
    <filesystem type='mount' accessmode='passthrough'>
      <driver type='path' wrpolicy='immediate'/>
      <source dir='/export/to/guest'/>
      <target dir='/import/from/host'/>
      <readonly/>
    </filesystem>
    [...]
  </devices>
  [...]
  

図23.36 デバイス - ファイルシステム

filesystem 属性の可能な値は次のとおりです。
  • type='mount': ゲスト仮想マシンにマウントするホスト物理マシンのディレクトリーを指定します。いずれの値も指定されていない場合は、これがデフォルトタイプになります。このモードには、属性 type='path' または type='handle' を持つオプションのサブ要素 driverもあります。ドライバーブロックには、ホスト物理マシンのページキャッシュをさらに制御するオプション属性の wrpolicy があり、この属性を省略すると、デフォルト設定に戻ります。一方、値 immediate を指定すると、ゲスト仮想マシンのファイル書き込み操作時に接触されたすべてのページに対して、ホスト物理マシンのライトバックが即時にトリガーされます。
  • type='template': OpenVZ のファイルシステムテンプレートを指定し、OpenVZ ドライバーのみによって使用されます。
  • type='file': ホスト物理マシンファイルがイメージとして処理され、ゲスト仮想マシンにマウントされることを指定します。このファイルシステム形式は自動検出され、LXC ドライバーによってのみ使用されます。
  • type='block': ゲスト仮想マシンでマウントされるホスト物理マシンのブロックデバイスを指定します。ファイルシステム形式は自動検出され、LXC ドライバーによってのみ使用されます。
  • type='ram': ホスト物理マシン OS からのメモリーを使用する、インメモリーファイルシステムが使用されることを指定します。source 要素には、キビバイト単位でメモリー使用制限を設ける単一属性の usage があり、LXC ドライバーによってのみ使用されます。
  • type='bind': ゲスト仮想マシン内の別のディレクトリーにバインドされるゲスト仮想マシン内のディレクトリーを指定します。この要素は、LXC ドライバーによってのみ使用されます。
  • accessmode: ソースのアクセス用にセキュリティーモードを指定します。現在、KVM ドライバーに対して type='mount' と指定する場合にのみ機能します。使用できる値は以下のとおりです。
    • passthrough: ゲスト仮想マシン内から設定されるユーザーの権限でソースがアクセスされることを指定します。これは、いずれも指定されていない場合にデフォルトの accessmode になります。
    • mapped: ソースがハイパーバイザーの権限でアクセスされることを指定します。
    • squash: 'passthrough' に似ていますが、例外は、chown のような権限の必要な操作の失敗が無視されることです。これにより、ハイパーバイザーを root 以外で実行するユーザーにとって passthrough のようなモードが使いやすくなります。
  • source: ゲスト仮想マシンでアクセスされているホスト物理マシンのリソースを指定します。name 属性は <type='template'> と使用する必要があり、dir 属性は <type='mount'> と使用する必要があります。usage 属性は <type='ram'> と使用して、KB 単位でメモリー制限を設定します。
  • target: ゲスト仮想マシン内のどこでソースドライバーがアクセスできるかを決定します。大半のドライバーの場合、これは自動的なマウントポイントになりますが、KVM の場合、これは、マウントする場所のヒントとしてゲスト仮想マシンにエクスポートされる任意の文字列タグでしかありません。
  • readonly: ゲスト仮想マシンの読み取り専用マウントとしてファイルシステムのエクスポートを有効にします。デフォルトでは、read-write アクセスが指定されます。
  • space_hard_limit: このゲスト仮想マシンのファイルシステムに利用可能な最大領域を指定します。
  • space_soft_limit: このゲスト仮想マシンのファイルシステムで利用できる最大領域を指定します。コンテナーは、猶予期間についてのソフト制限を超えることが許可されます。その後にハード制限が施行されます。

23.18.3. デバイスアドレス

多くのデバイスには、ゲスト仮想マシンに提示されるデバイスが仮想バス上のどこに配置されるかを説明するオプションの <address> サブ要素があります。アドレス (またはアドレス内のオプション属性) が入力で省略される場合、libvirt は適切なアドレスを生成しますが、レイアウトにより多くの制御が必要な場合は明示的なアドレスが必要になります。address 要素を含むデバイス例について、以下を参照してください。
すべてのアドレスには、デバイスが置かれるバスを記述する必須の属性 type があります。指定されるデバイスに使用するアドレスを選択することは、デバイスおよびゲスト仮想マシンのアーキテクチャーによって部分的に制限されます。たとえば、ディスクデバイスは type='disk' を使用し、コンソールデバイスは、i686 または x86_64 ゲスト仮想マシンで type='pci' を使用するか、または PowerPC64 pseries ゲスト仮想マシンで type='spapr-vio' を使用します。各アドレスの <type> には、デバイスが置かれるバス上の場所を制御するオプション属性があります。追加属性は以下のようになります。
  • type='pci': PCI アドレスには以下の追加属性があります。
    • domain (2 バイト 16 進数整数。現在 qemu で使用されていません)
    • bus (0 から 0xff までの 16 進数値)
    • slot (0x0 から 0x1f までの 16 進数値)
    • function (0 から 7 までの値)
    • さらに、multi-function 属性も利用できます。これは、PCI コントロールレジスターの特定のスロット/機能のマルチファンクションビットをオンにするよう制御します。この multifunction 属性は、デフォルトで 'off' になりますが、マルチファンクションが使用されるスロットのファンクション 0 では 'on' に設定する必要があります。
  • type='drive': drive アドレスには次の追加属性があります。
    • controller (2 桁のコントローラー番号)
    • bus (2 桁のバス番号)
    • target (2 桁のバス番号)
    • unit (バス上の 2 桁のユニット番号)
  • type='virtio-serial': 各 virtio-serial アドレスには以下の追加属性があります。
    • controller (2 桁のコントローラー番号)
    • bus (2 桁のバス番号)
    • slot (バス内の 2 桁のスロット)
  • type='ccid': スマートカードに使用される CCID アドレスには、以下の追加属性があります。
    • bus (2 桁のバス番号)
    • slot (バス内の 2 桁のスロット)
  • type='usb': USB アドレスには以下の追加属性があります。
    • bus (0 から 0xfff までの 16 進数)
    • port (1.2 または 2.1.3.1 などの最高 4 つのオクテットからなるドット区切りの表記)
  • type='spapr-vio' : PowerPC pseries のゲスト仮想マシンで、デバイスは SPAPR-VIO バスに割り当てられます。これには、フラットな 64 ビットのアドレス空間があります。通常、デバイスは通常 0x1000 のゼロ以外の倍数で割り当てられますが、その他のアドレスも有効であり、libvirt によって許可されています。開始レジスターの 16 進値のアドレスを決定する追加属性 reg は、この属性に割り当てることができます。

23.18.4. コントローラー

ゲスト仮想マシンのアーキテクチャーにより、多くの仮想デバイスを単一バスに割り当てることができます。通常、libvirt はバスに使用するコントローラーを自動的に推定できます。ただし、ゲスト仮想マシン XML に明示的な <controller> 要素を指定する必要がある場合があります。

  ...
  <devices>
    <controller type='ide' index='0'/>
    <controller type='virtio-serial' index='0' ports='16' vectors='4'/>
    <controller type='virtio-serial' index='1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    <controller type='scsi' index='0' model='virtio-scsi' num_queues='8'/>
    </controller>
    ...
  </devices>
  ...

図23.37 コントローラー要素

各コントローラーには、必須の属性である type があり、これは \"ide\"、\"fdc\"、\"scsi\"、"sata\"、\"usb\"、\"ccid\"、または \"virtio-serial\" の 1 つである必要があります。また、バスコントローラーの順番を記述する 10 進整数で、必須の属性である index もあります (address 要素の controller 属性で使用)。"virtio-serial" コントローラーには、コントローラーを介して接続できるデバイスの数を制御する、portsvectors の 2 つのオプション属性があります。
<controller type='scsi'> には、任意の属性 model があり、\"auto\"、\"buslogic\"、\"ibmvscsi\"、\"lsilogic\"、\"lsias1068\"、\"virtio-scsi\"、または \"vmpvscsi\" のいずれかになります。<controller type='scsi'> には、指定されるキューの数に対してマルチキューサポートを有効にする属性 num_queues があります。さらに、ioeventfd 属性を使用するともできます。これはコントローラーが SCSI ディスクで非同期処理を使用するかどうかを指定します。受け入れ可能な値は "on" および "off" です。
"usb" コントローラーには任意の属性 model があり、これは \"piix3-uhci\"、\"piix4-uhci\"、\"ehci\"、\"ich9-ehci1\"、\"ich9-uhci1\"、\"ich9-uhci2\"、\"ich9-uhci3\"、\"vt82c686b-uhci\"、 \"pci-ohci\"、または \"nec-xhci\" のいずれかになります。さらに、USB バスをゲスト仮想マシンに対して無効にする必要がある場合、model='none' を使用することが可能です。PowerPC64 の "spapr-vio" アドレスには関連するコントローラーがありません。
PCI または USB バス上のデバイスとなっているコントローラーの場合、オプションのサブ要素 address は上記のセマンティックでコントローラーとそのマスターバスの正確な関係を指定できます。
USB コンパニオンコントローラーには、コンパニオンとそのマスターコントローラーの正確な関係を指定するオプションのサブ要素 master があります。コンパニオンコントローラーは、そのマスターと同じバス上にあるため、コンパニオンのインデックス値も等しくなければなりません。

  ...
  <devices>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0' bus='0' slot='4' function='7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/>
    </controller>
    ...
  </devices>
  ...

図23.38 デバイス - コントローラー - USB

23.18.5. デバイスのリース

ロックマネージャーを使用する場合、ゲスト仮想マシンに対してデバイスリースを記録するオプションがあります。ロックマネージャーは、ゲスト仮想マシンはリースが取得されない限り開始されないようにします。通常の管理ツールを使用して設定される場合、ドメイン XML の以下のセクションが影響を受けます。

  ...
  <devices>
    ...
    <lease>
      <lockspace>somearea</lockspace>
      <key>somekey</key>
      <target path='/some/lease/path' offset='1024'/>
    </lease>
    ...
  </devices>
  ...

図23.39 デバイス - デバイスのリース

lease セクションには、以下の引数を含めることができます。
  • lockspace: キーが保持される lockspace を特定する任意の文字列です。ロックマネージャーは、lockspace 名の形式または長さに追加の制限を設定できます。
  • key: 取得されるリースを一意的に識別する任意の文字列です。ロックマネージャーは、キーの形式または長さに対して追加の制限を設定することができます。
  • target: lockspace に関連付けられたファイルの完全修飾パスです。オフセットは、ファイル内のどこにリースが格納されるかを指定します。ロックマネージャーがオフセットを必要としない場合、この値を 0 に設定します。

23.18.6. ホスト物理マシンのデバイス割り当て

23.18.6.1. USB / PCI デバイス

ホスト物理マシンの USB および PCI デバイスは、管理ツールを使用してホスト物理マシンを変更することによって、hostdev 要素を使用してゲスト仮想マシンに渡すことができます。ドメイン XML ファイルの以下のセクションが設定されます。

  ...
  <devices>
    <hostdev mode='subsystem' type='usb'>
      <source startupPolicy='optional'>
        <vendor id='0x1234'/>
        <product id='0xbeef'/>
      </source>
      <boot order='2'/>
    </hostdev>
  </devices>
  ...

図23.40 デバイス - ホスト物理マシンのデバイス割り当て

または、以下を実行することもできます。

  ...
  <devices>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address bus='0x06' slot='0x02' function='0x0'/>
      </source>
      <boot order='1'/>
      <rom bar='on' file='/etc/fake/boot.bin'/>
    </hostdev>
  </devices>
  ...

図23.41 デバイス - ホスト物理マシン割り当ての代替

または、以下を実行することもできます。

  ...
  <devices>
    <hostdev mode='subsystem' type='scsi'>
      <source>
        <adapter name='scsi_host0'/>
        <address type='scsi' bus='0' target='0' unit='0'/>
      </source>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </hostdev>
  </devices>
  ..

図23.42 デバイス - ホスト物理マシン scsi デバイス割り当て

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.16 ホスト物理マシンデバイス割り当て要素

パラメーター説明
hostdev
これは、ホスト物理マシンデバイスについて説明するための主な要素です。これは以下のオプションを受け入れます。
  • mode: USB および PCI デバイスの値は常に subsystem になります。
  • type: USB デバイスの usb および PCI デバイスの pci
  • managed: デバイスの 管理モード を切り替えます。
    • PCI デバイスについて yes に設定されると、ゲストマシンへの接続、ゲストマシンの接続解除、さらにホストマシンへの再接続が随時行われます。デバイス割り当ての一般的な使用の場合には managed='yes' が推奨されます。
    • PCI および USB デバイスについて no に設定されているか、または省略されている場合、デバイスはゲストに接続されたままになります。デバイスをホストが使用できる状態にするには、ユーザーは、ゲストの起動またはホットプラグを実行する前に、引数 virNodeDeviceDettach または virsh nodedev-dettach コマンドを使用する必要があります。さらに、ユーザーはデバイスのホットアンプラグまたはゲストの停止後に virNodeDeviceReAttach または virsh nodedev-reattach を使用する必要があります。主に、特定のゲスト専用のデバイスには managed='no' を設定することが推奨されます。
sourceホスト物理マシンから表示されるデバイスについて説明します。USB デバイスは、vendor および product 要素を使用してベンダー/製品 ID によって処理されるか、または address 要素を使用してホスト物理マシン上のデバイスのアドレスによって処理されます。他方、PCI デバイスは、それらのアドレスによってのみ記述されます。USB デバイスのソース要素には、指定のホスト物理マシンの USB デバイスが見つからなかった場合の処理についてのルールを定義するために使用できる startupPolicy 属性が含まれる可能性があります。この属性は、以下の値を受け入れます。
  • mandatory: 何かの理由で見つからない場合に失敗します (デフォルト)
  • requisite: 起動時に見つからない場合に失敗し、移行/復元/復帰の時点で見つからない場合にドロップします。
  • optional: 起動の試行時に見つからない場合にドロップします。
vendor, productこれらの要素のそれぞれには、USB ベンダーおよび製品 ID を指定する id 属性があります。ID は、10 進数、16 進数 (0x で開始) または 8 進数 (0 で開始) の形式で指定できます。
bootデバイスが起動可能であることを指定します。この属性の順序は、ブートシーケンス時にデバイスが試行される順序を決定します。デバイスごとの boot 要素は、BIOS ブートローダーセクションの一般的な boot 要素と共に使用することができません。
romPCI デバイスの ROM がゲスト仮想マシンに提示される方法を変更するために使用されます。オプションの bar 属性は、on または off に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップに表示されるかどうかを決定します (PCI 資料によると、rom bar 設定は、ROM の Base Address Register の表示を制御します)。rom bar が指定されない場合、デフォルト設定が使用されます。オプションの file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルをポイントするために使用されます。これは、たとえば SR-IOV 対応のイーサネットデバイス (VF のブート ROM を持たない) の仮想機能用に PXE ブート ROM を提供するのに便利です。
addressさらに、デバイスが表示されるホスト物理マシン上のUSB バスとデバイス番号を指定するための bus および device 属性があります。これらの属性の値は、10 進数、16 進数 (0x で開始) または 8 進数 (0 で開始) の形式で指定できます。PCI デバイスの場合、要素には 3 つの属性が含まれ、デバイスを lspci または virsh nodedev-list で検索できるように指定することができます。

23.18.6.2. ブロック / キャラクターデバイス

ホスト物理マシンのブロック/キャラクターデバイスは、管理ツールを使用してドメイン xml の hostdev 要素を変更することで、ゲスト仮想マシンに渡すことができます。これは、コンテナーベースの仮想化の場合にのみ可能であることに注意してください。

...
<hostdev mode='capabilities' type='storage'>
  <source>
    <block>/dev/sdf1</block>
  </source>
</hostdev>
...
   

図23.43 デバイス - ホスト物理マシンデバイス割り当てブロックキャラクターデバイス

以下は代替アプローチです。

...
<hostdev mode='capabilities' type='misc'>
  <source>
    <char>/dev/input/event3</char>
  </source>
</hostdev>
...
    

図23.44 デバイス - ホスト物理マシンデバイス割り当てブロックキャラクターデバイスの代替法 1

以下はもう 1 つの代替アプローチです。

...
<hostdev mode='capabilities' type='net'>
  <source>
    <interface>eth0</interface>
  </source>
</hostdev>
...

図23.45 デバイス - ホスト物理マシンデバイス割り当てブロックキャラクターデバイスの代替法 2

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.17 ブロック / キャラクターデバイス要素

パラメーター説明
hostdevこれは、ホスト物理マシンデバイスを記述するためのメインコンテナーです。ブロック/キャラクターデバイスのパススルーの場合 mode は常に capabilities で、ブロックデバイスの場合 typeblock で、キャラクターデバイスの場合 char になります。
sourceこれは、ホスト物理マシンから表示されるデバイスについて記述します。ブロックデバイスの場合、ホスト物理マシン OS のブロックデバイスへのパスは、ネスト化された block 要素に指定され、キャラクターデバイスの場合は、char 要素が使用されます。

23.18.7. リダイレクトされるデバイス

キャラクターデバイスによる USB デバイスのリダイレクトは、ドメイン XML の以下のセクションを変更して設定されます。

  ...
  <devices>
    <redirdev bus='usb' type='tcp'>
      <source mode='connect' host='localhost' service='4000'/>
      <boot order='1'/>
    </redirdev>
    <redirfilter>
      <usbdev class='0x08' vendor='0x1234' product='0xbeef' version='2.00' allow='yes'/>
      <usbdev allow='no'/>
    </redirfilter>
  </devices>
  ...

図23.46 デバイス - リダイレクトされるデバイス

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.18 リダイレクトされるデバイス要素

パラメーター説明
redirdevこれは、リダイレクトされるデバイスを記述するためのメインコンテナーです。bus は、USB デバイスの場合は usb にする必要があります。トンネルのホスト物理マシン側を記述するには、サポートされるシリアルデバイスの 1 つの一致する追加属性タイプが必要になります。それらの典型例は、type='tcp' または type='spicevmc' (SPICE グラフィックスデバイスの usbredir チャネルを使用) です。redirdev 要素にはオプションのサブ要素 address があり、これは、デバイスを特定のコントローラーに関連付けます。さらに、source などのサブ要素が、指定される type に基づいて必要になる場合があります。ただし、target サブ要素は不要です (キャラクターデバイスのコンシューマーが、ゲスト仮想マシンに表示されるデバイスではなく、ハイパーバイザー自体であるため)。
bootデバイスが起動可能であることを指定します。order 属性は、ブートシーケンス時にデバイスが試行される順序を決定します。デバイスごとの boot 要素は、BIOS ブートローダーセクションの一般的な boot 要素と共に使用することができません。
redirfilterこれは、特定のデバイスをリダイレクトからフィルター処理するためのフィルタールールを作成するために使用されます。これは、各フィルタールールを定義するためにサブ要素 usbdev を使用します。class 属性は USB クラスコードです。

23.18.8. スマートカードデバイス

仮想スマートカードは、smartcard 要素からゲスト仮想マシンに提供されます。ホスト物理マシン上の USB スマートカードリーダーデバイスは、ホスト物理マシンとゲスト仮想マシンの両方で使用できず、ゲスト仮想マシンから削除されるとホスト物理マシンのコンピューターをロックできないことから、単純なデバイスパススルーではゲスト仮想マシンで使用することができません。したがって、一部のハイパーバイザーは、ゲスト仮想マシンにスマートカードインターフェースを提供できる特殊な仮想デバイスを提供します。その際、資格情報がホスト物理マシン、またはサードパーティーのスマートカードプロバイダーに対して作成されたチャネルからどのように取得されるかを記述するために複数のモードが使用されます。
キャラクターデバイスによる USB デバイスのリダイレクトは、ドメイン XML の以下のセクションを変更する管理ツールで設定します。

  ...
  <devices>
    <smartcard mode='host'/>
    <smartcard mode='host-certificates'>
      <certificate>cert1</certificate>
      <certificate>cert2</certificate>
      <certificate>cert3</certificate>
      <database>/etc/pki/nssdb/</database>
    </smartcard>
    <smartcard mode='passthrough' type='tcp'>
      <source mode='bind' host='127.0.0.1' service='2001'/>
      <protocol type='raw'/>
      <address type='ccid' controller='0' slot='0'/>
    </smartcard>
    <smartcard mode='passthrough' type='spicevmc'/>
  </devices>
  ...

図23.47 デバイス - スマートカードデバイス

smartcard 要素には、必須属性の mode があります。それぞれのモードでは、ゲスト仮想マシンには、物理 USB CCID (Chip/Smart Card Interface Device) カードのように動作する USB バス上にデバイスが表示されます。
モード属性は以下のようになります。

表23.19 スマートカードの mode 要素

パラメーター説明
mode='host'このモードでは、ハイパーバイザーは、ゲスト仮想マシンから NSS 経由でホスト物理マシンのスマートカードに直接アクセスするためのすべての要求を中継します。これ以外の属性またはサブ要素は不要です。オプションの address サブ要素の使用については、以下を参照してください。
mode='host-certificates'このモードにより、スマートカードをホスト物理マシンにプラグインする代わりに、ホスト物理マシン上のデータベースにある 3 つの NSS 証明書名を指定することができます。これらの証明書は、コマンドの certutil -d /etc/pki/nssdb -x -t CT,CT,CT -S -s CN=cert1 -n cert1, により生成され、結果として作成される 3 つの証明書名は、3 つの certificate サブ認証のそれぞれのコンテンツとして指定される必要があります。追加のサブ要素の database は代替ディレクトリーへの絶対パスを指定できます (証明書の作成時の -d コマンドの certutil フラグに一致)。これが表示されない場合、デフォルトは /etc/pki/nssdb になります。
mode='passthrough'このモードを使用することにより、すべての要求を 2 次的なキャラクターデバイスを経由してサードパーティープロバイダーにトンネル化できます (これにより、ハイパーバイザーがホスト物理マシンと直接通信するのではなく、スマートカードと通信するか、または 3 つの認証ファイルを使用します。この操作モードでは、対応するシリアルデバイスタイプのいずれかに一致する、追加属性の type が、トンネルのホスト物理マシン側を記述するために必要になります。type='tcp' または type='spicevmc' (SPICE グラフィックスデバイスのスマートカードチャネルを使用) などが一般的な例になります。さらに、source などのサブ要素は、指定されるタイプに応じて必要になります。ただし、target サブ要素は不要です (キャラクターデバイスのコンシューマーが、ゲスト仮想マシン内に表示されるデバイスではなく、ハイパーバイザー自体であるため)。
各モードはオプションのサブ要素 address をサポートします。これは、スマートカードと ccid バスコントローラー間の相関関係を微調整します。詳細は、「デバイスアドレス」 を参照してください。

23.18.9. ネットワークインターフェース

ネットワークインターフェースデバイスは、ドメイン XML の以下の部分を設定する管理ツールを使用して変更します。

  ...
  <devices>
    <interface type='direct' trustGuestRxFilters='yes'>
      <source dev='eth0'/>
      <mac address='52:54:00:5d:c7:9e'/>
      <boot order='1'/>
      <rom bar='off'/>
    </interface>
  </devices>
  ...

図23.48 デバイス - ネットワークインターフェース

ゲスト仮想マシンのネットワークインターフェースの設定にはいくつかの方法が考えられます。これはインターフェース要素のタイプ属性に値を設定して実行されます。以下の値を使用できます。
  • "direct": ゲスト仮想マシンの NIC をホスト物理マシン上の物理 NIC に接続します。詳細と例は 「物理インターフェースへの直接割り当て」 を参照してください。
  • "network": これは動的またはワイヤレスのネットワーク設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続に推奨される設定です。詳細および具体例については、「仮想ネットワーク」 を参照してください。
  • "bridge": これが静的な有線ネットワーク設定を持つホスト物理マシン上のゲスト仮想マシンの接続に推奨される設定です。詳細および例は 「LAN のブリッジ」 を参照してください。
  • "ethernet": 管理者が任意のスクリプトを実行してゲスト仮想マシンのネットワークを LAN に接続する方法を提供します。詳細と例は 「汎用イーサネット接続」 を参照してください。
  • "hostdev":汎用デバイスのパススルーを使用して PCI ネットワークデバイスを直接ゲスト仮想マシンに割り当てできるようにします。詳細および例は 「PCI パススルー」 を参照してください。
  • "mcast": マルチキャストグループを使用して仮想ネットワークを表すことができます。詳細および例は 「マルチキャストトンネル」 を参照してください。
  • "user": ユーザー空間の SLIRP スタックパラメーターを設定するユーザーオプションを使用して、NAT を持つ仮想 LAN を外部に提供します。詳細および例は 「ユーザー領域 SLIRP スタック」 を参照してください。
  • "server": サーバーオプションを使用して、仮想ネットワークを提供するための TCP クライアントサーバーアーキテクチャーを作成します。この仮想ネットワークでは、1 台のゲスト仮想マシンがネットワークのサーバーエンドを提供し、その他すべてのゲスト仮想マシンはクライアントとして設定されます。詳細および具体例については、「TCP トンネル」 を参照してください。
これらのオプションには、それぞれ詳細についてのリンクがあります。さらに各 <interface> 要素は、ホスト物理マシンがゲスト仮想マシンから受信されるレポートを検出し、信頼することを可能にするオプションの <trustGuestRxFilters> 属性で定義できます。これらのレポートは、インターフェースがフィルターへの変更を受信するたびに送信されます。これには、プライマリー MAC アドレス、デバイスアドレスフィルター、または vlan 設定への変更が含まれます。<trustGuestRxFilters> 属性は、セキュリティー上の理由によりデフォルトで無効にされます。また、この属性のサポートは、ホスト物理マシンの接続タイプと共にゲストネットワークデバイスモデルによって異なることに注意してください。現時点では、これはホスト物理マシンの virtio デバイスモデルおよび macvtap 接続にのみサポートされています。オプションパラメーター <trustGuestRxFilters> を設定することが推奨される単純なケースには、ゲスト仮想マシンに対してホスト物理マシンのフィルターを制御する権限を付与する必要がある場合があります。この設定により、ゲスト仮想マシンのフィルターがホストでミラー化されるためです。
上記の属性に加えて、各 <interface> 要素は、type='pci' 属性でインターフェースを特定の PCI スロットに関連付けできるオプションの <address> サブ要素を取ることができます。詳細は 「デバイスアドレス」 を参照してください。

23.18.9.1. 仮想ネットワーク

仮想ネットワークは、動的/ワイヤレス設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続 (または、ホスト物理マシンのハードウェアの詳細が <network> 定義に別個に記載される複数ホスト物理マシン環境) について推奨される設定です。さらに、これは、名前付きネットワーク定義によって詳述される接続を提供します。仮想ネットワークの forward mode 設定に応じて、ネットワークは完全に分離するか (<forward> 要素の指定なし)、明示的なネットワークデバイスまたはデフォルトルートに対して NAT を実行するか (forward mode='nat')、NAT なしで経路指定されるか (forward mode='route')、またはホスト物理マシンのネットワークインターフェースのいずれかに接続されるか (macvtap 経由)、またはブリッジデバイスに接続されます (forward mode='bridge|private|vepa|passthrough')。
bridgeprivatevepa、およびpassthrough の forward モードが指定されたネットワークの場合、ホスト物理マシンの必要な DNS および DHCP サービスが libvirt 外にすでにセットアップされていることが想定されます。分離 (isolated)、nat および経路指定されるネットワークの場合、DHCP および DNS は、libvirt によって仮想ネットワーク上で提供され、IP 範囲は、virsh net-dumpxml [networkname] により仮想ネットワーク設定を検査して決定できます。デフォルトのルートに接続するために NAT を使用する既成の「デフォルト」仮想ネットワークがあり、この場合、IP 範囲は 192.168.122.0/255.255.255.0 になります。それぞれの仮想マシンには、vnetN の名前で作成された、関連付けられた tun デバイスがあり、これは、<target> 要素でオーバーライドすることができます (「ターゲット要素のオーバーライド」 を参照してください)。
インターフェースのソースがネットワークの場合、ポートグループはネットワークの名前で指定することができます。1 つのネットワークには複数のポートグループが定義される場合があり、それぞれのポートグループには、ネットワーク接続の異なるクラスについて若干異なる設定情報が含まれます。さらに、<direct> ネットワーク接続 (以下で説明) のように、タイプ network の接続が <virtualport> 要素を指定すると、802.1Qbg または 802.1Qbh 互換の Virtual Ethernet Port Aggregator (VEPA) スイッチまたは Open vSwitch 仮想スイッチに設定データが転送されることがあります。
スイッチの実際のタイプは、ホスト物理マシン上の <network> の設定によって変わる場合があるため、<virtualport type>属性を省略することができます。<virtualport type> は 1 回または複数回指定する必要があります。ドメインの起動時に、完全な <virtualport> 要素が、定義されるタイプと属性をマージして構成されます。これにより、仮想ポートが新たに構成されます。下位の仮想ポートからの属性は、上位の仮想ポートで定義された属性を変更することができないことに注意してください。インターフェースの優先順位が最も高くなり、ポートグループの優先順位が最も低くなります。
たとえば、802.1Qbh スイッチと Open vSwitch スイッチの両方を持つ、適切に動作するネットワークを作成するには、no タイプを指定する必要がある場合がありますが、profileid および interfaceid の両方を指定する必要があります。さらに、manageridtypeid、または profileid などの、仮想ポートから入力される他の属性はオプションになります。
ゲスト仮想マシンが特定タイプのスイッチにのみ接続するよう制限する場合、仮想ポートのタイプを指定でき、指定されたポートタイプのスイッチのみが接続されます。追加のパラメーターを指定すると、スイッチの接続はさらに制限されます。ポートが指定されており、ホスト物理マシンのネットワークに異なるタイプの仮想ポートがある場合、インターフェースの接続は失敗します。仮想ネットワークのパラメーターは、管理ツールを使用してドメイン XML の以下の部分を変更して定義されます。

  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
    </interface>
    ...
    <interface type='network'>
      <source network='default' portgroup='engineering'/>
      <target dev='vnet7'/>
      <mac address="00:11:22:33:44:55"/>
      <virtualport>
        <parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
      </virtualport>

    </interface>
  </devices>
  ...

図23.49 デバイス - ネットワークインターフェース- 仮想ネットワーク

23.18.9.2. LAN のブリッジ

「ネットワークインターフェース」 のとおり、これが静的な有線ネットワーク設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続に推奨される設定であることに注意してください。
LAN へのブリッジは、ゲスト仮想マシンから直接 LAN に接続するブリッジを提供します。これは、1 つ以上のホスト物理マシンの物理 NIC がスレーブ化されているホスト物理マシンにブリッジデバイスがあることが想定されます。ゲスト仮想マシンには、tun の名前で作成された、関連付けられた <vnetN> デバイスがあります。この名前は、<target> 要素でオーバーライドできます (「ターゲット要素のオーバーライド」 を参照してください)。<tun> デバイスはブリッジに対してスレーブ化されます。IP 範囲/ネットワーク設定は、LAN で使用される任意の設定になります。これは、物理マシンのように、ゲスト仮想マシンに対して完全な着信および発信ネットワークアクセスを提供します。
Linux システムでは、ブリッジデバイスは、通常標準の Linux ホスト物理マシンブリッジです。Open vSwitch をサポートするホスト物理マシンでは、virtualport type='openvswitch'/ をインターフェース定義に追加することによって Open vSwitch ブリッジデバイスに接続することもできます。Open vSwitch タイプの virtualport は、parameters 要素で以下の 2 つのパラメーターを受け入れます。1 つは、Open vSwitch へのこの特定のインターフェースを一意的に特定するために使用される標準 UUID になる interfaceid です (これを指定しない場合、ランダムな interfaceid が、インターフェースの初回定義時に生成されます)。もう 1 つはオプションの profileid であり、これはインターフェース <port-profile> として Open vSwitch に送信されます。LAN 設定へのブリッジを設定するには、管理ツールを使用してドメイン XML の以下の部分を設定します。

  ...
  <devices>
    ...
    <interface type='bridge'>
      <source bridge='br0'/>
    </interface>
    <interface type='bridge'>
      <source bridge='br1'/>
      <target dev='vnet7'/>
      <mac address="00:11:22:33:44:55"/>
    </interface>
    <interface type='bridge'>
      <source bridge='ovsbr'/>
      <virtualport type='openvswitch'>
        <parameters profileid='menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
      </virtualport>
    </interface>
    ...
  </devices>

図23.50 デバイス - ネットワークインターフェース- LAN のデバイス

23.18.9.3. ポートのマスカレード範囲の設定

ポートのマスカレード範囲を設定する必要がある場合に、ポートは以下のように設定できます。

<forward mode='nat'>
   <address start='1.2.3.4' end='1.2.3.10'/>
</forward>  ...

図23.51 ポートのマスカレード範囲

これらの値は、「Network Address Translation」 のとおりに iptables コマンドを使用して設定する必要があります。

23.18.9.4. ユーザー領域 SLIRP スタック

ユーザー領域 SLIRP スタックパラメーターを設定すると、外部への NAT が指定された仮想 LAN が提供されます。仮想ネットワークには DHCP および DNS サービスがあり、ゲスト仮想マシンに対して、10.0.2.15 から開始される IP アドレスを提供します。デフォルトのルーターは 10.0.2.2 であり、DNS サーバーは 10.0.2.3 です。このネットワーク設定は、ゲスト仮想マシンが発信アクセスを持つことを必要とする、権限のないユーザーにとって唯一のオプションです。
ユーザー領域 SLIRP スタックパラメーターは、ドメイン XML の以下の部分に定義されます。

  ...
  <devices>
    <interface type='user'/>
    ...
    <interface type='user'>
      <mac address="00:11:22:33:44:55"/>
    </interface>
  </devices>
  ...

図23.52 デバイス - ネットワークインターフェース- ユーザー領域 SLIRP スタック

23.18.9.5. 汎用イーサネット接続

管理者が、ゲスト仮想マシンのネットワークを LAN に接続するための任意のスクリプトを実行するための手段を提供します。ゲスト仮想マシンには vnetN という名前で作成される <tun> デバイスがあります。これは、<target> 要素でオーバーライドすることができます。tun デバイスを作成した後に、シェルスクリプトが実行され、ホスト物理マシンのネットワーク統合に必要なすべてのことを実行することが予期されます。デフォルトでは、このスクリプトは /etc/qemu-ifup と呼ばれますが、これをオーバーライドすることができます (「ターゲット要素のオーバーライド」 を参照してください)。
汎用イーサネット接続パラメーターは、ドメイン XML の以下の部分に定義されます。

  ...
  <devices>
    <interface type='ethernet'/>
    ...
    <interface type='ethernet'>
      <target dev='vnet7'/>
      <script path='/etc/qemu-ifup-mynet'/>
    </interface>
  </devices>
  ...

図23.53 デバイス - ネットワークインターフェース- 汎用イーサネット接続

23.18.9.6. 物理インターフェースへの直接割り当て

これにより、物理インターフェースが指定されている場合、ゲスト仮想マシンの NIC がホスト物理マシンの物理インターフェースに割り当てられます。
これには、Linux macvtap ドライバーが利用可能である必要あります。mode 属性値 vepa (「Virtual Ethernet Port Aggregator」)、bridge または private のいずれかは、macvtap デバイスの操作モードとして選択できます。デフォルトモードは vepa です。
物理インターフェースへの直接割り当ての操作には、ドメイン XML の以下のセクションの次のようなパラメーターの設定を行うことが関係します。

  ...
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0' mode='vepa'/>
    </interface>
  </devices>
  ...

図23.54 デバイス - ネットワークインターフェース - 物理インターフェースへの直接割り当て

各モードによって 表23.20「物理インターフェース要素への直接割り当て」 のとおりにパケットが配信されます。

表23.20 物理インターフェース要素への直接割り当て

要素説明
vepaゲスト仮想マシンのすべてのパケットは、外部ブリッジに送信されます。宛先がパケットの発信元と同じホスト物理マシン上にあるゲスト仮想マシンのパケットは、VEPA 対応ブリッジによって、ホスト物理マシンに送り戻されます (最近のブリッジは VEPA 対応でない場合が多い)。
bridge宛先が発信元と同じホスト物理マシン上にあるパケットは、ターゲットの macvtap デバイスに直接配信されます。直接配信されるようにするには、発信元および宛先デバイスの両方を bridge モードにする必要があります。これらのいずれかが vepa モードの場合は、VEPA 対応のブリッジが必要になります。
privateすべてのパケットは外部ブリッジに送信されます。それらが同じホスト物理マシンのターゲット VM に送信されるのは、それらが外部ルーターまたはゲートウェイ経由で送信され、そのデバイスがそれらをホスト物理マシンに送り戻す場合のみです。ソースまたは宛先デバイスのいずれかが private モードの場合に、この手順が実行されます。
passthroughこの機能は、SR-IOV 対応の NIC の仮想機能を、移行機能を失わずにゲスト仮想マシンに直接割り当てます。すべてのパケットは、設定されたネットワークデバイスの VF/IF に送信されます。デバイスの機能に応じて、追加の前提条件または制限が適用される場合があります。たとえば、これにはカーネル 2.6.38 以上が必要になります。
直接割り当てられる仮想マシンのネットワークアクセスは、ホスト物理マシンの物理インターフェースが接続されるハードウェアスイッチで管理できます。
スイッチが IEEE 802.1Qbg 標準に設定されている場合は、 インターフェースに以下に示すように追加パラメータを持たせることができます。 virtualport エレメントのパラメータについては IEEE 802.1Qbg 標準の記載をご覧ください。 その値についてはネットワーク固有となるため、 ネットワーク管理者にお問い合わせください。 802.1Qbg では、 VIS (Virtual Station Interface) は仮想マシンの仮想インターフェースのことを指します。
IEEE 802.1Qbg の場合、VLAN ID にゼロ以外の値が必要になります。
操作できる追加の要素については 表23.21「物理インターフェースの追加要素への直接割り当て」 に記載されています。

表23.21 物理インターフェースの追加要素への直接割り当て

要素説明
manageridVSI Manager ID で VSI タイプとインスタンス定義が含まれるデータベースを識別します。これは整数の値で、0 の値は予約されています。
typeidVSI Type ID で ネットワークアクセスの特性を示す VSI タイプを識別します。 VSI タイプは一般的にはネットワーク管理者によって管理されます。 整数の値になります。
typeidversionVSI Type Version では VSI Type の複数のバージョンを許可します。 整数の値になります。
instanceidVSI Instance ID 識別子は、VSI インスタンス (つまり、 仮想マシンの仮想インターフェース) の作成時に生成されます。これは、グローバルに固有な識別子です。
profileidプロファイル ID には、 このインターフェースに適用されるポートプロファイル名が含まれます。 この名前は、 ポートプロファイルのデータベースによってポートプロファイルからネットワークパラメーターに解決され、 このネットワークパラメータがこのインターフェースに適用されます。
ドメイン XML の追加パラメーターには以下が含まれます。

  ...
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0.2' mode='vepa'/>
      <virtualport type="802.1Qbg">
        <parameters managerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/>
      </virtualport>
    </interface>
  </devices>
  ...

図23.55 デバイス - ネットワークインターフェース- 物理インターフェースの追加パラメーターへの直接割り当て

インターフェースには、スイッチが IEEE 802.1Qbh 標準に準拠している場合は、以下に示す追加のパラメーターを設定できます。値はネットワーク固有のものであるため、ネットワーク管理者にお問い合わせください。
ドメイン XML の追加パラメーターには以下が含まれます。

  ...
  <devices>
    ...
    <interface type='direct'>
      <source dev='eth0' mode='private'/>
      <virtualport type='802.1Qbh'>
        <parameters profileid='finance'/>
      </virtualport>
    </interface>
  </devices>
  ...

図23.56 デバイス - ネットワークインターフェース- 物理インターフェースの追加パラメーターへの直接割り当て

profileid 属性には、このインターフェースに適用されるポートプロファイルの名前が含まれます。この名前は、ポートプロファイルのデータベースによって、ポートプロファイルからネットワークパラメーターに解決され、それらのネットワークパラメーターはこのインターフェースに適用されます。

23.18.9.7. PCI パススルー

PCI ネットワークデバイス (source 要素で指定される) は、最初にオプションでデバイスの MAC アドレスを設定済みの値に設定し、オプションで指定した virtualport 要素を使用してデバイスを 802.1Qbh 対応のスイッチに関連付け (上記の仮想ポートの例にある type='direct' ネットワークデバイスを参照) を行なった後に、汎用デバイスパススルーを使用してゲスト仮想マシンに直接割り当てます。標準の単一ポート PCI イーサネットカードドライバーの設計上の制限により、SR-IOV (単一 Root I/O 仮想化) 仮想化機能 (VF) デバイスのみを、この方法で割り当てられることに注意してください。標準の単一ポート PCI または PCIe イーサネットカードをゲスト仮想マシンに割り当てるには、従来の hostdev デバイス定義を使用します。
ネットワークデバイスのこの「インテリジェントなパススルー」が標準の hostdev デバイスの機能に非常に似ていることに注意してください。相違点は、このメソッドでは、パススルーデバイスの MAC アドレスと virtualport を指定することを許可する点です。これらの機能が不要な場合で、SR-IOV をサポートしない (そのため、ゲスト仮想マシンのドメインに割り当てられた後のリセット時に設定済みの MAC アドレスが失われる) 標準の単一ポート PCI、PCIe、または USB ネットワークを持つ場合や、0.9.11 より前の libvirt のバージョンを使用している場合、hostdev ではなく、標準の interface type='hostdev' 定義を使用して、デバイスをゲスト仮想マシンに割り当てる必要があります。

  ...
  <devices>
    <interface type='hostdev'>
      <driver name='vfio'/>
      <source>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
      </source>
      <mac address='52:54:00:6d:90:02'>
      <virtualport type='802.1Qbh'>
        <parameters profileid='finance'/>
      </virtualport>
    </interface>
  </devices>
  ...

図23.57 デバイス - ネットワークインターフェース- PCI パススルー

23.18.9.8. マルチキャストトンネル

マルチキャストグループは、仮想ネットワークを表示するために使用することができます。ネットワークデバイスが同じマルチキャストグループ内にあるゲスト仮想マシンは、それらが複数の物理的なホスト物理マシンにまたがって存在する場合でも、相互に通信します。このモードは、権限を持たないユーザーとして使用することができます。デフォルトの DNS または DHCP サポートや、発信ネットワークアクセスはありません。発信ネットワークアクセスを提供するには、適切なルートを指定するために、ゲスト仮想マシンのいずれかに、最初の 4 つのネットワークタイプのいずれかに接続される 2 番目の NIC がなければなりません。マルチキャストプロトコルは、user mode linux ゲスト仮想マシンによって使用されるプロトコルと互換性もあります。マルチキャストトンネルは、管理ツールを使用して interface type を操作し、これを mcast に設定/変更し、さらに mac address および source address を指定することによって作成されます。

  ...
  <devices>
    <interface type='mcast'>
      <mac address='52:54:00:6d:90:01'>
      <source address='230.0.0.1' port='5558'/>
    </interface>
  </devices>
  ...

図23.58 デバイス - ネットワークインターフェース- マルチキャストトンネル

23.18.9.9. TCP トンネル

TCP クライアント/サーバーアーキテクチャーを作成することは、1 つのゲスト仮想マシンがネットワークのサーバーエンドを提供し、その他のすべてのゲスト仮想マシンがクライアントとして設定される仮想ネットワークを提供するもう 1 つの方法になります。ゲスト仮想マシン間のすべてのネットワークトラフィックは、サーバーとして設定されるゲスト仮想マシンを経由で経路指定されます。このモデルも、権限のないユーザーが使用することができます。デフォルトの DNS や DHCP サポートはなく、発信ネットワークアクセスもありません。発信ネットワークアクセスを提供するには、ゲスト仮想マシンの 1 つに、最初の 4 つのネットワークタイプのいずれかに接続され、適切なルートを提供している 2 番目の NIC がある必要があります。TCP トンネルは、管理ツールを使用して interface type を操作し、これを mcast に設定/変更し、さらにmac address および source addressなどを指定して作成されます。

  ...
  <devices>
    <interface type='server'>
      <mac address='52:54:00:22:c9:42'>
      <source address='192.168.0.1' port='5558'/>
    </interface>
    ...
    <interface type='client'>
      <mac address='52:54:00:8b:c9:51'>
      <source address='192.168.0.1' port='5558'/>
    </interface>
  </devices>
  ...

図23.59 デバイス - ネットワークインターフェース- TCP トンネル

23.18.9.10. NIC ドライバー固有オプションの設定

一部の NIC には調整可能なドライバー固有のオプションがある場合があります。これらのオプションは、インターフェース定義の driver サブ要素の属性として設定されます。これらのオプションは、管理ツールで ドメイン XML の以下のセクションを設定して設定されます。

  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
      <model type='virtio'/>
      <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off'/>
    </interface>
  </devices>
  ...

図23.60 デバイス - ネットワークインターフェース- NIC ドライバー固有オプションの設定

以下の属性が「virtio」NIC ドライバーに使用できます。

表23.22 virtio NIC ドライバー要素

パラメーター説明
nameオプションの name 属性は、使用するバックエンドドライバーのタイプを強制します。値は、kvm (ユーザースペースバックエンド) または vhost (vhost モジュールをカーネルで指定するように要求するカーネルバックエンド) のいずれかになります。カーネルサポートなしに vhost ドライバーを要求する試みは拒否されます。vhost ドライバーが存在する場合、デフォルト設定は vhost ですが、存在しない場合はサイレントに kvm にフォールバックします。
txmode送信バッファーが一杯の場合に、パケット送信の処理方法を指定します。値は、iothread または timer のいずれかに設定できます。iothread に設定される場合、packet tx がドライバーの下半分の iothread ですべて実行されます (このオプションは、"tx=bh"kvm コマンドラインの "-device" virtio-net-pci オプションに変換します)。timer に設定される場合、tx の作業は KVM で実行され、現行時間に送信できる以上の tx データがある場合、タイマーが KVM が他のタスクの実行に移行する前に設定されます。タイマーが切れると、さらに多くのデータを送信するための別の試行が行なわれます。通常、この値を変更しないことが推奨されています。
ioeventfdインターフェースデバイスのドメイン I/O の非同期処理を設定します。デフォルトはハイパーバイザーに決定されます。許可される値は、onoff です。このオプションを有効にすると、別のスレッドが I/O を処理する間、KVM はゲスト仮想マシンを実行することができます。通常、I/O 時にシステム CPU の使用率が高くなるゲスト仮想マシンの場合に、この利点があります。他方、物理ホストマシンに過剰な負荷を与えると、ゲスト仮想マシンの I/O 待機時間も増えることになります。そのため、この値を変更することは推奨されません。
event_idxevent_idx 属性は、デバイスイベント処理の複数の側面を制御します。この値は on または off のいずれかにすることができます。on はデフォルトで、ゲスト仮想マシンの割り込みおよび終了の数を減らします。この動作が最適化されていない状況では、この属性はこの機能をオフに強制実行する方法を提供します。この値を変更することは推奨されません。

23.18.9.11. ターゲット要素のオーバーライド

ターゲット要素をオーバーライドするには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
    </interface>
  </devices>
  ...

図23.61 デバイス - ネットワークインターフェース- ターゲット要素のオーバーライド

ターゲットが指定されない場合、一部のハイパーバイザーは、作成された tun デバイスの名前を自動的に生成します。この名前は手動で指定できますが、名前は vnet または vifのいずれでも開始することができません。これらは libvirt と一部のハイパーバイザーで予約されるプレフィックスであるためです。これらのプレフィックスを使用して手動で指定されたターゲットは無視されます。

23.18.9.12. 起動順序の指定

起動順序を指定するには、管理ツールを使用してドメイン XML に以下の変更を行ないます。

  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
      <boot order='1'/>
    </interface>
  </devices>
  ...

図23.62 起動順序の指定

これをサポートするハイパーバイザーの場合、ネットワークの起動に使用される特定の NIC を指定できます。属性の順序は、ブートシーケンス時にデバイスが試行される順序を決定します。デバイスごとの boot 要素は、BIOS ブートローダーセクションの一般的な boot 要素と共に使用することができないことに注意してください。

23.18.9.13. インターフェース ROM BIOS 設定

ROM BIOS 設定を指定するには、管理ツールを使用してドメイン XML に以下のような変更を行います。

  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
      <rom bar='on' file='/etc/fake/boot.bin'/>
    </interface>
  </devices>
  ...

図23.63 インターフェース ROM BIOS 設定

これをサポートするハイパーバイザーの場合、PCI ネットワークデバイスの ROM をゲスト仮想マシンに提示する方法を変更することができます。bar 属性は on または off に設定することができ、デバイスの ROM がゲスト仮想マシンのメモリーマップに表示されるかどうかを決定します (PCI 資料によると、rom bar 設定は ROM の Base Address Register の提示を制御します)。rom bar が指定されない場合、KVM デフォルトが使用されます (古いバージョンの KVM はデフォルトの off を使用しましたが、新しい KVM ハイパーバイザーにはデフォルトの on が指定されます)。オプションの file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルをポイントするために使用されます。これは、ネットワークデバイスの代替ブート ROM を指定する際に便利です。

23.18.9.14. Quality of service (QoS)

Quality of service (QoS) を設定するために、着信および発信トラフィックは別個に形成できます。bandwidth 要素には、最大で 1 つの着信、および最大で 1 つの発信の子要素を持たせることができます。これらの子のいずれかを省略すると、そのトラフィック方向に QoS が適用されなくなります。そのため、ドメインの着信トラフィックのみを設定する場合には、着信のみを使用し、逆の場合も同じようにします。
これらの各要素には 1 つの必須の属性 average (または以下に説明のある floor) があります。Average は形成されるインターフェース上の平均ビットレートを指定します。この他に、任意の属性が 2 つあります。
  • peak: この属性は、ブリッジがデータを送信できる最大レートをキロバイト単位で指定します。この実装の制限は、Linux のイングレスフィルターが outbound 要素のこの属性を認識していないため、この属性が無視されることです。
  • burst: ピークの速度でバーストできるバイト量を指定します。属性に使用できる値は整数です。
average および peak 属性の単位は 1 秒あたりのキロバイトで、burst はキロバイト単位でのみ設定されます。さらに任意で、着信トラフィックに floor 属性を指定できます。これにより、形成されたインターフェースの最低スループットが保証されます。floor を使用するには、すべてのトラフィックが QoS の決定が行われる 1 つのポイントを経由する必要があります。そのため、これは、interface type='network'/forward タイプが route または nat の場合や forward の指定がない場合のみ使用できます。仮想ネットワーク内では、接続されたすべてのインターフェースに最低でも着信 QoS が設定されている (average) 必要がありますが、floor 属性には average を指定する必要がありません。しかし、 peak および burst 属性には average が必要になります。現時点では、ingress qdiscs にはクラスがない場合があるため、floor は着信トラフィックのみに適用され、発信トラフィックには適用されません。
QoS 設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet0'/>
      <bandwidth>
        <inbound average='1000' peak='5000' floor='200' burst='1024'/>
        <outbound average='128' peak='256' burst='256'/>
      </bandwidth>
    </interface>
  <devices>
  ...

図23.64 QoS (Quality of Service)

23.18.9.15. VLAN タグの設定 (サポートされるネットワークタイプでのみ)

VLAN 設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <interface type='bridge'>
      <vlan>
        <tag id='42'/>
      </vlan>
      <source bridge='ovsbr0'/>
      <virtualport type='openvswitch'>
        <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
      </virtualport>
    </interface>
  <devices>
  ...

図23.65 VLAN タグの設定 (サポートされるネットワークタイプでのみ)

ゲスト仮想マシンが使用するネットワーク接続がゲスト仮想マシンに透過的な VLAN タグに対応している場合、オプションの vlan 要素は、ゲスト仮想マシンのネットワークトラフィックに適用される 1 つ以上の VLAN タグを指定できます。OpenvSwitch および type='hostdev'SR-IOV インターフェースのみがゲスト仮想マシンの透過的な VLAN タグに対応します。標準的な Linux ブリッジおよび libvirt の独自ネットワークを含む他のインターフェースはこれに対応しません。802.1Qbh (vn-link) および 802.1Qbg (VEPA) スイッチは独自のメソッド (libvirt 外) を提供し、ゲスト仮想マシントラフィックを特定の VLAN にタグ付けします。複数タグの指定を許可する場合 (VLAN とランキングの場合)、tag サブ要素は使用する VLAN タグを指定します (例: tag id='42'/)。インターフェースに複数の vlan 要素が定義されている場合、ユーザーは指定されるすべてのタグを使用して VLAN トランキングの実行を必要としていることが想定されます。単一タグを持つ VLAN トランキングが必要な場合、オプションの属性 trunk='yes' を上位の vlan 要素に追加することができます。

23.18.10. 入力デバイス

入力デバイスは、ゲスト仮想マシンのグラフィカルフレームバッファーとの対話を許可します。フレームバッファーを有効にする場合、入力デバイスが自動的に提供されます。絶対的なカーソル移動のためにグラフィックスタブレットを提供するなどの目的で、追加デバイスを明示的に追加することができます。
入力デバイスの設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <input type='mouse' bus='usb'/>
  </devices>
  ...

図23.67 入力デバイス

<input> 要素には、必須属性の type があります。この属性は、mouse または tablet に設定できます。tablet は、相対的なカーソル移動を使用するのに対し、mouse は絶対的なカーソル移動を提供します。オプションの bus 属性は、正確なデバイスタイプを詳細化するために使用し、kvm (準仮想化)、ps2、および usb に設定できます。
input 要素には、上記のようにデバイスを特定の PCI スロットに関連付けることのできるオプションのサブ要素 <address> があります。

23.18.11. ハブデバイス

ハブは、デバイスをホスト物理マシンシステムに接続するために利用できるポートが増えるよう、単一ポートを複数に拡張するデバイスです。
ハブデバイスの設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <hub type='usb'/>
  </devices>
  ...

図23.68 ハブデバイス

hub 要素には 1 つの必須属性があり、typeusb のみに設定できます。hub 要素には、オプションのサブ要素 address があり、これにはデバイスを特定のコントローラーに関連付けることのできる type='usb' が付きます。

23.18.12. グラフィカルフレームバッファー

グラフィックスデバイスは、ゲスト仮想マシン OS とのグラフィカルな対話を可能にします。ゲスト仮想マシンは、通常はユーザーとの対話を可能にするために設定されるフレームバッファーか、またはテキストコンソールのいずれかを持ちます。
グラフィカルフレームバッファーデバイスの設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <graphics type='sdl' display=':0.0'/>
    <graphics type='vnc' port='5904'>
      <listen type='address' address='1.2.3.4'/>
    </graphics>
    <graphics type='rdp' autoport='yes' multiUser='yes' />
    <graphics type='desktop' fullscreen='yes'/>
    <graphics type='spice'>
      <listen type='network' network='rednet'/>
    </graphics>
  </devices>
  ...

図23.69 グラフィカルフレームバッファー

graphics 要素には、必須の type 属性があります。これは、以下に説明するように、値の sdlvncrdpdesktop または spice を取ります。

表23.23 グラフィカルフレームバッファーの主要な要素

パラメーター説明
sdlこれは、ホスト物理マシンデスクトップのウィンドウを表示します。また、以下のオプションの引数を受け入れます。
  • ディスプレイで使用する display 属性
  • 認証 ID の xauth 属性
  • fullscreen または yes を受け入れるオプションの no 属性
vncVNC サーバーを起動します。
  • port 属性は TCP ポート番号を指定します (自動割り当てであることを示すレガシー構文として -1 を指定する)。
  • autoport 属性は、使用する TCP ポートの自動割り当てを示すために推奨される構文です。
  • listen 属性は、サーバーがリッスンするために使用される IP アドレスです。
  • passwd 属性は、クリアテキストで VNC パスワードを提供します。
  • keymap 属性は、使用するキーマップを指定します。パスワードの有効性についての制限は、timestamp passwdValidTo='2010-04-09T15:51:00' を UTC に指定するなどして、設定することができます。
  • connected 属性は、パスワードの変更時に接続されたクライアントの制御を可能にします。VNC は keep 値のみを受け入れます。これはすべてのハイパーバイザーではサポートできないことに注意してください。
  • リッスン/ポートを使用する代わりに、KVM は UNIX ドメインソケットパスでリッスンするためのソケット属性をサポートします。
spiceSPICE サーバーを起動します。
  • port 属性は TCP ポート番号を指定し (自動割り当てであることを示すレガシー構文として -1 を指定する)、tlsPort は別のセキュアポート番号を指定します。
  • autoport 属性は、両方のポート番号の自動割り当てを示すための優先される新規の構文です。
  • listen 属性は、サーバーがリッスンするために使用される IP アドレスです。
  • passwd 属性は、クリアテキストで SPICE パスワードを提供します。
  • keymap 属性は、使用するキーマップを指定します。パスワードの有効性についての制限は、timestamp passwdValidTo='2010-04-09T15:51:00' を UTC に指定するなどして、設定することができます。
  • connected 属性は、パスワードの変更時に接続されたクライアントの制御を可能にします。SPICE ではクライアントを接続した状態にするために keep を使用し、クライアントの接続を解除するには disconnect、またパスワードの変更の失敗時に fail を使用します。これはすべてのハイパーバイザーでサポートされている訳ではないことに注意してください。
  • defaultMode 属性は、デフォルトのチャネルセキュリティーポリシーを設定し、有効な値は secureinsecure でデフォルトは any です。(可能な場合は secure ですが、セキュアパスが利用可能でない場合はエラーを出す代わりに insecure にフォールバックします)。
SPICE に標準の、および TLS で保護された TCP ポートの両方が設定されている場合、各ポートでどのチャネルを実行できるかについて制限することが必要になる場合があります。これは、1 つ以上の channel 要素をメイン graphics 要素内に追加することによって実行されます。有効なチャネル名には、maindisplayinputscursorplaybackrecordsmartcard、および usbredir があります。
SPICE 設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  <graphics type='spice' port='-1' tlsPort='-1' autoport='yes'>
    <channel name='main' mode='secure'/>
    <channel name='record' mode='insecure'/>
    <image compression='auto_glz'/>
    <streaming mode='filter'/>
    <clipboard copypaste='no'/>
    <mouse mode='client'/>
  </graphics>

図23.70 SPICE 設定の例

SPICE は、オーディオ、イメージおよびストリーミングの可変的な圧縮設定をサポートします。これらの設定は、以下の要素の compression 属性で行われます。
  • イメージ圧縮を設定するための image (auto_glzauto_lzquicglzlzoff を許可)
  • WAN 経由でのイメージ JPEG 圧縮用の jpeg (autoneveralways を許可)
  • WAN イメージ圧縮を設定するための zlib (autoneveralways を許可) およびオーディオストリーム圧縮を有効にするための playback (on または off を許可)。
ストリーミングモードは、streaming 要素によって設定され、その mode 属性は、filterall または off のいずれかに設定されます。
さらに、コピーアンドペースト機能 (SPICE エージェント経由) は、clipboard 要素によって設定されます。これはデフォルトで有効にされ、copypaste プロパティーを no に設定することによって無効にできます。
マウスモードは mouse 要素によって設定され、その mode 属性は server または client のいずれかに設定されます。いずれのモードも指定されない場合、KVM のデフォルトが使用されます (client モード)。
追加の要素には以下が含まれます。

表23.24 追加のグラフィカルフレームバッファー要素

パラメーター説明
rdpRDP サーバーを起動します。
  • port 属性は TCP ポート番号を指定します (自動割り当てであることを示すレガシー構文として -1 を指定する)。
  • autoport 属性は、使用する TCP ポートの自動割り当てを示すために推奨される構文です。
  • replaceUser 属性は、仮想マシンへの複数の同時接続が許可されるかどうかを決定するブール値です。
  • multiUser は、新規クライアントが単一接続モードで接続される場合に、既存の接続がドロップされるかどうか、また新規接続が VRDP サーバーによって確立される必要があるかどうかを決定するために使用されます。
desktopこの値は、現在 VirtualBox ドメイン用に保持されます。これは sdl と同様にホスト物理マシンのデスクトップ上にウィンドウを表示しますが、VirtualBox ビューアーを使用します。sdl の場合と同様に、これはオプションの属性の display および fullscreen を受け入れます。
listenグラフィックスタイプのvnc および spice 用にリッスンするソケットをセットアップするために使用されるアドレス情報を入れる代わりに、listen 属性という graphics のサブ要素を指定できます (上記の例を参照)。listen は以下の属性を受け入れます。
  • type - addressまたはnetworkのいずれかに設定されます。これは、この listen 要素が直接使用されるアドレスを指定するか、またはネットワークに名前を付けて (それがリッスンする適切なアドレスを決定するために使用される) 指定されるかどうかを指定します。
  • address - この属性には、リッスンする IP アドレスまたはホスト名 (DNS 照会により IP アドレスに解決される) のいずれかが含まれます。実行中のドメインの「ライブ」 XML の場合、この属性は、type='network' の場合でも、リッスンするために使用される IP アドレスに設定されます。
  • network - type='network' の場合、network 属性には、設定済みネットワークの libvirt のリストにネットワークの名前が含まれます。名前付きのネットワーク設定は、適切なリッスンアドレスを決定するために検査されます。たとえば、ネットワークがその設定に IPv4 アドレスを持つ場合 (たとえば、ルートの forward タイプまたは、NAT、または no forward タイプ (isolated) の場合)、ネットワークの設定にリストされる最初の IPv4 アドレスが使用されます。ネットワークがホスト物理マシンのブリッジを記述する場合、そのブリッジデバイスに関連付けられた最初の IPv4 アドレスが使用され、ネットワークが 'direct' (macvtap) モードのいずれかを記述する場合には、最初の forward dev の最初の IPv4 アドレスが使用されます。

23.18.13. ビデオデバイス

ビデオデバイスの設定を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <video>
      <model type='vga' vram='8192' heads='1'>
        <acceleration accel3d='yes' accel2d='yes'/>
      </model>
    </video>
  </devices>
  ...

図23.71 ビデオデバイス

graphics 要素には必須の type 属性があり、これは、以下に説明するように値 "sdl"、"vnc"、"rdp" または "desktop" を取ります。

表23.25 グラフィカルフレームバッファー要素

パラメーター説明
videovideo 要素は、ビデオデバイスを記述するためのコンテナーです。下位互換性のため、video が設定されていないものの、ドメイン XML に graphics 要素がある場合、libvirt は、ゲスト仮想マシンタイプに基づいてデフォルトの video を追加します。"ram" または "vram" が指定されていない場合、デフォルト値が使用されます。
modelこれには、必須の type 属性があり、この属性は、利用可能なハイパーバイザー機能に応じて、値の vgacirrus, vmvgakvmvbox、または qxl を取ります。さらに、ビデオメモリーの容量は、ヘッドと共に vram および図の番号を使用して キビバイト単位 (1024 バイトのブロック) で指定できます。
accelerationaceleration がサポートされる場合、accel3d 要素で accel2dacceleration 属性を使用してこれを有効にする必要があります。
addressオプションの address サブ要素は、ビデオデバイスを特定の PCI スロットに関連付けるために使用することができます。

23.18.14. コンソール、シリアル、およびチャネルデバイス

キャラクターデバイスは、仮想マシンと対話する方法を提供します。準仮想化コンソール、シリアルポート、およびチャネルは、すべてキャラクターデバイスとして分類されるため、同じ構文を使用して表示されます。
コンソール、チャネルおよびその他のデバイス設定内容を指定するには、ドメイン XML に以下のような変更を行うために管理ツールを使用します。

  ...
  <devices>
    <serial type='pty'>
      <source path='/dev/pts/3'/>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <source path='/dev/pts/4'/>
      <target port='0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/tmp/guestfwd'/>
      <target type='guestfwd' address='10.0.2.1' port='4600'/>
    </channel>
  </devices>
  ...

図23.72 コンソール、シリアル、およびチャネルデバイス

これらのディレクティブのそれぞれで、トップレベルの要素名 (serial, console, channel) は、ゲスト仮想マシンにデバイスがどのように提示されるかを記述します。ゲスト仮想マシンのインターフェースは、target 要素によって設定されます。ホスト物理マシンに提示されるインターフェースは、トップレベル要素の type 属性で指定されます。ホスト物理マシンのインターフェースは、source 要素によって設定されます。source 要素には、ソケットパスでラベルが実行される方法をオーバーライドするためのオプションの seclabel が含まれます。この要素がない場合、セキュリティーラベルはドメインごとの設定から継承されます。それぞれのキャラクターデバイス要素には、オプションのサブ要素 address が含まれ、これはデバイスを特定のコントローラーまたは PCI スロットに関連付けることができます。

注記

パラレルポート、および isa-parallel デバイスはサポート対象外になりました。

23.18.15. ゲスト仮想マシンのインターフェース

キャラクターデバイスは、以下のタイプのいずれかとして、自らをゲスト仮想マシンに提示します。
シリアルポートを設定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

  ...
  <devices>
    <serial type='pty'>
      <source path='/dev/pts/3'/>
      <target port='0'/>
    </serial>
  </devices>
  ...

図23.73 ゲスト仮想マシンインターフェースのシリアルポート

<target> には、port 属性を持たせることができます。これはポート番号を指定します。ポートは 0 から始まる番号を付けることができます。通常は、0、1 または 2 のシリアルポートがあります。さらに、オプションの type 属性があり、これは、値を選択するのに isa-serialusb-serial の 2 つのオプションがあります。type がない場合、isa-serial がデフォルトで使用されます。usb-serial の場合、オプションのサブ要素 <address>type='usb' は、上記のようにデバイスを特定のコントローラーに関連付けることができます。
<console> 要素は、インタラクティブなコンソールを表示するために使用されます。使用されるゲスト仮想マシンのタイプによって、また以下のルールに応じて、コンソールは準仮想化デバイスであるか、またはシリアルデバイスのクローンになる可能性があります。
  • targetType 属性が設定されていない場合、デフォルトデバイスの type はハイパーバイザーのルールに基づきます。デフォルトの type は、libvirt にフィードされる XML を再度照会する際に追加されます。完全仮想化ゲスト仮想マシンの場合、デフォルトのデバイスタイプは通常シリアルタイプになります。
  • targetType 属性が serial の場合で、<serial> 要素が存在しない場合、console 要素は <serial> 要素にコピーされます。<serial> 要素がすでに存在する場合、console 要素は無視されます。
  • targetType 属性が serial ではない場合、それは通常の方法で処理されます。
  • 最初の <console> 要素のみが、targetTypeserial を使用できます。2 番目のコンソールはすべて準仮想化する必要があります。
  • s390 では、console 要素は、targetType または sclp (ラインモード) の sclplm を使用できます。SCLP は s390 のネイティブのコンソールタイプです。SCLP コンソールに関連付けられたコントローラーはありません。
以下の例では、virtio コンソールデバイスは /dev/hvc[0-7] としてゲスト仮想マシン内で公開されています (詳細は、Fedora プロジェクトの virtio-serial ページ を参照してください)。

  ...
  <devices>
    <console type='pty'>
      <source path='/dev/pts/4'/>
      <target port='0'/>
    </console>

    <!-- KVM virtio console -->
    <console type='pty'>
      <source path='/dev/pts/5'/>
      <target type='virtio' port='0'/>
    </console>
  </devices>
  ...

  ...
  <devices>
    <!-- KVM s390 sclp console -->
    <console type='pty'>
      <source path='/dev/pts/1'/>
      <target type='sclp' port='0'/>
    </console>
  </devices>
  ...

図23.74 ゲスト仮想マシンインターフェース - virtio コンソールデバイス

コンソールがシリアルポートとして表示される場合、<target> 要素には、シリアルポートの場合と同じ属性があります。通常、1 つのコンソールのみが存在します。

23.18.16. チャネル

これは、ホスト物理マシンとゲスト仮想マシン間のプライベートな通信チャネルを表し、管理ツールを使用してゲスト仮想マシンに変更を加えることによって操作できます。その結果、ドメイン XML の以下のセクションに変更が加わります。

  ...
  <devices>
    <channel type='unix'>
      <source mode='bind' path='/tmp/guestfwd'/>
      <target type='guestfwd' address='10.0.2.1' port='4600'/>
    </channel>

    <!-- KVM virtio channel -->
    <channel type='pty'>
      <target type='virtio' name='arbitrary.virtio.serial.port.name'/>
    </channel>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/kvm/f16x86_64.agent'/>
      <target type='virtio' name='org.kvm.guest_agent.0'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
    </channel>
  </devices>
  ...

図23.75 チャネル

これは、各種の方法で実装できます。<channel> の特定のタイプは type 要素の <target> 属性で指定されます。異なるチャネルタイプには、以下のようにそれぞれ異なるターゲット属性があります。
  • guestfwd - 指定された IP アドレスに対してゲスト仮想マシンにより送信される TCP トラフィックを決定し、ポートはホスト物理マシン上のチャネルデバイスに転送されます。target 要素には、address と port 属性があります。
  • virtio - 準仮想化された virtio チャネルです。<channel> は、ゲスト仮想マシンの /dev/vport* の下に公開され、オプション要素の name が指定される場合は /dev/virtio-ports/$name に表示されます (詳細は、Fedora プロジェクトの virtio-serial ページ を参照してください)。オプション要素の address は、上記のように、チャネルを特定の type='virtio-serial' コントローラーに関連付けます。KVM では、名前が "org.kvm.guest_agent.0" の場合、libvirt は、ゲスト仮想マシンのシャットダウンやファイルシステムの休止などのアクションのために、ゲスト仮想マシンにインストールされたゲストエージェントと対話することができます。
  • spicevmc - 準仮想化された SPICE チャンネルです。ドメインには、グラフィックスデバイスとしての SPICE サーバーも必要です。ここで、ホスト物理マシンは、メインチャンネル間のメッセージをピギーバッキングできます。target 要素は、属性 type='virtio'; と共に指定される必要があり、オプション属性 name はゲスト仮想マシンがチャンネルにアクセスする方法を制御し、デフォルトで name='com.redhat.spice.0' に設定されます。オプションの <address> 要素は、チャンネルを特定の type='virtio-serial' コントローラーに関連付けることができます。

23.18.17. ホスト物理マシンインターフェース

キャラクターデバイスは、以下のタイプのいずれかとして、自らをホスト物理マシンに提示します。

表23.26 キャラクターデバイス要素

パラメーター説明XML スニペット
Domain logfileキャラクターデバイスのすべての入力を無効にし、出力を仮想マシンのログファイルに送信します。
<devices>
   <console type='stdio'>
     <target port='1'/>
   </console>
</devices>
Device logfileファイルが開かれ、キャラクターデバイスに送信されたすべてのデータがファイルに書き込まれます。宛先ディレクトリーには、正常に起動するために、この設定を持つゲストの virt_log_t SELinux ラベルがなければなないことに注意してください。
<devices>
   <serial type="file">
      <source path="/var/log/vm/vm-serial.log"/>
      <target port="1"/>
   </serial>
</devices>
Virtual consoleキャラクターデバイスを仮想コンソールのグラフィカルフレームバッファーに接続します。通常、これは "ctrl+alt+3" などの特殊ホットキーシーケンスでアクセスされます。
<devices>
   <serial type='vc'>
      <target port="1"/>
   </serial>
</devices>
Null deviceキャラクターデバイスを void に接続します。データは入力に提供されません。書き込まれたすべてのデータは破棄されます。
<devices>
   <serial type='null'>
      <target port="1"/>
   </serial>
</devices>
Pseudo TTYPseudo TTY は、/dev/ptmx を使用して割り当てられます。virsh console などの適切なプロキシーは、シリアルポートとローカルに対話することができます。
<devices>
   <serial type="pty">
      <source path="/dev/pts/3"/>
      <target port="1"/>
   </serial>
</devices>
NB Special caseNB Special case。<console type='pty'> の場合に、TTY パスも、トップレベルの tty='/dev/pts/3' タグ上の属性 <console> として複製されます。これは、<console> タグの既存の構文との互換性を提供します。 
Host physical machine device proxyキャラクターデバイスは、基礎となる物理キャラクターデバイスに渡されます。デバイスタイプ、たとえば、エミュレートされたシリアルポートは、ホスト物理マシンのシリアルポートにのみ接続される必要があり、シリアルポートはパラレルポートに接続しないでください。
<devices>
   <serial type="dev">
      <source path="/dev/ttyS0"/>
      <target port="1"/>
   </serial>
</devices>
Named pipeキャラクターデバイスは出力を名前付きパイプに書き込みます。詳細は、pipe(7) man ページを参照してください。
<devices>
   <serial type="pipe">
      <source path="/tmp/mypipe"/>
      <target port="1"/>
   </serial>
</devices>
TCP client-serverキャラクターデバイスは、リモートサーバーに接続する TCP クライアントとして機能します。
<devices>
   <serial type="tcp">
      <source mode="connect" host="0.0.0.0" service="2445"/>
      <protocol type="raw"/>
      <target port="1"/>
   </serial>
</devices>
または、クライアント接続を待機する TCP サーバーとして機能します。
<devices>
   <serial type="tcp">
      <source mode="bind" host="127.0.0.1" service="2445"/>
      <protocol type="raw"/>
      <target port="1"/>
   </serial>
</devices>
または、raw TCP の代わりに telnet を使用することができます。さらに telnets (secure telnet) および tls を使用することもできます。
<devices>
   <serial type="tcp">
      <source mode="connect" host="0.0.0.0" service="2445"/>
      <protocol type="telnet"/>
      <target port="1"/>
   </serial>
      <serial type="tcp">
      <source mode="bind" host="127.0.0.1" service="2445"/>
      <protocol type="telnet"/>
      <target port="1"/>
   </serial>
</devices>
UDP network consoleキャラクターデバイスは、UDP ネットコントロールサービスとして機能し、パケットの送受信を行います。これは損失の多いサービスです。
<devices>
   <serial type="udp">
      <source mode="bind" host="0.0.0.0" service="2445"/>
      <source mode="connect" host="0.0.0.0" service="2445"/>
      <target port="1"/>
   </serial>
</devices>
UNIX ドメインソケットクライアントサーバーキャラクターデバイスは、UNIX ドメインソケットサーバーとして機能し、ローカルクライアントからの接続を受け入れます。
<devices>
   <serial type="unix">
      <source mode="bind" path="/tmp/foo"/>
      <target port="1"/>
   </serial>
</devices>

23.18.18. サウンドデバイス

仮想サウンドカードは、sound 要素により、ホスト物理マシンに割り当てることができます。

  ...
  <devices>
    <sound model='ac97'/>
  </devices>
  ...

図23.76 仮想サウンドカード

sound 要素には、必須属性の model があります。これは、エミュレートする実際のサウンドデバイスを指定します。有効な値は、典型的なオプションとして 'sb16''ac97'、および 'ich6' がありますが、基礎となるハイパーバイザーに特有のものとなります。さらに、sound モデルを持つ 'ich6' 要素は、オーディオデバイスに各種の音声コーデックを割り当てるためのオプションのサブ要素 codec を持たせることができます。指定されない場合、デフォルトのコーデックが、再生や録音を可能にするために割り当てられます。有効な値は、'duplex' (line-in および line-out を提供) および 'micro' (speaker および microphone を提供) です。

  ...
  <devices>
    <sound model='ich6'>
      <codec type='micro'/>
    <sound/>
  </devices>
  ...

図23.77 サウンドデバイス

それぞれの sound 要素にはオプションのサブ要素 <address> があり、これは、上記のようにデバイスを特定の PCI スロットに関連付けることができます。

注記

es1370 音声デバイスは Red Hat Enterprise Linux 7 ではサポートされません。代わりに ac97 を使用してください。|

23.18.19. ウォッチドッグデバイス

仮想ハードウェアウォッチドッグデバイスは、<watchdog> 要素でゲスト仮想マシンに追加できます。ウォッチドッグデバイスは、ゲスト仮想マシン内に追加のドライバーおよび管理デーモンを必要とします。現在、ウォッチドッグが実行された場合の通知サポートはありません。

  ...
  <devices>
    <watchdog model='i6300esb'/>
  </devices>
  ...

  ...
  <devices>
    <watchdog model='i6300esb' action='poweroff'/>
  </devices>
...

図23.78 ウォッチドッグデバイス

以下の属性がこの XML で宣言されます。
  • model - 必須の model 属性は、エミュレートする実際のウォッチドッグを指定します。有効な値は、基礎となるハイパーバイザーに固有です。
  • model 属性は以下の値を取ることができます。
    • i6300esb — 推奨されるデバイスです。PCI Intel 6300ESB をエミュレートします。
    • ib700 — ISA iBase IB700 をエミュレートします。
  • action - オプションの action 属性は、ウォッチドッグの有効期限が切れると取られるアクションについて記述します。有効な値は基礎となるハイパーバイザーに固有です。action 属性には、以下の値を使用することができます。
    • reset — デフォルト設定です。ゲスト仮想マシンを強制的にリセットします。
    • shutdown — ゲスト仮想マシンを正常にシャットダウンします (推奨されません)
    • poweroff — ゲスト仮想マシンの電源を強制的にオフにします。
    • pause — ゲスト仮想マシンを一時停止します。
    • none — 何も実行しません。
    • dump — ゲスト仮想マシンを自動的にダンプします。
'shutdown' アクションでは、ゲスト仮想マシンが ACPI シグナルに反応できることが必要になります。ウォッチドッグの有効期限が切れた状態では、ゲスト仮想マシンは通常 ACPI シグナルに反応することができません。そのため、'shutdown' の使用は推奨されません。さらに、ダンプファイルを保存するディレクトリーは、ファイル /etc/libvirt/kvm.conf の auto_dump_path で設定できます。

23.18.20. パニックデバイスの設定

Red Hat Enterprise Linux 7 のハイパーバイザーは、pvpanic を使用して Linux ゲスト仮想マシンのカーネルパニックを検出できます。pvpanic が呼び出されると、libvirtd デーモンにメッセージが送信され、事前設定された反応が開始されます。
pvpanic デバイスを有効にするには、以下を実行します。
  • ホストマシンの /etc/libvirt/qemu.conf ファイルに以下の行を追加、またはそのコメントを解除します。
    auto_dump_path = "/var/lib/libvirt/qemu/dump"
  • virsh edit コマンドを実行して指定されたゲストのドメイン XML ファイルを編集し、panicdevices 親要素に追加します。
    
    <devices>
      <panic>
        <address type='isa' iobase='0x505'/>
      </panic>
    </devices>
    
要素 <address> 要素はパニックのアドレスを指定します。デフォルトの ioport は 0x505 です。ほとんどの場合、アドレスを指定する必要はありません。
libvirtd がクラッシュに反応する仕方は、ドメイン XML の <on_crash>要素で決定されます。実行できるアクションは以下になります。
  • coredump-destroy: ゲスト仮想マシンのコアダンプをキャプチャーし、ゲストをシャットダウンします。
  • coredump-restart: ゲスト仮想マシンのコアダンプをキャプチャーし、ゲストを再起動します。
  • preserve: ゲスト仮想マシンを停止し、追加のアクションを待機します。

注記

kdump サービスが有効にされる場合、<on_crash> 設定よりも優先され、選択されている <on_crash> アクションは実行されません。
pvpanic についての詳細は、関連のナレッジベースアーティクル を参照してください。

23.18.21. メモリーバルーンデバイス

バルーンデバイスは仮想マシンの RAM の一部を未使用として指定することが可能で (バルーン 膨張、これによりメモリーが解放されて、ホスト (またはホスト上の他の仮想マシン) が使用できるようになります。仮想マシンが再度メモリーを必要とした際には、バルーンを 収縮 させて、ホストが RAM を仮想マシンに配分し直すことができます。
メモリーバルーンのサイズは、<currentMemory><memory> 設定の差異で決まります。たとえば、<memory> が 2 GiB に設定され、<currentMemory> が 1 GiB に設定された場合、バルーンは 1 GiB になります。手作業の設定が必要な場合、virsh setmem コマンドを使用すると <currentMemory> の値を設定でき、virsh setmaxmem コマンドを使用すると <memory> の値を設定できます。

警告

<currentMemory> の値を変更する場合は、ゲスト OS が適切に動作するように十分なメモリーを確保してください。設定した値が小さすぎると、ゲストが不安定になることがあります。
仮想メモリーバルーンデバイスは、自動的にすべての KVM ゲスト仮想マシンに追加されます。XML 設定では、これは<memballoon> 要素によって表されます。メモリのバルーニングは、libvirt サービスによって管理され、適切な場合に自動的に追加されます。したがって、特定の PCI スロットが割り当てられる必要がある場合を除き、この要素を明示的にゲスト仮想マシンの XML に追加する必要はありません。<memballoon> デバイスを明示的に無効にする必要がある場合は、model='none' を使用することができます。
以下は、メモリーバルーンデバイスが libvirt によって自動的に追加される例になります。

  ...
  <devices>
    <memballoon model='virtio'/>
  </devices>
  ...

図23.79 メモリーバルーンデバイス

以下は、静的 PCI スロット 2 が要求された状態で、デバイスが手動で追加される例になります。

  ...
  <devices>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </memballoon>
  </devices>
...

図23.80 手動で追加されたメモリーバルーンデバイス

必須の model 属性は、提供されるバルーンデバイスのタイプを指定します。仮想化プラットフォームに有効な値は以下の通りです。KVM ハイパーバイザーの場合は、'virtio' がデフォルト設定になります。