24.18. Devices

この XML 要素のセットすべては、ゲスト仮想マシンのドメインに提供されるデバイスを説明するために使用されます。以下のデバイスのすべては、メイン <devices> 要素の子として示されます。
以下の仮想デバイスがサポートされています。
  • virtio-scsi-pci - PCI バスストレージデバイス
  • virtio-9p-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/lib/kvm/bin/kvm-dm</emulator>
  </devices>
  ...

図24.27 デバイス - 子要素

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

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

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

...
  <devices>
    <disk type='file' snapshot='external'>
      <driver name="tap" type="aio" cache="default"/>
      <source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
        <seclabel relabel='no'/>
      </source>
      <target dev='hda' bus='ide'/>
      <iotune>
        <total_bytes_sec>10000000</total_bytes_sec>
        <read_iops_sec>400000</read_iops_sec>
        <write_iops_sec>100000</write_iops_sec>
      </iotune>
      <boot order='2'/>
      <encryption type='...'>
        ...
      </encryption>
      <shareable/>
      <serial>
        ...
      </serial>
    </disk>

図24.28 デバイス - ハードドライブ、フロッピーディスク、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>

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


    <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>

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


    <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>

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


    <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>

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


    <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>

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


    <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>

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


    <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>

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


    <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>
  ...

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

24.18.1.1. disk 要素

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

24.18.1.2. ソース要素

ディスクソースを表します。ディスクソースは、以下のようにディスクタイプ属性に依存します。
  • <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 には、接続するホスト物理マシンを指定するために使用されるゼロか、または 1 つ以上の host サブ要素が含まれます。これには、type='dir' および type='network' が含まれます。CD-ROM またはフロッピー (デバイス属性) を表す file ディスクタイプの場合、ソースファイルにアクセスできない場合にディスクをどう処理するかについてのポリシーを定義することができます。これは、以下の値のいずれかと共に startupPolicy 属性を設定することによって実行されます。
  • mandatory は、何らかの理由で欠落が生じる場合に失敗させます。これはデフォルトの設定です。
  • requisite は、ブート時に欠落がある場合に失敗を生じさせ、移行/復元/復帰の時点で見つからない場合にドロップします。
  • optional は、開始の試行時にドロップします。

24.18.1.3. ミラー要素

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

24.18.1.4. ターゲット要素

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

24.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 操作回数です。

24.18.1.6. ドライバー要素

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

    注記

    ioeventfd 属性は、disk XML セクションや device XML セクションの <driver> 要素に含まれます。前者の場合、virtIO ディスクに影響し、後者の場合は 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' がデフォルト設定です。

24.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> - 以下の 4 つの属性をサポートします。viznameporttransport および socket。これらは、ホスト名、ポート番号、トランスポートタイプおよびソケットのパスをそれぞれ指定します。この要素の意味と要素の数は、以下に示される protocol 属性によって異なります。

    追加のホスト属性

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

    blockio オプション

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

24.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>
  [...]
  

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

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 属性は、メモリーを KB 単位で設定するために <type='ram'> と共に使用する必要があります。
  • target - ゲスト仮想マシン内のどこでソースドライバーがアクセスできるかを決定します。大半のドライバーの場合、これは自動的なマウントポイントになりますが、KVM の場合、これは、マウントする場所のヒントとしてゲスト仮想マシンにエクスポートされる任意の文字列タグでしかありません。
  • readonly - ゲスト仮想マシンの読み取り専用マウントとしてファイルシステムのエクスポートを有効にします。デフォルトでは、read-write アクセスが指定されます。
  • space_hard_limit - このゲスト仮想マシンのファイルシステムに利用可能な最大領域を指定します。
  • space_soft_limit - このゲスト仮想マシンのファイルシステムで利用できる最大領域を指定します。コンテナーは、猶予期間についてのソフト制限を超えることが許可されます。その後にハード制限が施行されます。

24.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 進整数。KVM によって現在使用されていません)
    • bus (0 から 0xfff までの 16 進値)
    • slot (0x0 から 0x1ff までの 16 進値)
    • function (0 から 7 までの値)
    • さらに、multifunction 属性も利用できます。これは、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 によって許可されています。追加属性: reg (開始レジスターの 16 進値のアドレス) をこの属性に割り当てることができます。

24.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>
  ...

図24.38 コントローラー要素

各コントローラーには、"ide"、"fdc"、"scsi"、"sata"、 "usb"、"ccid"、または "virtio-serial" のいずれかにする必要のある必須属性 type、および バスコントローラーが (address 要素のコントローラー属性で使用されるために) 表示される順序を記述する10 進整数である、必須属性の index があります。"virtio-serial" コントローラーには、コントローラーで接続できるデバイスの数を制御する、2 つの追加のオプション属性である portsvectors があります。
<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>
  ...

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

24.18.5. デバイスのリース

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

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

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

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

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

24.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>
  ...

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

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

  ...
  <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>
  ...

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

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

  ...
  <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>
  ..

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

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

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

パラメーター説明
hostdev
これは、ホスト物理マシンデバイスについて説明するための主な要素です。これは以下のオプションを受け入れます。
  • mode: 値は常に USB および PCI デバイスの subsystem です。
  • type: USB デバイスの場合は usb、PCI デバイスの場合は pci です。
  • managed: デバイスの Managed mode (管理モード) を切り替えます。
    • 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 資料によると、rombar 設定は、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 で検索できるように指定することができます。

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

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

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

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

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

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

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

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

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

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

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

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

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

24.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>
  ...

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

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

表24.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 クラスコードです。

24.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>
  ...

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

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

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

24.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>
  ...

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

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

24.18.9.1. 仮想ネットワーク

仮想ネットワークは、動的/ワイヤレス設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続 (または、ホスト物理マシンのハードウェアの詳細が <network> 定義に別個に記載される複数ホスト物理マシン環境) について推奨される設定です。さらに、これは、名前付きネットワーク定義によって詳述される接続を提供します。仮想ネットワークの forward mode 設定に応じて、ネットワークは完全に分離するか (<forward> 要素の指定なし)、明示的なネットワークデバイスまたはデフォルトルートに対して NAT を実行するか (forward mode='nat')、NAT なしで経路指定されるか (forward mode='route'/)、またはホスト物理マシンのネットワークインターフェースのいずれかに接続されるか (macvtap 経由)、またはブリッジデバイスに接続されます (forward mode=' bridge|private|vepa|passthrough'/)。
ブリッジプライベートvepa、およびパススルー の 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>
  ...

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

24.18.9.2. LAN のブリッジ

「ネットワークインターフェース」 で言及されているように、まずこれが静的な有線ネットワーク設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続に推奨される設定であることに注意してください。
LAN へのブリッジは、ゲスト仮想マシンから直接 LAN に接続するブリッジを提供します。これは、1 つ以上のホスト物理マシンの物理 NIC がスレーブ化されているホスト物理マシンにブリッジデバイスがあることが想定されます。ゲスト仮想マシンには、<vnetN> の名前で作成された、関連付けられた tun デバイスがあります。この名前は、<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>

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

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

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

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

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

これらの値は、「Network Address Translation」 に説明されるように iptables コマンドを使って設定される必要があります。

24.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>
  ...

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

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

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

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

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

24.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>
  ...

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

個々のモードにより、パケットの配信が 表24.20「物理インターフェース要素への直接割り当て」 に示されるような動作で行われます。

表24.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 にゼロ以外の値が必要になります。
操作可能な追加の要素については 表24.21「物理インターフェースの追加要素への直接割り当て」 に説明されています。

表24.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>
  ...

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

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

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

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

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

24.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 のバージョンを使用している場合、interface type='hostdev'/ ではなく、標準の 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>
  ...

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

24.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>
  ...

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

24.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>
  ...

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

24.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>
  ...

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

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

表24.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 はデフォルトで、ゲスト仮想マシンの割り込みおよび終了の数を減らします。この動作が最適化されていない状況では、この属性はこの機能をオフに強制実行する方法を提供します。この値を変更することは推奨されません。

24.18.9.11. ターゲット要素の上書き

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

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

図24.62 デバイス - ネットワークインターフェース- ターゲット要素の上書き

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

24.18.9.12. 起動順序の指定

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

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

図24.63 起動順序の指定

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

24.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>
  ...

図24.64 インターフェース 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 を指定する際に便利です。

24.18.9.14. Quality of service (QoS)

Quality of service (QoS) を設定するために、着信および発信トラフィックは別個に形成できます。bandwidth 要素には、最大で 1 つの着信、および最大で 1 つの発信の子要素を持たせることができます。これらの子のいずれかを省略すると、そのトラフィック方向に QoS が適用されなくなります。そのため、ドメインの着信トラフィックのみを設定する場合には、着信のみを使用し、逆の場合も同じようにします。
これらの要素のいずれかには 1 つの必須属性 average (または下記の floor) があります。Average は、設定されるインターフェースの平均的なビットレートを指定します。次に、以下のような 2 つのオプション属性を持ちます。peak: この属性は、ブリッジが1 秒あたりキロバイト単位でデータを送信できる最大レートを指定します。この実装の制限としては、着信要素のこの属性は、Linux のイングレスフィルターがこれを認識しないため、無視される点にあります。burst はピークの速度でバーストできるバイト量を指定します。属性に使用できる値は整数です。
average および peak 属性の単位は 1 秒あたりキロバイトとなり、burst はキロバイト単位でのみ設定されます。さらに、着信トラフィックには、オプションで floor 属性を持たせることができます。これは、形成されるインターフェースの最小スループットを保証します。floor の使用には、すべてのトラフィックが、QoS による決定が行われる 1 つのポイントを経由することが必要になります。そのため、これは、interface type='network'/forward タイプの routenat、または no 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>
  ...

図24.65 QoS (Quality of Service)

24.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>
  ...

図24.66 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 要素に追加することができます。

24.18.10. 入力デバイス

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

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

図24.68 入力デバイス

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

24.18.11. ハブデバイス

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

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

図24.69 ハブデバイス

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

24.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>
  ...

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

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

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

パラメーター説明
sdlこれは、ホスト物理マシンデスクトップのウィンドウを表示します。また、以下のオプションの引数を受け入れます。
  • ディスプレイで使用する display 属性
  • 認証 ID の xauth 属性
  • yes または no を受け入れるオプションの fullscreen 属性
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>

図24.71 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 モード)。
追加の要素には以下が含まれます。

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

パラメーター説明
rdpRDP サーバーを起動します。
  • port 属性は TCP ポート番号を指定します (自動割り当てであることを示すレガシー構文として -1 を指定する)。
  • autoport 属性は、使用する TCP ポートの自動割り当てを示すために推奨される構文です。
  • replaceUser 属性は、仮想マシンへの複数の同時接続が許可されるかどうかを決定するブール値です。
  • multiUser は、新規クライアントが単一接続モードで接続される場合に、既存の接続がドロップされるかどうか、また新規接続が VRDP サーバーによって確立される必要があるかどうかを決定するために使用されます。
desktopこの値は、現在 VirtualBox ドメイン用に保持されます。これは sdl と同様にホスト物理マシンのデスクトップ上にウィンドウを表示しますが、VirtualBox ビューアーを使用します。sdl の場合と同様に、これはオプションの属性の display および fullscreen を受け入れます。
listenグラフィックスタイプのvnc および spice 用にリッスンするソケットをセットアップするために使用されるアドレス情報を入れる代わりに、listen 属性という graphics のサブ要素を指定できます (上記の例を参照)。listen は以下の属性を受け入れます。
  • type - アドレスまたはネットワークのいずれかに設定されます。これは、この 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 アドレスが使用されます。

24.18.13. ビデオデバイス

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

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

図24.72 ビデオデバイス

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

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

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

24.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>
  ...

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

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

注記

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

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

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

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

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

<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> 要素のみが、serialtargetType を使用できます。2 番目のコンソールはすべて準仮想化する必要があります。
  • s390 では、console 要素は、sclp または sclplm (ラインモード) の targetType を使用できます。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>
  ...

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

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

24.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>
  ...

図24.76 チャネル

これは、各種の方法で実装できます。<channel> の特定のタイプは <target> 要素の type 属性で指定されます。異なるチャネルタイプには、以下のようにそれぞれ異なるターゲット属性があります。
  • 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' コントローラーに関連付けることができます。

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

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

表24.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 パスも、トップレベルの <console> タグ上の属性 tty='/dev/pts/3' として複製されます。これは、<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 domain socket client-serverキャラクターデバイスは、UNIX ドメインソケットサーバーとして機能し、ローカルクライアントからの接続を受け入れます。
<devices>
   <serial type="unix">
      <source mode="bind" path="/tmp/foo"/>
      <target port="1"/>
   </serial>
</devices>

24.18.18. サウンドデバイス

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

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

図24.77 仮想サウンドカード

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

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

図24.78 サウンドデバイス

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

注記

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

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

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

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

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

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

以下の属性がこの 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 で設定できます。

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

Red Hat Enterpise 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 についての詳細は、関連のナレッジベースアーティクル を参照してください。

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

仮想メモリーバルーンデバイスは、すべての KVM ゲスト仮想マシンに追加されます。これは、<memballoon> 要素として表示されます。これは、適切な場合に自動的に追加されるので、特定の PCI スロットを割り当てる必要がない限り、この要素をゲスト仮想マシン XML に明示的に設定する必要はありません。<memballoon> デバイスを明示的に無効にする必要がある場合は、model='none' を使用することができます。
以下の例では、membaloon デバイスを KVM で自動的に追加しています。

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

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

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

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

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

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