Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.17. Devices

この 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 バス仮想乱数発生器
重要
virtio デバイスを作成し、ベクトル数を 32 より大きい値に設定すると、デバイスは、Red Hat Enterprise Linux 6 ではゼロに設定されているかのように動作しますが、Enterprise Linux 7 では動作しません。生成されるベクトル設定の不一致により、いずれかのプラットフォームの virtio デバイスのベクトル数が 33 以上に設定されていると、移行エラーが発生します。したがって、vector の値を 32 より大きく設定することは推奨されません。virtio-balloon-pci および virtio-rng-pci を除くすべての virtio デバイスは、vector 引数を受け入れます。

図23.26 デバイス - 子要素


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

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

23.17.1. ハードドライブ、フロッピーディスク、および CD-ROM

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

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

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

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

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

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

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

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

23.17.1.1. ディスク要素

<disk> 要素は、ディスクを記述するための主要なコンテナーです。属性type は、<disk> 要素で使用できます。以下のタイプが許可されています。
  • file
  • block
  • dir
  • network
詳細は、libvirt upstream pages を参照してください。

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

23.17.1.3. ミラー要素

この要素は、ハイパーバイザーが BlockCopy 操作を起動し、属性ファイルの <mirror> の場所が最終的にソースと同じ内容を持ち、属性形式のファイル形式 (ソースの形式とは異なる場合あり) の場合に存在します。属性 ready が存在する場合は、ディスクがピボットする準備ができていることが分かっています。存在しない場合は、ディスクが依然としてコピー中である可能性があります。現在、この要素は出力でのみ有効で、入力では無視されます。

23.17.1.4. ターゲット要素

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

23.17.1.5. iotune 要素

オプションの <iotune> 要素は、デバイスごとに異なる値を使用して、追加のデバイスごとの I / O チューニングを提供する機能を提供します (これを、ドメインにグローバルに適用するblkiotune要素と比較してください)。この要素には、以下のオプションのサブ要素があります (まったく指定されていないサブ要素、または 0 の値で指定されているサブ要素は、制限がないことを意味する点に注意してください)。
  • <total_bytes_sec> - 合計スループット制限 (バイト/秒)。この要素は、<read_bytes_sec> または <write_bytes_sec> とは併用できません。
  • <read_bytes_sec> - 読み取りスループットの制限 (バイト/秒)。
  • <write_bytes_sec> - 書き込みスループットの制限 (バイト/秒)。
  • <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.17.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 の非同期処理を設定できます。デフォルトはハイパーバイザーにより決定します。指定できる値は onoff です。これを有効にすると、別のスレッドが I/O を処理している間にゲスト仮想マシンを実行できます。通常、I/O の実行中にシステム CPU の使用率が高くなったゲスト仮想マシンは、この恩恵を受けます。一方、ホストの物理マシンが過負荷になると、ゲスト仮想マシンの I/O レイテンシーが増加します。ただし、デフォルト設定を変更せず、ハイパーバイザーによる設定の決定を許可することが推奨されます。
    注記
    ioeventfd 属性は、disk XML セクションの <driver> 要素と、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' です。

23.17.1.7. 追加のデバイス要素

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

    追加の起動値

    • <order> - システムの起動時にデバイスを試行する順序を指定します。
    • <per-device> ブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できません。
  • <encryption> - ボリュームの暗号化方法を指定します。
  • <readonly> - ゲスト仮想マシンがデバイスを変更できないことを示します。この設定は、attribute <device='cdrom'> を使用するディスクのデフォルト値です。
  • <shareable> デバイスがドメイン間で共有されることが期待されることを示します (ハイパーバイザーおよびオペレーティングシステムがこれに対応している場合)。shareable を使用すると、そのデバイスに cache='no' が指定されます。
  • <transient> - デバイスのコンテンツの変更は、ゲスト仮想マシンの終了時に自動的に元に戻す必要があることを示します。一部のハイパーバイザーでは、ディスクに transient マークを付けると、ドメインが移行またはスナップショットに参加できなくなります。
  • <serial> - ゲスト仮想マシンのハードドライブのシリアル番号を指定します。(例: <serial>WD-WMAP9A966149</serial>)
  • <wwn> - 仮想ハードディスクまたは CD-ROM ドライブのワールドワイドネーム (WWN) を指定します。16 桁の 16 進数で設定される必要があります。
  • <vendor> - 仮想ハードディスクまたは CD-ROM デバイスのベンダーを指定します。印刷可能な 8 文字を超えてはなりません。
  • <product> - 仮想ハードディスクまたは CD-ROM デバイスの製品を指定します。印刷可能な 16 文字を超えてはなりません。
  • <host> - 以下の属性をサポートします。
    • name - ホスト名を指定します。
    • port - ポート番号を指定します。
    • transport - トランスポートの種類を指定します。
    • socket - ソケットのパスを指定します。
    この要素の意味と要素数は、プロトコルに基づく追加のホスト属性 に示すように protocol 属性により異なります。

    プロトコルに基づく追加のホスト属性

    • nbd - nbd-server を実行しているサーバーを指定します。使用できるのは、1 台のホスト物理マシンだけです。このプロトコルのデフォルトポートは 10809 です。
    • rbd - RBD タイプのサーバーを監視し、1 つ以上のホスト物理マシンで使用できます。
    • sheepdog - sheepdogサーバーのいずれかを指定し (デフォルトは localhost:7000)、ホスト物理マシンの 1 つと使用するか、いずれとも使用することができません。
    • gluster - glusterd デーモンを実行しているサーバーを指定します。使用できる物理マシンは 1 つだけです。トランスポート属性の有効な値は、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-Modes を指定し、nonelba、または auto の値を設定できます。
  • blockio - ブロックデバイスを、以下のブロックデバイスプロパティーのいずれかで上書きできます。

    blockio オプション

    • logical_block_size - ゲスト仮想マシンのオペレーティングシステムを報告し、ディスク I/O の最小ユニットを説明します。
    • physical_block_size - ゲスト仮想マシンのオペレーティングシステムを報告し、ディスクのハードウェアセクターサイズを説明します。これは、ディスクデータの調整に関連付けることができます。

23.17.2. デバイスアドレス

多くのデバイスには、仮想バスに配置されたデバイスがゲスト仮想マシンに提示される場所を説明するオプションの <address> サブ要素があります。入力でアドレス (またはアドレス内の任意の属性) が省略された場合、libvirt は適切なアドレスを生成します。レイアウトをさらに制御する必要がある場合は明示的なアドレスが必要になります。address 要素を含むデバイスの例は、以下を参照してください。
各アドレスには、デバイスが稼働しているバスを説明する必須の属性 type があります。特定のデバイスに使用するアドレスの選択は、デバイスやゲスト仮想マシンのアーキテクチャーによって一部が制約されます。たとえば、ディスクデバイスは type='disk' を使用し、コンソールデバイスは、32 ビット AMD および Intel の type='pci'、または AMD64 と Intel 64、ゲスト仮想マシン、または 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 制御レジスターの特定のスロットまたは機能に対して、多機能ビットをオンにすることを制御します。この多機能属性は、デフォルトでは '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.17.3. コントローラー

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

図23.35 コントローラー要素


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

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

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


  ...
  <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.17.4. デバイスリース

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

図23.37 デバイス - デバイスリース


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

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

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

23.17.5.1. USB / PCI デバイス

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

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


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

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

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


  ...
  <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.40 デバイス - ホスト物理マシン scsi デバイスの割り当ての代替案


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


ドメイン 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' は、主に特定のゲスト専用のデバイスに推奨されます。
比較元 ホストの物理マシンから見たデバイスを説明します。USB デバイスは、vendor 要素および product 要素を使用してベンダーまたはプロダクト ID でアドレスを指定するか、address 要素を使用して、ホスト物理マシンのデバイスのアドレスを指定します。一方、PCI デバイスは、アドレスによってのみ記述できます。USB デバイスのソース要素には、startupPolicy 属性が含まれる場合があります。これを使用すると、指定したホスト物理マシンの USB デバイスが見つからない場合の対処方法に関するルールを定義できます。この属性は、次の値を受け入れます。
  • mandatory - 何らかの理由でない場合は失敗します (デフォルト)。
  • requisite - システムの起動時にない場合は失敗し、migrate/restore/revert にない場合はドロップします。
  • optional - 起動の試行時にない場合はドロップします。
vendor, product このような要素には、それぞれ USB ベンダーと製品 ID を指定する id 属性があります。ID は、10 進数、16 進数 (0x で始まる)、または 8 進数 (0 で始まる) で指定できます。
boot デバイスが起動可能であることを指定します。この属性の順序により、システムの起動シーケンスでデバイスが試行される順序が決定します。デバイスごとのブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できません。
rom PCI デバイスの ROM がゲスト仮想マシンに表示される方法を変更する場合に使用されます。オプションの bar 属性は on または off に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップで表示されるかどうかを決定します。(PCI のドキュメントでは、rom bar 設定により、ROM のベースアドレスレジスターの存在が制御されます。)rom barを指定しないと、デフォルト設定が使用されます。オプションの file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルを指定するために使用されます。これは、たとえば、SR-IOV 対応イーサネットデバイスの仮想機能に PXE ブート ROM を提供する場合に役立ちます (VF にはブート ROM がありません)。
address また、デバイスがホストの物理マシンに表示される USB バスとデバイス番号を指定する bus および bus 属性もあります。この属性の値は、10 進数、16 進数 (0x で始まる)、または 8 進数 (0 で始まる) で指定できます。PCI デバイスの場合、この要素は、lspci または virsh nodedev-list で検出されるデバイスを指定できるように、3 つの属性を持ちます。

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

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

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


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

別のアプローチは以下のとおりです。

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


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

また別のアプローチは以下のとおりです。

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


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



ドメイン XML のこのセクションのコンポーネントは以下のとおりです。

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

パラメーター 説明
hostdev これは、ホスト物理マシンデバイスを説明する主要なコンテナーです。ブロックデバイス/キャラクターデバイスの場合、パススルーmodeは常にcapabilities になります。ブロックデバイスの場合は typeblock に、キャラクターデバイスの場合は char になります。
比較元 これは、ホストの物理マシンから見たデバイスを説明します。ブロックデバイスの場合は、ホスト物理マシンのオペレーティングシステムのブロックデバイスへのパスが、ネストされた block 要素で提供され、キャラクターデバイスの場合は char 要素が使用されます。

23.17.6. リダイレクトされたデバイス

キャラクターデバイスを介した USB デバイスのリダイレクトは、ドメイン XML の次のセクションを変更して設定します。

図23.44 デバイス - リダイレクトされたデバイス


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

ドメイン XML のこのセクションのコンポーネントは以下のとおりです。

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

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

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

仮想スマートカードデバイスは、smartcard 要素を介してゲスト仮想マシンに提供することができます。ホスト物理マシンにある USB スマートカードリーダーデバイスは、デバイスパススルー機能を持つゲスト仮想マシンでは使用できません。これは、ホスト物理マシンとゲスト仮想マシンの両方で使用可能にすることができず、ゲスト仮想マシンから削除された場合にホスト物理マシンコンピューターをロックすることができるためです。したがって、一部のハイパーバイザーは、ゲスト仮想マシンにスマートカードインターフェイスを提示できる特別な仮想デバイスを提供します。これには、ホストの物理マシンから、またはサードパーティーのスマートカードプロバイダーに作成されたチャンネルから認証情報を取得する方法を説明するいくつかのモードがあります。
管理ツールを使用して、キャラクターデバイス経由で USB デバイスリダイレクトを設定し、ドメイン XML の次のセクションを変更します。

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


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

smartcard 要素には必須の属性mode があります。各モードで、ゲスト仮想マシンは、物理 USB CCID (Chip/Smart Card Interface Device) カードのように動作する USB バス上のデバイスを認識します。
モードの属性は、以下のとおりです。

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

パラメーター 説明
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' このモードを使用すると、ハイパーバイザーがホスト物理マシンと直接通信するのではなく、セカンダリーキャラクターデバイスを介してすべての要求をサードパーティープロバイダーにトンネリングできます。サードパーティープロバイダーは、スマートカードと通信するか、3 つの証明書ファイルを使用します。操作のこのモードでは、トンネルのホスト物理マシン側を説明するために、対応しているシリアルデバイスタイプの 1 つに一致する追加の属性typeが必要になります。type='tcp' または type='spicevmc' (SPICE グラフィックデバイスのスマートカードチャネルを使用) が一般的です。target サブ要素は必要ありませんが、source などのサブ要素は、指定のタイプに応じて必要になる場合があります (キャラクターデバイスのコンシューマーはゲスト仮想マシンに表示されるデバイスではなく、ハイパーバイザー自体であるため)。
各モードは、オプションのサブ要素addressをサポートしています。これは、スマートカードと ccid バスコントローラーとの間の関連を微調整します。詳細は、「デバイスアドレス」 を参照してください。

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

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

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


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

ゲスト仮想マシンのネットワークインターフェイスを設定する方法はいくつかあります。これは、interface 要素の type 属性に値を設定することで行われます。以下の値を使用できます。
  • "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> 要素にはオプションの <address> サブ要素を指定できます。このサブ要素には、属性type='pci' を使用して、インターフェイスを特定の PCI スロットに関連付けることができます。詳細は、「デバイスアドレス」 を参照してください。

23.17.8.1. 仮想ネットワーク

これは、動的またはワイヤレスネットワーク設定のホスト物理マシンにおける一般的なゲスト仮想マシンの接続に推奨される設定です (または、ホスト物理マシンのハードウェアの詳細が<ネットワーク> 定義で個別に説明されている複数ホストの物理マシン環境)。さらに、名前付きのネットワーク定義で記述されている詳細を含む接続を提供します。仮想ネットワークのforward mode設定によっては、ネットワークが完全に分離している (<forward> 要素が指定されていない) 場合と、NAT を使用して明示的なネットワークデバイスまたはデフォルトルートに接続している (forward mode='nat') 場合、NAT を使用せずにルーティングしている (forward mode='route') 場合、またはホスト物理マシンのネットワークインターフェイス (macvtap を使用) またはブリッジデバイス (forward mode='bridge|private|vepa|passthrough') のいずれかに直接接続している場合があります。
bridgeprivatevepa、および passthrough の転送モードを持つネットワークでは、ホストの物理マシンに、必要な DNS サービスおよび DHCP サービスが、libvirt の範囲外に設定されていることを前提とします。分離ネットワーク、nat ネットワーク、ルーティングネットワークの場合、DHCP および DNS は、libvirt により仮想ネットワークで提供され、IP 範囲は、virsh net-dumpxml [networkname] で仮想ネットワーク設定を調べることで決定できます。追加設定なしで設定された 'default' 仮想ネットワークは、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)switch スイッチ、あるいは Open vSwitch 仮想スイッチに転送されます。
スイッチの種類は、ホスト物理マシンの <network> 要素の設定に依存するため、<virtualport type> 属性を省略することができます。<virtualport type>は一度または複数回指定する必要があります。ドメインが起動すると、定義されているタイプと属性をマージして、完全な <virtualport> 要素を構築します。これにより、新たに再構築された仮想ポートが作成されます。下位の仮想ポートの属性は、上位の仮想ポートで定義された属性を変更できないことに注意してください。インターフェイスの優先度が最も高く、ポートグループの優先度が最も低くなります。
たとえば、802.1Qbh スイッチおよび Open vSwitch スイッチの両方で適切に機能するネットワークを作成する場合は、タイプを指定せず、profileidinterfaceid の両方を提供する必要があります。manageridtypeidprofileid などの仮想ポートから入力するその他の属性は任意です。
ゲスト仮想マシンの接続を特定タイプのスイッチのみに制限する場合は、virtualport タイプを指定でき、指定したポートタイプのスイッチのみが接続されます。追加のパラメーターを指定することで、スイッチの接続をさらに制限することもできます。その結果、ポートが指定されており、ホストの物理マシンのネットワークに別のタイプの virtualport があると、インターフェイスの接続に失敗します。仮想ネットワークパラメーターは、ドメイン XML の以下の部分を変更する管理ツールを使用して定義します。

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


  ...
  <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.17.8.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 つは Open vSwitch にインターフェイス<port-profile> として送信されるオプションのprofileid です。ブリッジを LAN 設定に設定するには、管理ツールを使用して、ドメイン XML の以下の部分を設定します。

図23.48 デバイス - ネットワークインターフェイス - LAN へのブリッジ


  ...
  <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.17.8.3. ポートマスカレードの範囲の設定

ポートマスカレードの範囲を設定する場合は、以下のようにポートを設定します。

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


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

この値は、以下のように iptable コマンドを使用して設定する必要があります。 「ネットワークアドレス変換」

23.17.8.4. ユーザー空間の SLIRP スタック

ユーザー空間の SLIRP スタックパラメーターを設定すると、外部への NAT を備えた仮想 LAN が提供されます。仮想ネットワークには DHCP サービスおよび DNS サービスがあり、ゲスト仮想マシンに 10.0.2.15 以降の IP アドレスを割り当てます。デフォルトのルーターは 10.0.2.2 で、DNS サーバーは 10.0.2.3 です。このネットワークは、ゲスト仮想マシンに外部アクセスを行う必要がある特権のないユーザーにとって唯一のオプションです。
ユーザー空間の SLIRP スタックパラメーターは、ドメイン XML の以下の部分で定義されています。

図23.50 デバイス - ネットワークインターフェイス - ユーザー空間の SLIRP スタック


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

23.17.8.5. 一般的なイーサネット接続

これにより、管理者が任意のスクリプトを実行してゲスト仮想マシンのネットワークを LAN に接続できるようになります。ゲスト仮想マシンには、vnetN の名前で作成された<tun> デバイスがありますが、<target> 要素で上書きすることもできます。tun デバイスを作成すると、シェルスクリプトが実行され、必要なホスト物理マシンネットワークインテグレーションが完了します。初期設定では、このスクリプトは /etc/qemu-ifup と呼ばれていますが、上書きできます (「ターゲット要素の上書き」 を参照)。
一般的なイーサネット接続パラメーターは、ドメイン XML の以下の部分で定義されています。

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


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

23.17.8.6. 物理インターフェイスへの直接接続

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

図23.52 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続


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

各モードにより、パケットの配信は表23.20「物理インターフェイス要素への直接接続」 のように動作します。

表23.20 物理インターフェイス要素への直接接続

要素 説明
vepa ゲスト仮想マシンのパケットはすべて外部ブリッジに送信されます。パケットの送信先が、パケットの送信元と同じホスト物理マシン上のゲスト仮想マシンであるパケットは、VEPA 対応のブリッジによりホスト物理マシンに返されます (現在のブリッジは、通常 VEPA 対応ではありません)。
bridge 宛先が、送信元と同じホストの物理マシンにあるパケットは、ターゲットの macvtap デバイスに直接配信されます。直接配信する場合は、作成元デバイスと宛先デバイスの両方がブリッジモードになっている必要があります。いずれかが vepa モードにある場合は、VEPA 対応のブリッジが必要です。
プライベート すべてのパケットは外部ブリッジに送信されます。また、外部ルーターまたはゲートウェイを介して送信され、そのデバイスがホストの物理マシンに返す場合は、同じホストの物理マシンのターゲット仮想マシンにのみ配信されます。移行元デバイスまたは移行先デバイスのいずれかがプライベートモードの場合は、以下の手順が行われます。
パススルー この機能は、移行機能を失うことなく、SR-IOV 対応 NIC の仮想機能をゲスト仮想マシンに直接接続します。すべてのパケットは、設定したネットワークデバイスの VF/IF に送信されます。デバイスの機能によっては、追加の前提条件や制限が適用される場合があります。たとえば、これにはカーネル 2.6.38 以降が必要です。
直接接続された仮想マシンのネットワークアクセスは、ホストの物理マシンの物理インターフェイスが接続されているハードウェアスイッチにより管理できます。
スイッチが IEEE 802.1Qbg 規格に準拠している場合、インターフェイスには以下のような追加パラメーターを設定できます。virtualport 要素のパラメーターについては、IEEE 802.1Qbg 標準で詳細が説明されています。この値はネットワーク固有のもので、ネットワーク管理者が指定する必要があります。802.1Qbg の用語では、Virtual Station Interface (VSI) は仮想マシンの仮想インターフェイスを表します。
また、IEEE 802.1Qbg では VLAN ID にゼロ以外の値が必要です。
操作可能な追加の要素は、表23.21「物理インターフェイスの追加要素への直接接続」 で説明されています。

表23.21 物理インターフェイスの追加要素への直接接続

要素 説明
managerid VSI Manager ID は、VSI タイプおよびインスタンス定義を含むデータベースを識別します。これは整数値で、値 0 が予約されます。
typeid VSI タイプ ID は、ネットワークアクセスを特徴付ける VSI タイプを識別します。VSI の種類は通常、ネットワーク管理者が管理します。これは整数値です。
typeidversion VSI タイプバージョンでは、複数のバージョンの VSI タイプが許可されます。これは整数値です。
instanceid VSI インスタンス ID 識別子は、VSI インスタンス (仮想マシンの仮想インターフェイス) が作成されると生成されます。これは、グローバルに一意の識別子です。
profileid プロファイル ID には、このインターフェイスに適用されるポートプロファイルの名前が含まれます。この名前は、ポートプロファイルデータベースにより、ポートプロファイルからネットワークパラメーターに解決され、これらのネットワークパラメーターはこのインターフェイスに適用されます。
ドメイン XML の追加パラメーターには、以下が含まれます。

図23.53 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続追加パラメーター


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

スイッチが IEEE 802.1Qbh 規格に準拠している場合、インターフェイスには以下のような追加パラメーターを設定できます。この値はネットワーク固有のもので、ネットワーク管理者が指定する必要があります。
ドメイン XML の追加パラメーターには、以下が含まれます。

図23.54 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続、さらなる追加パラメーター


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

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

23.17.8.7. PCI パススルー

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

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


  ...
  <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.17.8.8. マルチキャストトンネル

マルチキャストグループは、仮想ネットワークを表すために使用できます。同じマルチキャストグループ内にネットワークデバイスがあるゲスト仮想マシンは、複数の物理ホストの物理マシンにまたがる場合でも、互いに通信します。このモードは、非特権ユーザーとして使用できます。デフォルトの DNS または DHCP に対応せず、発信ネットワークアクセスもありません。外部へのネットワークアクセスを提供するには、ゲスト仮想マシンの 1 つに 2 番目の NIC が必要です。この NIC は、最初の 4 つのネットワークタイプのいずれかに接続し、適切なルーティングを提供します。マルチキャストプロトコルは、user mode Linux ゲスト仮想マシンが使用するプロトコルと互換性があります。使用するソースアドレスは、マルチキャストアドレスブロックからのものである必要があることに注意してください。マルチキャストトンネルは、マネジメントツールを使用してinterface typeを操作し、これを mcast に設定して作成されます。そして、mac address および source address を提供します。以下に例を示します。

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


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

23.17.8.9. TCP トンネル

TCP クライアントサーバーアーキテクチャーを作成することは、あるゲスト仮想マシンがネットワークのサーバー側を提供し、他のすべてのゲスト仮想マシンがクライアントとして設定される仮想ネットワークを提供するもう 1 つの方法になります。ゲスト仮想マシン間のすべてのネットワークトラフィックは、サーバーとして設定されているゲスト仮想マシンを介してルーティングされます。このモデルは、権限のないユーザーも使用できます。デフォルトの DNS または DHCP に対応せず、発信ネットワークアクセスもありません。外部へのネットワークアクセスを提供するには、ゲスト仮想マシンの 1 つに 2 番目の NIC が必要です。この NIC は、最初の 4 つのネットワークタイプのいずれかに接続し、適切なルーティングを提供します。TCP トンネルは、マネジメントツールを使用してinterface typeを操作し、これを mcast に設定して作成されます。そして、mac address および source address を提供します。以下に例を示します。

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


  ...
  <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.17.8.10. NIC ドライバー固有のオプションの設定

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

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


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

virtio の NIC ドライバーでは、以下の属性を使用できます。

表23.22 virtio NIC ドライバー要素

パラメーター 説明
name オプションの name 属性では、使用するバックエンドドライバーの種類が強制されます。値は、kvm (ユーザー空間のバックエンド) または vhost (カーネルにより vhost モジュールが提供されることが必要なカーネルバックエンド) のいずれかになります。カーネルサポートのない vhost ドライバーを要求しようとする場合は拒否されます。デフォルト設定は、vhost ドライバーが存在する場合は vhost になりますが、存在しない場合は警告なしに kvm に戻ります。
txmode 送信バッファーが満杯になった場合にパケットの送信を処理する方法を指定します。値は、iothread または timer のいずれかになります。iothread に設定すると、パケット tx はドライバーの下半分の iothread ですべて実行されます (このオプションは、kvm コマンドラインの "-device" virtio-net-pci オプションに "tx=bh" を追加することに変換されます)。timer に設定すると、KVM で tx 処理が行われます。現在送信可能な tx データよりも多くの tx データが存在する場合は、KVM が他の処理を行うために移動する前にタイマーが設定されます。タイマーが実行されると、さらなるデータを送信するために別の試みが行われます。この値を変更することは推奨されません。
ioeventfd インターフェイスデバイスのドメイン I/O の非同期処理を設定します。デフォルトは、ハイパーバイザーの判断に任されます。指定できる値は onoff です。このオプションを有効にすると、KVM は、別のスレッドが I/O を処理している間にゲスト仮想マシンを実行できます。通常、I/O の実行中にシステム CPU の使用率が高くなったゲスト仮想マシンは、この恩恵を受けます。一方、物理ホストマシンのオーバーロードは、ゲスト仮想マシンの I/O レイテンシーを増加させる可能性もあります。この値を変更することは推奨されません。
event_idx event_idx 属性は、デバイスイベント処理の一部の側面を制御します。値は on または off のいずれかになります。on がデフォルトで、ゲスト仮想マシンの割り込みと終了の数を減らします。この動作が最適ではない状況では、この属性を使用すると機能を強制的にオフにできます。この値を変更することは推奨されません。

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

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

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


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

ターゲットを指定しないと、特定のハイパーバイザーにより、作成された tun デバイスの名前が自動的に生成されます。この名前は手動で指定できますが、vnet または vif で始まる名前は使用できません。これらの接頭辞は、libvirt および特定のハイパーバイザーが予約するものです。この接頭辞を使用して手動で指定したターゲットは無視されます。

23.17.8.12. 起動順序の指定

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

図23.60 起動順序の指定


  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
      <boot order='1'/>
    </interface>
  </devices>
  ...
これに対応するハイパーバイザーでは、ネットワーク起動に使用する特定の NIC を設定できます。属性の順序により、システムの起動シーケンスでデバイスが試行される順序が決定します。デバイスごとのブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できないことに注意してください。

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

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

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


  ...
  <devices>
    <interface type='network'>
      <source network='default'/>
      <target dev='vnet1'/>
      <rom bar='on' file='/etc/fake/boot.bin'/>
    </interface>
  </devices>
  ...
これをサポートするハイパーバイザーの場合は、PCI Network デバイスの ROM がゲスト仮想マシンにどのように提供されるかを変更できます。bar 属性は on または off に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップで表示されるかどうかを決定します。(PCI のドキュメントでは、rom bar 設定により、ROM のベースアドレスレジスターの存在が制御されます。)rom bar を指定しないと、KVM のデフォルトが使用されます (古いバージョンの KVM はデフォルトで off を使用し、新しい KVM ハイパーバイザーはデフォルトで on を使用します)。オプションの file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルを指定するために使用されます。これは、ネットワークデバイスに別のブート ROM を提供する際に役立ちます。

23.17.8.14. QoS (Quality of Service)

送受信トラフィックは、QoS (Quality of Service) を設定するために、独立してシェイプできます。bandwidth 要素には、最大 1 つのインバウンドおよび 1 つのアウトバウンド子要素を設定できます。このような子要素のいずれかを外した場合は、トラフィックの方向に QoS が適用されません。そのため、ドメインの着信トラフィックのみを形成する場合はインバウンドのみを使用し、その逆も同様にします。
これらの各要素には、必須の属性average (または以下のような floor) が 1 つずつあります。Average は、シェイプされるインターフェイスの平均ビットレートを指定します。さらに、オプションの属性が 2 つあります。
  • peak - この属性は、ブリッジがデータを送信できる最大レートをキロバイト (秒) 単位で指定します。この実装の制限は、Linux Ingress フィルターがまだ認識していないため、アウトバウンド要素のこの属性は無視されます。
  • burst: ピークの速度でバーストできるバイト数を指定します。属性に使用できる値は整数です。
average 属性および peak 属性の単位は キロバイト/秒 で、burst はキロバイト単位でのみ設定されます。また、着信トラフィックにはfloor 属性を指定できます。これにより、シェーピングのインターフェイスでは最小限のスループットが保証されます。floor を使用する場合は、すべてのトラフィックが QoS の決定が行われる 1 つのポイントを通過する必要があります。このため、forwardタイプが routenat、または no forward at all である interface type='network'/ の場合のみに使用できます。仮想ネットワーク内では、接続されているすべてのインターフェイスに、少なくとも着信 QoS セット (average 以上) が必要ですが、floor 属性では average を指定する必要がありません。ただし、peak 属性および burst 属性には依然としてaverage が必要です。現時点では、Ingress qdiscs にクラスがないため、floor は受信トラフィックにのみ適用でき、送信トラフィックには適用されません。
QoS 設定を指定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

図23.62 QoS (Quality of Service)


  ...
  <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.17.8.15. VLAN タグの設定 (サポートされているネットワークタイプのみ)

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

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


  ...
  <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>
  ...
ゲスト仮想マシンが使用するネットワーク接続が、ゲスト仮想マシンに透過的な VLAN タグ付けに対応している場合、任意の vlan 要素でゲスト仮想マシンのネットワークトラフィックに適用する 1 つ以上の VLAN タグを指定できます。OpenvSwitch インターフェイスおよび type='hostdev' SR-IOV インターフェイスのみが、ゲスト仮想マシントラフィックの透過的な VLAN タグ付けに対応します。標準的な Linux ブリッジや libvirt 独自の仮想ネットワークを含むその他のインターフェイスでは対応していません。802.1 Qbh (vn-link) スイッチおよび 802.1Qbg (VEPA) スイッチは、(libvirt の外部で) ゲスト仮想マシンのトラフィックを特定の VLAN にタグ付けする独自の方法を提供します。複数のタグを指定できるようにするには (VLAN トランクの場合)、tag サブ要素で使用する VLAN タグを指定します (tag id='42'/ など)。インターフェイスに複数の vlan 要素が定義されている場合は、指定されたすべてのタグを使用して VLAN トランクを実行することが想定されます。タグが 1 つの VLAN トランクが必要な場合は、オプションの属性trunk='yes' をトップレベルの vlan 要素に追加できます。

23.17.9. 入力デバイス

入力デバイスを使用すると、ゲスト仮想マシンのグラフィカルフレームバッファーとの相互作用が可能になります。フレームバッファーを有効にすると、入力デバイスが自動的に提供されます。デバイスを明示的に追加することもできます。たとえば、絶対的なカーソルの動きにグラフィックタブレットを使用することもできます。
入力デバイスの設定を指定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

図23.65 入力デバイス


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

23.17.10. ハブデバイス

ハブは、1 つのポートを複数の場所に拡張し、デバイスをホスト物理マシンシステムに接続するために利用可能なデバイスです。
ハブデバイスの設定を指定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

図23.66 ハブデバイス


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

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

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

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


  ...
  <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>
  ...
graphics 要素には必須のtype 属性があります。この属性は、以下の表の説明に従って、sdlvncrdpdesktop、または spice になります。

表23.23 グラフィカルフレームバッファーのメイン要素

パラメーター 説明
sdl これにより、ホストの物理マシンデスクトップにウィンドウが表示されます。これには、以下のオプション引数を使用できます。
  • 使用するディスプレイのdisplay属性
  • 認証 ID の xauth 属性
  • yes または no を受け付けるオプションの fullscreen 属性
vnc VNC サーバーを起動します。
  • port 属性は、TCP ポート番号を指定します (-1 は、自動割り当てが必要であることを示す従来の構文)。
  • autoport 属性は、使用する TCP ポートの自動割り当てを指定する際に推奨される構文です。
  • listen 属性は、サーバーがリッスンする IP アドレスです。
  • passwd 属性は、クリアテキストで VNC パスワードを提供します。
  • keymap 属性は、使用するキーマップを指定します。timestamp passwdValidTo='2010-04-09T15:51:00' が UTC であると想定し、パスワードの有効性に制限を設定することができます。
  • connected 属性を使用すると、パスワードの変更時に接続先を制御できます。VNC は keep 値のみを受け入れます。すべてのハイパーバイザーでサポートされていないことに注意してください。
  • KVM は、listen/port を使用する代わりに、UNIX ドメインソケットパスをリッスンするソケット属性をサポートします。
spice SPICE サーバーを起動します。
  • 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 に通常の TCP ポートと、TLS で保護された TCP ポートの両方が設定されている場合は、各ポートで実行できるチャネルを制限することが望ましい場合があります。これを行うには、主な graphics 要素内に 1 つ以上のchannel 要素を追加します。有効なチャンネル名は、maindisplayinputscursorplaybackrecordsmartcard、および usbredir などです。
SPICE 設定を指定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。

図23.68 SPICE 設定の例


  <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>
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 に設定できます。mode を指定しない場合は、KVM のデフォルトが使用されます (client モード)。
追加の要素は以下のとおりです。

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

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

23.17.12. ビデオデバイス

ビデオデバイスの設定を指定するには、管理ツールを使用して、ドメイン XML に次の変更を行います。

図23.69 ビデオデバイス


  ...
  <devices>
    <video>
      <model type='vga' vram='8192' heads='1'>
        <acceleration accel3d='yes' accel2d='yes'/>
      </model>
    </video>
  </devices>
  ...
graphics 要素には必須のtype 属性があり、以下の説明に従って、"sdl"、"vnc"、"rdp"、または "desktop" の値をとります。

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

パラメーター 説明
video video 要素は、ビデオデバイスを説明するコンテナーです。後方互換性のために、動画が設定されておらず、ドメイン XML に graphics 要素がある場合は、ゲスト仮想マシンの種類に応じたデフォルトの video が追加されます。ram または vram が指定されていない場合は、デフォルト値が使用されます。
model これには、利用可能なハイパーバイザー機能に応じて、vgacirrusvmvgakvmvbox、または qxl の値を取る必須の type 属性があります。また、vram と、ヘッドを使用した数値を使用して、ビデオメモリーの量をキビバイト (1024 バイトのブロック) で提供することもできます。
アクセラレーション アクセラレーションに対応している場合は、acceleration 要素の accel3d 属性および accel2d 属性を使用して有効にする必要があります。
address オプションの address サブ要素を使用すると、ビデオデバイスを特定の PCI スロットに関連付けることができます。

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

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

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


  ...
  <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>
  ...
このディレクティブの各々では、トップレベル要素の名前 (serialconsolechannel) でデバイスがゲスト仮想マシンにどのように提示されるかを説明します。ゲスト仮想マシンインターフェイスは、target 要素で設定されます。ホスト物理マシンに提示されるインターフェイスは、トップレベル要素の type 属性で指定されます。ホスト物理マシンインターフェイスは、source 要素で設定されます。source 要素には、ソケットパスでのラベリングの実行方法を上書きするオプションのseclabelを指定できます。この要素がない場合は、ドメインごとの設定からセキュリティーラベルが継承されます。各キャラクターデバイス要素には、オプションのサブ要素address があり、デバイスを特定のコントローラーまたは PCI スロットに関連付けることができます。
注記
パラレルポートおよびisa-parallel デバイスに対応しなくなりました。

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

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

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


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

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


  ...
  <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>
  ...
コンソールがシリアルポートとして提示される場合、<target> 要素にはシリアルポートと同じ属性があります。通常、コンソールは 1 つだけです。

23.17.15. Channel

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

図23.73 Channel


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

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

キャラクターデバイスは、ホストの物理マシンに、次のいずれかの形式で表示されます。

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

パラメーター 説明 XML スニペット
ドメインログファイル キャラクターデバイスのすべての入力を無効にし、仮想マシンのログファイルに出力を送信します。
<devices>
   <console type='stdio'>
     <target port='1'/>
   </console>
</devices>
デバイスログファイル ファイルが開かれ、キャラクターデバイスに送信したすべてのデータがファイルに書き込まれます。この設定でゲストを正常に起動するには、移行先ディレクトリーに、ゲストの virt_log_t SELinux ラベルが必要です。
<devices>
   <serial type="file">
      <source path="/var/log/vm/vm-serial.log"/>
      <target port="1"/>
   </serial>
</devices>
仮想コンソール キャラクターデバイスを仮想コンソールのグラフィカルフレームバッファーに接続します。通常、これには "ctrl+alt+3" のような特別なホットキーシーケンスを使用してアクセスします。
<devices>
   <serial type='vc'>
      <target port="1"/>
   </serial>
</devices>
Null デバイス キャラクターデバイスをボイドに接続します。入力にデータが提供されることはありません。書き込まれたデータはすべて破棄されます。
<devices>
   <serial type='null'>
      <target port="1"/>
   </serial>
</devices>
擬似 TTY 疑似 TTY は、/dev/ptmx を使用して割り当てられます。virsh console などの適切なクライアントは、接続してローカルのシリアルポートと対話できます。
<devices>
   <serial type="pty">
      <source path="/dev/pts/3"/>
      <target port="1"/>
   </serial>
</devices>
NB 特殊ケース NB 特殊なケースで、<console type='pty'> の場合、TTY パスもトップレベルの <console> タグの属性 tty='/dev/pts/3' として複製されます。これにより、<console> タグの構文が簡略化されました。 
ホスト物理マシンのデバイスプロキシー キャラクターデバイスは、基本となる物理キャラクターデバイスに渡されます。エミュレートシリアルポートはホスト物理マシンのシリアルポートにのみ接続するなど、デバイスの種類が一致する必要があります。シリアルポートをパラレルポートに接続しないでください。
<devices>
   <serial type="dev">
      <source path="/dev/ttyS0"/>
      <target port="1"/>
   </serial>
</devices>
名前付きパイプ キャラクターデバイスは、名前付きパイプに出力を書き込みます。詳細は、man ページの pipe(7) を参照してください。
<devices>
   <serial type="pipe">
      <source path="/tmp/mypipe"/>
      <target port="1"/>
   </serial>
</devices>
TCP クライアントサーバー キャラクターデバイスは、リモートサーバーに接続する 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 (セキュアな 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 ネットワークコンソール キャラクターデバイスは UDP netconsole サービスとしてパケットの送受信を行います。これは不可逆のサービスです。
<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 ドメインソケット client-server キャラクターデバイスは、UNIX ドメインソケットサーバーとして機能し、ローカルクライアントからの接続を受け入れます。
<devices>
   <serial type="unix">
      <source mode="bind" path="/tmp/foo"/>
      <target port="1"/>
   </serial>
</devices>

23.17.17. サウンドデバイス

仮想サウンドカードは、sound 要素を使用してホスト物理マシンに接続できます。

図23.74 仮想サウンドカード


  ...
  <devices>
    <sound model='ac97'/>
  </devices>
  ...
sound 要素には、必須の属性 model が 1 つあります。これは、実際のサウンドデバイスをエミュレートするものを指定します。有効な値は、基本となるハイパーバイザーに固有のものですが、一般的な選択肢は 'sb16''ac97'、および 'ich6' です。また、'ich6' モデルセットを持つ sound 要素には、さまざまなオーディオコーデックをオーディオデバイスに割り当てるためのオプションの codec サブ要素を追加できます。指定しない場合は、再生および録画を許可するために、デフォルトのコーデックが割り当てられます。有効な値は 'duplex' (ラインインおよびラインアウトをアドバタイズ) および 'micro' (スピーカーおよびマイクをアドバタイズ) です。

図23.75 サウンドデバイス


  ...
  <devices>
    <sound model='ich6'>
      <codec type='micro'/>
    <sound/>
  </devices>
  ...
各サウンド要素には、オプションのサブ要素<address>があります。このサブ要素は、デバイスを特定の PCI スロットに接続できます (上記を参照)。
注記
es1370 サウンドデバイスは、Red Hat Enterprise Linux 7 ではサポートされなくなりました。代わりに ac97 を使用します。

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

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

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


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

  ...
  <devices>
    <watchdog model='i6300esb' action='poweroff'/>
  </devices>
...
この 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.17.19. パニックデバイスの設定

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.17.20. メモリーバルーンデバイス

バルーンデバイスは、仮想マシンの 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 が自動的に追加する memballoon デバイスを示しています。

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


  ...
  <devices>
    <memballoon model='virtio'/>
  </devices>
  ...
以下の例は、静的 PCI スロット 2 を要求された状態で手動で追加されたデバイスを示しています。

図23.78 手動で追加したメモリーバルーンデバイス


  ...
  <devices>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </memballoon>
  </devices>
...
必要な model 属性は、どのようなバルーンデバイスが提供されるかを指定します。有効な値は仮想プラットフォーム固有です。KVM ハイパーバイザーでは、'virtio' がデフォルト設定です。