Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
仮想化管理ガイド
仮想環境の管理
概要
第1章 サーバーのベストプラクティス
- SELinux を Enforcing モードで実行します。setenforce コマンドを使用して、SELinux が Enforcing モードで実行するように設定します。
# setenforce 1
- AutoFS、NFS、FTP、HTTP、NIS、telnetd、sendmail などの不要なサービスを削除または無効にします。
- サーバー上にはプラットフォームの管理に必要な最低限のユーザーアカウントのみを追加します。不要なユーザーアカウントは削除してください。
- ホストでは不必要なアプリケーションは実行しないようにしてください。ホストでアプリケーションを実行すると仮想マシンのパフォーマンスに影響を与えるため、その影響がサーバーの安定性に及ぶ可能性があります。サーバーがクラッシュする可能性のあるアプリケーションでも、サーバー上のすべての仮想マシンがダウンします。
- 仮想マシンのインストールおよびイメージには集中管理できる場所を使用します。仮想マシンのイメージは
/var/lib/libvirt/images/
に格納します。仮想マシンのイメージをこれ以外のディレクトリーに格納する場合は、そのディレクトリーを SELinux ポリシーに追加し、インストールを開始する前にラベルの再設定を必ず行ってください。集中管理ができる共有可能なネットワークストレージの使用を強くお勧めします。
第2章 sVirt
非仮想化環境
非仮想化環境では、ホスト物理マシンは互いに物理的に分離されており、各ホスト物理マシンには、Web サーバーや DNS サーバーなどのサービスで設定される自己完結型の環境があります。これらのサービスは、独自のユーザー空間、ホストの物理マシンのカーネルおよび物理ハードウェアに直接通信し、サービスをネットワークに直接提供します。以下のイメージは、仮想化されていない環境を表しています。
- ??????
- ユーザー空間: 全ユーザーモードのアプリケーションと一部のドライバーが実行されるメモリー領域。
- ???
- Web アプリ (Web アプリケーションサーバー): ブラウザーからアクセスできる Web コンテンツを配信します。
- ??????
- ホストカーネル: ホストの物理マシンの特権付きカーネル、カーネル拡張、およびほとんどのデバイスドライバーを実行するために厳密に予約されます。
- ???
- DNS サーバー: DNS レコードを格納し、ユーザーが IP アドレスの代わりに論理名を使用して Web ページにアクセスできるようにします。
仮想化環境
仮想化環境では、複数の仮想オペレーティングシステムを、ホスト物理マシン上にある単一のカーネルで実行できます。以下のイメージは、仮想化環境を表しています。
2.1. セキュリティーおよび仮想化
2.2. sVirt のラベル付け
# ps -eZ | grep qemu system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm
# ls -lZ /var/lib/libvirt/images/* system_u:object_r:svirt_image_t:s0:c87,c520 image1
表2.1 sVirt コンテキストラベル
SELinux コンテキスト | タイプ/説明 |
---|---|
system_u:system_r:svirt_t:MCS1 | ゲスト仮想マシンのプロセス。MCS1 はランダムな MCS フィールドです。約 500,000 個のラベルがサポートされます。 |
system_u:object_r:svirt_image_t:MCS1 | ゲスト仮想マシンのイメージ。これらのイメージの読み取り/書き込みができるのは、同じ MCS フィールドを持つ svirt_t プロセスのみです。 |
system_u:object_r:svirt_image_t:s0 | ゲスト仮想マシンの共有の読み取り/書き込みコンテンツ。すべての svirt_t プロセスは svirt_image_t:s0 ファイルに書き込むことができます。 |
第3章 仮想マシンのクローン作成
- クローン は、1 台の仮想マシンのインスタンスです。クローンを使用すると、同じ仮想マシンのネットワークを設定したり、別の宛先に配布したりできます。
- テンプレート は、クローン作成のソースとして使用するように設計された仮想マシンのインスタンスです。テンプレートから複数のクローンを作成し、各クローンにマイナーな変更を加えることができます。これは、この変更がシステムに与える影響を確認する際に役立ちます。
- プラットフォームレベルの情報および設定には、仮想化ソリューションが仮想マシンに割り当てたものが含まれます。例には、ネットワークインターフェイスカード (NIC) の数と、その MAC アドレスが含まれます。
- ゲストオペレーティングシステムレベル情報および設定には、仮想マシン内で設定されたものが含まれます。例には SSH 鍵が含まれます。
- アプリケーションレベル情報および設定には、仮想マシンにインストールされているアプリケーションで設定したものが含まれます。例には、アクティベーションコードおよび登録情報が含まれます。注記情報およびアプローチは各アプリケーションに固有のものであるため、本章には、アプリケーションレベルの削除に関する情報は記載されていません。
3.1. クローンを作成する仮想マシンの準備
手順3.1 クローンを作成する仮想マシンの準備
仮想マシンのセットアップ
- クローンまたはテンプレートに使用する仮想マシンを構築します。
- クローンに必要なソフトウェアをインストールします。
- オペレーティングシステムに一意でない設定を設定します。
- 固有でないアプリケーション設定を設定します。
ネットワーク設定を削除します。
- 以下のコマンドを使用して、永続的な udev ルールを削除します。
# rm -f /etc/udev/rules.d/70-persistent-net.rules
注記udev ルールを削除しない場合は、最初の NIC の名前が eth0 ではなく eth1 になります。 /etc/sysconfig/network-scripts/ifcfg-eth[x]
で以下の編集を行い、ifcfg スクリプトから一意のネットワークの詳細を削除します。- HWADDR 行および Static 行を削除します。注記HWADDR が新しいゲストの MAC アドレスと一致しない場合、ifcfg は無視されます。したがって、ファイルから HWADDR を削除することが重要です。
DEVICE=eth[x] BOOTPROTO=none ONBOOT=yes #NETWORK=10.0.1.0 <- REMOVE #NETMASK=255.255.255.0 <- REMOVE #IPADDR=10.0.1.20 <- REMOVE #HWADDR=xx:xx:xx:xx:xx <- REMOVE #USERCTL=no <- REMOVE # Remove any other *unique* or non-desired settings, such as UUID.
- HWADDR または一意の情報が含まれていない DHCP 設定が残っていることを確認します。
DEVICE=eth[x] BOOTPROTO=dhcp ONBOOT=yes
- ファイルに以下の行が含まれていることを確認します。
DEVICE=eth[x] ONBOOT=yes
- 以下のファイルが存在する場合は、そのファイルに同じ内容が含まれていることを確認してください。
/etc/sysconfig/networking/devices/ifcfg-eth[x]
/etc/sysconfig/networking/profiles/default/ifcfg-eth[x]
注記NetworkManager または特殊な設定を仮想マシンで使用した場合は、追加の固有情報が ifcfg スクリプトから削除されていることを確認してください。
登録の詳細を削除します。
- 以下のいずれかを使用して、登録の詳細を削除します。
- Red Hat Network (RHN) 登録済みゲスト仮想マシンの場合は、以下のコマンドを実行します。
# rm /etc/sysconfig/rhn/systemid
- Red Hat Subscription Manager (RHSM) の登録済みゲスト仮想マシンの場合は、次のコマンドを使用します。
- 元の仮想マシンを使用しない場合は、以下のコマンドを実行します。
# subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
- 元の仮想マシンを使用する場合は、次のコマンドのみを実行します。
# subscription-manager clean
注記元の RHSM プロファイルはポータルに残ります。
その他の固有の詳細の削除
- 次のコマンドを使用して、sshd の公開鍵と秘密鍵のペアを削除します。
# rm -rf /etc/ssh/ssh_host_*
注記ssh キーを削除すると、このホストを信頼しない ssh クライアントの問題が回避されます。 - 複数のマシンで実行している場合に、競合する可能性があるその他のアプリケーション固有の識別子や設定を削除します。
次回のシステムの起動時に設定ウィザードを実行するように仮想マシンを設定します。
- 以下のいずれかの方法で、仮想マシンを次回起動したときに、関連する設定ウィザードが実行されるように設定します。
- Red Hat Enterprise Linux 6 以前の場合は、以下のコマンドを使用して、root ファイルシステムに .unconfigured という名前の空のファイルを作成します。
# touch /.unconfigured
- Red Hat Enterprise Linux 7 の場合は、次のコマンドを実行して、最初の起動ウィザードおよび初期設定ウィザードを有効にします。
# sed -ie 's/RUN_FIRSTBOOT=NO/RUN_FIRSTBOOT=YES/' /etc/sysconfig/firstboot # systemctl enable firstboot-graphical # systemctl enable initial-setup-graphical
注記次回の起動時に実行するウィザードは、仮想マシンから削除された設定によって異なります。また、クローンの初回ブートでは、ホスト名を変更することが推奨されます。
3.2. 仮想マシンのクローン作成
3.2.1. virt-clone を使用したゲストのクローン作成
--orginal
のみが必要です。オプションの一覧を表示するには、次のコマンドを実行します。
# virt-clone --help
例3.1 virt-clone を使用したゲストのクローン作成
# virt-clone --original demo --auto-clone
例3.2 virt-clone を使用したゲストのクローン作成
# virt-clone --connect qemu:///system --original demo --name newdemo --file /var/lib/xen/images/newdemo.img --file /var/lib/xen/images/newdata.img
3.2.2. virt-manager を使用したゲストのクローン作成
手順3.2 virt-manager を使用した仮想マシンのクローンの作成
virt-manager を開く
virt-manager を起動します。Applications メニューおよび System Tools サブメニューから Virtual Machine Manager アプリケーションを起動します。または、root で virt-manager を実行します。Virtual Machine Manager にあるゲスト仮想マシンの一覧から、クローンを作成するゲスト仮想マシンを選択します。クローンを作成するゲスト仮想マシンを右クリックし、Clone を選択します。Clone Virtual Machine ウィンドウが開きます。図3.1 Clone Virtual Machine ウィンドウ
クローンの設定
- クローンの名前を変更する場合は、クローンの新しい名前を入力します。
- ネットワーク設定を変更する場合は、Details を選択します。クローンの新しい MAC アドレスを入力します。OK をクリックします。
図3.2 Change MAC Address ウィンドウ
- クローンを作成したゲスト仮想マシンのディスクごとに、次のいずれかのオプションを選択します。
Clone this disk
- ディスクは、クローンとして作成されたゲスト仮想マシンのクローンとして作成されます。Share disk with guest virtual machine name
- ディスクは、クローンを作成されるゲスト仮想マシンとそのクローンで共有されます。Details
- ストレージパスの変更 画面を開きます。これにより、ディスクへの新しいパスの選択が可能になります。図3.3 Change
storage path
ウィンドウ
ゲスト仮想マシンのクローンを作成する
Clone をクリックします。
第4章 KVM のライブマイグレーション
- 負荷分散: ゲスト仮想マシンは、ホスト物理マシンが過負荷になった場合、または別のホスト物理マシンが十分に活用されていない場合に、使用率の低いホスト物理マシンに移動できます。
- ハードウェア独立性: ホストの物理マシンでハードウェアデバイスをアップグレード、追加、または削除する必要がある場合、ゲスト仮想マシンを他のホストの物理マシンに安全に移動できます。つまり、ゲスト仮想マシンでは、ハードウェアの改善のためのダウンタイムが発生しません。
- 省エネ: ゲスト仮想マシンを他のホスト物理マシンに再配布できるため、電源をオフにして、低使用期間でエネルギーを節約し、コストを削減できます。
- 地理的な移行: 待ち時間を短縮するため、または深刻な状況では、ゲスト仮想マシンを別の場所に移動できます。
4.1. ライブマイグレーションの要件
移行の要件
- 次のいずれかのプロトコルを使用して、共有ストレージにインストールされたゲスト仮想マシン。
- ファイバーチャネルベースの LUN
- iSCSI
- FCoE
- NFS
- GFS2
- SCSI RDMA プロトコル (SCSI RCP) - Infiniband アダプターおよび 10GbE iWARP アダプターで使用されるブロックエクスポートプロトコル
- 移行プラットフォームおよびバージョンは、テーブル 表4.1「ライブマイグレーションの互換性」 に対して確認する必要があります。また、Red Hat Enterprise Linux 6 は、共有ストレージ上の raw イメージと qcow2 イメージを使用したゲスト仮想マシンのライブマイグレーションをサポートしていることにも注意してください。
- 両方のシステムで、適切な TCP/IP ポートが開いている必要があります。ファイアウォールが使用されている場合は、詳細なポート情報の https://access.redhat.com/site/documentation/ で見つかる 『Red Hat Enterprise Linux Virtualization セキュリティーガイド』 を参照してください。
- 共有ストレージメディアをエクスポートする別のシステム。ストレージは、移行に使用される 2 つのホストマシンのいずれかに配置しないでください。
- 共有ストレージは、移行元システムと移行先システムの同じ場所にマウントする必要があります。マウントするディレクトリー名は同じである必要があります。別のパスを使用してイメージを保持することもできますが、推奨されません。virt-manager を使用して移行を行う場合は、パス名が同じである必要があることに注意してください。ただし、virsh を使用して移行を実行する場合は、移行を実行するときに --xml オプションまたはプリフックを使用して、さまざまなネットワーク設定とマウントディレクトリーを使用できます。共有ストレージがなくても、オプション --copy-storage-all (非推奨) を使用して移行を成功させることができます。prehooks の詳細は、 libvirt.org を参照してください。XML オプションの詳細については、20章ドメイン XML の操作 を参照してください。
- パブリックブリッジ + タップネットワーク内の既存のゲスト仮想マシンで移行を試みる場合、移行元と移行先のホスト物理マシンは同じネットワークに配置する必要があります。この手順を行わないと、ゲストの仮想マシンネットワークが移行後に動作しません。
- Red Hat Enterprise Linux 5 および 6 では、KVM ゲスト仮想マシンのデフォルトのキャッシュモードが
none
に設定されているため、ディスクの状態に一貫性がありません。キャッシュオプションをnone
(たとえば、virsh attach-disk cache none を使用) に設定すると、O_DIRECT
フラグを使用してゲスト仮想マシンのファイルが開かれます (オープン システムコールを呼び出す場合)。つまり、ホストの物理マシンのキャッシュを回避し、ゲスト仮想マシンでキャッシュのみを提供します。キャッシュモードをnone
に設定すると、不整合の問題が回避され、使用すると、仮想マシンのライブマイグレーションが可能になります。キャッシュをnone
に設定する方法は、「ゲストへのストレージデバイスの追加」 を参照してください。
libvirtd
サービスが有効になっていて (#chkconfig libvirtd on)、実行されている (#service libvirtd start) ことを確認してください。また、効果的に移行する機能は、/etc/libvirt/libvirtd.conf
設定ファイルのパラメーターの設定に依存することに注意してください。
手順4.1 libvirtd.conf の設定
libvirtd.conf
を開くには、root で次のコマンドを実行する必要があります。# vim /etc/libvirt/libvirtd.conf
- 必要に応じてパラメーターを変更し、ファイルを保存します。
libvirtd
サービスを再起動します。# service libvirtd restart
4.2. ライブマイグレーションと Red Hat Enterprise Linux バージョンの互換性
表4.1 ライブマイグレーションの互換性
移行の方法 | リリースタイプ | 例 | ライブ移行のサポート | 注記 |
---|---|---|---|---|
前方 | メジャーリリース | 5.x → 6.y | サポート対象外 | |
前方 | マイナーリリース | 5.x → 5.y (y>x, x>=4) | 完全対応 | 問題がある場合は報告する必要があります |
前方 | マイナーリリース | 6.x → 6.y (y>x, x>=0) | 完全対応 | 問題がある場合は報告する必要があります |
後方 | メジャーリリース | 6.x → 5.y | サポート対象外 | |
後方 | マイナーリリース | 5.x → 5.y (x>y,y>=4) | サポート対象 | 既知の問題は、移行に関する問題のトラブルシューティング を参照してください。 |
後方 | マイナーリリース | 6.x → 6.y (x>y, y>=0) | サポート対象 | 既知の問題は、移行に関する問題のトラブルシューティング を参照してください。 |
移行に関する問題のトラブルシューティング
- SPICE の問題: Red Hat Enterprise Linux 6.0→6.1 からの移行時に、SPICE に互換性のない変更があることが判明しました。このような場合、クライアントは切断してから再接続し、オーディオとビデオが一時的に失われる可能性があります。これは一時的なものであり、すべてのサービスが再開されます。
- USB の問題: Red Hat Enterprise Linux 6.2 は、移行サポートを含む USB 機能を追加しましたが、USB デバイスをリセットし、デバイス上で実行されているアプリケーションを中止させる特定の警告がないわけではありません。この問題は Red Hat Enterprise Linux 6.4 で修正され、今後のバージョンでは発生しません。6.4 よりも前のバージョンでこれが発生するのを防ぐには、USB デバイスが使用されている間は移行を行いません。
- 移行プロトコルの問題 - 後方移行が "unknown section error" で終了する場合は、一時的なエラーである可能性があるため、移行プロセスを繰り返すことで問題を修復できます。そうでない場合は、問題を報告してください。
ネットワークストレージの設定
共有ストレージを設定し、共有ストレージにゲスト仮想マシンをインストールします。
4.3. 共有ストレージの例: 単純な移行のための NFS
sync
パラメーターが有効になっている必要もあります。これは、NFS ストレージを適切にエクスポートするために必要です。さらに、NFS をソースホスト物理マシンにマウントすることを強くお勧めします。ゲスト仮想マシンのイメージは、ソースホスト物理マシンにある NFS マウントディレクトリーに作成する必要があります。また、NFS ファイルロックは KVM でサポートされていないため、使用しないでください。
ディスクイメージ用のディレクトリーを作成します
この共有ディレクトリーには、ゲスト仮想マシンのディスクイメージが含まれます。これを行うには、/var/lib/libvirt/images
とは異なる場所にディレクトリーを作成します。以下に例を示します。# mkdir /var/lib/libvirt-img/images
NFS 設定ファイルに新しいディレクトリーパスを追加します。
NFS 設定ファイルは、/etc/exports
にあるテキストファイルです。ファイルを開き、手順 1 で作成した新しいファイルへのパスを追加して編集します。# echo "/var/lib/libvirt-img/images" >> /etc/exports/[NFS-Config-FILENAME.txt]
NFS の起動
- iptable (2049 など) の NFS のポートが開いていることを確認し、
/etc/hosts.allow
ファイルに NFS を追加します。 - NFS サービスを開始します。
# service nfs start
ソースと宛先の両方に共有ストレージをマウントします
次のコマンドを 2 回実行して、ソースシステムと宛先システムの両方に/var/lib/libvirt/images
ディレクトリーをマウントします。ソースシステムで 1 回、宛先システムでもう一度。# mount
source_host
:/var/lib/libvirt-img/images /var/lib/libvirt/images警告この手順で作成するディレクトリーが、「ライブマイグレーションの要件」 で概説されている要件に準拠していることを確認してください。さらに、ディレクトリーに正しい SELinux ラベルを付ける必要がある場合があります。詳細は、Red Hat Enterprise Linux ストレージ管理ガイド の NFS の章を参照してください。
4.4. virsh を使用した KVM のライブ移行
# virsh migrate --live GuestName DestinationURL
-live
オプションが削除される可能性があることに注意してください。追加オプションは、「virsh migrate コマンドの追加オプション」 に一覧表示されています。
GuestName
パラメーターは、移行するゲスト仮想マシンの名前を表します。
DestinationURL
パラメーターは、移行先ホストの物理マシンの接続 URL です。移行先システムで同じバージョンの Red Hat Enterprise Linux を実行し、同じハイパーバイザーを使用し、libvirt を実行している必要があります。
DestinationURL
パラメーターには、以下のセマンティクスがあります。
- 通常の移行:
DestinationURL
は、ソースゲスト仮想マシンから見たターゲットホスト物理マシンの URL です。 - ピアツーピアの移行:
DestinationURL
は、移行元ホストの物理マシンから表示されるターゲットホストの物理マシンの URL です。
/etc/hosts
ファイルに移行先ホストの物理マシンのエントリーが必要です。次の例に示すように、宛先ホストの物理マシンの IP アドレスとホスト名をこのファイルに入力し、宛先ホストの物理マシンの IP アドレスとホスト名を置き換えます。
10.0.0.20 host2.example.com
例:virsh を使用したライブマイグレーション
この例では、host1.example.com
から host2.example.com
に移行します。使用環境に合わせて、ホストの物理マシン名を変更します。この例では、guest1-rhel6-64
という名前の仮想マシンを移行します。
ゲスト仮想マシンが実行していることを確認します。
移行元システムで、host1.example.com
を実行し、guest1-rhel6-64
が実行していることを確認します。[root@host1 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel6-64 running
ゲスト仮想マシンの移行
次のコマンドを実行して、ゲスト仮想マシンを移行先host2.example.com
にライブ移行します。リンク先の URL の末尾に/system
を追加し、フルアクセスが必要であることを libvirt に指示します。# virsh migrate --live
guest1-rhel6-64 qemu+ssh://host2.example.com/system
コマンドを入力すると、インストール先システムの root パスワードを求められます。待機
負荷やゲスト仮想マシンのサイズによっては、移行に時間がかかる場合があります。virsh はエラーのみを報告します。ゲスト仮想マシンは、完全に移行するまで、移行元ホストの物理マシンで実行し続けます。注記移行中、完了率インジケーターの数は、プロセスが完了する前に複数回減少する可能性があります。これは、移行の開始後に変更されたソースメモリーページを再度コピーする必要があるため、全体的な進行状況の再計算が原因で発生します。したがって、この動作は予期されたものであり、移行に問題があることを示すものではありません。ゲスト仮想マシンが移行先ホストに到達していることを確認する
宛先システムhost2.example.com
から、guest1-rhel6-64
が実行されていることを確認します。[root@host2 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel6-64 running
virsh dumpxml Guest1 > Guest1.xml virsh -c qemu+ssh://<target-system-FQDN> define Guest1.xml virsh undefine Guest1
4.4.1. virsh を使用した移行に関する追加のヒント
- 手順4.1「libvirtd.conf の設定」 の説明に従って、libvirtd.conf ファイルを開きます。
- Processing controls のセクションを探します。
################################################################# # # Processing controls # # The maximum number of concurrent client connections to allow # over all sockets combined. #max_clients = 20 # The minimum limit sets the number of workers to start up # initially. If the number of active clients exceeds this, # then more threads are spawned, upto max_workers limit. # Typically you'd want max_workers to equal maximum number # of clients allowed #min_workers = 5 #max_workers = 20 # The number of priority workers. If all workers from above # pool will stuck, some calls marked as high priority # (notably domainDestroy) can be executed in this pool. #prio_workers = 5 # Total global limit on concurrent RPC calls. Should be # at least as large as max_workers. Beyond this, RPC requests # will be read into memory and queued. This directly impact # memory usage, currently each request requires 256 KB of # memory. So by default upto 5 MB of memory is used # # XXX this isn't actually enforced yet, only the per-client # limit is used so far #max_requests = 20 # Limit on concurrent requests from a single client # connection. To avoid one client monopolizing the server # this should be a small fraction of the global max_requests # and max_workers parameter #max_client_requests = 5 #################################################################
max_clients
およびmax_workers
パラメーターの設定を変更します。両方のパラメーターの番号が同じであることが推奨されます。max_clients
は、移行ごとに 2 つのクライアント (各側に 1 つ) を使用します。max_workers
は、実行フェーズ中に移行元で 1 つのワーカーと、移行先で 0 のワーカーを使用し、終了フェーズ中に移行先でワーカーを 1 つ使用します。重要max_clients
パラメーターおよびmax_workers
パラメーターの設定は、libvirtd サービスへのゲスト仮想マシンのすべての接続の影響を受けます。つまり、同じゲスト仮想マシンを使用しているユーザーで、同時に移行を実行しているすべてのユーザーは、max_clients
およびmax_workers
パラメーター設定で設定される制限にも古いことになります。このため、同時ライブマイグレーションを実行する前に、最大値を慎重に検討する必要があります。- ファイルを保存し、サービスを再起動します。注記起動したにもかかわらず認証されていない ssh セッションが多すぎるために、移行接続が切断する場合があります。デフォルトでは、
sshd
で許可されるセッションは 10 セッションのみで、常に "pre-authenticated state" となります。この設定は、sshd 設定ファイル (ここでは/etc/ssh/sshd_config
) のMaxStartups
パラメーターで制御されます。これには調整が必要な場合があります。この制限は DoS 攻撃 (および一般的なリソースの過剰使用) を防ぐために設定されているため、このパラメーターの調整は慎重に行ってください。この値を高く設定しすぎると、目的が無効になります。このパラメーターを変更するには、ファイル/etc/ssh/sshd_config
を変更し、MaxStartups 行の先頭から#を削除して、10
(デフォルト値) をより大きな数値に変更します。必ず保存して、sshd
サービスを再起動してください。詳細は、sshd_config
の man ページを参照してください。
4.4.2. virsh migrate コマンドの追加オプション
--live
のほかに、virsh migrate では以下のオプションを利用できます。
--direct
- 直接移行に使用されます。--p2p
- ピアツーピア移行に使用されます。--tunnelled
- トンネル化された移行に使用されます。--persistent
- ドメインを移行先ホストの物理マシンの永続状態に残します。--undefinesource
- ソースホストの物理マシンのゲスト仮想マシンを削除します。--suspend
- ドメインを移行先ホストの物理マシンの一時停止状態のままにします。--change-protection
- 移行の進行中に、互換性のない設定変更がドメインに行われないように強制します。ハイパーバイザーによるサポートがある場合にこのオプションが暗黙的に有効になりますが、ハイパーバイザーに変更保護の対応がない場合に明示的に使用して移行を拒否できます。--unsafe
- すべての安全手順を無視して、強制的に移行を実行します。--verbose
- 移行の進行状況を表示します。--abort-on-error
- 移行プロセス中にソフトエラー (I/O エラーなど) が発生すると移行を取り消します。--migrateuri
: 通常省略される移行 URI です。--domain
[string]- ドメイン名、ID、または uuid--desturi
[string]: クライアント (通常の移行) またはソース (p2p 移行) から見た宛先ホスト物理マシンの接続 URI--migrateuri
: 移行 URI。通常は省略できます。--timeout
[seconds]- ライブマイグレーションカウンターが N 秒を超えるとゲスト仮想マシンを強制的に中断します。ライブマイグレーションでのみ使用できます。タイムアウトが開始されると、一時停止されたゲスト仮想マシンで移行が続行されます。--dname
[string] - 移行時にゲスト仮想マシンの名前を新規の名前に変更します (サポートされている場合)。--xml
- 指定されたファイル名を使用して、宛先で使用する別の XML ファイルを提供できます。このファイル名は、基となるストレージへのアクセスで、ソースと宛先の名前の相違を考慮するなど、ホスト固有のドメイン XML の部分にさらに多くの変更を加えます。このオプションは通常、省略されます。
4.5. virt-manager を使用した移行
virt-manager を開く
virt-manager を開きます。メインメニューバーから Applications → System Tools → Virtual Machine Manager を選択して、virt-manager を起動します。図4.1 virt-Manager のメインメニュー
ターゲットホストの物理マシンへの接続
File メニューをクリックしてターゲットホストの物理マシンに接続し、Add Connection をクリックします。図4.2 Add Connection ウィンドウの表示
接続の追加
Add Connection ウィンドウが表示されます。図4.3 ターゲットホストの物理マシンへの接続の追加
以下の詳細を入力します。- Hypervisor: QEMU/KVM を選択します。
- Method: 接続方法を選択します。
- Username: リモートホストの物理マシンのユーザー名を入力します。
- Hostname: リモートホストの物理マシンのホスト名を入力します。
Connect ボタンをクリックします。この例では SSH 接続を使用しているため、次の手順で指定するユーザーのパスワードを入力する必要があります。図4.4 パスワードを入力
ゲスト仮想マシンの移行
ソースホスト物理マシン内のゲストのリストを開き (ホスト名の左側にある小さな三角形をクリック)、移行するゲスト (この例では guest1-rhel6-64) を右クリックして、Migrate をクリックします。図4.5 移行するゲストの選択
New Host フィールドで、ドロップダウンリストを使用して、ゲスト仮想マシンの移行先となるホスト物理マシンを選択し、Migrate をクリックします。図4.6 移行先ホストの物理マシンの選択と、移行プロセスの開始
進捗ウィンドウが表示されます。図4.7 進捗ウィンドウ
virt-manager は、移行先ホストで実行されている、新しく移行されたゲスト仮想マシンを表示するようになりました。これで、ソースホストの物理マシンで実行されていたゲスト仮想マシンがシャットオフ状態で一覧表示されます。図4.8 移行先ホストの物理マシンで実行している移行ゲスト仮想マシン
オプション: ホストの物理マシンのストレージの詳細を表示します。
Edit メニューで Connection Details をクリックすると、Connection Details ウィンドウが表示されます。Storage タブをクリックします。移行先ホストの物理マシンの iSCSI ターゲットの詳細が表示されます。移行したゲスト仮想マシンがストレージを使用するものとして一覧表示されることに注意してください。図4.9 ストレージの詳細
このホストは、以下の XML 設定で定義されています。図4.10 宛先ホスト物理マシンの XML 設定
<pool type='iscsi'> <name>iscsirhel6guest</name> <source> <host name='virtlab22.example.com.'/> <device path='iqn.2001-05.com.iscsivendor:0-8a0906-fbab74a06-a700000017a4cc89-rhevh'/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool> ...
第5章 ゲストのリモート管理
5.1. SSH を使用したリモート管理
- 仮想マシンを管理するには、リモートマシンへの root ログインアクセスが必要です。
- 初期接続の設定プロセスが遅くなる可能性があります。
- すべてのホストまたはゲストでユーザーのキーを取り消す標準または簡単な方法はありません。
- SSH は、リモートマシンの数が多いと適切にスケーリングされません。
- openssh
- openssh-askpass
- openssh-clients
- openssh-server
virt-manager 用にパスワードを使用しないまたはパスワードを使用したSSH アクセスの設定
以下の手順は、ゼロから開始しており、SSH キーが設定されていないことを前提としています。SSH 鍵を設定して別のシステムにコピーしている場合は、この手順をスキップできます。
オプション: ユーザーの変更
必要に応じてユーザーを変更します。この例では、ローカルの root ユーザーを使用して、その他のホストとローカルホストをリモートで管理します。$ su -
SSH 鍵ペアの生成
virt-manager が使用されているマシンで公開鍵ペアを生成します。この例では、~/.ssh/
ディレクトリーのデフォルトの鍵の場所を使用します。# ssh-keygen -t rsa
リモートホストへの鍵のコピー
パスワードなしのリモートログイン、またはパスフレーズを使用したリモートログインでは、管理対象システムに SSH 鍵を配布する必要があります。ssh-copy-id コマンドを使用して、指定したシステムアドレス (この例ではroot@host2.example.com
) の root ユーザーにキーをコピーします。# ssh-copy-id -i ~/.ssh/id_rsa.pub root@host2.example.com root@host2.example.com's password:
次に、ssh root@host2.example.com コマンドを使用してマシンにログインし、.ssh/authorized_keys
ファイルをチェックインして予期しないキーが追加されていないことを確認します。必要に応じて、その他のシステムに対して繰り返します。オプション: パスフレーズを ssh-agent に追加します。
以下の手順では、既存の ssh-agent にパスフレーズを追加する方法について説明します。ssh-agent が実行されていない場合、実行に失敗します。エラーや競合を回避するには、SSH パラメーターが正しく設定されていることを確認してください。詳細は、『Red Hat Enterprise Linux 導入ガイド』 を参照してください。必要に応じて、SSH キーのパスフレーズを ssh-agent に追加します。ローカルホストで次のコマンドを使用して、パスフレーズ (存在する場合) を追加し、パスワードなしのログインを有効にします。# ssh-add ~/.ssh/id_rsa
SSH キーがリモートシステムに追加されます。
libvirt デーモン (libvirtd
)
libvirt
デーモンは、仮想マシンを管理するインターフェイスを提供します。管理が必要なすべてのリモートホストに libvirtd
デーモンをインストールして実行する必要があります。
$ ssh root@somehost # chkconfig libvirtd on # service libvirtd start
libvirtd
と SSH を設定すると、仮想マシンにリモートでアクセスして管理できるようになります。この時点で、VNC でゲストにアクセスできるようになるはずです。
virt-manager を使用したリモートホストへのアクセス
リモートホストは、virt-manager GUI ツールで管理できます。SSH キーは、パスワードを使用しないログインを機能させるために、virt-manager を実行しているユーザーに属している必要があります。
- virt-manager を起動します。
- File ->Add Connection メニューを開きます。
図5.1 Add Connection メニュー
- ドロップダウンメニューを使用してハイパーバイザータイプを選択し、Connect to remote host チェックボックスをクリックして Connection Method (この場合は Remote tunnel over SSH) を開き、必要な User name と Hostname を入力して Connect をクリックします。
5.2. TLS および SSL でのリモート管理
手順5.1 TLS 管理用の認証局 (CA) 鍵の作成
- 始める前に、certtool ユーティリティーがインストールされていることを確認してください。そうでない場合は、以下を行います。
# yum install gnutls-utils
- 次のコマンドを使用して、秘密鍵を生成します。
# certtool --generate-privkey > cakey.pem
- キーが生成されたら、次のステップは、キーが自己署名できるように署名ファイルを作成することです。作成するには、署名の詳細が含まれるファイルを作成し、
ca.info
という名前を付けます。このファイルには、以下の内容を記述する必要があります。# vim ca.info
cn = Name of your organization ca cert_signing_key
- 以下のコマンドを使用して自己署名キーを生成します。
# certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
ファイルが生成されたら、rm コマンドを使用して ca.info ファイルを削除できます。生成プロセスの結果として生成されるファイルの名前はcacert.pem
です。このファイルは公開鍵 (証明書) です。読み込んだcakey.pem
は秘密鍵です。このファイルは共有スペースに保存しないでください。この鍵は秘密鍵を保持します。 /etc/pki/CA/cacert.pem
ディレクトリー内のすべてのクライアントとサーバーにcacert.pem
認証局証明書ファイルをインストールして、CA によって発行された証明書が信頼できることを通知します。このファイルの内容を表示するには、次のコマンドを実行します。# certtool -i --infile cacert.pem
これは、CA の設定に必要なものです。クライアントとサーバーの証明書を発行するために必要となるため、CA の秘密鍵を安全に保持します。
手順5.2 サーバー証明書の発行
qemu://mycommonname/system
を使用してサーバーに接続するため、CN フィールドは同一である必要があります (mycommoname)。
- サーバーの秘密鍵を作成します。
# certtool --generate-privkey > serverkey.pem
- 最初に
server.info
というテンプレートファイルを作成して、CA の秘密鍵の署名を生成します。CN がサーバーのホスト名と同じに設定されていることを確認します。organization = Name of your organization cn = mycommonname tls_www_server encryption_key signing_key
- 次のコマンドを使用して証明書を作成します。
# certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
- これにより、2 つのファイルが生成されます。
- serverkey.pem - サーバーの秘密鍵
- servercert.pem - サーバーの公開鍵
秘密鍵の場所は、秘密にしておきます。ファイルの内容を表示するには、以下のコマンドを実行します。# certtool -i --inifile servercert.pem
このファイルを開く場合、CN=
パラメーターは先に設定した CN と同じでなければなりません。(例:mycommonname
) - 次の場所にある 2 つのファイルをインストールします。
serverkey.pem
- サーバーの秘密鍵。このファイルは、/etc/pki/libvirt/private/serverkey.pem
に置きます。servercert.pem
- サーバーの証明書。サーバーの/etc/pki/libvirt/servercert.pem
にインストールします。
手順5.3 クライアント証明書の発行
- すべてのクライアント (つまり、virt-manager などの libvirt にリンクされているプログラム) について、X.509 識別名 (DN) が適切な名前に設定された証明書を発行する必要があります。これは、企業レベルで決定する必要があります。たとえば、以下の情報が使用されます。
C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
このプロセスは、以下の例外を除き、手順5.2「サーバー証明書の発行」 と非常に似ています。 - 以下のコマンドを使用して秘密鍵を作成します。
# certtool --generate-privkey > clientkey.pem
- 最初に
client.info
という名前のテンプレートファイルを作成して、CA の秘密鍵の署名を生成します。ファイルには以下の内容が含まれている必要があります (フィールドは、お住まいの地域/場所に合わせてカスタマイズする必要があります)。country = USA state = North Carolina locality = Raleigh organization = Red Hat cn = client1 tls_www_client encryption_key signing_key
- 次のコマンドを使用して、証明書に署名します。
# certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
- クライアントマシンに証明書をインストールします。
# cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem # cp clientcert.pem /etc/pki/libvirt/clientcert.pem
5.3. トランスポートモード
Transport Layer Security (TLS)
Transport Layer Security TLS 1.0 (SSL 3.1) が認証され、暗号化された TCP/IP ソケット。通常はパブリックポート番号をリッスンします。これを使用するには、クライアント証明書とサーバー証明書を生成する必要があります。標準のポートは 16514 です。
UNIX ソケット
UNIX ドメインソケットは、ローカルマシンでのみアクセスできます。ソケットは暗号化されず、UNIX の権限または SELinux を使用して認証を行います。通常のソケット名は /var/run/libvirt/libvirt-sock
および /var/run/libvirt/libvirt-sock-ro
です (読み取り専用接続の場合)。
SSH
SSH (Secure Shell Protocol) 接続で転送されます。Netcat が必要です (ncパッケージ) がインストールされています。libvirt デーモン (libvirtd) は、リモートマシンで実行している必要があります。SSH アクセスには、ポート 22 を開いておく必要があります。ある種の SSH キー管理 (たとえば、ssh-agentユーティリティー) を使用する必要があります。そうしないと、パスワードの入力を求められます。
ext
ext
パラメーターは、libvirt のスコープ外の方法でリモートマシンに接続できる外部プログラムに使用されます。このパラメーターはサポートされていません。
TCP
暗号化されていない TCP/IP ソケット。実稼働環境での使用は推奨されていないため、これは通常無効になっていますが、管理者はこれをテストしたり、信頼できるネットワークで使用したりできます。デフォルトのポートは 16509 です。
リモート URI
URI (Uniform Resource Identifier) は、virsh および libvirt がリモートホストに接続するために使用します。URI は、virsh コマンドの --connect パラメーターとともに使用して、リモートホストで単一コマンドまたは移行を実行することもできます。リモート URI は、通常のローカル URI を取得し、ホスト名またはトランスポート名を追加することで形成されます。特別な場合として、remote の URI スキームを使用すると、リモートの libvirtd サーバーで、最適なハイパーバイザードライバーをプローブするように指示されます。これは、ローカル接続の NULL URI を渡すことに相当します。
driver[+transport]://[username@][hostname][:port]/path[?extraparameters]
- qemu://hostname/
- xen://hostname/
- xen+ssh://hostname/
リモート管理パラメーターの例
- SSH トランスポートと SSH ユーザー名
virtuser
を使用して、host2
という名前のリモート KVM ホストに接続します。それぞれの connect コマンドは connect [<name>] [--readonly] です。ここで、<name> はここで説明する有効な URI です。virsh connect コマンドの詳細については、「connect」 を参照してください。qemu+ssh://virtuser@hot2/
- TLS を使用して、
host2
という名前のホスト上のリモートの KVM ハイパーバイザーに接続します。qemu://host2/
テスト例
- 標準以外の UNIX ソケットを使用して、ローカルの KVM ハイパーバイザーに接続します。この場合は、UNIX ソケットの完全パスが明示的に指定されています。
qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock
- 暗号化されていない TCP/IP 接続を使用して、ポート 5000 の IP アドレス 10.1.1.10 のサーバーに libvirt デーモンを接続します。これは、デフォルト設定でテストドライバーを使用します。
test+tcp://10.1.1.10:5000/default
追加の URI パラメーター
リモートの URI には、追加のパラメーターを追加できます。以下の表 表5.1「追加の URI パラメーター」 では、認識されるパラメーターを説明します。その他のパラメーターはすべて無視されます。パラメーター値は URI エスケープする必要があります (つまり、パラメーターおよび特殊文字が URI 形式に変換される前に疑問符 (?) が追加されることを意味します)。
表5.1 追加の URI パラメーター
名前 | トランスポートモード | 説明 | 使用例 |
---|---|---|---|
name | すべてのモード | リモートの virConnectOpen 関数に渡される名前。名前は、通常、リモートの URI から transport、hostname、port number、username、および追加のパラメーターを削除して生成されますが、非常に複雑なケースでは、名前を明示的に指定することをお勧めします。 | name=qemu:///system |
command | ssh と ext | 外部コマンド。ext トランスポートの場合はこれが必要です。ssh の場合、デフォルトは ssh です。コマンド用に PATH が検索されます。 | command=/opt/openssh/bin/ssh |
socket | unix と ssh | UNIX ドメインソケットへのパスで、デフォルトを上書きします。ssh トランスポートの場合は、これがリモートの netcat コマンド (netcat を参照) に渡されます。 | socket=/opt/libvirt/run/libvirt/libvirt-sock |
netcat | ssh |
netcat コマンドを使用して、リモートシステムに接続できます。デフォルトの netcat パラメーターは nc コマンドを使用します。SSH トランスポートの場合、libvirt は以下の形式を使用して SSH コマンドを構築します。
command -p port [-l username ] hostname
netcat -U ソケット
port 、username 、および hostname パラメーターは、リモート URI の一部として指定できます。command 、netcat 、および socket は、他の追加パラメーターから取得されます。
| netcat=/opt/netcat/bin/nc |
no_verify | tls | ゼロ以外の値に設定すると、サーバーの証明書のクライアントチェックが無効になります。クライアントの証明書または IP アドレスのサーバーチェックを無効にするには、libvirtd 設定を変更する必要があります。 | no_verify=1 |
no_tty | ssh | 0 以外の値に設定すると、リモートマシンに自動的にログインできない場合に ssh がパスワードを要求できなくなります。ターミナル へのアクセスがない場合は、これを使用します。 | no_tty=1 |
第6章 KVM でのオーバーコミット
6.1. メモリーのオーバーコミット
6.2. 仮想 CPU のオーバーコミット
第7章 KSM
qemu-kvm
プロセスからメモリーのみが継承されます。ゲスト仮想マシンが実行されると、ゲストが同じオペレーティングシステムまたはアプリケーションを実行しているときに、ゲスト仮想マシンのオペレーティングシステムイメージのコンテンツを共有できます。
/sys/kernel/mm/ksm/merge_across_nodes
を 0
に変更して、NUMA ノード間でページがマージされないようにします。カーネルメモリーが計算した統計情報は、ノード間での大量のマージ後にはそれぞれの間で相反する場合があります。そのため、KSM デーモンが大量のメモリーをマージすると、numad が混乱する可能性があります。システムに未使用のメモリーが大量にあると、KSM デーモンをオフにして無効にすることでパフォーマンスが高まる場合があります。NUMA の詳細は、『Red Hat Enterprise Linux パフォーマンスチューニングガイド』 を参照してください。
ksm
サービスは、KSM カーネルスレッドを開始および停止します。ksmtuned
サービスはksm
を制御し、調整し、同じページのマージを動的に管理します。ksmtuned
サービスはksm
を開始し、メモリー共有が必要ない場合はksm
サービスを停止します。ksmtuned
サービスは、retune
新しいゲストが作成または破棄されたときに実行するパラメーター。
KSM サービス
ksm
サービスは qemu-kvm パッケージに含まれています。KSM は、Red Hat Enterprise Linux 6 ではデフォルトでオフになっています。ただし、Red Hat Enterprise Linux 6 を KVM ホスト物理マシンとして使用する場合は、ksm/ksmtuned
サービスによってオンにされる可能性があります。
ksm
サービスが開始されていない場合、KSM は 2000 ページのみを共有します。このデフォルトは低く、メモリー節約の利点は限られています。
ksm
サービスが開始されると、KSM はホスト物理マシンシステムのメインメモリーの最大半分を共有します。ksm
サービスを開始して、KSM がより多くのメモリーを共有できるようにしてください。
# service ksm start Starting ksm: [ OK ]
ksm
サービスは、デフォルトの起動シーケンスに追加できます。chkconfig コマンドを使用して、ksm
サービスを永続化します。
# chkconfig ksm on
KSM チューニングサービス
ksmtuned
サービスにはオプションがありません。ksmtuned
サービスは、ksm
をループして調整します。さらに、ゲスト仮想マシンが作成または破棄されると、ksmtuned
サービスに libvirt から通知されます。
# service ksmtuned start Starting ksmtuned: [ OK ]
ksmtuned
サービスは、retune
パラメーターを使用して調整できます。retune
パラメーターは、チューニング機能を手動で実行するように ksmtuned
に指示します。
thres
: アクティベーションキーのしきい値 (kbytes)KSM サイクルは、全thres
プロセス RSZ の合計にシステムメモリーの合計にqemu-kvm
値が追加されるとトリガーされます。このパラメーターは、KSM_THRES_COEF
で定義されたパーセンテージの kbytes と同じです。
/etc/ksmtuned.conf
ファイルは、ksmtuned
サービスの設定ファイルです。以下のファイル出力は、デフォルトの ksmtuned.conf
ファイルです。
# Configuration file for ksmtuned. # How long ksmtuned should sleep between tuning adjustments # KSM_MONITOR_INTERVAL=60 # Millisecond sleep between ksm scans for 16Gb server. # Smaller servers sleep more, bigger sleep less. # KSM_SLEEP_MSEC=10 # KSM_NPAGES_BOOST is added to thenpages
value, whenfree memory
is less thanthres
. # KSM_NPAGES_BOOST=300 # KSM_NPAGES_DECAY Value given is subtracted to thenpages
value, whenfree memory
is greater thanthres
. # KSM_NPAGES_DECAY=-50 # KSM_NPAGES_MIN is the lower limit for thenpages
value. # KSM_NPAGES_MIN=64 # KSM_NAGES_MAX is the upper limit for thenpages
value. # KSM_NPAGES_MAX=1250 # KSM_TRES_COEF - is the RAM percentage to be calculated in parameterthres
. # KSM_THRES_COEF=20 # KSM_THRES_CONST - If this is a low memory system, and thethres
value is less thanKSM_THRES_CONST
, then resetthres
value toKSM_THRES_CONST
value. # KSM_THRES_CONST=2048 # uncomment the following to enable ksmtuned debug information # LOGFILE=/var/log/ksmtuned # DEBUG=1
KSM 変数とモニターリング
KSM は、監視データを /sys/kernel/mm/ksm/
ディレクトリーに保存します。このディレクトリー内のファイルは、カーネルによって更新される、KSM の使用状況と統計の正確な記録です。
/etc/ksmtuned.conf
ファイルの設定可能な変数でもあります。
/sys/kernel/mm/ksm/
ファイル
- full_scans
- フルスキャンが実行されます。
- pages_shared
- 共有されたページの総数。
- pages_sharing
- 現在共有されているページ。
- pages_to_scan
- スキャンされていないページ。
- pages_unshared
- 共有されなくなったページ。
- pages_volatile
- 揮発性ページの数。
- run
- KSM プロセスが実行されているかどうか。
- sleep_millisecs
- スリープのミリ秒。
DEBUG=1
行が /etc/ksmtuned.conf
ファイルに追加された場合、KSM チューニングアクティビティーは /var/log/ksmtuned
ログファイルに保存されます。ログファイルの場所は、LOGFILE
パラメーターを使用して変更することができます。ログファイルの場所を変更することはお勧めできません。SELinux 設定の特別な設定が必要になる場合があります。
KSM の非アクティブ化
KSM にはパフォーマンスのオーバーヘッドがあり、特定の環境またはホストの物理マシンシステムには大きすぎる可能性があります。
ksmtuned
および ksm
サービスを停止することで非アクティブ化できます。サービスを停止すると KSM が非アクティブになりますが、再起動後も持続しません。
# service ksmtuned stop Stopping ksmtuned: [ OK ] # service ksm stop Stopping ksm: [ OK ]
# chkconfig ksm off # chkconfig ksmtuned off
第8章 高度なゲスト仮想マシン管理
8.1. コントロールグループ (cgroup)
8.2. Huge Page のサポート
はじめに
x86 CPU は通常、4kB ページのメモリーに対応しますが、Huge Page と呼ばれる大容量のページを使用できます。KVM ゲストは、Transaction Lookaside Buffer (TLB) に対する CPU キャッシュヒットを増やすことでパフォーマンスを向上させるために、Huge Page メモリーサポートを使用してデプロイできます。特に大容量メモリーとメモリーを大量に消費するワークロードなど、Huge Page によってパフォーマンスが大幅に向上する可能性があります。Red Hat Enterprise Linux 6 は、Huge Page を使用してページサイズを大きくすることにより、大量のメモリーをより効果的に管理できます。
Transparent Huge Pages
Transparent Huge Page (THP) は、アプリケーションに必要な TLB エントリーを減らすカーネル機能です。また、すべての空きメモリーをキャッシュとして使用するようにすることで、パフォーマンスが向上します。
qemu.conf
ファイルに特別な設定は必要ありません。/sys/kernel/mm/redhat_transparent_hugepage/enabled
が always に設定されている場合、Huge Page はデフォルトで使用されます。
hugetlbfs
機能の使用は妨げられません。ただし、hugetlbfs が使用されていない場合、KVM は通常の 4kB ページサイズの代わりに透過的な巨大ページを使用します。
8.3. Hyper-V ハイパーバイザーでのゲスト仮想マシンとしての Red Hat Enterprise Linux の実行
- VMBUS プロトコルのアップグレード - VMBUS プロトコルが Windows 8 レベルにアップグレードされました。この作業の一環として、ゲストで利用可能な全仮想 CPU で VMBUS 割り込みを処理できるようになりました。さらに、Red Hat Enterprise Linux ゲスト仮想マシンと Windows ホストの物理マシン間のシグナルプロトコルが最適化されています。
- 合成フレームバッファードライバー - Red Hat Enterprise Linux デスクトップユーザー向けのグラフィックパフォーマンスと優れた解決策を提供します。
- ライブ仮想マシンのバックアップサポート: ライブの Red Hat Enterprise Linux ゲスト仮想マシンの中断のないバックアップサポートをプロビジョニングします。
- 固定サイズの Linux VHD 動的拡張 - ライブマウントされた固定サイズ Red Hat Enterprise Linux VHD の拡張を可能にします。
8.4. ゲスト仮想マシンのメモリー割り当て
- バイトの場合は
b
またはbytes
になります。 - キロバイトの場合は、
KB
になります (10 3 または 1,000 バイトのブロック) - キビバイトの場合は
k
またはKiB
(2 10 または 1024 バイトのブロック) MB
メガバイトの場合 (10 6 または 1,000,000 バイトのブロック)- メビバイトの場合は
M
またはMiB
(220 または 1,048,576 バイトのブロック) GB
(ギガバイト) (109 または 1,000,000,000 バイトのブロック)- ギビバイトの場合は
G
またはGiB
(30 または 1,073,741,824 バイトのブロック) - エクサバイトの場合は
TB
(1012 または 1,000,000,000,000 バイト のブロック) - テビバイトの場合は
T
またはTiB
(2 40 または 1,099,511,627,776 のブロック)
memory unit
により決定されます。デフォルトは、測定単位としての KiB (キビバイト) になります。この値は、210 または 1024 バイトのブロックで乗算されます。
dumpCore
を使用して、ゲスト仮想マシンのメモリーを、生成されるコアダンプ (dumpCore='on'
) に含めるか (dumpCore='off'
) 含まないかを制御できます。デフォルト設定はon
したがって、パラメーターがに設定されていない場合off
、ゲスト仮想マシンのメモリーはコアダンプファイルに含まれます。
currentMemory
属性は、ゲスト仮想マシンの実際のメモリー割り当てを決定します。この値は最大割り当てよりも低くなり、ゲスト仮想マシンのメモリーを即座にバルーンアップすることができます。これを省略すると、デフォルトでは memory 要素と同じ値に設定されます。unit 属性の動作は、メモリーと同じです。
<domain> <memory unit='KiB' dumpCore='off'>524288</memory> <!-- changes the memory unit to KiB and does not allow the guest virtual machine's memory to be included in the generated coredump file --> <currentMemory unit='KiB'>524288</currentMemory> <!-- makes the current memory unit 524288 KiB --> ... </domain>
8.5. ゲスト仮想マシンの自動起動
TestServer
を設定して、ホストの物理マシンのブート時に自動的に起動します。
# virsh autostart TestServer
Domain TestServer marked as autostarted
--disable
パラメーターを使用します。
# virsh autostart --disable TestServer
Domain TestServer unmarked as autostarted
8.6. ゲスト仮想マシンの SMART ディスク監視の無効化
# service smartd stop # chkconfig --del smartd
8.7. VNC サーバーの設定
~/.vnc/xstartup
ファイルを作成してから編集し、vncserver が起動するたびに GNOME セッションを開始します。vncserver スクリプトの初回実行時に、VNC セッションに使用するパスワードの入力が求められます。vnc サーバーファイルの詳細は、『Red Hat Enterprise Linux インストールガイド』 を参照してください。
8.8. 新しい一意の MAC アドレスの生成
macgen.py
として保存します。これで、そのディレクトリーから ./macgen.py を使用してスクリプトを実行でき、新しい MAC アドレスが生成されます。出力の例を以下に示します。
$ ./macgen.py 00:16:3e:20:b0:11
#!/usr/bin/python # macgen.py script to generate a MAC address for guest virtual machines # import random # def randomMAC(): mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] return ':'.join(map(lambda x: "%02x" % x, mac)) # print randomMAC()
8.8.1. ゲスト仮想マシン用に新しい MAC を生成する別の方法
# echo 'import virtinst.util ; print\ virtinst.util.uuidToString(virtinst.util.randomUUID())' | python # echo 'import virtinst.util ; print virtinst.util.randomMAC()' | python
#!/usr/bin/env python # -*- mode: python; -*- print "" print "New UUID:" import virtinst.util ; print virtinst.util.uuidToString(virtinst.util.randomUUID()) print "New MAC:" import virtinst.util ; print virtinst.util.randomMAC() print ""
8.9. ゲスト仮想マシンの応答時間の改善
- 深刻なオーバーコミットされたメモリー。
- プロセッサーの使用率が高いオーバーコミットメモリー
- その他の (qemu-kvm プロセスではない) は、ホストの物理マシンのプロセスがビジー状態または停止している。
8.10. libvirt での仮想マシンタイマー管理
<clock>
要素は、ゲスト仮想マシンのクロックをホスト物理マシンのクロックと同期させる方法を決定するために使用されます。clock 要素には以下の属性があります。
offset
は、ゲスト仮想マシンのクロックがホストの物理マシンのクロックからどのようにオフセットされるかを決定します。offset 属性には、以下の値を使用できます。表8.1 offset 属性値
値 説明 utc ゲスト仮想マシンのクロックは、起動時に UTC に同期されます。 localtime ゲスト仮想マシンのクロックは、起動時にホストの物理マシンの設定済みタイムゾーンに同期されます (存在する場合)。 timezone ゲスト仮想マシンのクロックは、 timezone
属性で指定された特定のタイムゾーンに同期されます。variable ゲスト仮想マシンクロックは UTC の任意のオフセットに同期されます。UTC との相対的なデルタは、 adjustment
属性を使用して秒単位で指定します。ゲスト仮想マシンは、時間の経過とともにリアルタイムクロック (RTC) を自由に調整でき、次の再起動後にそれが受け入れられることを期待しています。これは、utc
モードとは対照的に、リブートごとに RTC の調整が失われます。注記値 utc は、デフォルトで仮想マシンのクロックオフセットとして設定されます。ただし、ゲスト仮想マシンのクロックを localtime の値で実行している場合は、ゲスト仮想マシンのクロックをホスト物理マシンのクロックと同期させるため、クロックオフセットを変更して別の値にする必要があります。timezone
属性は、ゲスト仮想マシンクロックに使用されるタイムゾーンを決定します。adjustment
属性は、ゲスト仮想マシンのクロック同期にデルタを提供します。秒単位で、UTC との相対パスになります。
例8.1 常に UTC に同期する
<clock offset="utc" />
例8.2 常にホストの物理マシンのタイムゾーンに同期する
<clock offset="localtime" />
例8.3 任意のタイムゾーンへの同期
<clock offset="timezone" timezone="Europe/Paris" />
例8.4 UTC + 任意のオフセットに同期する
<clock offset="variable" adjustment="123456" />
8.10.1. クロックのタイマー子要素
name
のみが必要で、他のすべての属性は任意です。
name
属性は使用する時間ソースの型を決定し、以下のいずれかになります。
表8.2 名前属性値
値 | 説明 |
---|---|
pit | Programmable Interval Timer - 周期的な割り込みがあるタイマーです。 |
rtc | Real Time Clock - 周期的な割り込みがある継続的に実行するタイマー。 |
tsc | Time Stamp Counter: リセットしてからのティック数をカウント、割り込みなし。 |
kvmclock | KVM クロック: KVM ゲスト仮想マシンの推奨されるクロックソース。KVM pvclock または kvm-clock を使用すると、ゲスト仮想マシンがホストの物理マシンのウォールクロックタイムを読み取ることができます。 |
8.10.2. track
track
属性はタイマーによって追跡されるものを指定します。rtc
の名前の値にのみ有効です。
表8.3 属性値を追跡する
値 | 説明 |
---|---|
boot | 古い ホストの物理マシン オプションに対応します。これはサポート対象外の追跡オプションです。 |
guest | RTC は常にゲスト仮想マシンの時間を追跡します。 |
wall | RTC は常にホスト時間を追跡します。 |
8.10.3. tickpolicy
tickpolicy
属性は、ゲスト仮想マシンにティックを渡すために使用されるポリシーを割り当てます。以下の値を使用できます。
表8.4 tickpolicy 属性値
値 | 説明 |
---|---|
delay | 通常のレートで配信を継続します (ティックが遅れます)。 |
catchup | キャッチアップするために、より高いレートで配信されます。 |
merge | ティックが 1 つのティックにマージされます。 |
discard | 不明なティックはすべて破棄されます。 |
8.10.4. 頻度、モード、および表示
frequency
属性は固定頻度を設定するために使用されます。Hz で測定されます。この属性は、name
要素に tsc
の値がある場合にのみ関連します。他のすべてのタイマーは固定周波数 (pit
、rtc
) で動作します。
mode
は、タイムソースがゲスト仮想マシンに公開される方法を決定します。この属性は、tsc
の name 値にのみ関係します。その他のタイマーは常にエミュレートされます。コマンドは以下のようになります。<timer name='tsc' frequency='NNN' mode='auto|native|emulate|smpsafe'/>モードの定義は表に記載されます。
表8.5 モード属性値
値 | 説明 |
---|---|
auto | TSC が不安定である場合はネイティブで、ネイティブの TSC アクセスを許可します。 |
native | 常にネイティブ TSC アクセスを許可します。 |
エミュレート | 常に TSC をエミュレートします。 |
smpsafe | 常に TSC およびインロック SMP をエミュレートします。 |
present
は、ゲスト仮想マシンに表示されるデフォルトのタイマーセットを上書きするために使用されます。
表8.6 present 属性値
値 | 説明 |
---|---|
はい | このタイマーがゲスト仮想マシンに表示されるよう強制します。 |
いいえ | このタイマーをゲスト仮想マシンに表示しないように強制します。 |
8.10.5. クロック同期の使用例
例8.5 RTC および PIT タイマーとローカルタイムに同期されるクロック
<clock offset="localtime"> <timer name="rtc" tickpolicy="catchup" track="guest virtual machine" /> <timer name="pit" tickpolicy="delay" /> </clock>
- ゲスト仮想マシンには 1 つの CPU のみを指定可能
- APIC タイマーを無効にする必要があります (noapictimer コマンドラインオプションを使用)
- ゲストで NoHZ モードを無効にする必要があります (nohz = off コマンドラインオプションを使用)
- ゲストでは高解像度タイマーモードを無効にする必要があります (highres = off コマンドラインオプションを使用)
- PIT クロックソースは、高解像度タイマーモードまたは NoHz モードと互換性がありません。
8.11. PMU を使用したゲスト仮想マシンのパフォーマンスの監視
# yum install perf.
8.12. ゲスト仮想マシン電源管理
... <pm> <suspend-to-disk enabled='no'/> <suspend-to-mem enabled='yes'/> </pm> ...
pm
S3 (ディスクへのサスペンド) および S4 (メモリーへのサスペンド) ACPI スリープ状態の BIOS サポートを有効 (はい) または無効 (いいえ) にします。何も指定しないと、ハイパーバイザーはデフォルト値のままになります。
第9章 ゲスト仮想マシンデバイスの設定
- Emulated devices は、実際のハードウェアを模倣する純粋な仮想デバイスであり、未変更のゲストオペレーティングシステムは標準のインボックスドライバーを使用して動作できるようにします。Red Hat Enterprise Linux 6 は、216 virtio デバイスまで対応します。
- VirtIO devices は、仮想マシンで最適に動作するように設計された仮想デバイスです。VirtIO デバイスはエミュレートされたデバイスと似ていますが、Linux 以外の仮想マシンには、デフォルトで必要となるドライバーは含まれません。Virtual Machine Manager (virt-manager) や Red Hat Virtualization Hypervisor などの仮想化管理ソフトウェアは、サポートされている Linux 以外のゲストオペレーティングシステム用にこれらのドライバーを自動的にインストールします。Red Hat Enterprise Linux 6 は、最大 700 の scsi ディスクに対応します。
- 割り当てられたデバイス は、仮想マシンに公開される物理デバイスです。このメソッドは passthrough としても知られています。デバイスの割り当てにより、仮想マシンはさまざまなタスクで PCI デバイスに排他的にアクセスできるようになり、PCI デバイスがゲストオペレーティングシステムに物理的に接続されているかのように見え、動作します。Red Hat Enterprise Linux 6 は、仮想マシンごとに割り当てられたデバイスを最大 32 個までサポートします。
/etc/security/limits.conf
で設定され、/etc/libvirt/qemu.conf
でオーバーライドできます)。他の制限要因には、仮想バスで利用可能なスロット数や、sysctl で設定されたオープンファイルのシステム全体の制限が含まれます。
allow_unsafe_interrupts
vfio_iommu_type1
モジュールへのオプションを使用して引き続き PCI デバイスの割り当てを許可することを選択できます。これは、以下を含む /etc/modprobe.d
に .conf ファイル (local.conf
など) を追加することで、永続的に実行できます。
options vfio_iommu_type1 allow_unsafe_interrupts=1または sysfs エントリーを使用して動的に同じことを行います。
# echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts
9.1. PCI デバイス
手順9.1 PCI デバイス割り当てのための Intel システムの準備
Intel VT-d 仕様を有効にする
Intel VT-d 仕様では、物理デバイスを仮想マシンに直接割り当てるハードウェアサポートが提供されます。この仕様は、Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するために必要です。Intel VT-d 仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。これらの仕様を表示するのに使用される用語はメーカーにより異なります。適切な用語は、システムの製造元のドキュメントを参照してください。カーネルで Intel VT-d をアクティブにします。
/etc/sysconfig/grub
ファイル内の GRUB_CMDLINX_LINUX 行の末尾に、引用符で囲んでintel_iommu=on
パラメーターおよび iommu=pt パラメーターを追加して、カーネル内で Intel VT-d をアクティブにします。以下は、Intel VT-d を有効にした修正grub
です。GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/ rhcrashkernel-param || :) rhgb quiet intel_iommu=on"
設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
手順9.2 PCI デバイス割り当て用の AMD システムの準備
AMD IOMMU 仕様を有効にする
Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するには、AMD IOMMU の仕様が必要です。この仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。IOMMU カーネルサポートの有効化
システムの起動時に AMD IOMMU 仕様が有効になるように、/etc/sysconfig/grub
の GRUB_CMDLINX_LINUX 行の末尾に引用符で囲ってamd_iommu=on
を追加します。設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
9.1.1. virsh を使用した PCI デバイスの割り当て
pci_0000_01_00_0
、および完全に仮想化されたゲストマシン guest1-rhel6-64 を持つ PCIe ネットワークコントローラーを使用します。
手順9.3 virsh を使用した PCI デバイスのゲスト仮想マシンへの割り当て
デバイスの識別
まず、仮想マシンへのデバイス割り当てに指定されている PCI デバイスを特定します。使用可能な PCI デバイスの一覧を表示する場合は、lspci コマンドを実行します。grep を使用して、lspci の出力を絞り込むことができます。この例では、以下の出力で強調表示されているイーサネットコントローラーを使用します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
このイーサネットコントローラーは、短い識別子00:19.0
で表示されます。この PCI デバイスを仮想マシンに割り当てるには、virsh が使用する完全な ID を確認する必要があります。これを行うには、virsh nodedev-list コマンドを使用して、ホストマシンに接続されている特定タイプ (pci
) のデバイスをすべて一覧表示します。次に、使用するデバイスの短い識別子にマップする文字列の出力を調べます。この例では、短い識別子00:19.0
を使用して、イーサネットコントローラーにマップする文字列を示しています。この例では、:
と.
が、完全な識別子では、文字はアンダースコアに置き換えられます。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
使用するデバイスにマップする PCI デバイス番号を記録します。これは別の手順で必要になります。デバイス情報の確認
ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。virsh nodedev-dumpxml pci_0000_00_19_0 <device> <name>pci_0000_00_19_0</name> <parent>computer</parent> <driver> <name>e1000e</name> </driver> <capability type='pci'> <domain>0</domain> <bus>0</bus> <slot>25</slot> <function>0</function> <product id='0x1502'>82579LM Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループは、IOMMU からの視認性とデバイスの分離に基づいて決定されます。各 IOMMU グループには、1 つ以上のデバイスを含めることができます。複数のデバイスが存在する場合は、グループ内のすべてのデバイスがゲストに割り当てられるため、IOMMU グループ内のすべてのエンドポイントが要求されます。これは、追加のエンドポイントをゲストに割り当てるか、virsh nodedev-detach を使用してホストドライバーから外すことで実行できます。1 つのグループに含まれるデバイスが複数のゲストに分割されたり、ホストとゲストが分割されたりすることはありません。PCIe root ポート、スイッチポート、ブリッジなどのエンドポイント以外のデバイスは、ホストドライバーから分離しないでください。また、エンドポイントの割り当てに影響を及ぼしません。IOMMU グループ内のデバイスは、virsh nodedev-dumpxml 出力の IOMMU グループセクションを使用して決定できます。グループの各メンバーは、別のアドレスフィールドで提供されます。この情報は、sysfs で以下を使用して取得することもできます。$ ls /sys/bus/pci/devices/0000:01:00.0/iommu_group/devices/
この出力の例を以下に示します。0000:01:00.0 0000:01:00.1
ゲストに 0000.01.00.0 のみを割り当てるには、ゲストを起動する前に、使用されていないエンドポイントをホストから分離する必要があります。$ virsh nodedev-detach pci_0000_01_00_1
必要な設定の詳細を決定する
設定ファイルに必要な値は、virsh nodedev-dumpxml pci_0000_00_19_0 コマンドの出力を参照してください。この例のデバイスは、bus = 0、slot = 25、および function = 0 の値を持ちます。10 進数の設定では、この 3 つの値が使用されます。bus='0' slot='25' function='0'
設定の詳細の追加
virsh edit を実行し、仮想マシン名を指定し、<source>
セクションにデバイスエントリーを追加して、PCI デバイスをゲスト仮想マシンに割り当てます。# virsh edit guest1-rhel6-64 <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0' bus='0' slot='25' function='0'/> </source> </hostdev>
または、virsh attach-device を実行して、仮想マシンの名前とゲストの XML ファイルを指定します。virsh attach-device guest1-rhel6-64
file.xml
仮想マシンの起動
# virsh start guest1-rhel6-64
9.1.2. virt-manager を使用した PCI デバイスの割り当て
手順9.4 virt-manager を使用した PCI デバイスのゲスト仮想マシンへの割り当て
ハードウェア設定を開く
ゲスト仮想マシンを開き、Add Hardware をクリックして、仮想マシンに新しいデバイスを追加します。図9.1 仮想マシンのハードウェア情報ウィンドウ
PCI デバイスの選択
左側の Hardware 一覧から PCI Host Device を選択します。未使用の PCI デバイスを選択します。別のゲストが使用している PCI デバイスを選択すると、エラーが発生する可能性があります。この例では、予備の 82576 ネットワークデバイスが使用されています。Finish を選択して設定を完了します。図9.2 Add new virtual hardware ウィザード
新しいデバイスの追加
セットアップが完了し、ゲスト仮想マシンが PCI デバイスに直接アクセスできるようになりました。図9.3 仮想マシンのハードウェア情報ウィンドウ
9.1.3. virt-install を使用した PCI デバイスの割り当て
--host-device
パラメーターを使用します。
手順9.5 virt-install を使用した、仮想マシンへの PCI デバイスの割り当て
デバイスの識別
ゲスト仮想マシンにデバイス割り当てに指定されている PCI デバイスを特定します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
virsh nodedev-list コマンドは、システムに接続されているすべてのデバイスの一覧を表示し、各 PCI デバイスを文字列で識別します。出力を PCI デバイスのみに制限するには、次のコマンドを実行します。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
PCI デバイス番号を記録します。この番号は他の手順で確認する必要があります。ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。# virsh nodedev-dumpxml pci_0000_01_00_0 <device> <name>pci_0000_01_00_0</name> <parent>pci_0000_00_01_0</parent> <driver> <name>igb</name> </driver> <capability type='pci'> <domain>0</domain> <bus>1</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>82576 Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループに複数のエンドポイントがあり、そのすべてがゲストに割り当てられていない場合は、ゲストを起動する前に次のコマンドを実行して、ホストからその他のエンドポイントの割り当てを手動で解除する必要があります。$ virsh nodedev-detach pci_0000_00_19_1
IOMMU グループの詳細は、「virsh を使用した PCI デバイスの割り当て」 の 注記 を参照してください。デバイスの追加
virshnodedev コマンドから出力された PCI 識別子を--host-device
パラメーターの値として使用します。virt-install \ --name=guest1-rhel6-64 \ --disk path=/var/lib/libvirt/images/guest1-rhel6-64.img,size=8 \ --nonsparse --graphics spice \ --vcpus=2 --ram=2048 \ --location=http://example1.com/installation_tree/RHEL6.0-Server-x86_64/os \ --nonetworks \ --os-type=linux \ --os-variant=rhel6 --host-device=pci_0000_01_00_0
インストールを完了する
ゲストのインストールを完了します。PCI デバイスはゲストに接続する必要があります。
9.1.4. 割り当てられた PCI デバイスの取り外し
手順9.6 virsh を使用したゲストからの PCI デバイスの切り離し
デバイスの取り外し
次のコマンドを使用して、ゲストの XML ファイルから PCI デバイスを削除し、ゲストから PCI デバイスを切り離します。# virsh detach-device name_of_guest file.xml
デバイスをホストに再接続します (オプション)。
デバイスがmanaged
モードにある場合は、この手順を省略します。デバイスは自動的にホストに戻ります。デバイスがmanaged
モードを使用していない場合は、以下のコマンドを使用して PCI デバイスをホストマシンに再接続します。# virsh nodedev-reattach device
たとえば、pci_0000_01_00_0
デバイスーをホストコンピューターに再接続するには、次のコマンドを実行します。virsh nodedev-reattach pci_0000_01_00_0
これで、デバイスがホストで使用できるようになります。
手順9.7 virt-manager を使用したゲストからの PCI デバイスの切り離し
仮想ハードウェアの詳細画面を開きます。
virt-manager で、デバイスを含む仮想マシンをダブルクリックします。Show virtual hardware details ボタンを選択すると、仮想ハードウェアの一覧が表示されます。図9.4 仮想ハードウェアの詳細ボタン
デバイスを選択して削除する
左側のパネルにある仮想デバイスの一覧から、取り外す PCI デバイスを選択します。図9.5 取り外す PCI デバイスの選択
Remove ボタンをクリックして確定します。これで、デバイスがホストで使用できるようになります。
9.1.5. PCI ブリッジの作成
9.1.6. PCI パススルー
<source>
要素で指定される PCI ネットワークデバイスは、ジェネリックデバイスパススルーを使用してゲストに直接割り当てられます。このデバイスの MAC アドレスは、最初にオプションで設定された値に設定され、そのデバイスの MAC アドレスがオプションで指定された virtualport 要素を使用して 802.1Qbh 対応スイッチに関連付けられます (<type='direct'>
ネットワークデバイスの場合は、上記の仮想ポートの例を参照してください)。標準的なシングルポートの PCI イーサネットカードドライバー設計の制限により、この方法で割り当てることができるのは Single Root I/O Virtualization (SR-IOV) virtual function (VF) デバイスのみとなります。標準的なシングルポートの PCI または PCIe イーサネットカードをゲストに割り当てる場合は、従来の <hostdev>
デバイス定義を使用します。
<type='hostdev'>
インターフェイスは name 属性を持つオプションのドライバーサブ要素を持つことができます vfio に設定します。従来の KVM デバイス割り当てを使用するには、名前を kvm に設定できます (または、現在、<driver ='kvm'>
がデフォルトであるため、単に <driver>
要素を省略します)。
<hostdev>
デバイスの機能と非常に似ています。相違点は、パススルーデバイスに MAC アドレスと<virtualport>
を指定できることです。これらの機能が必要ない場合、SR-IOV をサポートしない標準のシングルポート PCI、PCIe、または USB ネットワークカードを使用している場合 (したがって、ゲストドメインに割り当てられた後、リセット中に設定された MAC アドレスが失われます)、または 0.9.11 より前のバージョンの libvirt を使用している場合は、<interface type='hostdev'/>
の代わりに、標準の <hostdev>
を使用してデバイスをゲストに割り当てる必要があります。
図9.6 PCI デバイスの割り当ての XML 例
<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>
9.1.7. SR-IOV デバイスを使用した PCI 割り当て (パススルー) の設定
<hostdev>
要素を使用して割り当てることができますが、SR-IOV VF ネットワークデバイスには永続的な一意の MAC アドレスがないため、ホストの物理マシンを再起動するたびにゲスト仮想マシンのネットワーク設定を再設定する必要があります。これを解決するには、VF をホスト物理マシンに割り当てる前に MAC アドレスを設定する必要があり、ゲスト仮想マシンが起動するたびにこれを設定する必要があります。この MAC アドレスやその他のオプションを割り当てるには、手順9.8「SR-IOV で PCI デバイスを割り当てる MAC アドレス、vLAN、および仮想ポートの設定」の手順を参照してください。
手順9.8 SR-IOV で PCI デバイスを割り当てる MAC アドレス、vLAN、および仮想ポートの設定
<mac>
、<vlan>
、および <virtualport>
要素は <hostdev>
の有効な子ではないため、<hostdev>
要素は MAC アドレス割り当て、vLAN タグ ID 割り当て、仮想ポート割り当てなどの機能固有の項目には使用できないことに注意してください。これらは <インターフェイス>
で有効であるため、新しいインターフェイスタイプのサポートが追加されました (<interface type='hostdev'>
)。この新しいインターフェイスデバイスタイプは、<インターフェイス>
と <hostdev>
のハイブリッドとして動作します。そのため、libvirt は、ゲスト仮想マシンに PCI デバイスを割り当てる前に、ゲスト仮想マシンの XML 設定ファイルに示されているネットワーク固有のハードウェア/スイッチを初期化します (MAC アドレスの設定、vLAN タグの設定、802.1Qbh スイッチへの関連付けなど)。vLAN タグの設定に関する詳細は、「vLAN タグの設定」 を参照してください。
ゲスト仮想マシンをシャットダウンします。
virsh shutdown コマンドの使用 (「ゲスト仮想マシンのシャットダウン」 を参照)、guestVM という名前のゲスト仮想マシンをシャットダウンします。# virsh shutdown guestVM
情報の収集
<interface type='hostdev'>
を使用するには、SR-IOV 対応のネットワークカード、Intel VT-d 拡張機能または AMD IOMMU 拡張機能に対応するホストの物理マシンハードウェアが必要で、割り当てる VF の PCI アドレスを把握している必要があります。編集する XML ファイルを開く
# virsh save-image-edit コマンドを実行し、XML ファイルを編集用に開きます (詳細は 「ドメイン XML 設定ファイルの編集」 を参照してください)。ゲスト仮想マシンを以前の実行状態に復元する必要があるため、この場合は--running
が使用されます。この例の設定ファイルの名前は guestVM.xml です。ゲスト仮想マシンの名前は guestVM です。# virsh save-image-edit guestVM.xml
--running
guestVM.xmlがデフォルトのエディターで開きます。XML ファイルの編集
設定ファイル (guestVM.xml) を更新して、以下のような<devices>
エントリーが表示されるようにします。図9.7 hostdev インターフェイスタイプのサンプルドメイン XML
<devices> ... <interface type='hostdev' managed='yes'> <source> <address type='pci' domain='0x0' bus='0x00' slot='0x07' function='0x0'/> <!--these values can be decimal as well--> </source> <mac address='52:54:00:6d:90:02'/> <!--sets the mac address--> <virtualport type='802.1Qbh'> <!--sets the virtual port for the 802.1Qbh switch--> <parameters profileid='finance'/> </virtualport> <vlan> <!--sets the vlan tag--> <tag id='42'/> </vlan> </interface> ... </devices>
MAC アドレスを指定しないと、その他のタイプのインターフェイスデバイスと同様に、MAC アドレスが自動的に生成されることに注意してください。また、<virtualport>
要素は、802.11Qgh ハードウェアスイッチ(802.11Qbg)に接続する場合にのみ使用されます。"VEPA")スイッチは現在サポートされていません。ゲスト仮想マシンの再起動
virsh start コマンドを実行して、最初の手順でシャットダウンしたゲスト仮想マシンを再起動します (例では、ゲスト仮想マシンのドメイン名として guestVM を使用します)。詳細は、「定義済みドメインの開始」 を参照してください。# virsh start guestVM
ゲスト仮想マシンは起動時に、設定された MAC アドレスを持つ、物理ホストマシンのアダプターにより提供されたネットワークデバイスを認識します。この MAC アドレスは、ゲスト仮想マシンやホストの物理マシンを再起動しても変更されません。
9.1.8. SR-IOV 仮想機能のプールからの PCI デバイス割り当ての設定
- 指定の VF は、ゲスト仮想マシンが起動したときにいつでも利用できる必要があります。つまり、管理者は、各 VF を 1 つのゲスト仮想マシンに永続的に割り当てる必要があります (または、各ゲスト仮想マシンの設定ファイルを変更して、ゲスト仮想マシンが起動するたびに現在使用されていない VF の PCI アドレスを指定します)。
- ゲスト仮想マシンを別のホスト物理マシンに移動する場合は、そのホスト物理マシンのハードウェアが PCI バス上の同じ場所にある必要があります (または、ゲスト仮想マシンの設定を起動前に変更する必要があります)。
手順9.9 デバイスプールの作成
ゲスト仮想マシンをシャットダウンします。
virsh shutdown コマンドの使用 (「ゲスト仮想マシンのシャットダウン、再起動、および強制シャットダウン」 を参照)、guestVM という名前のゲスト仮想マシンをシャットダウンします。# virsh shutdown guestVM
設定ファイルの作成
任意のエディターを使用して、/tmp
ディレクトリーに XML ファイル (名前は passthrough.xml など) を作成します。pf dev='eth3'
を、ご使用の SR-IOV デバイスの PF の netdev 名に置き換えてください。以下は、ホスト物理マシンの "eth3' にある physical function (PF) を持つ SR-IOV アダプターのすべての VF のプールを使用できるようにするネットワーク定義の例です。図9.8 サンプルのネットワーク定義ドメイン XML
<network> <name>passthrough</name> <!--This is the name of the file you created--> <forward mode='hostdev' managed='yes'> <pf dev='myNetDevName'/> <!--Use the netdev name of your SR-IOV devices PF here--> </forward> </network>
新しい XML ファイルの読み込み
/tmp/passthrough.xml を、前の手順で作成した XML ファイルの名前と場所に置き換え、次のコマンドを実行します。# virsh net-define /tmp/passthrough.xml
ゲストの再起動
以下の passthrough.xml を、前の手順で作成した XML ファイルの名前に置き換えます。# virsh net-autostart passthrough # virsh net-start passthrough
ゲスト仮想マシンの再起動
virsh start コマンドを実行して、最初の手順でシャットダウンしたゲスト仮想マシンを再起動します (例では、ゲスト仮想マシンのドメイン名として guestVM を使用します)。詳細は、「定義済みドメインの開始」 を参照してください。# virsh start guestVM
デバイスのパススルーの開始
表示されているデバイスは 1 つだけですが、libvirt は、ゲスト仮想マシンが次のようなドメイン XML のインターフェイス定義で初めて起動されたときに、その PF に関連付けられているすべての VF のリストを自動的に取得します。図9.9 インターフェイスネットワーク定義のサンプルドメイン XML
<interface type='network'> <source network='passthrough'> </interface>
検証
ネットワークを使用する最初のゲストを起動したら、virsh net-dumpxml passthrough コマンドを実行し、これを確認できます。以下のような出力が得られます。図9.10 XML ダンプファイルのpassthroughコンテンツ
<network connections='1'> <name>passthrough</name> <uuid>a6b49429-d353-d7ad-3185-4451cc786437</uuid> <forward mode='hostdev' managed='yes'> <pf dev='eth3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x1'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x5'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x10' function='0x7'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x1'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x3'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x11' function='0x5'/> </forward> </network>
9.2. USB デバイス
9.2.1. ゲスト仮想マシンへの USB デバイスの割り当て
- USB パススルーを使用する - これにより、デバイスが、ゲスト仮想マシンをホストしているホストの物理マシンに物理的に接続されます。この場合は SPICE は必要ありません。ホストの USB デバイスは、コマンドラインまたは virt-manager を使用してゲストに渡すことができます。virt manager の方向については、「ゲスト仮想マシンへの USB デバイスの接続」 を参照してください。注記virt-manager は、ホットプラグまたはホットアンプラグデバイスに使用しないでください。USB デバイスをホットプラグまたはホットアンプラグする場合は、手順14.1「ゲスト仮想マシンが使用するホットプラグ USB デバイス」 を参照してください。
- USB リダイレクトの使用 - USB リダイレクトは、データセンターで実行されているホスト物理マシンがある場合に最適です。ユーザーは、ローカルマシンまたはシンクライアントからゲスト仮想マシンに接続します。このローカルマシンには SPICE クライアントがあります。ユーザーは、任意の USB デバイスをシンクライアントに接続できます。SPICE クライアントは、デバイスをデータセンターのホスト物理マシンにリダイレクトするため、シンクライアントで実行しているゲスト仮想マシンで使用できます。virt-manager を使用した USB リダイレクトの手順については、「ゲスト仮想マシンへの USB デバイスの接続」 を参照してください。TCP プロトコルを使用した USB リダイレクトはできないことに注意してください (BZ#1085318 を参照)。
9.2.2. USB デバイスリダイレクトの制限の設定
-device usb-redir
に渡します。filter プロパティーは、フィルタールールで設定される文字列を取ります。ルールの形式は以下のとおりです。
<class>:<vendor>:<product>:<version>:<allow>
-1
の値を使用して、特定のフィールドに任意の値を受け入れるように指定します。同じコマンドラインで、| を区切り文字として使用し、複数のルールを使用できます。
例9.1 Windows ゲスト仮想マシンを使用したリダイレクトを制限する例
- Windows 7 ゲスト仮想マシンを準備します。
- 以下のコード抜粋をゲスト仮想マシンのドメイン xml ファイルに追加します。
<redirdev bus='usb' type='spicevmc'> <alias name='redir0'/> <address type='usb' bus='0' port='3'/> </redirdev> <redirfilter> <usbdev class='0x08' vendor='0x1234' product='0xBEEF' version='2.0' allow='yes'/> <usbdev class='-1' vendor='-1' product='-1' version='-1' allow='no'/> </redirfilter>
- ゲスト仮想マシンを起動し、次のコマンドを実行して設定の変更を確認します。
#ps -ef | grep $guest_name
-device usb-redir,chardev=charredir0,id=redir0,/ filter=0x08:0x1234:0xBEEF:0x0200:1|-1:-1:-1:-1:0,bus=usb.0,port=3
- USB デバイスをホストの物理マシンに接続し、virt-manager を使用してゲスト仮想マシンに接続します。
- メニューで Redirect USB Service をクリックすると、Some USB devices are blocked by host policy というメッセージが表示されます。OK をクリックして確定し、続行します。フィルターが有効になります。
- フィルターが正しくキャプチャーされていることを確認するには、USB デバイスのベンダーと製品を確認してから、USB リダイレクトを可能にするために、テストの仮想マシンのドメイン XML で次の変更を行います。
<redirfilter> <usbdev class='0x08' vendor='0x0951' product='0x1625' version='2.0' allow='yes'/> <usbdev allow='no'/> </redirfilter>
- ゲスト仮想マシンを再起動してから、virt-viewer を使用してゲスト仮想マシンに接続します。これで、USB デバイスはトラフィックをゲスト仮想マシンにリダイレクトするようになります。
9.3. デバイスコントローラーの設定
図9.11 仮想コントローラーのドメイン XML の例
... <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> ... </devices> ...
<controller type>
があり、これは次のいずれかになります。
- ide
- fdc
- scsi
- sata
- usb
- ccid
- virtio-serial
- pci
<controller>
要素には必須の属性 <controller index>
があります。これは、バスコントローラーが発生した順序を表す 10 進数の整数です (<address>
要素のコントローラー属性で使用されます)。<controller type ='virtio-serial'>
には、追加のオプション属性 (ports
および vectors
) が 2 つあります。これは、コントローラーを介して接続できるデバイスの数を制御します。Red Hat Enterprise Linux 6 は、デバイスあたり 32 を超えるベクターの使用をサポートしていないことに注意してください。よりベクトルを使用すると、ゲスト仮想マシンの移行でエラーが発生します。
<controller type ='scsi'>
の場合、以下の値を持つことができる任意の属性model
モデルがあります。
- auto
- buslogic
- ibmvscsi
- lsilogic
- lsisas1068
- lsisas1078
- virtio-scsi
- vmpvscsi
<controller type ='usb'>
の場合、以下の値を持つことができる任意の属性model
モデルがあります。
- piix3-uhci
- piix4-uhci
- ehci
- ich9-ehci1
- ich9-uhci1
- ich9-uhci2
- ich9-uhci3
- vt82c686b-uhci
- pci-ohci
- nec-xhci
<model='none'>
を使用できます。 .
<address>
は、「デバイスのアドレスの設定」 に示したセマンティクスを使用して、コントローラーとマスターバスの正確な関係を指定できます。
<driver>
は、ドライバー固有のオプションを指定できます。現在、コントローラーのキューの数を指定する属性キューのみをサポートしています。パフォーマンスを最適化するには、vCPU の数に一致する値を指定することが推奨されます。
<master>
があります。コンパニオンコントローラーはマスターと同じバスにあるため、コンパニオン index
は等しい値になります。
図9.12 USB コントローラーのドメイン XML の例
... <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> ...
model
属性があります。
- pci-root
- pcie-root
- pci-bridge
- dmi-to-pci-bridge
pci-root
および pcie-root
) には、64 ビット PCI ホールの大きさ (キロバイト単位、または pcihole64
の unit
属性で指定された単位) を指定するオプションの pcihole64
要素があります。一部のゲスト仮想マシン (Windows Server 2003) は、unit
が無効になっていない限り (0 unit='0'
に設定)、クラッシュを引き起こす可能性があります。
index='0'
を使用する pci-root コントローラーは自動追加され、PCI デバイスを使用する必要があります。pci-root にはアドレスがありません。PCI ブリッジは、model='pci-root'
が提供する 1 つのバスに収まらないデバイスが多すぎる場合、または 0 を超える PCI バス番号が指定されている場合に自動追加されます。PCI ブリッジは手動で指定することもできますが、そのアドレスには、指定されている PCI コントローラーが提供する PCI バスのみが表示されるようにしてください。PCI コントローラーインデックスにギャップがあると、設定が無効になる場合があります。以下の XML サンプルは、<devices>
セクションに追加できます。
図9.13 PCI ブリッジのドメイン XML の例
... <devices> <controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='1' model='pci-bridge'> <address type='pci' domain='0' bus='0' slot='5' function='0' multifunction='off'/> </controller> </devices> ...
index='0'
を使用する pcie-root コントローラーはドメインの設定に自動的に追加されます。pcie-root にはアドレスはありませんが、31 スロット (1-31 の番号) を提供し、PCIe デバイスの接続にのみ使用できます。pcie-root コントローラーを持つシステムで標準的な PCI デバイスを接続するには、model='dmi-to-pci-bridge'
を持つ pci コントローラーが自動的に追加されます。dmi-to-pci-bridge コントローラーは、(pcie-root が提供するように) PCIe スロットに接続し、それ自体で 31 個の標準的な PCI スロットを提供します (これはホットプラグできません)。ゲストシステムにホットプラグ可能な PCI スロットを確保するために、pci-bridge コントローラーも自動的に作成され、自動作成された dmi-to-pci-bridge コントローラーのスロットの 1 つに接続されます。PCI アドレスが libvirt により自動決定されるすべてのゲストデバイスは、この pci-bridge デバイスに配置されます。
図9.14 PCIe (PCI express) のようなドメイン XML
... <devices> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='dmi-to-pci-bridge'> <address type='pci' domain='0' bus='0' slot='0xe' function='0'/> </controller> <controller type='pci' index='2' model='pci-bridge'> <address type='pci' domain='0' bus='1' slot='1' function='0'/> </controller> </devices> ...
9.4. デバイスのアドレスの設定
<address>
サブ要素があります。入力でアドレス (またはアドレス内の任意の属性) が省略された場合 libvirt は適切なアドレスを生成します。レイアウトをさらに制御する必要がある場合は明示的なアドレスが必要になります。<address>
要素を含むドメイン XML デバイスの例は、図9.6「PCI デバイスの割り当ての XML 例」 を参照してください。
type
があります。特定のデバイスに使用するアドレスの選択は、デバイスやゲスト仮想マシンのアーキテクチャーによって一部が制約されます。たとえば、<disk>
デバイスは type='drive'
を使用し、<console>
デバイスは i686 または x86_64 ゲスト仮想マシンアーキテクチャー で type='pci'
を使用します。各アドレスタイプには、表に記載されているように、バス上のどこにデバイスを配置するかを制御するオプションの属性がさらにあります。
表9.1 サポートされているデバイスのアドレスタイプ
アドレスの種類 | 説明 |
---|---|
type='pci' | PCI アドレスには、以下の追加属性があります。
|
type='drive' | ドライブアドレスには、以下の追加属性があります。
|
type='virtio-serial' | 各 virtio-serial アドレスには、以下の追加属性があります。
|
type='ccid' | スマートカード用の CCID アドレスには、以下の追加属性があります。
|
type='usb' | USB アドレスには、以下の追加属性があります。
|
type='isa' | ISA アドレスには、以下の追加属性があります。
|
9.5. ゲスト仮想マシンでのストレージコントローラーの管理
- virtio-scsi コントローラーを介して仮想ハードドライブまたは CD を接続します。
- QEMU scsi-block デバイスを介してホストからゲストに物理 SCSI デバイスをパススルーします。
- ゲストごとに数百台のデバイスを使用できるようにします。virtio-blk の 28 デバイスの制限からの改善。
手順9.10 仮想 SCSI コントローラーの作成
- ゲスト仮想マシン (
Guest1
) の設定を表示し、以前から存在している SCSI コントローラーを検索します。# virsh dumpxml Guest1 | grep controller.*scsi
デバイスコントローラーが存在する場合は、このコマンドにより、次のような行が 1 つ以上出力されます。<controller type='scsi' model='virtio-scsi' index='0'/>
- 前の手順でデバイスコントローラーが表示されなかった場合は、以下の手順に従って、新しいファイルにデバイスコントローラーの説明を作成し、仮想マシンに追加します。
- 新しいファイルに
<controller>
要素を書き込んでデバイスコントローラーを作成し、このファイルに XML 拡張子で保存します。virtio-scsi-controller.xml
など。<controller type='scsi' model='virtio-scsi'/>
virtio-scsi-controller.xml
で作成したデバイスコントローラーをゲスト仮想マシン (例: Guest1) に関連付けます。# virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
この例では、--config
オプションはディスクと同じように動作します。詳細は、手順13.2「ゲストへの物理ブロックデバイスの追加」 を参照してください。
- 新しい SCSI ディスクまたは CD-ROM を追加します。新しいディスクは、「 ゲストへのファイルベースストレージの追加」 セクションおよび 「ゲストへのハードドライブおよびその他のブロックデバイスの追加」 セクションの方法を使用して追加できます。SCSI ディスクを作成する場合は、sd で始まるターゲットデバイス名を指定します。
# virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img sdb --cache none
ゲスト仮想マシンのドライバーのバージョンによっては、実行中のゲスト仮想マシンで新しいディスクがすぐに検出されない場合があります。『Red Hat Enterprise Linux Storage Administration Guide』 の手順に従います。
9.6. 乱数ジェネレーター (RNG) デバイス
virtio-rng
は、仮想 RNG (random number generator) デバイスであり、RNG データをゲスト仮想マシンのオペレーティングシステムにフィードします。これにより、要求に応じてゲスト仮想マシンに新しいエントロピーを提供します。
virtio-rng
が有効になっている場合、chardev はゲスト仮想マシンの /dev/hwrng/
の場所に作成されます。次に、この文字 dev を開いて読み取り、ホストの物理マシンからエントロピーをフェッチできます。ゲスト仮想マシンのアプリケーションが virtio-rng デバイスからのランダム性を透過的に使用することで利益を得るには、/dev/hwrng/
からの入力をゲスト仮想マシンのカーネルエントロピープールに中継する必要があります。これは、この場所の情報が rgnd デーモン (rng-tools 内に含まれている) と結合されている場合に実行できます。
/dev/random
ファイルにルーティングされます。このプロセスは、Red Hat Enterprise Linux 6 ゲスト仮想マシンで手動で行います。
# rngd -b -r /dev/hwrng/ -o /dev/random/
viorng
をインストールする必要があります。インストールが完了すると、仮想 RNG デバイスは Microsoft が提供する CNG(手動生成)API を使用して機能します。ドライバーがインストールされると、virtrng
デバイスが RNG プロバイダーのリストに表示されます。
手順9.11 コマンドラインツールでの virtio-rng の実装
- ゲスト仮想マシンをシャットダウンします。
- ターミナルウィンドウで、virsh edit domain-name コマンドを使用して、目的のゲスト仮想マシンの XML ファイルを開きます。
<devices>
要素を編集して、以下の内容を追加します。... <devices> <rng model='virtio'> <rate period="2000" bytes="1234"/> <backend model='random'>/dev/random</backend> <source mode='bind' service='1234'> <source mode='connect' host='192.0.2.1' service='1234'> </backend> </rng> </devices> ...
第10章 qemu-img および QEMU ゲストエージェント
/usr/share/doc/qemu-*/README.systemtap
。
10.1. qemu-img の使用
チェック
ディスクイメージの filename で整合性チェックを実行します。
# qemu-img check -f qcow2 --output=qcow2 -r all filename-img.qcow2
qcow2
および vdi
形式のみが整合性チェックに対応します。
-r
を使用すると、チェック中に見つかった不整合を修復しようとしますが、-r leaks
クラスターのリークで使用されると修復され、-r all
ですべての種類のエラーが修正されます。これには、間違った修正を選択したり、すでに発生している可能性のある破損の問題を隠したりするリスクがあることに注意してください。
Commit
指定したイメージファイル (filename) に記録された変更を、qemu-img commit コマンドでファイルのベースイメージにコミットします。オプションで、ファイルのフォーマットタイプ (format) を指定します。
# qemu-img commit [-fformat
] [-tcache
] filename
convert
convert
オプションは、認識されているイメージ形式を別のイメージ形式に変換するために使用されます。
# qemu-img convert [-c] [-p] [-fformat
] [-tcache
] [-Ooutput_format
] [-ooptions
] [-Ssparse_size
] filename output_filename
-p
パラメーターはコマンドの進捗を示し (すべてのコマンドではなく任意)、-S
フラグは、ディスクイメージに含まれる sparse file の作成を許可します。ゼロのみを含む (何も含まない) 物理ブロックを除いて、あらゆる目的のスパースファイルは標準ファイルのように機能します。オペレーティングシステムがこのファイルを認識すると、たとえ実際にはディスクを使用していなくても、存在しているものとして扱われ、実際のディスク領域を消費します。ゲスト仮想マシン用のディスクを作成する場合に特に役立ちます。これにより、ディスクに必要なディスク領域よりもはるかに多くのディスク領域が使用されるようになります。たとえば、10Gb のディスクイメージで -S を 50Gb に設定すると、実際には 10Gb しか使用されていなくても、そのディスク領域の 10Gb は 60Gb に見えます。
filename
形式を使用して、ディスクイメージ output_filename
をディスクイメージ output_format
に変換します。ディスクイメージは、-c
オプションで圧縮するか、-o encryption
を設定して -o
オプションで暗号化できます。-o
パラメーターで使用できるオプションは、選択した形式とは異なることに注意してください。
qcow2
形式のみが暗号化または圧縮をサポートします。qcow2
暗号化は、安全な 128 ビット鍵で AES 形式を使用します。qcow2
圧縮は読み取り専用であるため、圧縮したセクターが qcow2
形式から変換されると、非圧縮データとして新しい形式に書き込まれます。
Create
サイズsize
、フォーマットformat
、新しいディスクイメージの ファイル名を作成します。
# qemu-img create [-fformat
] [-o options] filename [size
][preallocation
]
-o backing_file=filename
で指定されている場合は、イメージ自体とベースイメージの違いのみが記録されます。バッキングファイルは、commit コマンドを使用しない限り変更されません。この場合、サイズの指定は必要ありません。
-o preallocation=off|meta|full|falloc
が含まれます。事前に割り当てられたメタデータを持つイメージは、イメージよりも大きくなります。ただし、イメージサイズが大きくなると、イメージのサイズが大きくなるとパフォーマンスが向上します。
full
割り当ての使用には、イメージのサイズが大きい場合に時間がかかる可能性があることに注意してください。完全な割り当てと時間が経つ必要がある場合、フラックを使用 falloc
時間を節約できます。
Info
info パラメーターは、ディスクイメージのfilenameに関する情報を表示します。info オプションの形式は、以下のとおりです。
# qemu-img info [-f format] filename
qcow2
イメージが使用している領域を表示します。これは、qemu-img を実行して行います。使用中のイメージが、qemu-img check コマンドで qemu-img info コマンドの出力と一致するイメージであることを確認できます。「qemu-img の使用」 を参照してください。
# qemu-img info /dev/vg-90.100-sluo/lv-90-100-sluo image: /dev/vg-90.100-sluo/lv-90-100-sluo file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 0 cluster_size: 65536
マップ
# qemu-img map [-f format] [--output=output_format] filename コマンドは、イメージファイル名のメタデータとそのバッキングファイルチェーンをダンプします。具体的には、このコマンドは、指定されたファイルのすべてのセクターの割り当て状態を、それをバッキングファイルチェーンに割り当てる最上位のファイルとともにダンプします。たとえば、c.qcow2 → b.qcow2 → a.qcow2 などのチェーンがある場合、a.qcow2 が元のファイルである場合、b.qcow2 は a.qcow2 に加えられた変更で、c.qcow2 は b.qcow2 のデルタファイルになります。このチェーンが作成されると、イメージファイルは通常のイメージデータを保存し、どのファイルの場所とそれがファイルに保存されるかに関する情報も保存されます。この情報は、イメージのメタデータと呼ばれます。-f
フォーマットオプションは、指定されたイメージファイルのフォーマットです。raw、qcow2、vhdx、vmdk などの形式を使用できます。可能な出力オプションには、human
と json
の 2 つがあります。
human
がデフォルト設定です。人間の目に読みやすくなるように設計されているため、この形式は解析しないでください。明確さと単純さのために、デフォルトのhuman
フォーマットは、ファイルの既知のゼロ以外の領域のみをダンプします。ファイルの既知のゼロの部分は完全に省略され、同様にチェーン全体に割り当てられていない部分も省略されます。コマンドが実行されると、qemu-img 出力は、データを読み取ることができるファイルと、ファイル内のオフセットを識別します。出力は、4 列のテーブルとして表示されます。最初の 3 つは 16 進数です。# qemu-img map -f qcow2 --output=human /tmp/test.qcow2 Offset Length Mapped to File 0 0x20000 0x50000 /tmp/test.qcow2 0x100000 0x80000 0x70000 /tmp/test.qcow2 0x200000 0x1f0000 0xf0000 /tmp/test.qcow2 0x3c00000 0x20000 0x2e0000 /tmp/test.qcow2 0x3fd0000 0x10000 0x300000 /tmp/test.qcow2
json
、つまり JSON (JavaScript Object Notation) は、人間が読むこともできますが、プログラミング言語であるため、解析することも前提に設計されています。たとえば、パーサーで qemu-img map の出力を解析する場合は、オプション--output=json
を使用する必要があります。# qemu-img map -f qcow2 --output=json /tmp/test.qcow2 [{ "start": 0, "length": 131072, "depth": 0, "zero": false, "data": true, "offset": 327680}, { "start": 131072, "length": 917504, "depth": 0, "zero": true, "data": false},
JSON 形式の詳細については、qemu-img (1) の man ページを参照してください。
リベース
イメージのバッキングファイルを変更します。
# qemu-img rebase [-f format] [-t cache] [-p] [-u] -b backing_file [-F backing_format] filename
qcow2
形式のみです。
サイズの変更
サイズ sizeで作成されたかのように、ディスクイメージのfilenameを変更します。バージョンに関係なく、サイズ変更できるのは raw 形式のイメージのみです。Red Hat Enterprise Linux 6.1 以降では、qcow2
フォーマットでイメージを拡大 (縮小はしない) する機能が追加されています。
# qemu-img resize filename size
+
を付けて拡大するか、-
を付けてディスクイメージのサイズをそのバイト数だけ縮小します。ユニットの接尾辞を追加すると、イメージのサイズをキロバイト (K)、メガバイト (M)、ギガバイト (G)、またはテラバイト (T) で設定できます。
# qemu-img resize filename [+|-]size[K|M|G|T]
スナップショット
イメージ (ファイル名) の既存のスナップショット (スナップショット) を一覧表示、適用、作成、または削除します。
# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
サポート対象の形式
qemu-img は、ファイルを次のいずれかのフォーマットに変換するように設計されています。
-
raw
- Raw ディスクイメージ形式 (デフォルト)これは、ファイルベースで最も高速な形式になります。ファイルシステムがホールをサポートしている場合 (たとえば、Linux の ext2 または ext3、Windows の NTFS)、書き込まれたセクターのみがスペースを予約します。qemu-img info を使用して、イメージが使用する実際のサイズを取得するか、Unix/Linux の ls -ls を取得します。Raw イメージは最適なパフォーマンスを提供しますが、Raw イメージで使用できるのは非常に基本的な機能のみです (たとえば、スナップショットは使用できません)。
-
qcow2
- QEMU イメージ形式。最も汎用性が高く、機能セットが最適な形式です。これを使用して、オプションの AES 暗号化、zlib ベースの圧縮、複数の VM スナップショットのサポート、およびホールをサポートしないファイルシステム (Windows 上の非 NTFS ファイルシステム) で役立つ小さなイメージを使用します。この拡張機能セットはパフォーマンスに影響を与えることに注意してください。
raw
、または qcow2
形式に変換するために、以下の形式も認識してサポートします。イメージの形式は、通常、自動的に検出されます。この形式を raw
または qcow2
に変換することに加えて、raw
または qcow2
から元の形式に戻すことができます。
- bochs
- Bochs ディスクイメージ形式。
- cloop
- Linux Compressed Loop イメージ。Knoppix CD-ROM などにある直接圧縮 CD-ROM イメージを再利用する場合にのみ役立ちます。
- cow
- User Mode Linux Copy On Write イメージ形式。cow 形式は、以前のバージョンとの互換性のためにのみ同梱されています。Windows では動作しません。
- dmg
- Mac ディスクイメージフォーマット。
- nbd
- ネットワークブロックデバイス。
- parallels
- Parallels 仮想化ディスクイメージフォーマット。
- qcow
- 古い QEMU イメージフォーマット。古いバージョンとの互換性にのみ含まれます。
- vdi
- Oracle VM VirtualBox ハードディスクイメージ形式。
- vmdk
- VMware 互換のイメージフォーマット (バージョン 1 および 2 の読み取り/書き込みサポート、およびバージョン 3 の読み取り専用サポート)。
- vpc
- WindowsVirtualPC のディスクイメージフォーマット。
vhd
、または Microsoft 仮想ハードディスクイメージフォーマットとも呼ばれます。 - vvfat
- 仮想 VFAT ディスクイメージフォーマット。
10.2. QEMU ゲストエージェント
10.2.1. ゲストエージェントをインストールして有効にする
10.2.2. ゲストエージェントとホスト間の通信の設定
手順10.1 ゲストエージェントとホスト間の通信の設定
ゲスト XML を開きます
QEMU ゲストエージェント設定でゲスト XML を開きます。ファイルを開くにはゲスト名が必要です。ホストマシンでコマンド #virsh list を使用して、認識できるゲストを一覧表示します。この例では、ゲストの名前は rhel6 です。# virsh edit rhel6
ゲスト XML ファイルを編集します
次の要素を XML ファイルに追加し、変更を保存します。図10.1 ゲスト XML を編集して QEMU ゲストエージェントを設定する
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/rhel6.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
ゲストでの QEMU ゲストエージェントの起動
まだ行っていない場合は、yum install qemu-guest-agent を使用してゲスト仮想マシンにゲストエージェントをダウンロードしてインストールします。インストールしたら、次のようにサービスを開始します。# service start qemu-guest-agent
10.2.3. QEMU ゲストエージェントの使用
- qemu-guest-agentは、クライアントがチャネルに接続したかどうかを検出することはできません。
- クライアントが、qemu-guest-agent がバックエンドに切断または再接続したかどうかを検出する方法はありません。
- virtio-serial デバイスがリセットされ、qemu-guest-agentチャネルに接続されていない場合 (通常、再起動またはホットプラグが原因)、クライアントからのデータはドロップされます。
- virtio-serial デバイスのリセット後に qemu-guest-agent がチャネルに接続した場合、qemu-guest-agent がまだ実行中か接続中かにかかわらず、クライアントからのデータはキューに入れられます (そして利用可能なバッファーを使い切ると最終的にスロットルに入れられます)。
10.2.4. libvirt での QEMU ゲストエージェントの使用
- virsh shutdown --mode=agent - このシャットダウン方法は、virsh shutdown --mode=acpi よりも信頼性が高くなります。QEMU ゲストエージェントで使用する virsh shutdown は、クリーンな状態で協調ゲストをシャットダウンすることが保証されます。エージェントが存在しない場合、libvirt は代わりに ACPI シャットダウンイベントの挿入に依存する必要がありますが、一部のゲストはそのイベントを無視するため、シャットダウンしません。virsh reboot と同じ構文で使用できます。
- virsh snapshot-create --quiesce - スナップショットが作成される前に、ゲストが I / O を安定した状態にフラッシュできるようにします。これにより、fsck を実行したり、データベーストランザクションの一部を失うことなくスナップショットを使用できます。ゲストエージェントは、ゲストの相互作用を提供することで、高レベルのディスクコンテンツの安定性を実現します。
- virsh setvcpus --guest - CPU をオフラインにするようにゲストに指示します。
- virsh dompmsuspend - ゲストオペレーティングシステムの電源管理機能を使用して、実行中のゲストを優雅に一時停止します。
10.2.5. ゲスト仮想マシンのディスクバックアップの作成
- ファイルシステムアプリケーション/データベースは、作業バッファーを仮想ディスクにフラッシュし、クライアント接続の受け入れを停止します。
- アプリケーションがデータファイルを一貫した状態にします。
- メインフックスクリプトが返されます。
- qemu-ga ファイルシステムをフリーズし、管理スタックがスナップショットを取得します
- スナップショットが確認されました。
- ファイルシステムの機能が再開します。
/etc/qemu-ga/fsfreeze-hook.d/
というラベルが付いた表の行の 表10.1「QEMU ゲストエージェントパッケージの内容」 に一覧表示されている restorecon -FvvR コマンドを実行した後、ファイルシステムノードへのアクセスがすぐに機能するようになります。
表10.1 QEMU ゲストエージェントパッケージの内容
File name | 説明 |
---|---|
/etc/rc.d/init.d/qemu-ga | QEMU ゲストエージェントのサービス制御スクリプト (start/stop) |
/etc/sysconfig/qemu-ga | /etc/rc.d/init.d/qemu-ga 制御スクリプトによって読み取られる QEMU ゲストエージェントの設定ファイル。設定は、シェルスクリプトのコメントが記載されたファイルで説明されています。 |
/usr/bin/qemu-ga | QEMU ゲストエージェントのバイナリーファイル。 |
/usr/libexec/qemu-ga/ | フックスクリプトのルートディレクトリー。 |
/usr/libexec/qemu-ga/fsfreeze-hook | メインフックスクリプト。ここでは変更は必要ありません。 |
/usr/libexec/qemu-ga/fsfreeze-hook.d/ | 個々のアプリケーション固有のフックスクリプトのディレクトリー。ゲストシステム管理者は、フックスクリプトを手動でこのディレクトリーにコピーし、適切なファイルモードビットを確認してから、このディレクトリーで restorecon -FvvR を実行する必要があります。 |
/usr/share/qemu-kvm/qemu-ga/ | サンプルスクリプトを含むディレクトリー (サンプル目的のみ)ここに含まれるスクリプトは実行されません。 |
/usr/libexec/qemu-ga/fsfreeze-hook
は、独自のメッセージと、アプリケーション固有のスクリプトの標準出力およびエラーメッセージを、ログファイル /var/log/qemu-ga/fsfreeze-hook.log
に記録します。詳細は、wiki.qemu.org または libvirt.org にあるqemu-guest-agentwiki ページを参照してください。
10.3. Windows ゲストでの QEMU ゲストエージェントの実行
- Windows XP Service Pack 3 (VSS はサポートされていません)
- Windows Server 2003 R2 - x86 および AMD64 (VSS はサポートされていません)
- Windows Server 2008
- Windows Server 2008 R2
- Windows7 - x86 および AMD64
- Windows Server 2012
- Windows Server 2012 R2
- Windows8 - x86 および AMD64
- Windows8.1 - x86 および AMD64
手順10.2 Windows ゲストでの QEMU ゲストエージェントの設定
Red Hat Enterprise Linux ホストマシンを準備します
次のパッケージが Red Hat Enterprise Linux ホスト物理マシンにインストールされていることを確認してください。- virtio-win
usr/share/virtio-win/
にあります。
Windows ゲストのドライバーをコピーするには、次のコマンドを使用して qxl ドライバーの*.iso
ファイルを作成します。# mkisofs -o /var/lib/libvirt/images/virtiowin.iso /usr/share/virtio-win/drivers
Windows ゲストを準備する
virtio-serial をインストールしますドライバーを更新するために Windows ゲストに*.iso
をマウントすることにより、ゲストのドライバー。ゲストを起動し、次に示すようにドライバーの.iso ファイルをゲストに添付します ( hdb という名前のディスクを使用)。# virsh attach-disk guest /var/lib/libvirt/images/virtiowin.iso hdb
Windows の コントロールパネル を使用してドライバーをインストールするには、次のメニューに移動します。- virtio-win ドライバーをインストールするには - ハードウェアとサウンド > デバイスマネージャー > virtio- シリアルドライバー を選択します。
Windows ゲスト XML 設定ファイルを更新します
Windows ゲストのゲスト XML ファイルは、Red Hat Enterprise Linux ホストマシンにあります。このファイルにアクセスするには、Windows ゲスト名が必要です。ホストマシンで #virsh list コマンドを使用して、認識できるゲストを一覧表示します。この例では、ゲストの名前は win7x86 です。#virsh edit win7x86 コマンドを使用して次の要素を XML ファイルに追加し、変更を保存します。ソースソケット名は、この例では win7x86.agent という名前で、ホスト内で一意である必要があることに注意してください。図10.2 Windows ゲスト XML を編集して QEMU ゲストエージェントを設定する
... <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/win7x86.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> ...
Windows ゲストを再起動します
Windows ゲストを再起動して、変更を適用します。# virsh reboot win7x86
Windows ゲストで QEMU ゲストエージェントを準備します
Windows ゲストでゲストエージェントを準備するには:最新のものをインストールするvirtio-winパッケージ
Red Hat Enterprise Linux ホストの物理マシンのターミナルウィンドウで次のコマンドを実行して、インストールするファイルを見つけます。以下に示すファイルは、システムが検出したファイルと完全に同じではない場合がありますが、最新の公式バージョンである必要があることに注意してください。# rpm -qa|grep virtio-win virtio-win-1.6.8-5.el6.noarch # rpm -iv virtio-win-1.6.8-5.el6.noarch
インストールが完了したことを確認します
後に virtio-win パッケージのインストールが完了したら、/usr/share/virtio-win/guest-agent/
フォルダーを確認すると、次のような qemu-ga-x64.msi または qemu-ga-x86.msi という名前のファイルが見つかります。# ls -l /usr/share/virtio-win/guest-agent/ total 1544 -rw-r--r--. 1 root root 856064 Oct 23 04:58 qemu-ga-x64.msi -rw-r--r--. 1 root root 724992 Oct 23 04:58 qemu-ga-x86.msi
.msi ファイルをインストールします
Windows ゲスト (たとえば、win7x86) から、ファイルをダブルクリックして qemu-ga-x64.msi または qemu-ga-x86.msi をインストールします。インストールされると、システムマネージャー内の Windows ゲストに qemu-ga サービスとして表示されます。この同じマネージャーを使用して、サービスのステータスを監視できます。
10.3.1. Windows ゲストでの QEMUGuestAgent での libvirt コマンドの使用
- virsh shutdown --mode=agent - このシャットダウン方法は、virsh shutdown --mode=acpi よりも信頼性が高くなります。QEMU ゲストエージェントで使用する virsh shutdown は、クリーンな状態で協調ゲストをシャットダウンすることが保証されます。エージェントが存在しない場合、libvirt は代わりに ACPI シャットダウンイベントの挿入に依存する必要がありますが、一部のゲストはそのイベントを無視するため、シャットダウンしません。virsh reboot と同じ構文で使用できます。
- virsh snapshot-create --quiesce - スナップショットが作成される前に、ゲストが I / O を安定した状態にフラッシュできるようにします。これにより、fsck を実行したり、データベーストランザクションの一部を失うことなくスナップショットを使用できます。ゲストエージェントは、ゲストの相互作用を提供することで、高レベルのディスクコンテンツの安定性を実現します。
- virsh dompmsuspend - ゲストオペレーティングシステムの電源管理機能を使用して、実行中のゲストを優雅に一時停止します。
10.4. デバイスリダイレクトの制限の設定
-device usb-redir
に渡します。filter プロパティーは、フィルタールールで設定される文字列を取ります。ルールの形式は次のとおりです。
<class>:<vendor>:<product>:<version>:<allow>
-1
の値を使用して、特定のフィールドに任意の値を受け入れるように指定します。同じコマンドラインで、| を区切り文字として使用し、複数のルールを使用できます。デバイスがどのフィルタールールにも一致しない場合、リダイレクトは許可されないことに注意してください。
例10.1 Windows ゲスト仮想マシンによるリダイレクトの制限
- Windows 7 ゲスト仮想マシンを準備します。
- 以下のコード抜粋をゲスト仮想マシンの XML ファイルに追加します。
<redirdev bus='usb' type='spicevmc'> <alias name='redir0'/> <address type='usb' bus='0' port='3'/> </redirdev> <redirfilter> <usbdev class='0x08' vendor='0x1234' product='0xBEEF' version='2.0' allow='yes'/> <usbdev class='-1' vendor='-1' product='-1' version='-1' allow='no'/> </redirfilter>
- ゲスト仮想マシンを起動し、次のコマンドを実行して設定の変更を確認します。
# ps -ef | grep $guest_name
-device usb-redir,chardev=charredir0,id=redir0,/ filter=0x08:0x1234:0xBEEF:0x0200:1|-1:-1:-1:-1:0,bus=usb.0,port=3
- USB デバイスをホストの物理マシンに接続し、virt-viewer を使用してゲスト仮想マシンに接続します。
- メニューで USB デバイスの選択 をクリックすると、一部の USB デバイスはホストポリシーによってブロックされていますというメッセージが表示されます。OK をクリックして確定し、続行します。フィルターが有効になります。
- フィルターが正しくキャプチャーされていることを確認するには、USB デバイスのベンダーと製品を確認してから、USB リダイレクトを可能にするために、ホストの物理マシンのドメイン XML で次の変更を行います。
<redirfilter> <usbdev class='0x08' vendor='0x0951' product='0x1625' version='2.0' allow='yes'/> <usbdev allow='no'/> </redirfilter>
- ゲスト仮想マシンを再起動してから、virt-viewer を使用してゲスト仮想マシンに接続します。これで、USB デバイスはトラフィックをゲスト仮想マシンにリダイレクトするようになります。
10.5. 仮想 NIC に接続しているホスト物理マシンまたはネットワークブリッジの動的な変更
- 次のような設定で、ゲスト仮想マシンを準備します。
<interface type='bridge'> <mac address='52:54:00:4a:c9:5e'/> <source bridge='virbr0'/> <model type='virtio'/> </interface>
- インターフェイスを更新するために XML ファイルを準備します。
# cat br1.xml
<interface type='bridge'> <mac address='52:54:00:4a:c9:5e'/> <source bridge='virbr1'/> <model type='virtio'/> </interface>
- ゲスト仮想マシンを起動し、ゲスト仮想マシンのネットワーク機能を確認して、ゲスト仮想マシンの vnetX が指定したブリッジに接続されていることを確認します。
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254007da9f2 yes virbr0-nic vnet0 virbr1 8000.525400682996 yes virbr1-nic
- 次のコマンドを使用して、新しいインターフェイスパラメーターでゲスト仮想マシンのネットワークを更新します。
# virsh update-device test1 br1.xml Device updated successfully
- ゲスト仮想マシンで service network restart を実行します。ゲスト仮想マシンは、virbr1 の新しい IP アドレスを取得します。ゲスト仮想マシンの vnet0 が新しいブリッジ (virbr1) に接続されていることを確認します。
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254007da9f2 yes virbr0-nic virbr1 8000.525400682996 yes virbr1-nic vnet0
第11章 ストレージの概念
11.1. ストレージプール
- virtio-blk = 2^63 バイトまたは 8 エクサバイト (raw ファイルまたはディスクを使用)
- Ext4 = ~ 16TB (4KB のブロックサイズを使用)
- XFS = ~8 エクサバイト
- qcow2 およびホストのファイルシステムでは、非常に大きなイメージサイズを試行する際に、独自のメタデータとスケーラビリティーを評価/調整する必要があります。raw ディスクを使用すると、スケーラビリティーまたは最大サイズに影響を与えるレイヤーが減ります。
/var/lib/libvirt/images/
ディレクトリーをデフォルトのストレージプールとして使用します。デフォルトのストレージプールは、別のストレージプールに変更できます。
- ローカルストレージプール - ローカルストレージプールは、ホストの物理マシンサーバーに直接接続されています。ローカルストレージプールには、ローカルディレクトリー、直接接続されたディスク、物理パーティション、および LVM ボリュームグループが含まれます。これらのストレージボリュームは、ゲスト仮想マシンイメージを格納するか、追加のストレージとしてゲスト仮想マシンに接続されます。ローカルストレージプールはホストの物理マシンサーバーに直接接続されているため、移行や多数のゲスト仮想マシンを必要としない開発、テスト、および小規模な展開に役立ちます。ローカルストレージプールはライブマイグレーションをサポートしていないため、ローカルストレージプールは多くの本番環境には適していません。
- ネットワーク型 (共有) ストレージプール - ネットワーク型ストレージプールには、標準プロトコルを使用してネットワーク上で共有されるストレージデバイスが含まれます。virt-manager を使用してホスト物理マシン間で仮想マシンを移行する場合はネットワークストレージが必要ですが、virsh を使用して移行する場合は任意です。ネットワークストレージプールは libvirt によって管理されます。ネットワークストレージプールでサポートされているプロトコルは次のとおりです。
- ファイバーチャネルベースの LUN
- iSCSI
- NFS
- GFS2
- SCSI RDMA プロトコル (SCSI RCP) - InfiniBand アダプターおよび 10GbE iWARP アダプターで使用されるブロックエクスポートプロトコル
11.2. ボリューム
ボリュームの参照
特定のボリュームを参照するには、次の 3 つのアプローチが可能です。
- ボリュームとストレージプールの名前
- ボリュームは、それが属するストレージプールの識別子とともに名前で参照される場合があります。virsh コマンドラインでは、
--pool
storage_pool volume_name の形式を取ります。たとえば、guest_images プールの firstimage という名前のボリュームの場合は以下のようになります。# virsh vol-info --pool guest_images firstimage Name: firstimage Type: block Capacity: 20.00 GB Allocation: 20.00 GB virsh #
- ホスト物理マシンシステム上のストレージへのフルパス
- ボリュームは、ファイルシステム上のフルパスによって参照される場合もあります。このアプローチを使用する場合、プール識別子を含める必要はありません。たとえば、secondimage.img という名前のボリュームは、ホスト物理マシンシステムに /images/secondimage.img として表示されます。このイメージは /images/secondimage.img として参照できます。
# virsh vol-info /images/secondimage.img Name: secondimage.img Type: file Capacity: 20.00 GB Allocation: 136.00 kB
- ユニークなボリュームキー
- 仮想化システムでボリュームが最初に作成されると、一意の識別子が生成され、ボリュームに割り当てられます。一意の識別子は ボリュームキー と呼ばれます。このボリュームキーの形式は、使用するストレージによって異なります。LVM などのブロックベースのストレージで使用する場合、ボリュームキーは次の形式に従う場合があります。
c3pKz4-qPVc-Xf7M-7WNM-WJc8-qSiz-mtvpGn
ファイルベースのストレージで使用する場合、ボリュームキーは代わりにボリュームストレージへのフルパスのコピーである可能性があります。/images/secondimage.img
たとえば、ボリュームキーが Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr:# virsh vol-info Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr Name: firstimage Type: block Capacity: 20.00 GB Allocation: 20.00 GB
- vol-name
- ボリュームパスまたはボリュームキーが指定されている場合は、ボリューム名を返します。
# virsh vol-name /dev/guest_images/firstimage firstimage # virsh vol-name Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr
- vol-path
- ボリュームキー、またはストレージプール識別子とボリューム名が指定されている場合は、ボリュームパスを返します。
# virsh vol-path Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr /dev/guest_images/firstimage # virsh vol-path --pool guest_images firstimage /dev/guest_images/firstimage
- vol-key コマンド
- ボリュームパス、またはストレージプール識別子とボリューム名が指定されている場合は、ボリュームキーを返します。
# virsh vol-key /dev/guest_images/firstimage Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr # virsh vol-key --pool guest_images firstimage Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr
第12章 ストレージプール
例12.1 NFS ストレージプール
path/to/share
は /vm_data
にマウントする必要があります)。プールが開始すると、libvirt は、システム管理者がログインして mount nfs.example.com:/path/to/share /vmdata を実行した場合と同じように、指定したディレクトリーに共有をマウントします。プールが自動開始するように設定されている場合、libvirt は、libvirt の開始時に指定されたディレクトリーに NFS 共有がマウントされていることを確認します。
12.1. ディスクベースのストレージプール
/dev/sdb
など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1
など) または LVM ボリュームを使用します。
12.1.1. virsh を使用したディスクベースのストレージプールの作成
ディスクに GPT ディスクラベルを作成します
ディスクには、GUID パーティションテーブル (GPT) ディスクラベルを付け直す必要があります。GPT ディスクラベルを使用すると、各デバイスに最大 128 個のパーティションを作成できます。GPT パーティションテーブルは、MS-DOS パーティションテーブルよりもはるかに多くのパーティションのパーティションデータを格納できます。# parted /dev/sdb GNU Parted 2.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel New disk label type? gpt (parted) quit Information: You may need to update /etc/fstab. #
ストレージプール設定ファイルを作成します
新規デバイスに必要なストレージプール情報を含む一時的な XML テキストファイルを作成します。ファイルは以下に示す形式で、次のフィールドが含まれている必要があります。- <name>guest_images_disk</name>
name
パラメーターは、ストレージプールの名前を決定します。この例では、以下の例で guest_images_disk という名前を使用しています。- <device path='/dev/sdb'/>
device
パラメーターにpath
属性を指定すると、ストレージデバイスのデバイスパスが指定されます。この例では、デバイス /dev/sdb を使用しています。- <target> <path>/dev</path></target>
- ファイルシステム
target
パラメーターとpath
サブパラメーターは、このストレージプールで作成されたボリュームを接続するホスト物理マシンファイルシステム上の場所を決定します。たとえば、sdb1、sdb2、sdb3 です。以下の例のように /dev/ を使用すると、このストレージプールから作成されたボリュームに /dev/sdb1、/dev/sdb2、/dev/sdb3 としてアクセスできることを意味します。 - <format type='gpt'/>
format
パラメーターは、パーティションテーブルの種類を指定します。この例では、次の例の gpt を使用して、前の手順で作成した GPT ディスクラベルタイプと一致させます。
テキストエディターを使用して、ストレージプールデバイスの XML ファイルを作成します。例12.2 ディスクベースのストレージデバイスストレージプール
<pool type='disk'> <name>guest_images_disk</name> <source> <device path='/dev/sdb'/> <format type='gpt'/> </source> <target> <path>/dev</path> </target> </pool>
デバイスを接続します
前の手順で作成した XML 設定ファイルで virshpool-define コマンドを使用して、ストレージプール定義を追加します。# virsh pool-define ~/guest_images_disk.xml Pool guest_images_disk defined from /root/guest_images_disk.xml # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk inactive no
ストレージプールを起動します。
virshpool-start コマンドを使用してストレージプールを開始します。virshpool-list--all コマンドを使用してプールが開始されていることを確認します。# virsh pool-start guest_images_disk Pool guest_images_disk started # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk active no
自動起動をオンにします
オンにするautostart
ストレージプール用。Autostart は、サービスの開始時にストレージプールを開始するようにlibvirtd
サービスを設定します。# virsh pool-autostart guest_images_disk Pool guest_images_disk marked as autostarted # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk active yes
ストレージプールの設定を確認する
ストレージプールが正しく作成され、サイズが正しく報告され、状態が次のように報告されることを確認しますrunning
。# virsh pool-info guest_images_disk Name: guest_images_disk UUID: 551a67c8-5f2a-012c-3844-df29b167431c State: running Capacity: 465.76 GB Allocation: 0.00 Available: 465.76 GB # ls -la /dev/sdb brw-rw----. 1 root disk 8, 16 May 30 14:08 /dev/sdb # virsh vol-list guest_images_disk Name Path -----------------------------------------
オプション: 一時設定ファイルを削除します
必要がない場合は、一時ストレージプールの XML 設定ファイルを削除します。# rm ~/guest_images_disk.xml
12.1.2. virsh を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
# virsh pool-destroy guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
12.2. パーティションベースのストレージプール
/dev/sdc
) が 1 つの 500GB の ext4 フォーマット済みパーティション (/dev/sdc1
) にパーティション化されています。以下の手順でストレージプールを設定します。
12.2.1. virt-manager を使用したパーティションベースのストレージプールの作成
手順12.1 virt-manager を使用したパーティションベースのストレージプールの作成
ストレージプールの設定を開きます
- virt-manager のグラフィカルインターフェイスで、メインウィンドウからホストの物理マシンを選択します。Edit メニューを開き、Connection Details を選択します。
図12.1 接続の詳細
- Connection Details ウィンドウの Storage タブをクリックします。
図12.2 ストレージタブ
新しいストレージプールを作成します
新しいプールの追加 (パート 1)
+ ボタン (プールの追加ボタン) を押します。Add a New Storage Pool ウィザードが表示されます。ストレージプールの Name を選択します。この例では、guest_images_fs という名前を使用します。Type を fs: Pre-Formatted Block Device に変更します。図12.3 ストレージプールの名前とタイプ
Forward ボタンを押して続行します。新しいプールの追加 (パート 2)
Target Path、Format、および Source Path フィールドを変更します。図12.4 ストレージプールのパスと形式
- ターゲットパス
- Target Path フィールドに、ストレージプールのソースデバイスをマウントする場所を入力します。場所がまだ存在しない場合は、virt-manager がディレクトリーを作成します。
- 形式
- Format リストからフォーマットを選択します。デバイスは選択したフォーマットでフォーマットされています。この例では、デフォルトの Red Hat Enterprise Linux ファイルシステムである ext4 ファイルシステムを使用しています。
- ソースパス
- Source Path フィールドにデバイスを入力します。この例では、/dev/sdc1 デバイスを使用しています。
詳細を確認し、Finish ボタンを押してストレージプールを作成します。
新しいストレージプールを確認します
新しいストレージプールは、数秒後に左側のストレージリストに表示されます。サイズが期待どおりに報告されていることを確認します。この例では 458.20 GB が空き です。State フィールドが新しいストレージプールを Active としてレポートしていることを確認します。ストレージプールを選択します。Autostart フィールドで、On Boot 時チェックボックスをクリックします。これにより、libvirtd
サービスが開始するたびにストレージデバイスが確実に開始されます。図12.5 ストレージリストの確認
これでストレージプールが作成され、Connection Details ウィンドウを閉じます。
12.2.2. virt-manager を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。これを行うには、停止するストレージプールを選択し、ストレージウィンドウの下部にある赤い X アイコンをクリックします。
図12.6 停止アイコン
- ごみ箱アイコンをクリックして、ストレージプールを削除します。このアイコンは、最初にストレージプールを停止した場合にのみ有効になります。
12.2.3. virsh を使用したパーティションベースのストレージプールの作成
/dev/sdb
など) として割り当てるのに使用しないでください。ゲストには、ディスク全体またはブロックデバイスへの書き込みアクセス権を付与しないでください。この方法は、パーティション (たとえば、/dev/sdb1
) をストレージプールに割り当てる場合にのみ使用してください。
手順12.2 virsh を使用して事前にフォーマットされたブロックデバイスストレージプールを作成する
ストレージプール定義を作成します
virsh pool-define-as コマンドを使用して、新しいストレージプール定義を作成します。事前にフォーマットされたディスクをストレージプールとして定義するには、次の 3 つのオプションを提供する必要があります。- パーティション名
name
パラメーターは、ストレージプールの名前を決定します。この例では、以下の例で guest_images_fs という名前を使用しています。- device
device
パラメーターにpath
属性を指定すると、ストレージデバイスのデバイスパスが指定されます。この例では、パーティション /dev/sdc1 を使用しています。- mountpoint
- フォーマットされたデバイスがマウントされるローカルファイルシステム上の
mountpoint
。マウントポイントディレクトリーが存在しない場合、virsh コマンドでディレクトリーを作成できます。この例では、ディレクトリー /guest_images が使用されています。
# virsh pool-define-as guest_images_fs fs - - /dev/sdc1 - "/guest_images" Pool guest_images_fs defined
これで、新しいプールとマウントポイントが作成されました。新しいプールを確認する
現在のストレージプールを一覧表示します。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
マウントポイントを作成します。
virsh pool-build コマンドを使用して、事前にフォーマットされたファイルシステムストレージプールのマウントポイントを作成します。# virsh pool-build guest_images_fs Pool guest_images_fs built # ls -la /guest_images total 8 drwx------. 2 root root 4096 May 31 19:38 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 .. # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
ストレージプールを起動します。
virsh pool-start コマンドを使用して、ファイルシステムをマウントポイントにマウントし、プールを使用できるようにします。# virsh pool-start guest_images_fs Pool guest_images_fs started # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs active no
自動起動をオンにします
デフォルトでは、virsh で定義されたストレージプールは、libvirtd
が起動するたびに自動的に起動するように設定されていません。これを修正するには、virsh pool-autostart コマンドで自動開始を有効にします。ストレージプールは、libvirtd
が起動するたびに自動的に起動するようになりました。# virsh pool-autostart guest_images_fs Pool guest_images_fs marked as autostarted # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs active yes
ストレージプールを確認します。
ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が running と報告されたことを確認します。ファイルシステムのマウントポイントに lost+found ディレクトリーがあり、デバイスがマウントされていることを確認します。# virsh pool-info guest_images_fs Name: guest_images_fs UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB # mount | grep /guest_images /dev/sdc1 on /guest_images type ext4 (rw) # ls -la /guest_images total 24 drwxr-xr-x. 3 root root 4096 May 31 19:47 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 .. drwx------. 2 root root 16384 May 31 14:18 lost+found
12.2.4. virsh を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
# virsh pool-destroy guest_images_disk
- オプションで、ストレージプールが存在するディレクトリーを削除する場合は、次のコマンドを使用します。
# virsh pool-delete guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
12.3. ディレクトリーベースのストレージプール
12.3.1. virt-manager を使用したディレクトリーベースのストレージプールの作成
ローカルディレクトリーを作成します
オプション: ストレージプール用の新しいディレクトリーを作成します
ストレージプール用のディレクトリーをホスト物理マシンに作成します。この例では、/guest virtual machine_images という名前のディレクトリーを使用しています。# mkdir /guest_images
ディレクトリーの所有権を設定する
ディレクトリーのユーザーとグループの所有権を変更します。ディレクトリーは root ユーザーが所有している必要があります。# chown root:root /guest_images
ディレクトリーのアクセス許可を設定する
ディレクトリーのファイル権限を変更します。# chmod 700 /guest_images
変更を確認します。
権限が変更されたことを確認します。出力には、正しく設定された空のディレクトリーが表示されます。# ls -la /guest_images total 8 drwx------. 2 root root 4096 May 28 13:57 . dr-xr-xr-x. 26 root root 4096 May 28 13:57 ..
SELinux ファイルコンテキストを設定する
新しいディレクトリーの正しい SELinux コンテキストを設定します。プールの名前とディレクトリーは一致している必要はないことに注意してください。ただし、ゲスト仮想マシンをシャットダウンすると、libvirt はコンテキストをデフォルト値に戻す必要があります。ディレクトリーのコンテキストによって、このデフォルト値が決まります。ディレクトリー virt_image_t に明示的にラベルを付けることは価値があります。これにより、ゲスト仮想マシンがシャットダウンされると、イメージに virt_image_t というラベルが付けられ、ホスト物理マシンで実行されている他のプロセスから分離されます。# semanage fcontext -a -t virt_image_t '/guest_images(/.*)?' # restorecon -R /guest_images
ストレージプールの設定を開きます
- virt-manager のグラフィカルインターフェイスで、メインウィンドウからホストの物理マシンを選択します。Edit メニューを開き、Connection Details を選択します。
図12.7 接続詳細ウィンドウ
- Connection Details ウィンドウの Storage タブをクリックします。
図12.8 ストレージタブ
新しいストレージプールを作成します
新しいプールの追加 (パート 1)
+ ボタン (プールの追加ボタン) を押します。Add a New Storage Pool ウィザードが表示されます。ストレージプールの Name を選択します。この例では、guest_images という名前を使用します。Type を dir: Filesystem Directory に変更します。図12.9 ストレージプールに名前を付ける
Forward ボタンを押して続行します。新しいプールの追加 (パート 2)
Target Path フィールドを変更します。たとえば、/guest_images。詳細を確認し、Finish ボタンを押してストレージプールを作成します。
新しいストレージプールを確認します
新しいストレージプールは、数秒後に左側のストレージリストに表示されます。サイズが期待どおりに報告されていることを確認します。この例では 36.41 GB の空き 容量です。State フィールドが新しいストレージプールを Active としてレポートしていることを確認します。ストレージプールを選択します。Autostart フィールドで、On Boot チェックボックスがオンになっていることを確認します。これにより、libvirtd
サービスが開始するたびにストレージプールが確実に開始されます。図12.10 ストレージプール情報を確認します
これでストレージプールが作成され、Connection Details ウィンドウを閉じます。
12.3.2. virt-manager を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。これを行うには、停止するストレージプールを選択し、ストレージウィンドウの下部にある赤い X アイコンをクリックします。
図12.11 停止アイコン
- ごみ箱アイコンをクリックして、ストレージプールを削除します。このアイコンは、最初にストレージプールを停止した場合にのみ有効になります。
12.3.3. virsh を使用したディレクトリーベースのストレージプールの作成
ストレージプール定義を作成します
virsh pool-define-as コマンドを使用して、新しいストレージプールを定義します。ディレクトリーベースのストレージプールを作成するには、次の 2 つのオプションが必要です。- ストレージプールの nameこの例では、guest_images という名前を使用します。この例で使用されている以降のすべての virsh コマンドは、この名前を使用します。
- ゲストイメージファイルを保存するためのファイルシステムディレクトリーへの path。このディレクトリーが存在しない場合は、virsh が作成します。この例では、/guest_images ディレクトリーを使用しています。
# virsh pool-define-as guest_images dir - - - - "/guest_images" Pool guest_images defined
ストレージプールがリストされていることを確認します
ストレージプールオブジェクトが正しく作成され、状態が次のようにレポートすることを確認しますinactive
。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images inactive no
ローカルディレクトリーを作成します
次に示すように、virsh pool-build コマンドを使用して、ディレクトリー guest_images のディレクトリーベースのストレージプールを構築します (たとえば)。# virsh pool-build guest_images Pool guest_images built # ls -la /guest_images total 8 drwx------. 2 root root 4096 May 30 02:44 . dr-xr-xr-x. 26 root root 4096 May 30 02:44 .. # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images inactive no
ストレージプールを起動します。
virsh コマンド pool-start を使用して、ディレクトリーストレージプールを有効にします。これにより、プールのボリュームをゲストディスクイメージとして使用できるようになります。# virsh pool-start guest_images Pool guest_images started # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images active no
自動起動をオンにします
オンにするautostart
ストレージプール用。Autostart は、サービスの開始時にストレージプールを開始するようにlibvirtd
サービスを設定します。# virsh pool-autostart guest_images Pool guest_images marked as autostarted # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images active yes
ストレージプールの設定を確認する
ストレージプールが正しく作成され、サイズが正しく報告され、状態が次のようにレポートされることを確認しますrunning
。ゲスト仮想マシンが実行されていない場合でもプールにアクセスできるようにするには、Persistent
がyes
として報告されていることを確認します。サービス開始時にプールを自動的に起動させたい場合は、Autostart
がyes
と報告されていることを確認します。# virsh pool-info guest_images Name: guest_images UUID: 779081bf-7a82-107b-2874-a19a9c51d24c State: running Persistent: yes Autostart: yes Capacity: 49.22 GB Allocation: 12.80 GB Available: 36.41 GB # ls -la /guest_images total 8 drwx------. 2 root root 4096 May 30 02:44 . dr-xr-xr-x. 26 root root 4096 May 30 02:44 .. #
12.3.4. virsh を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
# virsh pool-destroy guest_images_disk
- オプションで、ストレージプールが存在するディレクトリーを削除する場合は、次のコマンドを使用します。
# virsh pool-delete guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
12.4. LVM ベースのストレージプール
12.4.1. LVM ベースのストレージプールの作成 virt-manager を使用します。
オプション:LVM ボリューム用の新しいパーティションを作成します
これらの手順では、新しいハードディスクドライブに新しいパーティションと LVM ボリュームグループを作成する方法について説明します。警告この手順により、選択したストレージデバイスからすべてのデータが削除されます。新しいパーティションの作成
fdisk コマンドを使用して、コマンドラインから新しいディスクパーティションを作成します。次の例では、ストレージデバイス/dev/sdb
にディスク全体を使用する新しいパーティションを作成しています。# fdisk /dev/sdb Command (m for help):
n
を押して、新しいパーティションを作成します。p
を押して、プライマリーパーティションにします。Command action e extended p primary partition (1-4)
- 使用可能なパーティション番号を選択します。この例では、最初のパーティションは次のように入力して選択されます
1
。Partition number (1-4):
1
Enter
を押して、デフォルトの最初のシリンダーを入力します。First cylinder (1-400, default 1):
- パーティションのサイズを選択します。この例では、
Enter
を押してディスク全体を割り当てています。Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
t
を押して、パーティションの種類を設定します。Command (m for help):
t
- 前の手順で作成したパーティションを選択します。この例では、パーティション番号は
1
。Partition number (1-4):
1
- Linux LVM パーティションの場合、
8e
を入力します。Hex code (type L to list codes):
8e
- 変更をディスクに書き込んで終了します。
Command (m for help):
w
Command (m for help):q
新しい LVM ボリュームグループを作成する
vgcreate コマンドを使用して新しい LVM ボリュームグループを作成します。この例では、guest_images_lvm という名前のボリュームグループを作成します。# vgcreate guest_images_lvm /dev/sdb1 Physical volume "/dev/vdb1" successfully created Volume group "guest_images_lvm" successfully created
新しい LVM ボリュームグループ guest_images_lvm を、LVM ベースのストレージプールに使用できるようになりました。ストレージプールの設定を開きます
- virt-manager のグラフィカルインターフェイスで、メインウィンドウからホストを選択します。Edit メニューを開き、Connection Details を選択します。
図12.12 接続の詳細
- Storage タブをクリックします。
図12.13 ストレージタブ
新しいストレージプールを作成します
ウィザードを開始します
+ ボタン (プールの追加ボタン) を押します。Add a New Storage Pool ウィザードが表示されます。ストレージプールの Name を選択します。この例では、guest_images_lvm を使用します。次に、Type を logical: LVM Volume Group に変更します。また、図12.14 LVM ストレージプールを追加する
Forward ボタンを押して続行します。新しいプールの追加 (パート 2)
Target Path フィールドを変更します。この例では /guest_images を使用しています。次に、Target Path フィールドと Source Path フィールドに入力し、Build Pool チェックボックスをオンにします。- Target Path フィールドを使用して、既存の LVM ボリュームグループを選択する か、新しいボリュームグループの名前として使用します。デフォルトの形式は
/dev/
storage_pool_name。この例では、/dev/guest_images_lvm という名前の新しいボリュームグループを使用しています。 - 既存の LVM ボリュームグループが Target Path で使用されている場合、Source Path フィールドはオプションです。新しい LVM ボリュームグループの場合は、Source Path フィールドにストレージデバイスの場所を入力します。この例では、空白のパーティション /dev/sdc を使用しています。
- Build Pool チェックボックスは、virt-manager に新しい LVM ボリュームグループを作成するように指示します。既存のボリュームグループを使用している場合は、Build Pool チェックボックスを選択しないでください。この例では、空白のパーティションを使用して新しいボリュームグループを作成しているため、Build Pool チェックボックスをオンにする必要があります。
図12.15 ターゲットとソースを追加する
詳細を確認し、Finish ボタンを押して LVM ボリュームグループをフォーマットし、ストレージプールを作成します。フォーマットするデバイスを確認します
警告メッセージが表示されます。図12.16 警告メッセージ
Yes ボタンを押して、ストレージデバイス上のすべてのデータを消去し、ストレージプールを作成します。
新しいストレージプールを確認します
新しいストレージプールは、数秒後に左側のリストに表示されます。詳細が期待どおりであることを確認します。この例では、465.76 GB が空きです。また、State フィールドが新しいストレージプールをActive としてレポートしていることを確認します。ストレージプールが libvirtd で自動的に開始されるようにするには、通常、Autostart チェックボックスを有効にすることをお勧めします。図12.17 LVM ストレージプールの詳細を確認する
タスクが完了したら、ホストの詳細ダイアログを閉じます。
12.4.2. virt-manager を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。これを行うには、停止するストレージプールを選択し、ストレージウィンドウの下部にある赤い X アイコンをクリックします。
図12.18 停止アイコン
- ごみ箱アイコンをクリックして、ストレージプールを削除します。このアイコンは、最初にストレージプールを停止した場合にのみ有効になります。
12.4.3. virsh を使用した LVM ベースのストレージプールの作成
/dev/sdc
) からの guest_images_lvm という名前のプールの例を使用します。これは単なる例であり、設定は必要に応じて置き換える必要があります。
手順12.3 virsh を使用した LVM ベースのストレージプールの作成
- プール名 guest_images_lvm を定義します。
# virsh pool-define-as guest_images_lvm logical - - /dev/sdc libvirt_lvm \ /dev/libvirt_lvm Pool guest_images_lvm defined
- 指定された名前に従ってプールを構築します。既存のボリュームグループを使用している場合は、この手順をスキップしてください。
# virsh pool-build guest_images_lvm Pool guest_images_lvm built
- 新しいプールを初期化します。
# virsh pool-start guest_images_lvm Pool guest_images_lvm started
- vgs コマンドを使用してボリュームグループ情報を表示します。
# vgs VG #PV #LV #SN Attr VSize VFree libvirt_lvm 1 0 0 wz--n- 465.76g 465.76g
- 自動的に開始するようにプールを設定します。
# virsh pool-autostart guest_images_lvm Pool guest_images_lvm marked as autostarted
- virsh コマンドを使用して、使用可能なプールを一覧表示します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_lvm active yes
- 次のコマンドは、このプール内に 3 つのボリューム (volume1、volume2、および volume3) を作成する方法を示しています。
# virsh vol-create-as guest_images_lvm volume1 8G Vol volume1 created # virsh vol-create-as guest_images_lvm volume2 8G Vol volume2 created # virsh vol-create-as guest_images_lvm volume3 8G Vol volume3 created
- virsh コマンドを使用して、このプールで使用可能なボリュームをリストします。
# virsh vol-list guest_images_lvm Name Path ----------------------------------------- volume1 /dev/libvirt_lvm/volume1 volume2 /dev/libvirt_lvm/volume2 volume3 /dev/libvirt_lvm/volume3
- 次の 2 つのコマンド (lvscan および lvs) は、新しく作成されたボリュームに関する詳細情報を表示します。
# lvscan ACTIVE '/dev/libvirt_lvm/volume1' [8.00 GiB] inherit ACTIVE '/dev/libvirt_lvm/volume2' [8.00 GiB] inherit ACTIVE '/dev/libvirt_lvm/volume3' [8.00 GiB] inherit # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert volume1 libvirt_lvm -wi-a- 8.00g volume2 libvirt_lvm -wi-a- 8.00g volume3 libvirt_lvm -wi-a- 8.00g
12.4.4. virsh を使用したストレージプールの削除
- 同じプールを使用している他のゲストとの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
# virsh pool-destroy guest_images_disk
- オプションで、ストレージプールが存在するディレクトリーを削除する場合は、次のコマンドを使用します。
# virsh pool-delete guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
12.5. iSCSI ベースのストレージプール
12.5.1. ソフトウェア iSCSI ターゲットの設定
手順12.4 iSCSI ターゲットの作成
必要なパッケージのインストール
scsi-target-utils パッケージと依存するすべてのパッケージをインストールします。# yum install scsi-target-utils
tgtd サービスを開始します
tgtd サービスは物理マシンの SCSI ターゲットをホストし、iSCSI プロトコルを使用して物理マシンターゲットをホストします。tgtd サービスを開始し、chkconfig コマンドで再起動した後、サービスを永続化します。# service tgtd start # chkconfig tgtd on
オプション:LVM ボリュームを作成する
LVM ボリュームは、iSCSI バッキングイメージに役立ちます。LVM スナップショットとサイズ変更は、ゲスト仮想マシンにとって有益な場合があります。この例では、iSCSI を使用してゲスト仮想マシンをホストするために、RAID5 アレイ上の virtstore という名前の新しいボリュームグループに virtimage1 という名前の LVM イメージを作成します。RAID アレイを作成する
ソフトウェア RAID5 アレイの作成については、『Red Hat Enterprise Linux デプロイメントガイド』 で説明されています。LVM ボリュームグループを作成する
vgcreate コマンドを使用して、virtstore という名前のボリュームグループを作成します。# vgcreate virtstore /dev/md1
LVM 論理ボリュームを作成する
lvcreate コマンドを使用して、サイズが 20GB の virtstore ボリュームグループに virtimage1 という名前の論理ボリュームグループを作成します。# lvcreate --size 20G -n virtimage1 virtstore
新しい論理ボリューム virtimage1 は、iSCSI で使用する準備ができています。
オプション: ファイルベースのイメージを作成します
テストにはファイルベースのストレージで十分ですが、実稼働環境や重要な I/O アクティビティーにはお勧めしません。このオプションの手順では、iSCSI ターゲット用に virtimage2.img という名前のファイルベースのイメージを作成します。イメージの新しいディレクトリーを作成します
イメージを保存するための新しいディレクトリーを作成します。ディレクトリーには正しい SELinux コンテキストが必要です。# mkdir -p /var/lib/tgtd/virtualization
イメージファイルを作成する
サイズが 10GB の virtimage2.img という名前のイメージを作成します。# dd if=/dev/zero of=/var/lib/tgtd/virtualization/virtimage2.img bs=1M seek=10000 count=0
SELinux ファイルコンテキストを設定する
新しいイメージとディレクトリーの正しい SELinux コンテキストを設定します。# restorecon -R /var/lib/tgtd
新しいファイルベースのイメージ virtimage2.img は、iSCSI で使用する準備ができています。
ターゲットを作成する
ターゲットは、XML エントリーを/etc/tgt/targets.conf
ファイルに追加することで作成できます。target
属性には、iSCSI Qualified Name (IQN) が必要です。IQN の形式は次のとおりです。iqn.yyyy-mm.reversed domain name:optional identifier text
詳細は以下のようになります。- yyyy-mmは、デバイスが開始された年と月を表します (例: 2010-05)。
- 逆ドメイン名 は、逆のホスト物理マシンのドメイン名です (たとえば、IQN の server1.example.com は com.example.server1 になります)。と
- オプションの識別子テキスト は、スペースを含まない任意のテキスト文字列であり、管理者がデバイスまたはハードウェアを識別するのに役立ちます。
この例では、server1.example.com のオプションの手順で作成された 2 種類のイメージの iSCSI ターゲットを、オプションの識別子 トライアル を使用して作成します。/etc/tgt/targets.conf
ファイルに以下を追加します。<target iqn.2010-05.com.example.server1:iscsirhel6guest> backing-store /dev/virtstore/virtimage1 #LUN 1 backing-store /var/lib/tgtd/virtualization/virtimage2.img #LUN 2 write-cache off </target>
/etc/tgt/targets.conf
ファイルにdefault-driver iscsi
ドライバータイプを iSCSI として設定する行。ドライバーはデフォルトで iSCSI を使用します。重要この例では、アクセス制御なしでグローバルにアクセス可能なターゲットを作成します。安全なアクセスの実装については、scsi-target-utils を参照してください。tgtd サービスを再起動します
tgtd
サービスを再起動して、設定の変更を再ロードします。# service tgtd restart
iptable の設定
iptables を使用した iSCSI アクセス用にポート 3260 を開きます。# iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT # service iptables save # service iptables restart
新しいターゲットを確認します
新しいターゲットを表示して、tgt-admin--show コマンドでセットアップが成功したことを確認します。# tgt-admin --show Target 1: iqn.2010-05.com.example.server1:iscsirhel6guest System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB Online: Yes Removable media: No Backing store type: rdwr Backing store path: None LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 20000 MB Online: Yes Removable media: No Backing store type: rdwr Backing store path: /dev/virtstore/virtimage1 LUN: 2 Type: disk SCSI ID: IET 00010002 SCSI SN: beaf12 Size: 10000 MB Online: Yes Removable media: No Backing store type: rdwr Backing store path: /var/lib/tgtd/virtualization/virtimage2.img Account information: ACL information: ALL
警告ACL リストは all に設定されています。これにより、ローカルネットワーク上のすべてのシステムがこのデバイスにアクセスできるようになります。実稼働環境用にホスト物理マシンアクセス ACL を設定することをお勧めします。オプション: テスト検出
新しい iSCSI デバイスが検出可能かどうかをテストします。# iscsiadm --mode discovery --type sendtargets --portal server1.example.com 127.0.0.1:3260,1 iqn.2010-05.com.example.server1:iscsirhel6guest
オプション: デバイスの接続をテストします
新しいデバイス (iqn.2010-05.com.example.server1:iscsirhel6guest) を接続して、デバイスを接続できるかどうかを判断します。# iscsiadm -d2 -m node --login scsiadm: Max file limits 1024 1024 Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260] Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260] successful.
デバイスの取り外し# iscsiadm -d2 -m node --logout scsiadm: Max file limits 1024 1024 Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260 Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260] successful.
12.5.2. virt-manager への iSCSI ターゲットの追加
手順12.5 virt-manager への iSCSI デバイスの追加
ホスト物理マシンのストレージタブを開きます
Connection Details ウィンドウの Storage タブを開きます。- virt-manager を開きます。
- メインの virt-manager ウィンドウからホスト物理マシンを選択します。Edit menu をクリックして、Connection Details を選択します。
図12.19 接続の詳細
- Storage タブをクリックします。
図12.20 ストレージメニュー
新しいプールの追加 (パート 1)
+ ボタン (プールの追加ボタン) を押します。Add a New Storage Pool ウィザードが表示されます。図12.21 iscsi ストレージプールの名前とタイプを追加します
ストレージプールの名前を選択し、タイプを iscsi に変更し、Forward を押して続行します。新しいプールの追加 (パート 2)
このメニューのフィールドを完成させるには、「iSCSI ベースのストレージプール」 と 手順12.4「iSCSI ターゲットの作成」 で使用した情報が必要です。- iSCSI ソースとターゲットを入力します。フォーマットはゲスト仮想マシンによって処理されるため、Format オプションは使用できません。Target Path を編集することはお勧めしません。デフォルトのターゲットパス値
/dev/disk/by-path/
は、そのディレクトリーにドライブパスを追加します。ターゲットパスは、移行するすべてのホスト物理マシンで同じである必要があります。 - iSCSI ターゲットのホスト名または IP アドレスを入力します。この例では
host1.example.com
を使用しています。 - Source Path フィールドに、iSCSI ターゲット IQN を入力します。「iSCSI ベースのストレージプール」 の 手順12.4「iSCSI ターゲットの作成」 を見ると、これは
/etc/tgt/targets.conf ファイル
で追加した情報であることがわかります。この例ではiqn.2010-05.com.example.server1:iscsirhel6guest
を使用しています。 - IQN チェックボックスをオンにして、イニシエータの IQN を入力します。この例では
iqn.2010-05.com.example.host1:iscsirhel6
を使用しています。 - Finish をクリックして、新しいストレージプールを作成します。
図12.22 iscsi ストレージプールを作成する
12.5.3. virt-manager を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。これを行うには、停止するストレージプールを選択し、ストレージウィンドウの下部にある赤い X アイコンをクリックします。
図12.23 停止アイコン
- ごみ箱アイコンをクリックして、ストレージプールを削除します。このアイコンは、最初にストレージプールを停止した場合にのみ有効になります。
12.5.4. virsh を使用した iSCSI ベースのストレージプールの作成
pool-define-as を使用して、コマンドラインからプールを定義します
ストレージプールの定義は、virsh コマンドラインツールを使用して作成できます。virsh を使用してストレージプールを作成すると、システム管理者がスクリプトを使用して複数のストレージプールを作成する場合に役立ちます。virsh pool-define-as コマンドには、次の形式で受け入れられるいくつかのパラメーターがあります。virsh pool-define-as
name type source-host source-path source-dev source-name
targetパラメーターの説明は次のとおりです。- type
- このプールを特定のタイプ、たとえば iscsi として定義します
- name
- 一意である必要があり、ストレージプールの名前を設定します
- source-host および source-path
- それぞれホスト名と iSCSIIQN
- source-dev および source-name
- これらのパラメーターは iSCSI ベースのプールには必要ありません。フィールドを空白のままにするには、- 文字を使用します。
- target
- ホスト物理マシンに iSCSI デバイスをマウントする場所を定義します
以下の例では、前の手順と同じ iSCSI ベースのストレージプールを作成します。# virsh pool-define-as --name scsirhel6guest --type iscsi \ --source-host server1.example.com \ --source-dev iqn.2010-05.com.example.server1:iscsirhel6guest --target /dev/disk/by-path Pool iscsirhel6guest defined
ストレージプールがリストされていることを確認します
ストレージプールオブジェクトが正しく作成され、状態が次のように報告されることを確認しますinactive
。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes iscsirhel6guest inactive no
ストレージプールを起動します。
これには、virsh コマンド pool-start を使用します。pool-start は、ディレクトリーストレージプールを有効にし、ボリュームとゲスト仮想マシンに使用できるようにします。# virsh pool-start guest_images_disk Pool guest_images_disk started # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes iscsirhel6guest active no
自動起動をオンにします
オンにするautostart
ストレージプール用。Autostart は、サービスの開始時にストレージプールを開始するようにlibvirtd
サービスを設定します。# virsh pool-autostart iscsirhel6guest Pool iscsirhel6guest marked as autostarted
iscsirhel6guest プールに自動開始が設定されていることを確認します。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes iscsirhel6guest active yes
ストレージプールの設定を確認する
ストレージプールが正しく作成され、サイズが正しく報告され、状態が次のように報告されることを確認しますrunning
。# virsh pool-info iscsirhel6guest Name: iscsirhel6guest UUID: afcc5367-6770-e151-bcb3-847bc36c5e28 State: running Persistent: unknown Autostart: yes Capacity: 100.31 GB Allocation: 0.00 Available: 100.31 GB
12.5.5. virsh を使用したストレージプールの削除
- 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
# virsh pool-destroy guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
12.6. NFS ベースのストレージプール
12.6.1. virt-manager を使用した NFS ベースのストレージプールの作成
ホスト物理マシンのストレージタブを開きます
Host Details ウィンドウで Storage タブを開きます。- virt-manager を開きます。
- メインの virt-manager ウィンドウからホスト物理マシンを選択します。Edit menu をクリックして、Connection Details を選択します。
図12.24 接続の詳細
- Storage タブをクリックします。
図12.25 ストレージタブ
新しいプールを作成する (パート 1)
+ ボタン (プールの追加ボタン) を押します。Add a New Storage Pool ウィザードが表示されます。図12.26 NFS 名とタイプを追加します
ストレージプールの名前を選択し、Forward を押して続行します。新しいプールを作成する (パート 2)
デバイスのターゲットパス、ホスト名、および NFS 共有パスを入力します。Format オプションを NFS または auto (タイプを検出するため) に設定します。ターゲットパスは、移行するすべてのホスト物理マシンで同一である必要があります。NFS サーバーのホスト名または IP アドレスを入力します。この例ではserver1.example.com
を使用しています。NFS パスを入力します。この例では/nfstrial
を使用しています。図12.27 NFS ストレージプールを作成する
Finish を押して、新しいストレージプールを作成します。
12.6.2. virt-manager を使用したストレージプールの削除
- 同じプールを使用している他のゲストとの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。これを行うには、停止するストレージプールを選択し、ストレージウィンドウの下部にある赤い X アイコンをクリックします。
図12.28 停止アイコン
- ごみ箱アイコンをクリックして、ストレージプールを削除します。このアイコンは、最初にストレージプールを停止した場合にのみ有効になります。
12.7. GlusterFS ストレージプール
12.8. SCSI デバイスでの NPIV 仮想アダプター (vHBA) の使用
12.8.1. vHBA の作成
手順12.6 vHBA の作成
ホストシステムで HBA の場所を特定します。
ホストシステム上の HBA を見つけるには、ホストシステム上の SCSI デバイスを調べ、vport
機能を持つscsi_host
を見つけます。以下のコマンドを実行し、scsi_host
リストを取得します。# virsh nodedev-list --cap scsi_host scsi_host0 scsi_host1 scsi_host2 scsi_host3 scsi_host4
各scsi_host
について、次のコマンドを実行して、デバイス XML の行<capability type='vport_ops'>
を調べます。これは、vport
ケーパビリティを持つscsi_host
を示しています。# virsh nodedev-dumpxml scsi_hostN
HBA の詳細を確認します。
virsh nodedev-dumpxml HBA_device コマンドを実行して、HBA の詳細を表示します。virsh nodedev-dumpxml コマンドからの XML 出力には、フィールドが一覧表示されます<name>
、<wwnn>
、と<wwpn>
、vHBA の作成に使用されます。<max_vports>
の値は、サポートされる vHBA の最大数を示しています。# virsh nodedev-dumpxml scsi_host3 <device> <name>scsi_host3</name> <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path> <parent>pci_0000_10_00_0</parent> <capability type='scsi_host'> <host>3</host> <capability type='fc_host'> <wwnn>20000000c9848140</wwnn> <wwpn>10000000c9848140</wwpn> <fabric_wwn>2002000573de9a81</fabric_wwn> </capability> <capability type='vport_ops'> <max_vports>127</max_vports> <vports>0</vports> </capability> </capability> </device>
この例では、<max_vports>
には、HBA 設定で使用できる仮想ポートが 127 個あることを示しています。<vports>
値は、現在使用されている仮想ポートの数を示します。この値は、vHBA の作成後に更新されます。vHBA ホストデバイスの作成
vHBA ホスト用に次のような XML ファイル (この例では vhba_host3.xml という名前) を作成します。# cat vhba_host3.xml <device> <parent>scsi_host3</parent> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>
<parent>
フィールドは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device>
タグの詳細は、ホスト用の新しい vHBA デバイスを作成するために、次の手順で使用されます。nodedev
XML フォーマットの詳細は、http://libvirt.org/formatnode.htmlを参照してください。vHBA ホストデバイスに新しい vHBA を作成します。
vhba_host3 に vHBA を作成するには、virshnodedev-create コマンドを使用します。# virsh nodedev-create vhba_host3.xml Node device scsi_host5 created from vhba_host3.xml
vHBA の確認
virsh nodedev-dumpxml コマンドを使用して、新しい vHBA の詳細 (scsi_host5
) を確認します。# virsh nodedev-dumpxml scsi_host5 <device> <name>scsi_host5</name> <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path> <parent>scsi_host3</parent> <capability type='scsi_host'> <host>5</host> <capability type='fc_host'> <wwnn>5001a4a93526d0a1</wwnn> <wwpn>5001a4ace3ee047d</wwpn> <fabric_wwn>2002000573de9a81</fabric_wwn> </capability> </capability> </device>
12.8.2. vHBA を使用したストレージプールの作成
- libvirt コードは、virsh コマンドの出力を使用すると、LUN のパスを簡単に見つけることができます。また、
- 仮想マシンの移行には、ターゲットマシンで同じ vHBA 名を持つストレージプールの定義と起動のみが必要です。これを行うには、仮想マシンの XML 設定で、vHBA LUN、libvirt ストレージプール、およびボリューム名を指定する必要があります。例は、「vHBALUN を使用するように仮想マシンを設定する」 を参照してください。
SCSI ストレージプールを作成する
vHBA 設定を作成するには、まず vHBA に基づいて libvirt'scsi'
ストレージプール XML ファイルを以下のフォーマットで作成します。注記手順12.6「vHBA の作成」 で作成した vHBA をホスト名として使用することを確認し、vHBA 名 scsi_hostN を hostN に修正してストレージプール設定に使用します。この例では、vHBA の名前は scsi_host5 であり、Red Hat Enterprise Linux6 libvirt ストレージプールで<adaptername='host5'/>
として指定されています。<path>
の値には、システム上の/dev/disk/by-{path|id|uuid|label} の
いずれかの場所など、安定した場所を使用することをお勧めします。<path>
および<target>
内の要素の詳細は、http://libvirt.org/formatstorage.htmlを参照してください。この例では、'scsi'
ストレージプールの名前は vhbapool_host3.xml です。<pool type='scsi'> <name>vhbapool_host3</name> <uuid>e9392370-2917-565e-692b-d057f46512d6</uuid> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> <adapter name='host5'/> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0700</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
プールを定義する
ストレージプール (この例では vhbapool_host3 という名前) を定義するには、virshpool-define コマンドを使用します。# virsh pool-define vhbapool_host3.xml Pool vhbapool_host3 defined from vhbapool_host3.xml
プールを開始します
次のコマンドでストレージプールを開始します。# virsh pool-start vhbapool_host3 Pool vhbapool_host3 started
自動起動を有効にする
最後に、後続のホストの再起動で仮想マシンで使用する vHBA が自動的に定義されるようにするには、ストレージプールの自動開始機能を設定します (この例では、vhbapool_host3 という名前のプールに対して)。# virsh pool-autostart vhbapool_host3
12.8.3. vHBALUN を使用するように仮想マシンを設定する
利用可能な LUN を見つける
まず、virsh vol-list コマンドを使用して、vHBA で使用可能な LUN のリストを生成します。以下に例を示します。# virsh vol-list vhbapool_host3 Name Path ------------------------------------------------------------------------------ unit:0:4:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0 unit:0:5:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0
表示される LUN 名のリストは、仮想マシン設定でディスクボリュームとして使用できます。vHBALUN を仮想マシンに追加します
仮想マシンの XML で指定して、仮想マシン に vHBA LUN を追加します。<disk>
パラメーターに、lun
またはdisk
としてデバイスタイプを指定し- は、
<source>
パラメーターでソースデバイスを指定します。これは、/dev/sdaN
として入力することも、udev によって生成されたシンボリックリンクとして/dev/disk/by-path|by-id|by-uuid|by-label
として入力することもできます。これは、virsh vol-list pool コマンドを実行することで見つけることができます。
以下に例を示します。<disk type='block' device='lun'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/> <target dev='sda' bus='scsi'/> </disk>
12.8.4. vHBA ストレージプールを破棄する
# virsh pool-destroy vhbapool_host3
# virsh nodedev-destroy scsi_host5
# virsh nodedev-list --cap scsi_host
scsi_host5
結果のリストに表示されなくなります。
第13章 ボリューム
13.1. ボリュームの作成
# virsh vol-create-as guest_images_disk volume1 8G
Vol volume1 created
# virsh vol-create-as guest_images_disk volume2 8G
Vol volume2 created
# virsh vol-create-as guest_images_disk volume3 8G
Vol volume3 created
# virsh vol-list guest_images_disk
Name Path
-----------------------------------------
volume1 /dev/sdb1
volume2 /dev/sdb2
volume3 /dev/sdb3
# parted -s /dev/sdb print
Model: ATA ST3500418AS (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
2 17.4kB 8590MB 8590MB primary
3 8590MB 17.2GB 8590MB primary
1 21.5GB 30.1GB 8590MB primary
13.2. クローンボリューム
--pool
引数が必要です。コマンドの残りの部分では、クローンを作成するボリューム (volume3) と、クローンを作成した新しいボリュームの名前 (clone1) を指定します。virsh vol-list コマンドは、ストレージプール (guest_images_disk) に存在するボリュームを一覧表示します。
# virsh vol-clone --pool guest_images_disk volume3 clone1 Vol clone1 cloned from volume3 # virsh vol-list guest_images_disk Name Path ----------------------------------------- volume1 /dev/sdb1 volume2 /dev/sdb2 volume3 /dev/sdb3 clone1 /dev/sdb4 # parted -s /dev/sdb print Model: ATA ST3500418AS (scsi) Disk /dev/sdb: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size File system Name Flags 1 4211MB 12.8GB 8595MB primary 2 12.8GB 21.4GB 8595MB primary 3 21.4GB 30.0GB 8595MB primary 4 30.0GB 38.6GB 8595MB primary
13.3. ゲストへのストレージデバイスの追加
13.3.1. ゲストへのファイルベースストレージの追加
手順13.1 ファイルベースのストレージの追加
- ストレージファイルを作成するか、既存のファイル (IMG ファイルなど) を使用します。次のコマンドは両方とも、ゲストの追加ストレージとして使用できる 4GB のファイルを作成することに注意してください。
- ファイルベースのストレージイメージには、事前に割り当てられたファイルをお勧めします。次に示すように、次の dd コマンドを使用して、事前に割り当てられたファイルを作成します。
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
- または、事前に割り当てられたファイルの代わりにスパースファイルを作成します。スパースファイルははるかに高速に作成され、テストに使用できますが、データの整合性とパフォーマンスの問題があるため、実稼働環境にはお勧めしません。
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
- 新しいファイルに <disk> 要素を書き込んで、追加のストレージを作成します。この例では、このファイルは
NewStorage.xml
と呼ばれます。<disk>
要素は、ディスクのソースと仮想ブロックデバイスのデバイス名を記述します。デバイス名は、ゲスト内のすべてのデバイスで一意である必要があり、ゲストが仮想ブロックデバイスを見つけるバスを識別します。次の例では、ソースがFileName.img
という名前のファイルベースのストレージコンテナーである virtio ブロックデバイスを定義しています。<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <target dev='vdb'/> </disk>
デバイス名は hd または sd で始めることもでき、それぞれ IDE と SCSI ディスクを識別します。設定ファイルには、新しいデバイスのバス上の位置を指定する<address>
サブ要素を含めることもできます。virtio ブロックデバイスの場合、これは PCI アドレスである必要があります。<address>
サブ要素を省略すると、libvirt は次に使用可能な PCI スロットを見つけて割り当てることができます。 - 次のように CD-ROM を接続します。
<disk type='file' device='cdrom'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <readonly/> <target dev='hdc'/> </disk >
NewStorage.xml
で定義されたデバイスをゲスト (Guest1
) とともに追加します。# virsh attach-device --config Guest1 ~/NewStorage.xml
注記この変更は、ゲストが破棄されて再起動された後にのみ適用されます。さらに、永続デバイスは、永続ドメイン、つまり virsh define コマンドで設定が保存されたドメインにのみ追加できます。ゲストが実行中で、ゲストが破棄されるまで新しいデバイスを一時的に追加する場合は、-config
オプションを省略します。# virsh attach-device Guest1 ~/NewStorage.xml
注記virsh コマンドを使用すると、XML ファイルを作成しなくても、より単純な構文で限られた数のパラメーターを設定できる attach-disk コマンドを使用できます。attach-disk コマンドは、次に示すように、前述の attach-device コマンドと同様の方法で使用されます。# virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img vdb --cache none --driver qemu --subdriver raw
virsh attach-disk コマンドは--config
オプションも受け入れることに注意してください。- ゲストマシンを起動します (現在実行されていない場合)。
# virsh start Guest1
注記次の手順は Linux ゲスト固有です。他のオペレーティングシステムは、さまざまな方法で新しいストレージデバイスを処理します。その他のシステムについては、そのオペレーティングシステムのドキュメントを参照してください。 ディスクドライブのパーティション分割
これで、ゲストには/dev/vdb
というハードディスクデバイスがあります。。必要に応じて、このディスクドライブをパーティションに分割し、パーティションをフォーマットします。追加したデバイスが表示されない場合は、ゲストのオペレーティングシステムのディスクホットプラグに問題があることを示しています。- 新しいデバイスの fdisk を起動します。
# fdisk /dev/vdb Command (m for help):
- 新しいパーティションのために、
n
と入力します。 - 次のように表示されます。
Command action e extended p primary partition (1-4)
プライマリーパーティションには、p
と入力します。 - 使用可能なパーティション番号を選択します。この例では、
1
を入力して、最初のパーティションを選択します。Partition number (1-4): 1
Enter
を押して、デフォルトの最初のシリンダーを入力します。First cylinder (1-400, default 1):
- パーティションのサイズを選択します。この例では、Enter を押してディスク全体を割り当てます。
Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
- t を入力して、パーティションタイプを設定します。
Command (m for help): t
- 前の手順で作成したパーティションを選択します。この例では、パーティションが 1 つしか作成されておらず、fdisk がパーティション 1 を自動的に選択したため、パーティション番号は 1 です。
Partition number (1-4): 1
- Linux パーティションの場合は 83 と入力します。
Hex code (type L to list codes): 83
- w と入力して変更を書き込み、終了します。
Command (m for help): w
ext3
ファイルシステムで新しいパーティションをフォーマットします。# mke2fs -j /dev/vdb1
- マウントディレクトリーを作成し、ゲストにディスクをマウントします。この例では、ディレクトリーは myfiles にあります。
# mkdir /myfiles # mount /dev/vdb1 /myfiles
これで、ゲストは追加の仮想化されたファイルベースのストレージデバイスを使用できます。ただし、ゲストの/etc/fstab
ファイルで定義されていない限り、このストレージは再起動後に永続的にマウントされないことに注意してください。/dev/vdb1 /myfiles ext3 defaults 0 0
13.3.2. ゲストへのハードドライブおよびその他のブロックデバイスの追加
手順13.2 ゲストへの物理ブロックデバイスの追加
- この手順では、ホスト物理マシン上のハードドライブをゲストに追加する方法について説明します。これは、CD-ROM、DVD、フロッピーデバイスを含むすべての物理ブロックデバイスに適用されます。ハードディスクデバイスをホストの物理マシンに物理的に接続します。ドライブにデフォルトでアクセスできない場合は、ホスト物理マシンを設定します。
- 次のいずれかを行います。
- 新しいファイルに disk 要素を書き込んで、追加のストレージを作成します。この例では、このファイルは
NewStorage.xml
と呼ばれます。次の例は、ホスト物理マシンパーティション/dev/sr0
用の追加のデバイスベースのストレージコンテナーを含む設定ファイルセクションです。<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/sr0'/> <target dev='vdc' bus='virtio'/> </disk>
- 前のセクションの手順に従って、デバイスをゲスト仮想マシンに接続します。または、
virsh attach-disk
示されているように、コマンド:# virsh attach-disk Guest1 /dev/sr0 vdc
次のオプションが使用可能であることに注意してください。- virsh attach-disk コマンドは、図のように
--config
、--type
、および--mode
オプションも受け付けます。# virsh attach-disk Guest1 /dev/sr0 vdc --config --type cdrom --mode readonly
- さらに、
--type
、デバイスがハードディスクの場合は、--type disk
も受け付けます。
- ゲスト仮想マシンには、Linux では
/dev/vdc
(またはゲスト仮想マシン OS が選択するものに応じて同様のもの) または Windows ではD: drive
(たとえば) と呼ばれる新しいハードディスクデバイスがあります。これで、ゲスト仮想マシンのオペレーティングシステムの標準手順に従って、ゲスト仮想マシンからディスクを初期化できます。例は、手順13.1「ファイルベースのストレージの追加」 を参照してください。警告ゲストにブロックデバイスを追加するときは、セキュリティー上の考慮事項に必ず従ってください。この情報については、『Red Hat Enterprise Linux 仮想化セキュリティーガイド』 を参照してください。https://access.redhat.com/site/documentation/。重要ゲスト仮想マシンには、ディスク全域、またはブロックデバイス全域 (例:/dev/sdb
) への書き込みアクセス権を付与しないでください。ブロックデバイス全域にアクセスを持つゲスト仮想マシンは、ボリュームラベルを修正できる場合があり、これがホスト物理マシンシステムの攻撃に使用される可能性があります。パーティション (例:/dev/sdb1
) または LVM ボリュームを使用して、この問題を回避してください。
13.4. ボリュームの削除と削除
# virsh vol-delete --pool guest_images volume1 Vol volume1 deleted
第14章 virsh を使用したゲスト仮想マシンの管理
14.1. 一般的なコマンド
14.1.1. help
$ virsh help pool
Storage Pool (help keyword 'pool'):
find-storage-pool-sources-as find potential storage pool sources
find-storage-pool-sources discover potential storage pool sources
pool-autostart autostart a pool
pool-build build a pool
pool-create-as create a pool from a set of args
pool-create create a pool from an XML file
pool-define-as define a pool from a set of args
pool-define define (but don't start) a pool from an XML file
pool-delete delete a pool
pool-destroy destroy (stop) a pool
pool-dumpxml pool information in XML
pool-edit edit XML configuration for a storage pool
pool-info storage pool information
pool-list list pools
pool-name convert a pool UUID to pool name
pool-refresh refresh a pool
pool-start start a (previously defined) inactive pool
pool-undefine undefine an inactive pool
pool-uuid convert a pool name to pool UUID
$ virsh help vol-path
NAME
vol-path - returns the volume path for a given volume name or key
SYNOPSIS
vol-path <vol> [--pool <string>]
OPTIONS
[--vol] <string> volume name or key
--pool <string> pool name or uuid
14.1.2. 終了して終了します
$ virsh exit
$ virsh quit
14.1.3. version
$ virsh version
Compiled against library: libvirt 1.1.1
Using library: libvirt 1.1.1
Using API: QEMU 1.1.1
Running hypervisor: QEMU 1.5.3
14.1.4. 引数の表示
--shell
オプションを使用すると、出力は必要に応じて一重引用符で囲まれるため、シェルコマンドでの再利用に適しています。--xml
オプションを使用すると、出力は XML ファイルでの使用に適したものになります。たとえば、virsh echo --shell "hello world" というコマンドは、出力 'hello world'
を送信します。
14.1.5. connect
- xen:/// - ローカルの Xen ハイパーバイザーに接続します。
- qemu:///system- ルートとしてローカルで QEMU および KVM ドメインを監視するデーモンに接続します。
- xen:///session- ユーザーとしてローカルでユーザーの QEMU および KVM ドメインのセットに接続します。
- lxc:/// - ローカルの Linux コンテナーに接続します。
$ virsh connect {name|URI}
{name}
は、ハイパーバイザーのマシン名 (ホスト名) または URL (virsh uri コマンドの出力) です。読み取り専用接続を開始するには、上記のコマンドに --readonly
を追加します。URI の詳細については、リモート URI を参照してください。URI がわからない場合は、virsh uri コマンドを実行すると以下のようなメッセージが表示されます。
$ virsh uri
qemu:///session
14.1.6. 基本情報の表示
- $ hostname- ハイパーバイザーのホスト名を表示します
- $ sysinfo- 利用可能な場合、ハイパーバイザーのシステム情報の XML 表現を表示します
14.1.7. NMI の挿入
$ virsh inject-nmi guest-1
14.2. virsh を使用したデバイスの接続および更新
手順14.1 ゲスト仮想マシンが使用するホットプラグ USB デバイス
- 次のコマンドを使用して、接続する USB デバイスを見つけます。
# lsusb -v idVendor 0x17ef Lenovo idProduct 0x480f Integrated Webcam [R5U877]
- XML ファイルを作成し、論理名 (
usb_device.xml
など) を付けます。検索で表示されたとおりにベンダー ID と製品 ID をコピーしてください。図14.1 USB デバイスの XML スニペット
<hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x17ef'/> <product id='0x480f'/> </source> </hostdev> ...
- 次のコマンドでデバイスを接続します。
# virsh attach-device rhel6
--file usb_device.xml
--config
この例では、rhel6 はゲスト仮想マシンの名前であり、usb_device.xml は前の手順で作成したファイルです。次回の再起動時に変更を有効にする場合は、--config
オプションを使用します。この変更を永続的にする場合は、--persistent
オプションを使用します。変更を現在のドメインで有効にする場合は、--current
オプションを使用します。詳細については、Virsh の man ページを参照してください。 - デバイスを切り離す (ホットアンプラグ) 場合は、次のコマンドを実行します。
# virsh detach-device rhel6
--file usb_device.xml
この例では、rhel6 はゲスト仮想マシンの名前であり、usb_device.xml は前の手順で添付したファイルです。
14.3. インターフェイスデバイスの接続
--live-
- 実行中のドメインから値を取得します--config
- システムの次回起動時に使用する値を取得します。--current-
- 現在のドメインの状態に応じて値を取得します--persistent-
- オフラインドメインの場合は--config
のように動作し、実行中のドメインの場合は--live
のように動作します。--target
- ゲスト仮想マシンのターゲットデバイスを示します。--mac-
- これを使用して、ネットワークインターフェイスの MAC アドレスを指定します--script
- これは、デフォルトのパスの代わりに、ブリッジを処理するスクリプトファイルへのパスを指定します。--model-
- これを使用してモデルタイプを指定します。--inbound
- インターフェイスの着信帯域幅を制御します。指定できる値は、average
、peak
、およびburst
です。--outbound
- インターフェイスのアウトバウンド帯域幅を制御します。指定できる値は、average
、peak
、およびburst
です。
network
、またはデバイスへの bridge
を示すブリッジのいずれかです。source はデバイスのソースです。接続したデバイスを削除する場合は、virsh detach-device を実行します。
14.4. CDROM のメディアの変更
# change-media domain path source --eject
--insert
--update
--current
--live
--config
--force
--path
- ディスクデバイスの完全修飾パスまたはターゲットが含まれる文字列--source
- メディアのソースが含まれる文字列--eject-
- メディアを排出します--insert
- メディアを挿入します--update-
- メディアを更新します--current
---live
および--config
のいずれかまたは両方を指定できます。これは、ハイパーバイザードライバーの実装に依存します。--live-
- 実行中のドメインのライブ設定を変更します--config-
- 永続的な設定を変更し、次回の起動時に影響が観察されます--force-
- メディアの変更を強制します
14.5. ドメインコマンド
14.5.1. 起動時に自動的に開始されるドメインの設定
--disable
オプションを使用すると、自動起動が無効になります。
# virsh autostart rhel6
# virsh autostart rhel6 --disable
14.5.2. ゲスト仮想マシンのシリアルコンソールの接続
--force
オプションは、コンソール接続を強制するか、disconnect と一緒に使用すると、接続を切断します。--safe
オプションを使用すると、安全なコンソール処理がサポートされている場合にのみゲストが接続できます。
$ virsh console virtual_machine --safe
14.5.3. XML ファイルを使用したドメインの定義
14.5.4. ドメインの説明とタイトルの編集と表示
# virsh desc [domain-name] [[--live
] [--config
] | [--current
]] [--title
] [--edit
] [--new-desc
New description or title message]
--live
または --config
は、このコマンドがドメインのライブ定義または永続定義のどちらで機能するかを選択します。--live
と --config
の両方が指定されている場合、最初に --config
オプションが実装され、コマンドに入力された説明が、ライブ設定と永続設定設定の両方に適用される新しい設定設定になります。--current
オプションは、現在の状態の設定を変更または取得し、永続的ではありません。--live
、--config
、--current の
いずれも指定されていない場合、--current
オプションが使用されます。--edit
オプションは、現在の説明またはタイトルの内容を含むエディターを開き、内容を後で保存することを指定します。--title
オプションを使用すると、ドメインのタイトルフィールドのみが表示または変更され、説明は含まれません。また、コマンドで --edit
も --new-desc
も使用されていない場合は、説明のみが表示され、変更できません。
$ virsh desc testvm--current
--title
TestVM-4F--new-desc
Guest VM on fourth floor
14.5.5. デバイスブロック統計の表示
--human
オプションを使用します。
# virsh domblklist rhel6 Target Source ------------------------------------------------ vda /VirtualMachines/rhel6.img hdc - # virsh domblkstat --human rhel6 vda Device: vda number of read operations: 174670 number of bytes read: 3219440128 number of write operations: 23897 number of bytes written: 164849664 number of flush operations: 11577 total duration of reads (ns): 1005410244506 total duration of writes (ns): 1085306686457 total duration of flushes (ns): 340645193294
14.5.6. ネットワーク統計の取得
# domifstat rhel6 eth0
14.5.7. ドメインの仮想インターフェイスのリンク状態の変更
# domif-setlink [domain][interface-device][state]{--config
}
--config
オプションを使用する必要があることに注意してください。互換性の理由から、--persistent
は --config
のエイリアスであることに注意してください。interface device は、インターフェイスのターゲット名または MAC アドレスにすることができます。
# domif-setlink rhel6 eth0 up
14.5.8. ドメインの仮想インターフェイスのリンク状態の一覧表示
--config
オプションを使用する必要があることに注意してください。互換性の理由から、--persistent
は --config
のエイリアスであることに注意してください。interface device は、インターフェイスのターゲット名または MAC アドレスにすることができます。
# domif-getlink rhel6 eth0 up
14.5.9. ネットワークインターフェイスの帯域幅パラメーターの設定
#virsh domiftune domain interface-device [[--config] [--live] | [--current]] [--inbound average,peak,burst] [--outbound average,peak,burst]
--config
、--live
、--current
の機能は 「スケジュールパラメーターの設定」 と同じです。制限が指定されていない場合は、現在のネットワークインターフェイス設定をクエリーします。それ以外の場合は、以下のオプションで制限を変更します。
- <interface-device> これは必須であり、ドメインのネットワークインターフェイスの帯域幅パラメーターを設定またはクエリーします。interface-device は、インターフェイスのターゲット名 (<target dev='name'/>) または MAC アドレスにすることができます。
--inbound
または--outbound
が指定されていない場合、このコマンドは帯域幅設定をクエリーして表示します。それ以外の場合は、インバウンドまたはアウトバウンドの帯域幅を設定します。average、peak、burst は、attach-interface コマンドの場合と同じです。「インターフェイスデバイスの接続」 を参照してください。
14.5.10. 実行中のドメインのメモリー統計の取得
--period
オプションを使用するには、秒単位の期間が必要です。このオプションを 0 より大きい値に設定すると、バルーンドライバーは追加の統計を返します。これは、後続の domemstat コマンドにより表示されます。--period
オプションを 0 に設定すると、バルーンドライバーの収集は停止しますが、バルーンドライバーの統計情報はクリアされません。バルーンドライバーの収集期間を設定するために --period
オプションも設定しないと、--live
、--config
、--current
オプションを使用することはできません。--live
オプションが指定されている場合、実行中のゲストの収集期間のみが影響を受けます。--config
オプションを使用すると、永続ゲストの次回の起動に影響します。--current
オプションを使用すると、現在のゲストの状態に影響します
--live
オプションおよび --config
オプションの両方を使用できますが、--current
は使用できません。オプションが指定されていない場合、ゲストの状態によって動作が異なります。
#virsh domemstat rhel6 --current
14.5.11. ブロックデバイスのエラーの表示
# virsh domblkerror rhel6
14.5.12. ブロックデバイスのサイズの表示
# virsh domblkinfo rhel6
14.5.13. ドメインに関連付けられたブロックデバイスの表示
--inactive
--details
は、指定されたドメインに関連付けられているすべてのブロックデバイスのテーブルを表示します。
--inactive
を指定すると、次回のシステムの起動時に使用されるデバイスが結果に表示されます。また、ドメインで現在使用中のデバイスは表示されません。--details
を指定すると、ディスクのタイプとデバイス値がテーブルに含まれます。この表に表示される情報は、 domblkinfo および snapshot-create で使用できます。
#domblklist rhel6 --details
14.5.14. ドメインに関連付けられた仮想インターフェイスの表示
--inactive
オプションを使用できます。
--inactive
を指定すると、次回のシステムの起動時に使用されるデバイスが結果に表示されます。また、ドメインで現在使用中のデバイスは表示されません。
14.5.15. blockcommit を使用してバッキングチェーンを短縮する
base ← snap1 ← snap2 ← active.
手順14.2 virsh blockcommit
- 以下のコマンドを実行します。
# virsh blockcommit $dom $disk -base snap1 -top snap2 -wait -verbose
snap2 の内容が snap1 に移動し、以下のような結果になります。base ← snap1 ← active.Snap2 が無効になり、削除できるようになりました。警告blockcommit は-base
オプションに依存するすべてのファイルを破壊します (-top
オプションに依存するファイル以外は、それらのファイルがベースを指すようになったため)。これを回避するには、複数のゲストが共有するファイルに変更をコミットしないでください。-verbose
オプションにより、進捗状況を画面上に出力することができます。
14.5.16. ブロックプルを使用してバッキングチェーンを短縮する
- バッキングイメージチェーンからのデータをイメージに入力して、イメージをフラット化します。これにより、イメージファイルは自己完結型になり、背面イメージに依存しなくなり、以下のようになります。
- 前: base.img ← Active
- 後: base.img がゲストで使用されなくなり、Active にすべてのデータが含まれるようになりました。
- バッキングイメージチェーンの一部を平坦化します。これを使用すると、スナップショットをトップレベルイメージに平坦化し、以下のようになります。
- 前: base ← sn1 ←sn2 ← active
- 後: base.img ← active.アクティブには、sn1 および sn2 のすべてのデータが含まれるようになりました。また、ゲストでは sn1 も sn2 も使用されないことに注意してください。
- ディスクイメージを、ホストの新しいファイルシステムに移動します。これにより、ゲストの実行中にイメージファイルを移動できます。以下のようになります。
- 前 (元のイメージファイル) -
/fs1/base.vm.img
- 後:
/fs2/active.vm.qcow2
が新しいファイルシステムになり、/fs1/base.vm.img
が使用されなくなります。
- コピー後のストレージ移行を使用したライブマイグレーションに役立ちます。ディスクイメージは、ライブマイグレーションの完了後に、移行元ホストから移行先ホストにコピーされます。要するに、こういうことです: 前:
/source-host/base.vm.img
後:/destination-host/active.vm.qcow2
。/source-host/base.vm.img
は使用されなくなりました。
手順14.3 ブロックプルを使用してバッキングチェーンを短縮する
- blockpull を実行する前にこのコマンドを実行すると役立つ場合があります。
# virsh snapshot-create-as $dom $name - disk-only
- チェーンが次のようになっている場合: base ← snap1 ← snap2 ← active 次を実行します。
# virsh blockpull $dom $disk snap1
このコマンドは、snap2 からデータをアクティブにプルすることで、snap1 のバッキングファイルをアクティブな状態にします。その結果、base ← snap1 ← active になります。 - blockpullが完了すると、チェーンに追加イメージを作成したスナップショットのlibvirt追跡は役に立ちなくなります。次のコマンドを使用して、古いスナップショットの追跡を削除します。
# virsh snapshot-delete $dom $name - metadata
- 単一のイメージをフラット化し、そのバッキングイメージチェーンからのデータを取り込むには: # virsh blockpull example-domain vda - wait
- バッキングイメージチェーンの一部をフラット化するには: # virsh blockpull example-domain vda - base /path/to/base.img - wait
- ディスクイメージをホスト上の新しいファイルシステムに移動するには: # virsh snapshot-create example-domaine - xmlfile /path/to/new.xml - disk-only に続いて # virsh blockpull example-domain vda - wait
- コピー後のストレージ移行でライブ移行を使用する
- destination 実行時:
# qemu-img create -f qcow2 -o backing_file=/source-host/vm.img /destination-host/vm.qcow2
- ソース実行時:
# virsh migrate example-domain
- destination 実行時:
# virsh blockpull example-domain vda - wait
14.5.17. blockresize を使用してドメインパスのサイズを変更する
- 次のコマンドを実行します: blockresize [domain] [path size]。ここで、
- Domain は、サイズを変更するドメインの一意のターゲット名またはソースファイルです
- Path size はスケーリングされた整数であり、接尾辞がない場合、デフォルトで KiB (1024 バイトのブロック) になります。バイトには B の接尾辞を使用する必要があります。
14.5.18. ライブブロックコピーを使用したディスクイメージ管理
- ゲストイメージをローカルストレージから中央の場所に移動する
- メンテナーンスが必要な場合、パフォーマンスを損なうことなく、ゲストを別の場所に移動できます
- 速度と効率のためにゲストイメージの管理を可能にします
- ゲストをシャットダウンせずにイメージ形式の変換を行うことができます
例14.1 ライブブロックコピーを使用した例
- 最初のバッキングファイルチェーンは次のようになります。base ← sn1 ← sn2コンポーネントは以下のとおりです。
- ベース - 元のディスクイメージ
- sn1 - ベースディスクイメージから取得された最初のスナップショット
- sn2 - 最新のスナップショット
- アクティブ - ディスクのコピー
- イメージのコピーが sn2 の上に新しいイメージとして作成されると、結果は次のようになります。base ← sn1 ← sn2 ← active
- この時点で、読み取り権限はすべて正しい順序であり、自動的に設定されます。書き込み権限が適切に設定されていることを確認するために、ミラーメカニズムはすべての書き込みを sn2 とアクティブの両方にリダイレクトし、sn2 とアクティブがいつでも同じように読み取るようにします (このミラーメカニズムは、ライブブロックコピーとイメージストリーミングの本質的な違いです)。
- すべてのディスククラスターをループするバックグラウンドタスクが実行されます。クラスターごとに、次のケースとアクションが考えられます。
- クラスターはすでにアクティブに割り当てられており、何もする必要はありません。
- bdrv_is_allocated() を使用して、バッキングファイルチェーンを追跡します。クラスターが (共有されている) ベースから読み取られる場合、何もする必要はありません。
- bdrv_is_allocated() バリアントが実行可能でない場合は、イメージをリベースし、読み取りデータをベースの書き込みデータと比較して、コピーが必要かどうかを判断します。
- 他のすべての場合は、クラスターを
active
にコピーします
- コピーが完了すると、アクティブのバッキングファイルがベースに切り替えられます (リベースと同様)
14.5.19. グラフィック表示への接続の URI の表示
--include-password
オプションを使用すると、SPICE チャネルのパスワードが URI に含まれます。
14.5.20. ドメイン取得コマンド
- virsh domhostname domain は、ハイパーバイザーが公開できる場合、指定されたドメインのホスト名を表示します。
- virsh dominfo domain は、指定されたドメインに関する基本情報を表示します。
- virsh domuid domain|ID は、指定されたドメイン名または ID を UUID に変換します。
- virsh domid domain|ID は、指定されたドメイン名または UUID を ID に変換します。
- virsh domjobabort domain は、指定されたドメインで現在実行中のジョブを中止します。
- virsh domjobinfo domain は、移行統計情報など、指定されたドメインで実行されているジョブに関する情報を表示します
- virsh domname domain ID|UUID は、指定されたドメイン ID または UUID をドメイン名に変換します。
- virsh domstate domain は、指定されたドメインの状態を表示します。
--reason
オプションを使用すると、表示された状態の理由も表示されます。 - virsh domcontrol domain は、ドメインの制御に使用された VMM へのインターフェイスの状態を表示します。OK でも Error でもない状態の場合は、制御インターフェイスが表示状態に入ってから経過した秒数も出力されます。
例14.2 統計的フィードバックの例
# virsh domjobinfo rhel6 Job type: Unbounded Time elapsed: 1603 ms Data processed: 47.004 MiB Data remaining: 658.633 MiB Data total: 1.125 GiB Memory processed: 47.004 MiB Memory remaining: 658.633 MiB Memory total: 1.125 GiB Constant pages: 114382 Normal pages: 12005 Normal data: 46.895 MiB Expected downtime: 0 ms Compression cache: 64.000 MiB Compressed data: 0.000 B Compressed pages: 0 Compression cache misses: 12005 Compression overflows: 0
14.5.21. QEMU 引数のドメイン XML への変換
$ cat demo.args LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor pty -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
$ virsh domxml-from-native qemu-argv demo.args
<domain type='qemu'> <uuid>00000000-0000-0000-0000-000000000000</uuid> <memory>219136</memory> <currentMemory>219136</currentMemory> <vcpu>1</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='hd'/> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu</emulator> <disk type='block' device='disk'> <source dev='/dev/HostVG/QEMUGuest1'/> <target dev='hda' bus='ide'/> </disk> </devices> </domain>
14.5.22. ドメインのコアのダンプファイルの作成
--bypass-cache
--live |--crash |--reset
--verbose
--memory-only
を実行すると、ドメインコアが corefilepath で指定されたファイルにダンプされます。一部のハイパーバイザーが提供する場合があることに注意してください。このアクションに対する制限があり、corefilepath パラメーターで指定されたファイルとパスに対する適切なアクセス許可を手動で確認する必要がある場合があります。このコマンドは、SR-IOV デバイスやその他のパススルーデバイスでサポートされます。次のオプションがサポートされており、次の効果があります。
--bypass-cache
保存されたファイルには、ファイルシステムキャッシュは含まれません。このオプションを選択すると、ダンプ操作が遅くなる可能性があることに注意してください。--live
は、ドメインの実行を継続するときにファイルを保存し、ドメインを一時停止または停止しません。--crash
は、ダンプファイルの保存中にドメインを一時停止状態のままにするのではなく、クラッシュ状態にします。--reset
ダンプファイルが正常に保存されると、ドメインがリセットされます。--verbose
は、ダンププロセスの進捗を表示します。--memory-only
ダンプファイルに保存される情報は、ドメインのメモリーと CPU 共通レジスタファイルのみです。
14.5.23. 仮想マシンの XML ダンプの作成 (設定ファイル)
# virsh dumpxml {guest-id, guestname or uuid}
# virsh dumpxml GuestID > guest.xml
guest.xml
は、ゲスト仮想マシンを再作成できます (参照 「ゲスト仮想マシンの設定ファイルの編集」。この XML 設定ファイルを編集して、追加のデバイスを設定したり、追加のゲスト仮想マシンをデプロイしたりできます。
# virsh dumpxml guest1-rhel6-64 <domain type='kvm'> <name>guest1-rhel6-64</name> <uuid>b8d7388a-bbf2-db3a-e962-b97ca6e514bd</uuid> <memory>2097152</memory> <currentMemory>2097152</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='rhel6.2.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='threads'/> <source file='/home/guest-images/guest1-rhel6-64.img'/> <target dev='vda' bus='virtio'/> <shareable/< <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <interface type='bridge'> <mac address='52:54:00:b9:35:a9'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes'/> <sound model='ich6'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain>
14.5.24. 設定ファイルからのゲスト仮想マシンの作成
# virsh create configuration_file.xml
14.6. ゲスト仮想マシンの設定ファイルの編集
rhel6
という名前のゲスト仮想マシンを編集するには、以下を実行します。
# virsh edit rhel6
14.6.1. KVM ゲスト仮想マシンへの複合 PCI デバイスの追加
- virsh edit [guestname] コマンドを実行して、ゲスト仮想マシンの XML 設定ファイルを編集します。
- アドレスタイプタグに、function='0x0' の multifunction='on' エントリーを追加します。これにより、ゲスト仮想マシンで多機能 PCI デバイスを使用できるようになります。
<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/ </disk>
2 つの機能を持つ PCI デバイスの場合は、XML 設定ファイルを修正して、最初のデバイスと同じスロット番号と、別の機能番号 (function='0x1' など) を持つ 2 番目のデバイスを追加します。以下に例を示します。<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/rhel62-2.img'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </disk>
- KVM ゲスト仮想マシンからの lspci 出力は次のことを示しています。
$ lspci 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.1 SCSI storage controller: Red Hat, Inc Virtio block device
14.6.2. 実行中のドメインを停止して後で再起動する
--bypass-cache
--running | --paused | --verbose
は、実行中のドメインを保存および破棄 (停止) して、後で同じ状態から再起動できるようにします。virsh start コマンドと併用すると、この保存ポイントから自動的に開始されます。--bypass-cache
オプションとともに使用すると、保存によってファイルシステムのキャッシュが回避されます。このオプションを使用すると、保存プロセスの速度が低下する可能性があることに注意してください。
--verbose
は、ダンププロセスの進捗を表示します。
--running
オプションを使用して、実行状態のままにする必要があることを示したり、--paused
オプションを使用して、一時停止状態のままにすることを示したりして上書きできます。
14.6.3. 指定されたドメインの CPU 統計情報の表示
--total
start
count
コマンドは、指定されたドメインの CPU 統計情報を提供します。デフォルトでは、すべての CPU の統計および合計が表示されます。--total
オプションは、合計統計のみを表示します。
14.6.4. スクリーンショットの保存
--screen
を使用して画面 ID を指定すると、キャプチャする画面を指定できます。複数のグラフィックカードがあり、デバイスの前にヘッドが番号付けされている場合、画面 ID5 は 2 番目のカードの 2 番目のヘッドをアドレス指定します。
14.6.5. 指定されたドメインへのキーストロークの組み合わせの送信
--codeset
--holdtime
keycode を使用すると、シーケンスを keycode として特定のドメインに送信できます。
# virsh send-key rhel6 --holdtime 1000
0xf
--holdtime
を指定すると、各キーストロークは指定した時間 (ミリ秒単位) 保持されます。--codeset
ではコードセットを指定できます。デフォルトは Linux ですが、以下のオプションを使用できます。
linux
- このオプションを選択すると、シンボリック名が対応する Linux キー定数マクロ名に一致するようになります。数値は、Linux 汎用入力イベントサブシステムが提供するものになります。xt
- XT キーボードコントローラーで定義する値を送信します。シンボリック名は記載されていません。atset1
- 数値は、AT キーボードコントローラー、set1 (XT 互換セット) で定義されるものです。atset1 から拡張されたキーコードは、XT コードセットの拡張キーコードとは異なる場合があります。シンボリック名は記載されていません。atset2
- 数値は、AT キーボードコントローラー、set 2 で定義されるものです。シンボリック名は記載されていません。atset3
- 数値は、AT キーボードコントローラー、set 3 (PS/2 互換) で定義されるものです。シンボリック名は記載されていません。os_x
- 数値は、OS-X キーボード入力サブシステムで定義されるものです。シンボリック名は、対応する OS-X の鍵定数マクロ名と一致します。xt_kbd
- 数値は、Linux KBD デバイスーで定義されるものです。これは、元の XT コードセットのバリアントですが、拡張キーコードのエンコードが異なります。シンボリック名は記載されていません。win32
- 数値は、Win32 キーボード入力サブシステムで定義されるものです。シンボリック名は、対応する Win32 鍵定数マクロ名と一致します。usb
- 数値は、キーボード入力の USB HID で定義されるものです。シンボリック名は記載されていません。rfb
- 数値は、raw キーコードを送信するために RFB 拡張で定義されるものです。これは XT コードセットのバリアントですが、拡張キーコードでは、最初のバイトの上位ビットではなく、2 番目のビットセットの下位ビットが使用されます。シンボリック名は記載されていません。
14.6.6. プロセス信号名を仮想プロセスに送信する
# virsh send-process-signal rhel6 187 kill # virsh send-process-signal rhel6 187 9
14.6.7. VNC ディスプレイの IP アドレスとポート番号の表示
# virsh vncdisplay rhel6 127.0.0.1:0
14.7. NUMA ノード管理
14.7.1. ノード情報の表示
$ virsh nodeinfo
CPU model: x86_64
CPU(s): 4
CPU frequency: 1199 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 2
NUMA cell(s): 1
Memory size: 3715908 KiB
14.7.2. NUMA パラメーターの設定
<numatune>
要素内にネストされています。オプションを使用しない場合は、現在の設定のみが表示されます。numatune domain コマンドには指定されたドメインが必要であり、次のオプションを選択できます。
--mode
- モードは、strict
、インターリーブ
、または推奨
のいずれかに設定できます。実行中のドメインは、ドメインがstrict
モードで開始されていない限り、ライブ中にモードを変更することはできません。--nodeset
には、ドメインを実行するためにホスト物理マシンによって使用される NUMA ノードのリストが含まれています。この一覧には、それぞれがコンマで区切られたノードが含まれ、ノード範囲に使用されるダッシュ-
と、ノードの除外に使用されるカレット^
も含まれています。- インスタンスごとに使用できるオプションは、次の 3 つのうち 1 つだけです。
--config
は、永続ゲスト仮想マシンの次回の起動時に有効になります。--live
は、実行中のゲスト仮想マシンのスケジューラー情報を設定します。--current
は、ゲスト仮想マシンの現在の状態に影響を及ぼします。
14.7.3. NUMA セルの空きメモリー量の表示
--all
オプションを使用すると、各セルの空きメモリーとマシンの合計空きメモリーが表示されます。数値引数を使用するか、セル番号とともに --cellno
オプションを使用すると、指定したセルの空きメモリーが表示されます。
14.7.4. CPU リストの表示
$ virsh nodecpumap
CPUs present: 4
CPUs online: 1
CPU map: y
14.7.5. CPU 統計の表示
$ virsh nodecpustats
user: 1056442260000000
system: 401675280000000
idle: 7549613380000000
iowait: 94593570000000
$ virsh nodecpustats 2 --percent
usage: 2.0%
user: 1.0%
system: 1.0%
idle: 98.0%
iowait: 0.0%
14.7.6. ホスト物理マシンの一時停止
--target
オプションは、次のいずれかに設定できます。mem
、disk
、またhybrid
。これらのオプションは、メモリー、ディスク、または 2 つの組み合わせを一時停止するように設定することを示します。--duration
を設定すると、設定した期間が終了した後に起動するようにホスト物理マシンに指示します。秒単位で設定されます。継続時間は 60 秒より長くすることをお勧めします。
$ virsh nodesuspend disk 60
14.7.7. ノードメモリーパラメーターの設定および表示
- shm-pages-to-scan - 共有メモリーサービスがスリープ状態になる前にスキャンするページ数を設定します。
- shm-sleep-milisecs - 次のスキャンの前に共有メモリーサービスがスリープするミリ秒数を設定します
- shm-merge-across-nodes - 別の NUMA ノードのページをマージできるかどうかを指定します。許可される値は
0
と1
です。0
に設定すると、マージ可能なページのみが、同じ NUMA ノードのメモリー領域に存在するページのみです。1
に設定すると、全 NUMA ノードのページをマージすることができます。デフォルト設定は次のとおりです1
。
14.7.8. ホストノードでのデバイスの作成
<デバイス>
の XML の説明が含まれている必要があります。
14.7.9. ノードデバイスの切り離し
<hostdev>
パススルーを介してゲストが安全に使用できるようにします。このアクションは nodedev-reattach コマンドで元に戻すことができますが、マネージドサービスでは自動的に実行されます。このコマンドは、nodedev-dettach も受け入れます。
--driver
オプションを使用すると、目的のバックエンドドライバーを指定できます。
14.7.10. デバイスの設定設定の取得
<デバイス>
の XML 設定ファイルをダンプします。XML 設定には、デバイス名、たとえばデバイスを所有するバス、ベンダー、製品 ID などの情報が含まれます。引数の device は、デバイス名にすることも、WWNN | WWPN 形式の WWN の組み合わせにすることもできます (HBA のみ)。
14.7.11. ノード上のデバイスの一覧表示
--tree
コマンドは、libvirt によって認識されているノードで使用可能なすべてのデバイスを一覧表示します。cap は、機能タイプでリストをフィルターリングするために使用されます。各タイプはコンマで区切られ、--tree
と一緒に使用することはできません。--tree
オプションを使用すると、次のように出力がツリー構造になります。
# virsh nodedev-list --tree computer | +- net_lo_00_00_00_00_00_00 +- net_macvtap0_52_54_00_12_fe_50 +- net_tun0 +- net_virbr0_nic_52_54_00_03_7d_cb +- pci_0000_00_00_0 +- pci_0000_00_02_0 +- pci_0000_00_16_0 +- pci_0000_00_19_0 | | | +- net_eth0_f0_de_f1_3a_35_4f (this is a partial screen)
14.7.12. ノードのリセットのトリガー
14.8. ゲスト仮想マシンの起動、一時停止、再開、保存、および復元
14.8.1. 定義済みドメインの開始
--console
--paused
--autodestroy
--bypass-cache
--force-boot
--pass-fds
コマンドは、定義済みで非アクティブのドメインを起動します。この仮想マシンのステータスは、最後の管理保存状態または起動直後から非アクティブになっています。このコマンドは、次のオプションを選択できます。
--console
- コンソールに接続しているドメインを起動します--console
- これがドライバーによってサポートされている場合、ドメインを起動してから一時停止状態にします--autodestroy
- virsh セッションが閉じるか、libvirt への接続が閉じるか、それ以外の場合は終了すると、ゲスト仮想マシンは自動的に破棄されます--bypass-cache
- ドメインが管理された保存状態にある場合に使用されます。これを使用すると、システムキャッシュを回避して、ゲスト仮想マシンが復元されます。これにより、復元プロセスが遅くなることに注意してください。--force-boot
- managedsave オプションをすべて破棄し、新規ブートが実行されます。--pass-fds
- は、ゲスト仮想マシンに渡される、コンマで区切られた追加オプションのリストです。
14.8.2. ゲスト仮想マシンの一時停止
# virsh suspend {domain-id, domain-name or domain-uuid}
14.8.3. 実行中のドメインの一時停止
--duration
--target
コマンドは、実行中のドメインを取得して一時停止し、3 つの可能な状態 (S3、S4、または 2 つのハイブリッド) のいずれかに配置できるようにします。
# virsh dompmsuspend rhel6 --duration 100
--target mem
--duration
- 状態変更の期間を秒単位で設定します--target
-mem (suspend to RAM (S3))
disk (suspend to disk (S4))
またはhybrid (hybrid suspend)
のいずれかを使用できます。
14.8.4. pmsuspend 状態からドメインをウェイクアップする
# dompmwakeup rhel6
14.8.5. ドメインの定義を解除する
# virsh undefine domain--managed-save
--snapshots-metadata
--storage
--remove-all-storage
--wipe-storage
--managed-save
- このオプションは、管理対象の保存イメージもクリーンアップされることを保証します。このオプションを使用しない場合、管理対象の保存イメージを使用してドメインの定義を解除しようとすると失敗します。--snapshots-metadata
- このオプションは、非アクティブなドメインの定義を解除するときに、スナップショット (snapshot-list で示される) もクリーンアップされることを保証します。設定ファイルにスナップショットメタデータが含まれている非アクティブなドメインの定義を解除しようとすると失敗することに注意してください。このオプションが使用され、ドメインがアクティブである場合、それは無視されます。--storage
- このオプションを使用する場合は、ボリュームターゲット名またはストレージボリュームのソースパスをコンマで区切って指定し、未定義のドメインと一緒に削除する必要があります。このアクションでは、ストレージボリュームを削除する前にそのストレージボリュームの定義が解除されます。これは、非アクティブなドメインでのみ実行できることに注意してください。これは、libvirt で管理されるストレージボリュームでのみ機能することに注意してください。--remove-all-storage
- ドメインの定義を解除することに加えて、関連するすべてのストレージボリュームが削除されます。--wipe-storage
- ストレージボリュームを削除する以外にも、コンテンツをワイプします。
14.8.6. ゲスト仮想マシンの再開
# virsh resume {domain-id, domain-name or domain-uuid}
14.8.7. ゲスト仮想マシンを保存する
# virsh save {domain-name|domain-id|domain-uuid} state-file --bypass-cache
--xml
--running
--paused
--verbose
--bypass-cache
- 復元を実行してファイルシステムキャッシュを回避しますが、このオプションを使用すると復元動作が遅くなる可能性があることに注意してください。--xml
- このオプションは、XML ファイル名とともに使用する必要があります。通常、このオプションは省略されますが、ドメイン XML のホスト固有の部分のみを変更し、復元したゲスト仮想マシンで使用するための代替 XML ファイルを提供するために使用できます。たとえば、ゲストの保存後に取得されたディスクスナップショットによる、基になるストレージのファイル名の違いを説明するために使用できます。--running
- は、保存イメージに記録された状態をオーバーライドして、ドメインを実行中として開始します。--paused
- 保存イメージに記録された状態をオーバーライドして、ドメインを一時停止として開始します。--verbose
- 保存の進捗を表示します。
14.8.8. ゲストの復元に使用されるドメイン XML ファイルの更新
--running
|--paused
コマンドは、指定されたファイルが後で virsh restore コマンドで使用されるときに使用されるドメイン XML ファイルを更新します。xml 引数は、ドメイン XML のホスト物理マシン固有の部分のみが変更された代替 XML を含む XML ファイル名である必要があります。たとえば、ゲストを保存した後に、基となるストレージのディスクスナップショットを作成することで生じるファイルの命名の相違点を説明するために使用できます。ドメインを実行状態または一時停止状態に復元する必要があるかどうかを、イメージの保存で記録します。オプション --running
または --paused
を使用すると、使用する状態が決まります。
14.8.9. ドメイン XML ファイルの抽出
--security-info
コマンドは、保存された状態ファイル (virsh save コマンドで使用) が参照されたときに有効だったドメイン XML ファイルを抽出します。--security-info
オプションを使用すると、ファイルにセキュリティー上の機密情報が含まれます。
14.8.10. ドメイン XML 設定ファイルの編集
--running
--paused
コマンドは、virsh save コマンドによって作成された保存済み ファイルに関連付けられている XML 設定ファイルを編集します。
--running
状態または --paused
状態のどちらに復元する必要があるかが記録されることに注意してください。これらのオプションを使用しない場合、状態はファイル自体によって決定されます。--running
または --paused
を選択すると、virsh restore が使用する必要のある状態を上書きできます。
14.8.11. ゲスト仮想マシンを復元する
# virsh restore state-file
--bypass-cache
- 復元を実行してファイルシステムキャッシュを回避しますが、このオプションを使用すると復元動作が遅くなる可能性があることに注意してください。--xml
- このオプションは、XML ファイル名とともに使用する必要があります。通常、このオプションは省略されますが、ドメイン XML のホスト固有の部分のみを変更し、復元したゲスト仮想マシンで使用するための代替 XML ファイルを提供するために使用できます。たとえば、ゲストの保存後に取得されたディスクスナップショットによる、基になるストレージのファイル名の違いを説明するために使用できます。--running
- は、保存イメージに記録された状態をオーバーライドして、ドメインを実行中として開始します。--paused
- 保存イメージに記録された状態をオーバーライドして、ドメインを一時停止として開始します。
14.9. ゲスト仮想マシンのシャットダウン、再起動、および強制シャットダウン
14.9.1. ゲスト仮想マシンのシャットダウン
# virsh shutdown{domain-id, domain-name or domain-uuid}
[--mode method]
14.9.2. Red Hat Enterprise Linux 7 ホストでの Red Hat Enterprise Linux 6 ゲストのシャットダウン
Minimal installation
を使用して Red Hat Enterprise Linux 6 ゲスト仮想マシンをインストールしても、acpid パッケージ はインストールされません。Red Hat Enterprise Linux 7 は、systemd
に引き継がれたため、このパッケージを必要としなくなりました。ただし、Red Hat Enterprise Linux 7 ホストで実行されている Red Hat Enterprise Linux 6 ゲスト仮想マシンには引き続き必要です。
手順14.4 Red Hat Enterprise Linux 6 ゲストの回避策
acpid パッケージのインストール
acpid サービスは、ACPI 要求をリッスンして処理します。ゲスト仮想マシンにログインし、ゲスト仮想マシンに acpid パッケージをインストールします。# yum install acpid
acpid サービスを有効にする
ゲスト仮想マシンの起動シーケンス中にacpid
サービスを開始するように設定し、サービスを開始します。# chkconfig acpid on # service acpid start
ゲストドメイン xml の準備
ドメインの XML ファイルを編集して、次の要素を追加します。virtio シリアルポートをorg.qemu.guest_agent.0
に置き換え、$guestname の代わりにゲストの名前を使用します。図14.2 ゲスト XML の置き換え
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/{$guestname}.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
QEMU ゲストエージェントのインストール
QEMU ゲストエージェント (QEMU-GA) をインストールし、指示に従ってサービスを開始します。10章qemu-img および QEMU ゲストエージェント。Windows ゲストを実行している場合は、本章にもそのための手順があります。ゲストをシャットダウンします
- 以下のコマンドを実行します。
# virsh list --all - this command lists all of the known domains Id Name State ---------------------------------- rhel6 running
- ゲスト仮想マシンのシャットダウン
# virsh shutdown rhel6 Domain rhel6 is being shutdown
- ゲスト仮想マシンがシャットダウンするまで数秒待ちます。
# virsh list --all Id Name State ---------------------------------- . rhel6 shut off
- 編集した XML ファイルを使用して、rhel6 という名前のドメインを開始します。
# virsh start rhel6
- rhel6 ゲスト仮想マシンの acpi をシャットダウンします。
# virsh shutdown --mode acpi rhel6
- すべてのドメインを再度一覧表示し、rhel6 が一覧に含まれていることを確認し、シャットダウンしていることを示します。
# virsh list --all Id Name State ---------------------------------- rhel6 shut off
- 編集した XML ファイルを使用して、rhel6 という名前のドメインを開始します。
# virsh start rhel6
- rhel6 ゲスト仮想マシンゲストエージェントをシャットダウンします。
# virsh shutdown --mode agent rhel6
- ドメインを一覧表示します。rhel6 はまだリストに含まれており、シャットオフされていることを示しているはずです。
# virsh list --all Id Name State ---------------------------------- rhel6 shut off
libvirt-guests
サービスを停止することで、ゲストを自動的にシャットダウンできます。この方法に関する詳細は、「libvirt-guests 設定設定の操作」 を参照してください。
14.9.3. libvirt-guests 設定設定の操作
libvirt-guests
サービスには、ゲストが適切にシャットダウンするように設定できるパラメーターがあります。これは、libvirt インストールの一部で、デフォルトでインストールされるパッケージです。このサービスは、ホストのシャットダウン時にゲストをディスクに自動的に保存し、ホストの再起動時にゲストをシャットダウン前の状態に復元します。デフォルトでは、この設定はゲストを一時停止するように設定されています。ゲストをシャットオフする場合は、libvirt-guests
設定ファイルのパラメーターの 1 つを変更する必要があります。
手順14.5 ゲストの正常なシャットダウンを可能にするための libvirt-guests サービスパラメーターの変更
設定ファイルを開きます。
設定ファイルは/etc/sysconfig/libvirt-guests
にあります。ファイルを編集し、コメントマーク (#) を削除し、ON_SHUTDOWN=suspend
をON_SHUTDOWN=shutdown
に変更します。変更を保存することを忘れないでください。$ vi /etc/sysconfig/libvirt-guests # URIs to check for running guests # example: URIS='default xen:/// vbox+tcp://host/system lxc:///' #URIS=default # action taken on host boot # - start all guests which were running on shutdown are started on boot # regardless on their autostart settings # - ignore libvirt-guests init script won't start any guest on boot, however, # guests marked as autostart will still be automatically started by # libvirtd #ON_BOOT=start # Number of seconds to wait between each guest start. Set to 0 to allow # parallel startup. #START_DELAY=0 # action taken on host shutdown # - suspend all running guests are suspended using virsh managedsave # - shutdown all running guests are asked to shutdown. Please be careful with # this settings since there is no way to distinguish between a # guest which is stuck or ignores shutdown requests and a guest # which just needs a long time to shutdown. When setting # ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a # value suitable for your guests. ON_SHUTDOWN=shutdown # If set to non-zero, shutdown will suspend guests concurrently. Number of # guests on shutdown at any time will not exceed number set in this variable. #PARALLEL_SHUTDOWN=0 # Number of seconds we're willing to wait for a guest to shut down. If parallel # shutdown is enabled, this timeout applies as a timeout for shutting down all # guests on a single URI defined in the variable URIS. If this is 0, then there # is no time out (use with caution, as guests might not respond to a shutdown # request). The default value is 300 seconds (5 minutes). #SHUTDOWN_TIMEOUT=300 # If non-zero, try to bypass the file system cache when saving and # restoring guests, even though this may give slower operation for # some file systems. #BYPASS_CACHE=0
- ???
URIS
- checks the specified connections for a running guest. TheDefault
setting functions in the same manner asvirsh
does when no explicit URI is set In addition, one can explicitly set the URI from/etc/libvirt/libvirt.conf
. It should be noted that when using the libvirt configuration file default setting, no probing will be used.- ???
ON_BOOT
- specifies the action to be done to / on the guests when the host boots. Thestart
option starts all guests that were running prior to shutdown regardless on their autostart settings. Theignore
option will not start the formally running guest on boot, however, any guest marked as autostart will still be automatically started by libvirtd.- ???
- The
START_DELAY
- sets a delay interval in between starting up the guests. This time period is set in seconds. Use the 0 time setting to make sure there is no delay and that all guests are started simultaneously. - ???
ON_SHUTDOWN
- specifies the action taken when a host shuts down. Options that can be set include:suspend
which suspends all running guests using virsh managedsave andshutdown
which shuts down all running guests. It is best to be careful with using theshutdown
option as there is no way to distinguish between a guest which is stuck or ignores shutdown requests and a guest that just needs a longer time to shutdown. When setting theON_SHUTDOWN=shutdown
, you must also setSHUTDOWN_TIMEOUT
to a value suitable for the guests.- ???
PARALLEL_SHUTDOWN
Dictates that the number of guests on shutdown at any time will not exceed number set in this variable and the guests will be suspended concurrently. If set to0
, then guests are not shutdown concurrently.- ???
- Number of seconds to wait for a guest to shut down. If
SHUTDOWN_TIMEOUT
is enabled, this timeout applies as a timeout for shutting down all guests on a single URI defined in the variable URIS. IfSHUTDOWN_TIMEOUT
is set to0
, then there is no time out (use with caution, as guests might not respond to a shutdown request). The default value is 300 seconds (5 minutes). - ???
BYPASS_CACHE
can have 2 values, 0 to disable and 1 to enable. If enabled it will by-pass the file system cache when guests are restored. Note that setting this may effect performance and may cause slower operation for some file systems.
libvirt-guests サービスを開始します。
サービスを起動していない場合は、libvirt-guests サービスを起動します。実行中のすべてのドメインがシャットダウンするため、サービスを再起動しないでください。
14.9.4. ゲスト仮想マシンの再起動
#virsh reboot{domain-id, domain-name or domain-uuid}
[--mode method]
<on_reboot>
要素を変更することで、再起動中のゲスト仮想マシンの動作を制御できます。詳細は、「イベントの設定」 を参照してください。
--mode
オプションに、initctl
、acpi
、agent
、signal
などのコンマ区切りリストを指定します。ドライバーが各モードを試行する順序は、コマンドで指定された順序とは関係ありません。順序を厳格に制御するには、一度に 1 つのモードを使用し、コマンドを繰り返します。
14.9.5. ゲスト仮想マシンの強制停止
# virsh destroy{domain-id, domain-name or domain-uuid}
[--graceful]
14.9.6. 仮想マシンのリセット
14.10. ゲストの仮想マシン情報の取得
14.10.1. ゲスト仮想マシンのドメイン ID の取得
# virsh domid {domain-name or domain-uuid}
14.10.2. ゲスト仮想マシンのドメイン名の取得
# virsh domname {domain-id or domain-uuid}
14.10.3. ゲスト仮想マシンの UUID の取得
# virsh domuuid {domain-id or domain-name}
# virsh domuuid r5b2-mySQL01 4a4c59a7-ee3f-c781-96e4-288f2862f011
14.10.4. ゲスト仮想マシン情報の表示
# virsh dominfo {domain-id, domain-name or domain-uuid}
# virsh dominfo vr-rhel6u1-x86_64-kvm Id: 9 Name: vr-rhel6u1-x86_64-kvm UUID: a03093a1-5da6-a2a2-3baf-a845db2f10b9 OS Type: hvm State: running CPU(s): 1 CPU time: 21.6s Max memory: 2097152 kB Used memory: 1025000 kB Persistent: yes Autostart: disable Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c612,c921 (permissive)
14.11. ストレージプールコマンド
14.11.1. ストレージプール XML の検索
pool-list[--inactive]
[--all]
[--persistent]
[--transient]
[--autostart]
[--no-autostart]
[--details]
type
--inactive
オプションを使用すると非アクティブプールのみが表示され、--all
オプションを使用するとすべてのストレージプールが一覧表示されます。
--persistent
は、一覧を永続プールに制限します。--transient
はリストを一時的なプールに制限し、--autostart
はリストをプールの自動起動に制限し、最後に --no-autostart
は、自動起動が無効になっているストレージプールにリストを制限します。
dir
、fs
、netfs
、logical
、disk
、iscsi
、scsi
、mpath
、rbd
、および sheepdog
が含まれます。
--details
オプションは、virsh
に対して、プール永続性と利用可能な容量関連の情報を追加で表示するように指示します。
14.11.2. ストレージプールの作成、定義、および起動
14.11.2.1. ストレージプールの構築
--overwrite
--no-overwrite
コマンドは、指定された プール名または UUIDでプールを構築します。オプション --overwrite
および --no-overwrite
は、タイプがファイルシステムであるプールにのみ使用できます。どちらのオプションも指定されておらず、プールがファイルシステムタイプのプールである場合、結果のビルドはディレクトリーのみを作成します。
--no-overwrite
を指定すると、プローブにより、ファイルシステムがターゲットデバイスにすでに存在するかどうかを判断したり、存在する場合はエラーを返すか、存在しない場合は mkfs を使用してターゲットデバイスをフォーマットします。--overwrite
を指定した場合は、mkfs コマンドが実行され、ターゲットデバイスに存在するデータがすべて上書きされます。
14.11.2.2. XML ファイルからのストレージプールの作成と定義
14.11.2.3. 生のパラメーターからストレージプールを作成して開始する
# pool-create-as name--print-xml
type
source-host
source-path
source-dev
source-name
<target>
--source-format
format
--print-xml
が指定されている場合、プールを作成せずにストレージプールオブジェクトの XML を出力します。それ以外の場合、プールを構築するにはタイプが必要です。type を必要とするすべてのストレージプールコマンドでは、プールタイプをコンマで区切る必要があります。有効なプールタイプには、dir
、fs
、netfs
、logical
、disk
、iscsi
、scsi
、mpath
、rbd
、および sheepdog
が含まれます。
# pool-define-as name--print-xml
type
source-host
source-path
source-dev
source-name
<target>
--source-format
format
--print-xml
が指定されている場合、プールを定義せずにプールオブジェクトの XML を出力します。それ以外の場合、プールは指定されたタイプである必要があります。type を必要とするすべてのストレージプールコマンドでは、プールタイプをコンマで区切る必要があります。有効なプールタイプには、dir
、fs
、netfs
、logical
、disk
、iscsi
、scsi
、mpath
、rbd
、および sheepdog
が含まれます。
14.11.2.4. ストレージプールの自動起動
--disable
コマンドは、ストレージプールが起動時に自動的に開始することを有効または無効にします。このコマンドには、プール名または UUID が必要です。pool-autostart コマンドを無効にするには、--disable
オプションを使用します。
14.11.3. ストレージプールの停止および削除
14.11.4. ストレージプール用の XML ダンプファイルの作成
--inactive
pool-or-uuid コマンドは、指定されたストレージプールオブジェクトに関する XML 情報を返します。--inactive
を使用すると、現在のプール設定ではなく、プールの次回の開始時に使用される設定がダンプされます。
14.11.5. ストレージプールの設定ファイルの編集
14.11.6. ストレージプールの変換
14.12. ストレージボリュームコマンド
14.12.1. ストレージボリュームの作成
--inputpool
pool-or-uuid vol-name-or-key-or-path コマンドは、コンテンツのテンプレートとして別のストレージボリュームを使用して、ストレージボリュームを作成します。このコマンドは、ボリュームを作成するストレージプールの名前または UUID である pool-or-uuid を必要とします。
--inputpool pool-or-uuid
オプションは、ソースボリュームが含まれるストレージプールの名前または uuid を指定します。vol-name-or-key-or-path 引数は、ソースボリュームの名前またはキーまたはパスを指定します。一部の例については、「ボリュームの作成」 を参照してください。
vol-create-as pool-or-uuid name capacity --allocation <size>
--format <string>
--backing-vol <vol-name-or-key-or-path>
--backing-vol-format <string>
--allocation <size>
は、ボリュームに割り当てられる初期サイズであり、デフォルトでバイトにスケーリングされた整数としても使用されます。--format <string>
は、ファイルベースのストレージプールで使用され、コンマで区切られた許容可能な形式の文字列であるボリュームファイル形式を指定します。使用可能な形式には、raw
、bochs
、qcow
、qcow2
、vmdk
、 --backing-vol vol-name-or-key-or-path
は、既存のボリュームのスナップショットを作成する場合に使用されるソースバッキングボリュームです。--backing-vol-format string
は、スナップショットバッキングボリュームのフォーマットであり、コンマで区切られたフォーマットのストリングです。許可される値は、raw
、bochs
、qcow
、qcow2
、、vmdk
、および host_device
です。ただし、これはファイルベースのストレージプールのみを対象としています。
14.12.1.1. XML ファイルからのストレージボリュームの作成
virsh vol-dumpxml --pool storagepool1 appvolume1 > newvolume.xml virsh edit newvolume.xml virsh vol-create differentstoragepool newvolume.xml
- --inactive オプションは、非アクティブなゲスト仮想マシン (つまり、定義されているが現在アクティブではないゲスト仮想マシン) を一覧表示します。
- --all オプションは、すべてのゲスト仮想マシンを一覧表示します。
14.12.1.2. ストレージボリュームのクローンの作成
--pool pool-or-uuid
vol-name-or-key-or-path name コマンドは、既存のストレージボリュームのクローンを作成します。vol-create-from も使用できますが、ストレージボリュームのクローンを作成する方法としてはお勧めしません。--pool pool-or-uuid
オプションは、ボリュームを作成するストレージプールの名前または UUID です。vol-name-or-key-or-path 引数は、ソースボリュームの名前またはキーまたはパスです。name 引数を使用すると、新しいボリュームの名前を参照します。
14.12.2. ストレージボリュームの削除
--pool pool-or-uuid
vol-name-or-key-or-path コマンドは、指定されたボリュームを削除します。このコマンドには、特定の --pool pool-or-uuid
が必要です。これは、ボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path
オプションは、削除するボリュームの名前またはキーまたはパスを指定します。
--pool pool-or-uuid
--algorithm algorithm
vol-name-or-key-or-path コマンドは、ボリュームをワイプして、以前にボリュームにあったデータが将来の読み取りにアクセスできないようにします。このコマンドには、--pool pool-or-uuid
が必要です。これは、ボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path には、ワイプするボリュームの名前またはキーまたはパスが含まれています。デフォルト (ストレージボリュームのすべてのセクターが値 0 で書き込まれる) の代わりに、異なるワイピングアルゴリズムを選択できることに注意してください。ワイピングアルゴリズムを指定するには、サポートされている次の アルゴリズム タイプのいずれかで --algorithm
オプションを使用します。
- 1-pass all zeroeszero
- 4-pass NNSA Policy Letter NAP-14.1-C (XVI-8) for sanitizing removable and non-removable hard disks: random x2, 0x00, verify.nnsa
- 4-pass DoD 5220.22-M section 8-306 procedure for sanitizing removable and non-removable rigid disks: random, 0x00, 0xff, verify.dod
- ドイツ情報技術セキュリティーセンター (http://www.bsi.bund.de) が推奨する 9-pass メソッド: 0xff、0xfe、0xfd、0xfb、0xf7、0xef、0xdf、0xbf、0x7f。bsi
- The canonical 35-pass sequence described in Gutmann's paper.gutmann
- "Applied Cryptography"(1996) の Bruce Schneier で記述される 7-pass メソッド: 0x00、0xff、random x5schneier
- Roy Pfitzner's 7-random-pass method: random x7pfitzner7
- Roy Pfitzner's 33-random-pass method: random x33.pfitzner33
- 1-pass pattern: randomrandom
14.12.3. ストレージボリューム情報の XML ファイルへのダンプ
--pool pool-or-uuid
vol-name-or-key-or-path コマンドは、ボリューム情報を指定されたファイルへの XML ダンプとして取得します。
--pool pool-or-uuid
が必要です。これは、ボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path は、結果の XML ファイルを配置するボリュームの名前またはキーまたはパスです。
14.12.4. ボリューム情報の一覧表示
--pool pool-or-uuid
vol-name-or-key-or-path コマンドは、指定されたストレージボリューム --pool
に関する基本情報を一覧表示します。ここで、pool-or-uuid はボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path は、情報を返すボリュームの名前またはキーまたはパスです。
--pool pool-or-uuid
--details
は、指定されたストレージプール内のすべてのボリュームを一覧表示します。このコマンドには、ストレージプールの名前または UUID である --pool pool-or-uuid
が必要です。--details
オプションは、virsh に、ボリュームタイプおよびキャパシティー関連の情報 (利用可能な場合) を追加で表示するように指示します。
14.12.5. ストレージボリュームの情報の取得
--uuid
vol-key-or-path コマンドは、指定されたボリュームのプール名または UUID を返します。デフォルトでは、プール名が返されます。--uuid
オプションを指定すると、代わりにプール UUID が返されます。このコマンドには、要求された情報を返すボリュームのキーまたはパスである vol-key-or-path が必要です。
--pool pool-or-uuid
vol-name-or-key コマンドは、指定したボリュームのパスを返します。このコマンドには、--pool pool-or-uuid
が必要です。これは、ボリュームが存在するストレージプールの名前または UUID です。また、パスが要求されているボリュームの名前または鍵である vol-name-or-key も必要です。
--pool pool-or-uuid
vol-name-or-path コマンドは、指定したボリュームのボリュームキーを返します。 --pool pool-or-uuid
はストレージプールの名前または UUID で、vol-name-or-path はボリュームキーを返すボリュームの名前またはパスになります。
14.12.6. ストレージボリュームのアップロードとダウンロード
14.12.6.1. ストレージボリュームへのコンテンツのアップロード
--pool pool-or-uuid
--offset bytes
--length bytes
vol-name-or-key-or-path local-file コマンドは、指定された ローカルファイル の内容をストレージボリュームにアップロードします。このコマンドには、ボリュームが存在するストレージプールの名前または UUID である --pool pool-or-uuid
が必要です。また、ワイプするボリュームの名前またはキーまたはパスである vol-name-or-key-or-path も必要です。--offset
オプションは、データの書き込みを開始するストレージボリューム内の位置です。--length length
は、アップロードされるデータ量の上限を示します。local-file が指定した --length
よりも大きい場合は、エラーが発生します。
14.12.6.2. ストレージボリュームからコンテンツをダウンロードする
# vol-download--pool
pool-or-uuid--offset
bytes--length
bytes vol-name-or-key-or-path local-file
-pool pool-or-uuid を
必要とします。また、ワイプするボリュームの名前またはキーまたはパスである vol-name-or-key-or-path も必要です。オプション --offset
を使用すると、データの読み取りを開始するストレージボリューム内の位置が決まります。--length length
は、ダウンロードされるデータ量の上限を示します。
14.12.7. ストレージボリュームのサイズ変更
# vol-resize--pool
pool-or-uuid vol-name-or-path pool-or-uuid capacity--allocate
--delta
--shrink
--pool pool-or-uuid
が必要です。このコマンドでは、vol-name-or-key-or-path が、サイズを変更するボリュームの名前またはキーまたはパスであることも必要です。
--allocate
オプションが指定されていない限り、新しい容量によって sparse file が作成される可能性があります。通常、容量は新しいサイズになりますが、--delta
が存在する場合は、既存のサイズに追加されます。--shrink
オプションが存在しない限り、ボリュームを縮小しようとすると失敗します。
--shrink
オプションが指定されていない限り、容量を負にすることはできず、負の符号は必要ありません。capacity はスケーリングされた整数であり、接尾辞がない場合はデフォルトでバイトになります。このコマンドは、アクティブなゲストが使用していないストレージボリュームに対してのみ安全であることに注意してください。ライブのサイズ変更については、「blockresize を使用してドメインパスのサイズを変更する」 を参照してください。
14.13. ゲストごとの仮想マシン情報の表示
14.13.1. ゲスト仮想マシンの表示
# virsh list
--inactive
オプションは、非アクティブなゲスト仮想マシン (つまり、定義されているが現在アクティブではないゲスト仮想マシン) を一覧表示します。--all
オプションは、すべてのゲスト仮想マシンを一覧表示します。以下に例を示します。# virsh list --all Id Name State ---------------------------------- 0 Domain-0 running 1 Domain202 paused 2 Domain010 inactive 3 Domain9600 crashed
このコマンドを使用して表示できる 7 つの状態があります。- Running -
running
状態は、CPU 上で現在アクティブなゲスト仮想マシンを指します。 - Idle -
idle
状態は、ドメインがアイドル状態であり、実行されていないか、実行できない可能性があることを示します。これは、ドメインが IO (従来の待機状態) を待機しているか、他に何もすることがなかったためにスリープ状態になっていることが原因である可能性があります。 - Paused -
paused
状態は、一時停止されているドメインを一覧表示します。これは、管理者が virt-manager または virsh suspend で paused ボタンを使用すると発生します。ゲスト仮想マシンが一時停止すると、メモリーとその他のリソースを消費しますが、ハイパーバイザーからのスケジューリングと CPU リソースには対応していません。 - Shutdown -
shutdown
状態は、シャットダウン中のゲスト仮想マシン用です。ゲスト仮想マシンにシャットダウンシグナルが送信され、操作を正常に停止するプロセスにあるはずです。これは、すべてのゲスト仮想マシンのオペレーティングシステムでは機能しない可能性があり、一部のオペレーティングシステムはこれらのシグナルに応答しない場合があります。 - Shut off -
shut off
状態は、ドメインが実行されていないことを示します。これは、ドメインが完全にシャットダウンした場合、またはドメインが開始されていない場合に発生する可能性があります。 - Crashed -
crashed
状態は、ドメインがクラッシュしたことを示し、ゲスト仮想マシンがクラッシュ時に再起動しないように設定されている場合にのみ発生する可能性があります。 - Dying -
dying
状態のドメインは停止中です。これは、ドメインが完全にシャットダウンまたはクラッシュしていない状態です。
--managed-save
このオプションだけではドメインをフィルターリングしませんが、管理された保存状態が有効になっているドメインが一覧表示されます。ドメインを実際に個別にリストするには、--inactive
オプションも使用する必要があります。--name
は指定されていますドメイン名はリストに出力されます。--uuid
が指定されている場合、代わりにドメインの UUID が出力されます。オプション--table
を使用すると、テーブルスタイルの出力を使用する必要があることを指定します。3 つのコマンドはすべて相互に排他的です--title
このコマンドは--table
出力とともに使用する必要があります。--title
を指定すると、短いドメインの説明 (title) を含む追加の列がテーブルに作成されます。--persistent
には、リストに永続ドメインが含まれます。--transient
オプションを使用します。--with-managed-save
は、管理された保存で設定されたドメインをリストします。それを指定せずにコマンドを一覧表示するには、コマンド--without-managed-save
を使用します--state-running
は、実行中のドメインを除外し、--state-paused
は一時停止されたドメインを除外し、--state-shutoff
はオフになっているドメインを除外し、--state-other
はすべての状態をフォールバックとして一覧表示します。--autostart
このオプションを使用すると、自動開始ドメインが一覧表示されます。この機能が無効になっているドメインを一覧表示するには、オプション--no-autostart
を使用します。--with-snapshot
は、スナップショットイメージを一覧表示できるドメインを一覧表示します。スナップショットのないドメインをフィルターリングするには、オプション--without-snapshot
を使用します
$ virsh list --title --name Id Name State Title 0 Domain-0 running Mailserver1 2 rhelvm paused
14.13.2. 仮想 CPU 情報の表示
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
# virsh vcpuinfo rhel6 VCPU: 0 CPU: 2 State: running CPU time: 7152.4s CPU Affinity: yyyy VCPU: 1 CPU: 2 State: running CPU time: 10889.1s CPU Affinity: yyyy
14.13.3. 仮想 CPU アフィニティーの設定
例14.3 vCPU のホストの物理マシンの CPU へのピニング
# virsh vcpupin rhel6 VCPU: CPU Affinity ---------------------------------- 0: 0-3 1: 0-3
--vcpu
には vcpu 番号が必要です。[--cpulist] >string<
は、設定するホスト物理マシンの CPU 番号を一覧表示するか、オプションのクエリーを省略します--config
は次回のブートに影響します。--live
は実行中のドメインに影響します--current
は現在のドメインに影響します
14.13.4. ドメインの仮想 CPU 数に関する情報の表示
# virsh vcpucount rhel6 maximum config 2 maximum live 2 current config 2 current live 2
--maximum
は、使用可能な vCPU の最大数を表示します--active
は、現在アクティブな vCPU の数を表示します--live
は、実行中のドメインからの値を表示します--config
は、ゲスト仮想マシンの次回の起動時に設定される値を表示します--current
は、現在のドメイン状態に応じた値を表示します--guest
は、返されるカウントをゲストの観点から表示します
14.13.5. 仮想 CPU アフィニティーの設定
# virsh vcpupin domain-id vcpu cpulist
--config
などの追加パラメーターは次回の起動に影響しますが、--live
は実行中のドメインに影響し、--current
は現在のドメインに影響します。
14.13.6. 仮想 CPU 数の設定
# virsh setvcpus {domain-name, domain-id or domain-uuid} count [[--config] [--live] | [--current] [--guest]
{domain-name, domain-id or domain-uuid}
- 仮想マシンを指定します。count
- 設定する仮想 CPU の数を指定します。注記count
値は、作成時にゲスト仮想マシンに割り当てられた CPU の数を超えることはできません。また、ホストまたはハイパーバイザーによって制限される場合もあります。Xen の場合、ドメインが準仮想化されている場合にのみ、実行中のドメインの仮想 CPU を調整できます。--live
- デフォルトのオプション。何も指定されていない場合に使用されます。設定の変更は、実行中のゲスト仮想マシンで有効になります。これは、vCPU の数が増加した場合は ホットプラグ と呼ばれ、減少した場合は ホットアンプラグ と呼ばれます。重要vCPU ホットアンプラグ機能はテクノロジープレビューです。したがって、これはサポートされておらず、高い値のデプロイメントでの使用は推奨されません。--config
- 設定の変更は、ゲストの次回の再起動時に有効になります。ハイパーバイザーで対応している場合は、--config
オプションと--live
オプションの両方を指定できます。--current
- 設定の変更は、ゲスト仮想マシンの現在の状態に影響します。実行中のゲストで使用する場合、次のように機能します--live
、シャットダウンされたゲストで使用される場合、次のように機能します--config
。--maximum
- ゲストの次回の再起動時にホットプラグできる最大 vCPU 制限を設定します。そのため、--config
オプションでのみ使用する必要があり、--live
では使用しないでください。--guest
- ホットプラグまたはホットアンプラグの代わりに、QEMU ゲストエージェントは、vCPU を有効または無効にすることにより、実行中のゲストの vCPU カウントを直接変更します。このオプションは、gueet の現在の仮想 CPU 数よりも多くのcount
の値とすることはできません。また、ゲストの再起動時に--guest
でセットされる設定がリセットされます。
例14.4 vCPU のホットプラグとホットアンプラグ
virsh setvcpus guestVM1 2 --live
--live
オプションにあるように、guestVM1 の実行中に実行されます。
virsh setvcpus guestVM1 1 --live
14.13.7. メモリー割り当ての設定
# virsh setmem {domain-id or domain-name} count
# virsh setmem vr-rhel6u1-x86_64-kvm --kilobytes 1025000
count
はキロバイト単位で指定する必要があります。新しいカウント値は、ゲスト仮想マシンを作成したときに指定した量を超えることはできません。64MB 未満の値は、ほとんどのゲスト仮想マシンのオペレーティングシステムでは使用できない可能性があります。最大メモリー値を上げても、アクティブなゲスト仮想マシンには影響しません。新しい値が利用可能なメモリーよりも小さい場合は、縮小するため、ゲスト仮想マシンがクラッシュする可能性があります。
- [--domain] <string> - ドメイン名、ID、または uuid
- [--size] <number> スケーリングされた整数としての新しいメモリーサイズ (デフォルトは KiB)有効なメモリーユニットは以下のとおりです。
- バイトの場合は
b
またはbytes
になります。 - キロバイトの場合は、
KB
になります (10 3 または 1,000 バイトのブロック) - キビバイトの場合は
k
またはKiB
(2 10 または 1024 バイトのブロック) MB
メガバイトの場合 (10 6 または 1,000,000 バイトのブロック)- メビバイトの場合は
M
またはMiB
(220 または 1,048,576 バイトのブロック) GB
(ギガバイト) (109 または 1,000,000,000 バイトのブロック)- ギビバイトの場合は
G
またはGiB
(30 または 1,073,741,824 バイトのブロック) - エクサバイトの場合は
TB
(1012 または 1,000,000,000,000 バイト のブロック) - テビバイトの場合は
T
またはTiB
(2 40 または 1,099,511,627,776 のブロック)
すべての値は、libvirt により、最も近い kibibyte に丸められます。また、ハイパーバイザーが対応する粒度に丸めることもできます。一部のハイパーバイザーは、4000KiB(4000 x 2 10 または 4,096,000 バイト) などの最小値も適用します。この値の単位は、オプションの属性memory unit
により決定されます。デフォルトは、測定単位としての KiB (キビバイト) になります。この値は、210 または 1024 バイトのブロックで乗算されます。 - --config - 次回の起動に影響します
- --live は実行中のドメインのメモリーを制御します
- --current は、現在のドメインのメモリーを制御します
14.13.8. ドメインのメモリー割り当ての変更
--config
--live
--current
を使用すると、以下のように、ゲスト仮想マシンの最大メモリー割り当て量を設定できます。
virsh setmaxmem rhel6 1024 --current
--config
- 次回の起動に影響します--live
- 実行中のドメインのメモリーを制御します。これにより、すべてのハイパーバイザーで、最大メモリー制限のライブ変更が許可されないため、ハイパーバイザーがこの動作に対応できるようになります。--current
- 現在のドメインのメモリーを制御します
14.13.9. ゲスト仮想マシンブロックのデバイス情報の表示
# virsh domblkstat GuestName block-device
14.13.10. ゲスト仮想マシンのネットワークデバイス情報の表示
# virsh domifstat GuestName interface-device
14.14. 仮想ネットワークの管理
# virsh net-list
# virsh net-list Name State Autostart ----------------------------------------- default active yes vnet1 active yes vnet2 active yes
# virsh net-dumpxml NetworkName
# virsh net-dumpxml vnet1 <network> <name>vnet1</name> <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid> <forward dev='eth0'/> <bridge name='vnet0' stp='on' forwardDelay='0' /> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.128' end='192.168.100.254' /> </dhcp> </ip> </network>
- virsh net-autostart network-name network-name - network-name として指定したネットワークを自動的に起動します。
- virsh net-create XMLfile - 既存の XML ファイルを使用して新しいネットワークを生成して開始します。
- virsh net-define XMLfile - 既存の XML ファイルを起動せずに新しいネットワークデバイスを生成します。
- virsh net-destroy network-name - network-name として指定されたネットワークを破棄します。
- virsh net-name networkUUID - 指定された networkUUID をネットワーク名に変換します。
- virsh net-uuid network-name - 指定された ネットワーク名 をネットワーク UUID に変換します。
- virsh net-start nameOfInactiveNetwork - 非アクティブなネットワークを開始します。
- virsh net-undefine nameOfInactiveNetwork - 非アクティブなネットワークの定義を削除します。
14.15. virsh を使用したゲスト仮想マシンの移行
14.15.1. インターフェイスコマンド
network
サービスを使用している場合に限りサポートされます。
<interface>
要素 (システムが作成したブリッジインターフェイスなど) 内で名前で使用できますが、ホストインターフェイスが特定のゲスト設定 XML と完全に関連付けられる必要はありません。ホストインターフェイスのコマンドの多くは、ドメインに使用されるコマンドと似ており、インターフェイスに名前を付ける方法は、名前または MAC アドレスのいずれかです。ただし、iface
オプションに MAC アドレスを使用する場合、そのアドレスが一意である場合にのみ機能します (多くの場合、インターフェイスとブリッジが同じ MAC アドレスを共有しており、その場合、その MAC アドレスを使用すると曖昧さによりエラーが発生し、代わりに名前を使用する必要があります)。
14.15.1.1. XML ファイルを使用したホストの物理マシンインターフェイスの定義および起動
virsh iface-define iface.xml
14.15.1.2. ホストインターフェイスの XML 設定ファイルの編集
14.15.1.3. アクティブなホストインターフェイスの一覧表示
--inactive
--all
は、アクティブなホストインターフェイスのリストを表示します。--all
が指定されている場合、このリストには、定義されているが非アクティブなインターフェイスも含まれます。--inactive
を指定すると、非アクティブのインターフェイスのみが一覧表示されます。
14.15.1.4. MAC アドレスのインターフェイス名への変換
14.15.1.5. 特定のホスト物理マシンインターフェイスを停止する
14.15.1.6. ホスト設定ファイルの表示
--inactive
は、ホストインターフェイスの情報を、stdout への XML ダンプとして表示します。--inactive
オプションを指定すると、出力には、次回起動したときに使用されるインターフェイスの永続的な状態が反映されます。
14.15.1.7. ブリッジデバイスの作成
# virsh iface-bridge interface bridge --no-stp
delay --no-start
14.15.1.8. ブリッジデバイスの破損
--no-start
コマンドは、指定したブリッジデバイス bridge を削除し、その基盤となるインターフェイスを通常の使用に戻し、すべての IP アドレスの設定をブリッジデバイスから基盤となるデバイスに移動します。--no-start
オプションを使用しない限り、基本となるインターフェイスが再起動しますが、通常は再起動しないことを念頭に置いてください。ブリッジの作成に使用するコマンドは、「ブリッジデバイスの作成」 を参照してください。
14.15.1.9. インターフェイススナップショットの操作
14.15.2. スナップショットの管理
14.15.2.1. スナップショットの作成
# snapshot-create <domain> <xmlfile> [--redefine] [--current] [--no-metadata] [--reuse-external]
--redefine
は、snapshot-dumpxml によって生成されたすべての XML 要素が有効であるかどうかを指定します。これは、スナップショット階層をあるマシンから別のマシンに移行したり、一時的なドメインがなくなって後で同じ名前と UUID で再作成された場合の階層を再作成したり、スナップショットメタデータにわずかな変更を加えたりするために使用できます (スナップショットに埋め込まれたドメイン XML のホスト固有の側面など)。このオプションが指定されている場合、xmlfile 引数は必須であり、--current
オプションも指定されていない限り、ドメインの現在のスナップショットは変更されません。--no-metadata
はスナップショットを作成しますが、メタデータは即座に破棄されます (つまり、libvirt は、スナップショットを現在のものとして扱いません。また、メタデータに関する libvirt を教えるために--redefine
を使用しない限り、スナップショットに戻ることはできません)。--reuse-external
を使用する場合、このオプションは、使用する既存の外部 XML スナップショットの場所を指定します。既存の外部スナップショットがまだ存在しない場合、既存のファイルの内容が失われないようにするために、コマンドはスナップショットの作成に失敗します。
14.15.2.2. 現在のドメインのスナップショットを作成する
# virsh snapshot-create-as domain {[--print-xml] | [--no-metadata] [--reuse-external]} [name] [description] [--diskspec] diskspec]
--print-xml
は、実際にスナップショットを作成するのではなく、出力として snapshot-create に適切な XML を作成します。--diskspec
オプションを使用して、--disk-only
および外部チェックポイントによる外部ファイルの作成方法を制御できます。このオプションは、ドメイン XML 内の <disk> 要素の数に従って、複数回指定できます。各 <diskspec> は、disk [,snapshot=type][,driver=type][,file=name]の形式です。ディスクまたはfile=nameにリテラルのコンマを含める場合は、2 番目のコンマでエスケープします。domain、name、および description の 3 つすべてが含まれている場合を除き、ディスクスペックの前にリテラル--diskspec
を指定する必要があります。たとえば、ディスクスペックが vda,snapshot=external,file=/path/to,,new の場合は、以下の XML になります。<disk name=’vda’ snapshot=’external’> <source file=’/path/to,new’/> </disk>
--reuse-external
は、既存のファイルを宛先として再利用する外部スナップショットを作成します (このファイルが上書きされることを意味します)。この宛先が存在しない場合、既存のファイルの内容が失われないように、スナップショット要求は拒否されます。--no-metadata
はスナップショットデータを作成しますが、メタデータはすぐに破棄されます (つまり、libvirt はスナップショットを最新として処理せず、また、snapshot-create が、その後、libvirt にメタデータを再度教えるために使用されない限り、スナップショットに戻ることはできません)。このオプションは--print-xml
と互換性がありません。
14.15.2.3. 現在のドメインのスナップショットを作成する
# virsh snapshot-current domain {[--name] | [--security-info] | [snapshotname]}
snapshotname
が使用されていない場合、ドメインの現在のスナップショット (存在する場合) のスナップショット XML が出力として表示されます。--name
を指定すると、完全な XML ではなく、現在のスナップショット名のみが出力として送信されます。--security-info
を指定すると、セキュリティーの機密情報が XML に含まれます。snapshotname
を使用して、libvirt は、既存の名前付きスナップショットをドメインに戻さずに、現在のスナップショットになるようにリクエストを生成します。
14.15.2.4. snapshot-edit-domain
#virsh snapshot-edit domain [snapshotname] [--current] {[--rename] [--clone]}
snapshotname
と --current
の両方を指定すると、編集したスナップショットが現在のスナップショットになります。snapshotname
を省略する場合は、現在のスナップショットを編集するには、--current
を指定する必要があります。
# virsh snapshot-dumpxml dom name > snapshot.xml # vi snapshot.xml [note - this can be any editor] # virsh snapshot-create dom snapshot.xml --redefine [--current]
--rename
を指定すると、編集されたファイルは別のファイル名に保存されます。--clone
を指定してスナップショット名を変更すると、スナップショットメタデータのクローンが作成されます。いずれも指定されていない場合、編集によりスナップショット名は変更されません。スナップショット名の変更には十分な注意が必要です。1 つの qcow2 ファイル内の内部スナップショットなど、一部のスナップショットの内容には、作成元のスナップショットファイル名からしかアクセスできないためです。
14.15.2.5. snapshot-info-domain
# snapshot-info domain {snapshot | --current}
snapshot
、または--current
で作成中のスナップショットの基本情報を出力します。
14.15.2.6. snapshot-list-domain
#virsh snapshot-list domain [{--parent | --roots | --tree}] [{[--from] snapshot | --current} [--descendants]] [--metadata] [--no-metadata] [--leaves] [--no-leaves] [--inactive] [--active] [--internal] [--external]
--parent
は、各スナップショットの親の名前を示す列を、出力テーブルに追加します。このオプションは、--roots
や--tree
と併用できません。--roots
は、一覧をフィルターリングして、親がないスナップショットのみを表示します。このオプションは、--parent
または--tree
では使用できません。--tree
は、スナップショット名のみを一覧表示し、出力をツリー形式で表示します。これらの 3 つのオプションは相互に排他的です。このオプションは、--roots
や--parent
と併用できません。--from
は、指定したスナップショットの子であるスナップショットの一覧をフィルターリングします。または、--current
が指定されている場合は、一覧を現在のスナップショットから開始するようにします。分離時または--parent
と併用する場合、--descendants
が存在しない限り、一覧は直接の子に制限されます。--tree
と一緒に使用すると、--descendants
の使用が暗黙的になります。このオプションは、--roots
とは互換性がありません。--from
または--current
の開始点は、--tree
オプションが指定されていない限り、一覧に含まれていないことに注意してください。--leaves
を指定すると、この一覧は、子がないスナップショットのみを対象にフィルター処理されます。同様に、--no-leaves
を指定すると、一覧は子を持つスナップショットのみにフィルターリングされます。(両方のオプションを省略するとフィルターリングはされませんが、両方のオプションを指定すると、サーバーがオプションを認識するかどうかに応じて同じリストまたはエラーが生成されることに注意してください) フィルターリングオプションは--tree
と互換性がありません。--metadata
が指定されている場合、リストは libvirt メタデータを含むスナップショットのみにフィルターされ、永続ドメインの定義解除を防止したり、一時ドメインの破棄時に失われたりします。同様に、--no-metadata
が指定されている場合には、一覧が libvirt メタデータを必要としないスナップショットだけにフィルターリングされます。--metadata
が指定されている場合、リストはドメインがシャットオフされたときに取得されたスナップショットにフィルターされます。--active
を指定すると、ドメインの実行中に取得したスナップショットに一覧がフィルターリングされ、スナップショットには、その稼働状態に戻すためのメモリーの状態が含まれます。--disk-only
が指定されている場合、リストは、ドメインの実行中に取得されたスナップショットにフィルターされますが、スナップショットにはディスクの状態のみが含まれます。--internal
を指定すると、一覧は、既存ディスクイメージの内部ストレージを使用するスナップショットにフィルターリングされます。--external を指定すると、リストは、ディスクイメージまたはメモリー状態に外部ファイルを使用するスナップショットにフィルターリングされます。
14.15.2.7. snapshot-dumpxml ドメインスナップショット
# virsh snapshot-dumpxml domain snapshot [--security-info]
--security-info
オプションには、セキュリティーの機密情報も含まれます。snapshot-current
を使用すると、現行スナップショットの XML に簡単にアクセスできます。
14.15.2.8. snapshot-parent ドメイン
--current
で現在のスナップショットの名前を出力します。使用するには、以下を実行します
#virsh snapshot-parent domain {snapshot | --current}
14.15.2.9. snapshot-revert ドメイン
snapshot
で指定したスナップショットか、--current
で指定した現在のスナップショットに戻します。
snapshot-revert
の完了後のドメインの状態は、元のスナップショット取得時のドメインの状態であることに注意してください。
# snapshot-revert domain {snapshot | --current} [{--running | --paused}] [--force]
--running
または --paused
のいずれかを渡すと、状態の変更 (非アクティブなドメインの起動や、実行中のドメインの一時停止など) が行われます。一時ドメインは非アクティブの状態にできないため、一時ドメインのディスクスナップショットに戻す場合には、このオプションのいずれかを使用する必要があります。
--force
を使用して続行する必要があります。1 つ目は、設定を戻すための完全なドメイン情報がないスナップショットの場合です。libvirt は、現在の設定がスナップショット時の使用状況と一致することを証明できないため、--force
を提供することで、スナップショットが現在の設定と互換性があることを libvirt に保証します (一致しないとドメインの実行に失敗する可能性が高くなります)。もう 1 つは、実行中のドメインから、既存のハイパーバイザーを再利用するのではなく、新しいハイパーバイザーを作成する必要があるアクティブなドメインに戻す場合です。これは、既存の VNC 接続または Spice 接続を壊すなどの欠点を意味するからです。これは、証明可能な互換性のない設定を使用するアクティブなスナップショットと、--start
フラグまたは --pause
オプションを組み合わせた非アクティブなスナップショットで発生します。
14.15.2.10. snapshot-delete ドメイン
# virsh snapshot-delete domain {snapshot | --current} [--metadata] [{--children | --children-only}]
snapshot
という名前のドメインに対するスナップショット、または --current
を使用した現行スナップショットを削除します。このスナップショットに子スナップショットが含まれる場合は、このスナップショットの変更は子スナップショットにマージされます。--children
を使用すると、このスナップショットと、その子スナップショットがすべて削除されます。--children-only
を使用すると、このスナップショットの子はすべて削除されますが、このスナップショットはそのままになります。これらの 2 つのオプションは相互に排他的です。
--metadata
を使用すると、libvirt が管理するスナップショットのメタデータが削除されます。外部ツールによるアクセス用に、スナップショットのコンテンツはそのまま残されます。それ以外の場合は、スナップショットを削除すると、その時点のデータコンテンツも削除されます。
14.16. ゲスト仮想マシンの CPU モデル設定
14.16.1. はじめに
qemu32
または qemu64
という名前の一般的なモデルで表示します。このようなハイパーバイザーは、より高度なフィルターリングを実行し、すべての物理 CPU を少数のグループに分類し、ゲスト仮想マシンに提示される各グループに対してベースライン CPU モデルを 1 つ用意します。このような動作により、ホストの物理マシン間でゲスト仮想マシンを安全に移行できます。ただし、ゲスト仮想マシンすべてに、同じグループに分類される物理 CPU がある場合に限ります。libvirt は通常、ポリシー自体を適用せず、より高いレイヤーで必要なポリシーを定義するメカニズムを提供します。ホストの物理マシン間でゲスト仮想マシンの移行が正常に実行されるようにするには、CPU モデル情報を取得し、適切なゲスト仮想マシンの CPU モデルを定義する方法を理解することが重要になります。ハイパーバイザーは、認識している機能のみをエミュレートでき、ハイパーバイザーがリリースされてから作成された機能はエミュレートできない場合がある点に注意してください。
14.16.2. ホスト物理マシンの CPU モデルの学習
14.16.3. ホスト物理マシンのプールに対応するための互換性のある CPU モデルの決定
図14.3 ホストの物理マシンの CPU モデル情報をプルする
<capabilities> <host> <cpu> <arch>i686</arch> <model>pentium3</model> <topology sockets='1' cores='2' threads='1'/> <feature name='lahf_lm'/> <feature name='lm'/> <feature name='xtpr'/> <feature name='cx16'/> <feature name='ssse3'/> <feature name='tm2'/> <feature name='est'/> <feature name='vmx'/> <feature name='ds_cpl'/> <feature name='monitor'/> <feature name='pni'/> <feature name='pbe'/> <feature name='tm'/> <feature name='ht'/> <feature name='ss'/> <feature name='sse2'/> <feature name='acpi'/> <feature name='ds'/> <feature name='clflush'/> <feature name='apic'/> </cpu> </host> </capabilities>
図14.4 ランダムなサーバーから CPU 説明を生成する
<capabilities> <host> <cpu> <arch>x86_64</arch> <model>phenom</model> <topology sockets='2' cores='4' threads='1'/> <feature name='osvw'/> <feature name='3dnowprefetch'/> <feature name='misalignsse'/> <feature name='sse4a'/> <feature name='abm'/> <feature name='cr8legacy'/> <feature name='extapic'/> <feature name='cmp_legacy'/> <feature name='lahf_lm'/> <feature name='rdtscp'/> <feature name='pdpe1gb'/> <feature name='popcnt'/> <feature name='cx16'/> <feature name='ht'/> <feature name='vme'/> </cpu> ...snip...
virsh-caps-workstation-cpu-only.xml
という名前のファイルに保存されており、このファイルで virsh cpu-compare コマンドを実行できます。
# virsh cpu-compare virsh-caps-workstation-cpu-only.xml Host physical machine CPU is a superset of CPU described in virsh-caps-workstation-cpu-only.xml
both-cpus.xml
で virsh cpu-baseline コマンドを実行します。 # virsh cpu-baseline both-cpus.xml を実行すると、以下が行われます。
図14.5 複合 CPU ベースライン
<cpu match='exact'> <model>pentium3</model> <feature policy='require' name='lahf_lm'/> <feature policy='require' name='lm'/> <feature policy='require' name='cx16'/> <feature policy='require' name='monitor'/> <feature policy='require' name='pni'/> <feature policy='require' name='ht'/> <feature policy='require' name='sse2'/> <feature policy='require' name='clflush'/> <feature policy='require' name='apic'/> </cpu>
14.17. ゲスト仮想マシンの CPU モデルの設定
match
という名前の属性があります。この属性には、以下の値を指定できます。
- match='minimum' - ホストの物理マシン CPU には、ゲスト仮想マシン XML で説明されている CPU 機能が少なくとも必要です。ホストの物理マシンに、ゲスト仮想マシンの設定以外の機能がある場合は、ゲスト仮想マシンにも公開されます。
- match='exact' - ホストの物理マシンの CPU には、ゲスト仮想マシンの XML で説明されている CPU 機能が少なくとも必要です。ホストの物理マシンに、ゲスト仮想マシンの設定以外の機能がある場合は、ゲスト仮想マシンからマスクアウトされます。
- match='strict' - ホストの物理マシン CPU には、ゲスト仮想マシン XML で説明されている CPU 機能とまったく同じものが必要です。
- policy='force' - ホストの物理マシンに機能がない場合でも、ゲスト仮想マシンにその機能を公開します。通常、これはソフトウェアエミュレーションの場合にのみ役立ちます。
- policy='require' - 機能をゲスト仮想マシンに公開し、ホストの物理マシンにその機能がない場合には失敗します。これは妥当なデフォルトです。
- policy='optional' - 機能に対応している場合にゲスト仮想マシンに公開します。
- policy='disable' - ホストの物理マシンにこの機能がある場合は、ゲスト仮想マシンに表示しないようにします。
- policy='forbid' - ホストの物理マシンにこの機能がある場合は、ゲスト仮想マシンの起動に失敗して拒否されます。
14.18. ゲスト仮想マシンのリソースの管理
- memory - メモリーコントローラーにより、RAM の制限やスワップの使用量を設定し、グループ内の全プロセスの累積使用量を照会できます。
- cpuset - CPU セットコントローラーは、グループ内のプロセスを CPU セットにバインドし、CPU 間の移行を制御します。
- cpuacct - CPU アカウンティングコントローラーは、プロセスのグループに対する CPU 使用率の情報を提供します。
- cpu - CPU スケジューラーコントローラーは、グループ内のプロセスの優先順位を制御します。これは、nice レベルの権限を付与するのと似ています。
- devices - デバイスコントローラーは、文字デバイスおよびブロックデバイスのアクセス制御リストを付与します。
- freezer - フリーザーコントローラーは、グループ内のプロセスを一時停止して再開します。これは、グループ全体の SIGSTOP と似ています。
- net_cls - ネットワーククラスコントローラーは、プロセスを tc ネットワーククラスに関連付けることで、ネットワークの使用率を管理します。
/etc/fstab
に追加するよりも複雑になります。ディレクトリー階層を設定し、その中にプロセスを配置する方法を決定する必要があります。これは、次の virsh コマンドで実行できます。
- schedinfo - 「スケジュールパラメーターの設定」 で説明しています。
- blkiotune - 「ブロック I/O パラメーターの表示または設定」 で説明しています。
- domiftune - 「ネットワークインターフェイスの帯域幅パラメーターの設定」 で説明しています。
- memtune - 「メモリーの調整の設定」 で説明しています。
14.19. スケジュールパラメーターの設定
#virsh schedinfo domain --set
--weight
--cap
--current
--config
--live
- domain - これはゲスト仮想マシンドメインです
--set
- ここに置かれるストリングは、呼び出されるコントローラーまたはアクションです。必要な場合には、追加のパラメーターまたは値も追加する必要があります。--current
---set
と一緒に使用すると、指定したset文字列を現在のスケジューラー情報として使用します。一緒に使用しない場合は、現在のスケジューラー情報が表示されます。--config
- ---set
と併用すると、次回のシステムの再起動時に指定したset 文字列を使用します。一緒に使用しない場合は、設定ファイルに保存されているスケジューラー情報が表示されます。--live
---set
と一緒に使用すると、現在実行しているゲスト仮想マシンで指定したset 文字列を使用します。一緒に使用しない場合は、実行中の仮想マシンが現在使用している設定が表示されます。
cpu_shares
、vcpu_period
、および vcpu_quota
のいずれかのパラメーターで設定できます。
例14.5 schedinfo show
# virsh schedinfo shell Scheduler : posix cpu_shares : 1024 vcpu_period : 100000 vcpu_quota : -1
例14.6 schedinfo set
# virsh schedinfo --set cpu_shares=2046 shell Scheduler : posix cpu_shares : 2046 vcpu_period : 100000 vcpu_quota : -1
14.20. ブロック I/O パラメーターの表示または設定
# virsh blkiotune domain [--weight weight] [--device-weights device-weights] [[--config] [--live] | [--current]]
14.21. メモリーの調整の設定
14.22. 仮想ネットワークコマンド
14.22.1. 仮想ネットワークの自動起動
# virsh net-autostart network [--disable
]
--disable
オプションを受け入れます。これにより、自動開始コマンドが無効になります。
14.22.2. XML ファイルからの仮想ネットワークの作成
# virsh net-create file
14.22.3. XML ファイルからの仮想ネットワークの定義
# net-define file
14.22.4. 仮想ネットワークの停止
# net-destroy network
14.22.5. ダンプファイルの作成
--inactive
を指定すると、物理機能は、関連付けられた仮想機能に展開されません。ダンプファイルを作成するには、次のコマンドを実行します。
# virsh net-dumpxml network [--inactive
]
14.22.6. 仮想ネットワークの XML 設定ファイルの編集
# virsh net-edit network
14.22.7. 仮想ネットワークに関する情報の取得
# virsh net-info network
14.22.8. 仮想ネットワークに関する情報の一覧表示
--all
が指定されている場合は、アクティブなネットワーク一覧を返します。--inactive
が指定されている場合は、非アクティブなネットワークのみが一覧表示されます。返されたネットワークを --persistent
でフィルターリングして永続的なネットワークを、--transient
でフィルターリングして一時的なネットワークを、--autostart
でフィルターリングして自動起動が有効になっているネットワークを、そして --no-autostart
でフィルターリングして自動起動が無効になっているネットワークを一覧表示することも推奨されます。
# net-list [--inactive
| --all
] [--persistent
] [<--transient
>] [--autostart] [<--no-autostart
>]
14.22.9. ネットワーク UUID のネットワーク名への変換
# virsh net-name network-UUID
14.22.10. (定義済みの) 非アクティブなネットワークの起動
# virsh net-start network
14.22.11. 非アクティブなネットワークの設定の定義解除
# net-undefine network
14.22.12. ネットワーク名のネットワーク UUID への変換
# virsh net-uuid network-name
14.22.13. 既存のネットワーク定義ファイルの更新
<ip>
要素内に <dhcp>
要素に含まれる <host>
要素を変更します。xml は、変更するタイプの完全な xml 要素のテキストです (たとえば、<host mac="00:11:22:33:44:55' ip='192.0.2.1'/>)、または完全な xml 要素が含まれるファイルの名前です。あいまいさの除去は、提供されているテキストの最初の文字を調べて行います。最初の文字が "<" の場合は XML テキストで、最初の文字が ">" でない場合は、使用される xml テキストが含まれるファイル名になります。--parent-index オプションは、要求された要素が、複数の親要素のうちどの要素にあるのかを指定するために使用します (0-ベース)。たとえば、dhcp <host>
要素は、ネットワーク内の複数の <ip>
要素のいずれかに置くことができます。parent-index が指定されていない場合は最も適切な <ip>
要素が選択されます (通常は、<dhcp>
要素がすでに存在するものだけが対象となります)。ただし、--parent
-index が指定されていると、<ip>
の特定のインスタンスが修正されます。--live
が指定されている場合は、実行中のネットワークに影響を及ぼします。--config
を指定した場合は、次に永続的なネットワークを起動する際に影響を及ぼします。-- current
が指定されている場合、現在のネットワーク状態に影響します。--live
および --config
オプションの両方を指定できますが、--current は排他的です。オプションを指定しない場合は、--current
を指定することと同じです。
# virsh net-update network command section xml [--parent-index index]
[[--live]
[--config]
| [--current]]
第15章 Virtual Machine Manager を使用したゲストの管理 (virt-manager)
- ゲストの定義と作成
- メモリーの割り当て
- 仮想 CPU の割り当て
- 運用パフォーマンスの監視
- ゲストの保存、復元、一時停止、再開、およびシャットダウンと起動
- テキストコンソールやグラフィカルコンソールへのリンク
- ライブマイグレーションおよびオフラインマイグレーション。
15.1. virt-manager の起動
図15.1 virt-manager の起動
ssh -X host's address [remotehost]# virt-manager
15.2. Virtual Machine Manager のメインウィンドウ
図15.2 Virtual Machine Manager のメインウィンドウ
15.3. 仮想ハードウェアの詳細ウィンドウ
図15.3 仮想ハードウェアの詳細アイコン
図15.4 仮想ハードウェアの詳細ウィンドウ
15.3.1. ゲスト仮想マシンへの USB デバイスの接続
手順15.1 Virt-Manager を使用した USB デバイスの接続
- ゲスト仮想マシンの Virtual Machine Details 画面を開きます。
- Add Hardware をクリックします。
図15.5 ハードウェアボタンの追加
- Add New Virtual Hardware ポップアップで、USB Host Device を選択し、一覧から接続するデバイスを選択して、Finish をクリックします。
図15.6 USB デバイスの追加
- ゲスト仮想マシンで USB デバイスを使用するには、ゲスト仮想マシンを起動します。
15.4. 仮想マシンのグラフィカルコンソール
図15.7 グラフィカルコンソールウィンドウ
127.0.0.1
) のみをリッスンします。これにより、ホストでシェル特権を持つユーザーのみが、VNC を介して virt-manager および仮想マシンにアクセスできるようになります。virt-manager は、他のパブリックネットワークインターフェイスをリッスンするように設定されており、別の方法を設定することもできますが、推奨されません。
15.5. リモート接続の追加
- 新規接続を作成するには、File メニューを開き、Add Connection... メニューアイテムを選択します。
- Add Connection ウィザードが表示されます。ハイパーバイザーを選択します。Red Hat Enterprise Linux 6 の場合は、システムで QEMU/KVM を選択します。ローカルシステムの Local、またはリモート接続オプションのいずれかを選択し、Connect をクリックします。この例では、SSH 経由でリモートトンネルを使用します。これは、デフォルトのインストールで機能します。リモート接続の設定の詳細は、5章ゲストのリモート管理 を参照してください。
図15.8 接続の追加
- プロンプトが表示されたら、選択したホストの root パスワードを入力します。
図15.9 メインの virt-manager ウィンドウのリモートホスト
15.6. ゲストの詳細の表示
- Virtual Machine Manager のメインウィンドウで、表示する仮想マシンを強調表示します。
図15.10 表示する仮想マシンの選択
- 仮想マシンマネージャーのEdit メニューから、Virtual Machine Details を選択します。
図15.11 仮想マシンの詳細の表示
仮想マシンの詳細ウィンドウが開くと、コンソールが表示される場合があります。これが発生した場合は、View をクリックし、Details を選択します。デフォルトでは、Overview ウィンドウが最初に開きます。このウィンドウに戻るには、左側のナビゲーションペインから Overview を選択します。Overview ビューには、ゲストの設定詳細の概要が表示されます。図15.12 ゲストの詳細の概要の表示
- 左側のナビゲーションペインから Performance を選択します。Performance ビューには、CPU とメモリーの使用量など、ゲストのパフォーマンスの概要が表示されます。
図15.13 ゲストのパフォーマンスの詳細の表示
- 左側のナビゲーションペインから Processor を選択します。Processor ビューでは、現在のプロセッサー割り当てを表示したり、変更したりできます。仮想マシンの実行中に仮想 CPU(vCPU) の数を変更することもできます。これは、ホットプラグおよび ホットアンプラグと呼ばれます。重要ホットアンプラグ機能は、テクノロジープレビューとしてのみ使用できます。したがって、これはサポートされておらず、高い値のデプロイメントでの使用は推奨されません。
図15.14 プロセッサー割り当てパネル
- 左側のナビゲーションペインから Memory を選択します。Memory ビューでは、現在のメモリー割り当てを表示または変更できます。
図15.15 メモリー割り当ての表示
- 仮想マシンに接続されている各仮想ディスクがナビゲーションペインに表示されます。仮想ディスクをクリックして、変更または削除します。
図15.16 ディスク設定の表示
- 仮想マシンに接続されている各仮想ネットワークインターフェイスがナビゲーションペインに表示されます。仮想ネットワークインターフェイスをクリックして、変更または削除します。
図15.17 ネットワーク設定の表示
15.7. パフォーマンスのモニターリング
- Edit メニューから、Preferences を選択します。
図15.18 ゲスト設定の変更
Preferences ウィンドウが表示されます。 - Stats タブから、時間を秒単位または統計ポーリングオプションで指定します。
図15.19 パフォーマンスモニターリングの設定
15.8. ゲストの CPU 使用率の表示
- View メニューから Graph を選択し、Guest CPU Usage チェックボックスをオンにします。
図15.20 ゲスト CPU 使用率統計情報グラフの有効化
- Virtual Machine Manager は、システム上のすべての仮想マシンの CPU 使用率グラフを表示します。
図15.21 ゲスト CPU 使用率グラフ
15.9. ホストの CPU 使用率の表示
- View メニューから Graph を選択し、Host CPU Usage チェックボックスをオンにします。
図15.22 ホスト CPU 使用率統計情報グラフの有効化
- Virtual Machine Manager は、システム上のホストの CPU 使用率グラフを表示します。
図15.23 ホストの CPU 使用率グラフ
15.10. ディスク I/O の表示
- ディスク I/O 統計情報の収集が有効になっていることを確認してください。これを行うには、Edit メニューから Preferences を選択し、Stats タブをクリックします。
- Disk I/O チェックボックスをオンにします。
図15.24 ディスク I/O の有効化
- ディスク I.O 表示を有効にするには、View メニューから Graph を選択し、Disk I/O チェックボックスをオンにします。選択します。
図15.25 ディスク I/O の選択
- Virtual Machine Manager は、システム上のすべての仮想マシンのディスク I/O のグラフを表示します。
図15.26 ディスク I/O の表示
15.11. ネットワーク I/O の表示
- ネットワーク I/O 統計情報の収集が有効になっていることを確認してください。これを行うには、Edit メニューから Preferences を選択し、Stats タブをクリックします。
- Network I/O チェックボックスをオンにします。
図15.27 ネットワーク I/O の有効化
- ネットワーク I/O 統計情報を表示するには、View メニューから Graph を選択し、Network I/O チェックボックスをオンにします。
図15.28 ネットワーク I/O の選択
- Virtual Machine Manager は、システム上のすべての仮想マシンのネットワーク I/O グラフを表示します。
図15.29 ネットワーク I/O の表示
第16章 オフラインツールを使用したゲスト仮想マシンのディスクアクセス
16.1. はじめに
- ホストの物理マシンディスクにあるファイルの表示またはダウンロード。
- ファイルを編集するか、ホストの物理マシンディスクにアップロードします。
- ホストの物理マシン設定の読み取りまたは書き込み。
- Windows ホスト物理マシンでの Windows レジストリーの読み取りまたは書き込み。
- ファイル、ディレクトリー、ファイルシステム、パーティション、論理ボリューム、およびその他のオプションを含む新しいディスクイメージの準備
- 起動に失敗した、または起動設定の変更が必要なホスト物理マシンのレスキューと修復。
- ホスト物理マシンのディスク使用量をモニターします。
- 組織のセキュリティー規格など、ホストの物理マシンのコンプライアンスを監査します。
- テンプレートのクローンを作成して変更することにより、ホスト物理マシンをデプロイします。
- CD および DVD ISO とフロッピーディスクイメージの読み取り。
virt-df -c qemu://remote/system -d Guest
- guestfish
- guestmount
- virt-alignment-scan
- virt-cat
- virt-copy-in
- virt-copy-out
- virt-df
- virt-edit
- virt-filesystems
- virt-inspector
- virt-inspector2
- virt-list-filesystems
- virt-list-partitions
- virt-ls
- virt-rescue
- virt-sysprep
- virt-tar
- virt-tar-in
- virt-tar-out
- virt-win-reg
16.2. 用語
- libguestfs (Guest file system library) - ディスクイメージを開いたり、ファイルを読み書きしたりするために使用される基本的な機能を提供する C ライブラリーです。この API に直接 C プログラムを書くことができますが、それはかなり低レベルです。
- guestfish (Guest file system interactive shell) は、コマンドラインまたはシェルスクリプトから使用できる対話式のシェルです。これは、libguestfs API のすべての機能を公開します。
- さまざまな virt ツールが libguestfs の上に構築され、コマンドラインから特定の 1 つのタスクを実行する方法を提供します。ツールには、virt-df、virt-rescue、virt-resize、および virt-edit が含まれます。
- hivex と Augeas は、それぞれ Windows レジストリーと Linux 設定ファイルを編集するためのライブラリーです。これらは libguestfs とは別のものですが、libguestfs の価値の多くは、これらのツールの組み合わせに由来します。
- guestmount は、libguestfs と FUSE との間のインターフェイスです。これは、主に、ホストの物理マシンのディスクイメージからファイルシステムをマウントするために使用されます。この機能は必須ではありませんが、便利です。
16.3. インストールシステム
# yum install libguestfs guestfish libguestfs-tools libguestfs-winsupport
# yum install '*guestf*'
16.4. guestfish シェル
guestfish --ro -a /path/to/disk/image
guestfish --ro -a /path/to/disk/image Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell ><fs>
16.4.1. guestfish を使用したファイルシステムの表示
16.4.1.1. 手動による一覧表示と表示
><fs> run ><fs> list-filesystems /dev/vda1: ext3 /dev/VolGroup00/LogVol00: ext3 /dev/VolGroup00/LogVol01: swap
><fs> run ><fs> list-filesystems /dev/vda1: ntfs /dev/vda2: ntfs
><fs> help vfs-type NAME vfs-type - get the Linux VFS type corresponding to a mounted device SYNOPSIS vfs-type device DESCRIPTION This command gets the file system type corresponding to the file system on "device". For most file systems, the result is the name of the Linux VFS module which would be used to mount this file system if you mounted it without specifying the file system type. For example a string such as "ext3" or "ntfs".
/dev/vda2
) に示されている Windows パーティションの 1 つを使用します。この場合、これは C:\ドライブに対応することがわかっています。
><fs> mount-ro /dev/vda2 / ><fs> ll / total 1834753 drwxrwxrwx 1 root root 4096 Nov 1 11:40 . drwxr-xr-x 21 root root 4096 Nov 16 21:45 .. lrwxrwxrwx 2 root root 60 Jul 14 2009 Documents and Settings drwxrwxrwx 1 root root 4096 Nov 15 18:00 Program Files drwxrwxrwx 1 root root 4096 Sep 19 10:34 Users drwxrwxrwx 1 root root 16384 Sep 19 10:34 Windows
16.4.1.2. guestfish 検査の使用
guestfish --ro -a /path/to/disk/image -i Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell Operating system: Red Hat Enterprise Linux AS release 4 (Nahant Update 8) /dev/VolGroup00/LogVol00 mounted on / /dev/vda1 mounted on /boot ><fs> ll / total 210 drwxr-xr-x. 24 root root 4096 Oct 28 09:09 . drwxr-xr-x 21 root root 4096 Nov 17 15:10 .. drwxr-xr-x. 2 root root 4096 Oct 27 22:37 bin drwxr-xr-x. 4 root root 1024 Oct 27 21:52 boot drwxr-xr-x. 4 root root 4096 Oct 27 21:21 dev drwxr-xr-x. 86 root root 12288 Oct 28 09:09 etc [etc]
16.4.1.3. 名前によるゲスト仮想マシンのアクセス
guestfish --ro -d GuestName -i
16.4.2. guestfish を使用したファイルの変更
/boot/grub/grub.conf
ファイルーを編集する例を説明します。ゲスト仮想マシンがシャットダウンしていることを確認したら、以下のようなコマンドを使用して書き込みアクセスを取得するために --ro オプションを省略できます。
guestfish -d RHEL3 -i Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell Operating system: Red Hat Enterprise Linux AS release 3 (Taroon Update 9) /dev/vda2 mounted on / /dev/vda1 mounted on /boot ><fs> edit /boot/grub/grub.conf
16.4.3. guestfish でのその他のアクション
16.4.4. guestfish によるシェルスクリプト設定
#!/bin/bash - set -e guestname="$1" guestfish -d "$guestname" -i <<'EOF' write /etc/motd "Welcome to Acme Incorporated." chmod 0644 /etc/motd EOF
16.4.5. Augeas スクリプトと libguestfs スクリプト
#!/bin/bash - set -e guestname="$1" guestfish -d "$1" -i --ro <<'EOF' aug-init / 0 aug-get /files/etc/sysconfig/keyboard/LAYOUT EOF
#!/bin/bash - set -e guestname="$1" guestfish -d "$1" -i <<'EOF' aug-init / 0 aug-set /files/etc/sysconfig/keyboard/LAYOUT '"gb"' aug-save EOF
- 2 番目の例では --ro オプションが削除され、ゲスト仮想マシンに書き込む機能が利用できるようになりました。
- aug-get コマンドが、フェッチではなく値を変更するように aug-set に変更されました。新しい値は"gb" (引用符を含む) になります。
- ここでは aug-save コマンドを使用しているため、Augeas は変更をディスクに書き込みます。
guestfish -N fs
><fs> copy-out /home /tmp/home
16.5. その他のコマンド
- virt-cat は、guestfish download コマンドに似ています。ゲスト仮想マシンに 1 つのファイルをダウンロードして表示します。以下に例を示します。
# virt-cat RHEL3 /etc/ntp.conf | grep ^server server 127.127.1.0 # local clock
- virt-edit は guestfish edit コマンドと似ています。これを使用すると、ゲスト仮想マシン内の 1 つのファイルを対話形式で編集できます。たとえば、Linux ベースのゲスト仮想マシンで、起動しない
grub.conf
ファイルを修正する必要がある場合があります。# virt-edit LinuxGuest /boot/grub/grub.conf
virt-edit には別のモードがあり、このモードを使用すると、1 つのファイルにシンプルな非対話的な変更を加えることができます。これには、-e オプションが使用されます。たとえば、次のコマンドは、Linux ゲスト仮想マシンの root パスワードをパスワードなしに変更します。# virt-edit LinuxGuest /etc/passwd -e 's/^root:.*?:/root::/'
- virt-ls は guestfish の ls コマンド、ll コマンド、および find コマンドに似ています。これは、ディレクトリーを (再帰的に) 一覧表示するために使用されます。たとえば、以下のコマンドは、Linux ゲスト仮想マシンの /home 配下にファイルとディレクトリーを再帰的に一覧表示します。
# virt-ls -R LinuxGuest /home/ | less
16.6. virt-rescue: レスキューシェル
16.6.1. はじめに
16.6.2. virt-rescue の実行
virt-rescue GuestName
virt-rescue /path/to/disk/image
Welcome to virt-rescue, the libguestfs rescue shell. Note: The contents of / are the rescue appliance. You have to mount the guest virtual machine's partitions under /sysroot before you can examine them. bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ><rescue>
><rescue> fdisk -l /dev/vda
/sysroot
にマウントすることが推奨されます。これは、ユーザーが好きなものをマウントするためのレスキューマシンの空のディレクトリーです。/
のファイルは、レスキュー仮想マシン自体のファイルであることに注意してください。
><rescue> mount /dev/vda1 /sysroot/ EXT4-fs (vda1): mounted filesystem with ordered data mode. Opts: (null) ><rescue> ls -l /sysroot/grub/ total 324 -rw-r--r--. 1 root root 63 Sep 16 18:14 device.map -rw-r--r--. 1 root root 13200 Sep 16 18:14 e2fs_stage1_5 -rw-r--r--. 1 root root 12512 Sep 16 18:14 fat_stage1_5 -rw-r--r--. 1 root root 11744 Sep 16 18:14 ffs_stage1_5 -rw-------. 1 root root 1503 Oct 15 11:19 grub.conf [...]
- --ro: ゲスト仮想マシンで読み取り専用モードで操作します。変更は保存されません。これを使用して、ゲスト仮想マシンを実験できます。シェルを終了すると、変更はすべて破棄されます。
- --network: レスキューシェルからのネットワークアクセスを有効にします。たとえば、RPM またはその他のファイルをゲスト仮想マシンにダウンロードする必要がある場合に使用します。
16.7. virt-df: ディスク使用量のモニターリング
16.7.1. はじめに
16.7.2. virt-df の実行
# virt-df /dev/vg_guests/RHEL6 Filesystem 1K-blocks Used Available Use% RHEL6:/dev/sda1 101086 10233 85634 11% RHEL6:/dev/VolGroup00/LogVol00 7127864 2272744 4493036 32%
/dev/vg_guests/RHEL6
は Red Hat Enterprise Linux 6 ゲスト仮想マシンディスクイメージです。この場合のパスは、このディスクイメージが置かれているホストの物理マシンの論理ボリュームです。)
# virt-df -h Filesystem Size Used Available Use% F14x64:/dev/sda1 484.2M 66.3M 392.9M 14% F14x64:/dev/vg_f14x64/lv_root 7.4G 3.0G 4.4G 41% RHEL6brewx64:/dev/sda1 484.2M 52.6M 406.6M 11% RHEL6brewx64:/dev/vg_rhel6brewx64/lv_root 13.3G 3.4G 9.2G 26% Win7x32:/dev/sda1 100.0M 24.1M 75.9M 25% Win7x32:/dev/sda2 19.9G 7.4G 12.5G 38%
# virt-df --csv WindowsGuest Virtual Machine,Filesystem,1K-blocks,Used,Available,Use% Win7x32,/dev/sda1,102396,24712,77684,24.1% Win7x32,/dev/sda2,20866940,7786652,13080288,37.3%
16.8. virt-resize: ゲスト仮想マシンのオフラインでのサイズ変更
16.8.1. はじめに
16.8.2. ディスクイメージの拡張
- サイズを変更するディスクイメージを探します。コマンド virsh dumpxml GuestName は、libvirt ゲスト仮想マシンに使用できます。
- ゲスト仮想マシンを拡張する方法を決定します。次の出力に示すように、ゲスト仮想マシンディスクで virt-df -h および virt-list-partitions -lh を実行します。
# virt-df -h /dev/vg_guests/RHEL6 Filesystem Size Used Available Use% RHEL6:/dev/sda1 98.7M 10.0M 83.6M 11% RHEL6:/dev/VolGroup00/LogVol00 6.8G 2.2G 4.3G 32% # virt-list-partitions -lh /dev/vg_guests/RHEL6 /dev/sda1 ext3 101.9M /dev/sda2 pv 7.9G
- 最初の (ブート) パーティションのサイズを、約 100MB から 500MB に増やします。
- ディスクの合計サイズを 8GB から 16GB に増やします。
- 2 番目のパーティションを展開して、残りの領域を埋めます。
/dev/VolGroup00/LogVol00
を展開し、2 番目のパーティションの新しい領域を埋めます。
- ゲスト仮想マシンがシャットダウンしていることを確認します。
- 元のディスクの名前をバックアップとして変更します。これを行う方法は、元のディスクのホスト物理マシンのストレージ環境によって異なります。ファイルとして保存されている場合は、mv コマンドを実行します。(この例で示しているように) 論理ボリュームの場合は、lvrename を使用します。
# lvrename /dev/vg_guests/RHEL6 /dev/vg_guests/RHEL6.backup
- 新しいディスクを作成します。この例の要件は、ディスクの合計サイズを最大 16GB まで拡張することです。論理ボリュームが使用されるため、以下のコマンドが使用されます。
# lvcreate -L 16G -n RHEL6 /dev/vg_guests Logical volume "RHEL6" created
- 手順 2 の要件は、以下のコマンドで表されます。
# virt-resize \ /dev/vg_guests/RHEL6.backup /dev/vg_guests/RHEL6 \ --resize /dev/sda1=500M \ --expand /dev/sda2 \ --LV-expand /dev/VolGroup00/LogVol00
最初の 2 つの引数は、入力ディスクと出力ディスクです。--resize /dev/sda1=500M は、最初のパーティションのサイズを最大 500MB に変更します。--expand /dev/sda2 は、残りのすべてのスペースを埋めるために 2 番目のパーティションを展開します。--LV-expand /dev/VolGroup00/LogVol00 は、ゲスト仮想マシンの論理ボリュームを拡張して、2 番目のパーティションの余分なスペースを埋めます。virt-resize は、出力で実行している処理を説明します。Summary of changes: /dev/sda1: partition will be resized from 101.9M to 500.0M /dev/sda1: content will be expanded using the 'resize2fs' method /dev/sda2: partition will be resized from 7.9G to 15.5G /dev/sda2: content will be expanded using the 'pvresize' method /dev/VolGroup00/LogVol00: LV will be expanded to maximum size /dev/VolGroup00/LogVol00: content will be expanded using the 'resize2fs' method Copying /dev/sda1 ... [#####################################################] Copying /dev/sda2 ... [#####################################################] Expanding /dev/sda1 using the 'resize2fs' method Expanding /dev/sda2 using the 'pvresize' method Expanding /dev/VolGroup00/LogVol00 using the 'resize2fs' method
- 仮想マシンを起動してみてください。正常に機能している場合 (および徹底的なテストを行った後) は、バックアップディスクを削除できます。失敗した場合は、仮想マシンをシャットダウンして、新しいディスクを削除し、バックアップディスクの名前を元の名前に戻します。
- virt-df または virt-list-partitions を使用して、新しいサイズを表示します。
# virt-df -h /dev/vg_pin/RHEL6 Filesystem Size Used Available Use% RHEL6:/dev/sda1 484.4M 10.8M 448.6M 3% RHEL6:/dev/VolGroup00/LogVol00 14.3G 2.2G 11.4G 16%
16.9. virt-inspector: ゲスト仮想マシンの検査
16.9.1. はじめに
16.9.2. インストールシステム
# yum install libguestfs-tools libguestfs-devel
/usr/share/doc/libguestfs-devel-*/
にインストールされます。"*" は、libguestfs のバージョン番号に置き換えられます。
16.9.3. virt-inspector の実行
virt-inspector --xml disk.img > report.xml
virt-inspector --xml GuestName > report.xml
report.xml
) になります。XML ファイルの主なコンポーネントは、通常、以下のように単一の <operatingsystem> 要素が含まれるトップレベルの <operatingsystems> 要素です。
<operatingsystems> <operatingsystem> <!-- the type of operating system and Linux distribution --> <name>linux</name> <distro>rhel</distro> <!-- the name, version and architecture --> <product_name>Red Hat Enterprise Linux Server release 6.4 </product_name> <major_version>6</major_version> <minor_version>4</minor_version> <package_format>rpm</package_format> <package_management>yum</package_management> <root>/dev/VolGroup/lv_root</root> <!-- how the filesystems would be mounted when live --> <mountpoints> <mountpoint dev="/dev/VolGroup/lv_root">/</mountpoint> <mountpoint dev="/dev/sda1">/boot</mountpoint> <mountpoint dev="/dev/VolGroup/lv_swap">swap</mountpoint> </mountpoints> < !-- filesystems--> <filesystem dev="/dev/VolGroup/lv_root"> <label></label> <uuid>b24d9161-5613-4ab8-8649-f27a8a8068d3</uuid> <type>ext4</type> <content>linux-root</content> <spec>/dev/mapper/VolGroup-lv_root</spec> </filesystem> <filesystem dev="/dev/VolGroup/lv_swap"> <type>swap</type> <spec>/dev/mapper/VolGroup-lv_swap</spec> </filesystem> <!-- packages installed --> <applications> <application> <name>firefox</name> <version>3.5.5</version> <release>1.fc12</release> </application> </applications> </operatingsystem> </operatingsystems>
virt-inspector --xml GuestName | xpath //filesystem/@dev Found 3 nodes: -- NODE -- dev="/dev/sda1" -- NODE -- dev="/dev/vg_f12x64/lv_root" -- NODE -- dev="/dev/vg_f12x64/lv_swap"
virt-inspector --xml GuestName | xpath //application/name [...long list...]
16.10. virt-win-reg: Windows レジストリーの読み取りと編集
16.10.1. はじめに
16.10.2. インストールシステム
# yum install /usr/bin/virt-win-reg
16.10.3. virt-win-reg を使用する
# virt-win-reg WindowsGuest \ 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall' \ | less
.REG
ファイルで使用される標準のテキストベースの形式です。
.REG
ファイルを転送するときに忠実度を確保する唯一の方法です。
perl -MEncode -pe's?hex\((\d+)\):(\S+)?$t=$1;$_=$2;s,\,,,g;"str($t):\"".decode(utf16le=>pack("H*",$_))."\""?eg'
.REG
ファイルを準備する必要があります。この作業に関するドキュメントは、ここで入手できます。.REG
ファイルを準備したら、次のように入力します。
# virt-win-reg --merge WindowsGuest input.reg
16.11. プログラミング言語からの API の使用
- C バインディングおよび C++ バインディングをインストールするには、以下のコマンドを実行します。
# yum install libguestfs-devel
- Perl バインディングをインストールするには、以下のコマンドを実行します。
# yum install 'perl(Sys::Guestfs)'
- Python バインディングをインストールするには、以下のコマンドを実行します。
# yum install python-libguestfs
- Java バインディングをインストールするには、以下のコマンドを実行します。
# yum install libguestfs-java libguestfs-java-devel libguestfs-javadoc
- Ruby バインディングをインストールするには、以下のコマンドを実行します。
# yum install ruby-libguestfs
- OCaml バインディングをインストールするには、以下のコマンドを実行します。
# yum install ocaml-libguestfs ocaml-libguestfs-devel
guestfs_launch (g);
$g->launch ()
g#launch ()
- libguestfs API は同期的です。各呼び出しは、完了するまでブロックされます。非同期で呼び出しを行う場合は、スレッドを作成する必要があります。
- libguestfs の API はスレッドセーフではありません。各ハンドルは、1 つのスレッドからのみ使用する必要があります。または、スレッド間でハンドルを共有する場合は、独自のミューテックスを実装して、2 つのスレッドが同時に 1 つのハンドルでコマンドを実行できないようにします。
- 同じディスクイメージで複数のハンドルを開くことはできません。すべてのハンドルが読み取り専用である場合は許容されますが、推奨されません。
- そのディスクイメージ (たとえば、ライブ仮想マシン) を使用するものがない場合は、書き込み用にディスクイメージを追加しないでください。これを行うと、ディスクが破損します。
- 現在使用中のディスクイメージ (ライブ VM など) で読み取り専用ハンドルを開くことができます。ただし、特にディスクイメージを読み取っているときに大量に書き込まれている場合は、結果が予測できないか、一貫性がない可能性があります。
16.11.1. C プログラムを介した API との相互作用
#include <stdio.h> #include <stdlib.h> #include <guestfs.h> int main (int argc, char *argv[]) { guestfs_h *g; g = guestfs_create (); if (g == NULL) { perror ("failed to create libguestfs handle"); exit (EXIT_FAILURE); } /* ... */ guestfs_close (g); exit (EXIT_SUCCESS); }
test.c
) に保存します。このプログラムをコンパイルし、以下の 2 つのコマンドを実行します。
gcc -Wall test.c -o test -lguestfs ./test
disk.img
と呼ばれ、現在のディレクトリーに作成されます。
- ハンドルを作成します。
- ハンドルにディスクを追加します。
- libguestfs バックエンドを起動します。
- パーティション、ファイルシステム、およびファイルを作成します。
- ハンドルを閉じて、終了します。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <guestfs.h> int main (int argc, char *argv[]) { guestfs_h *g; size_t i; g = guestfs_create (); if (g == NULL) { perror ("failed to create libguestfs handle"); exit (EXIT_FAILURE); } /* Create a raw-format sparse disk image, 512 MB in size. */ int fd = open ("disk.img", O_CREAT|O_WRONLY|O_TRUNC|O_NOCTTY, 0666); if (fd == -1) { perror ("disk.img"); exit (EXIT_FAILURE); } if (ftruncate (fd, 512 * 1024 * 1024) == -1) { perror ("disk.img: truncate"); exit (EXIT_FAILURE); } if (close (fd) == -1) { perror ("disk.img: close"); exit (EXIT_FAILURE); } /* Set the trace flag so that we can see each libguestfs call. */ guestfs_set_trace (g, 1); /* Set the autosync flag so that the disk will be synchronized * automatically when the libguestfs handle is closed. */ guestfs_set_autosync (g, 1); /* Add the disk image to libguestfs. */ if (guestfs_add_drive_opts (g, "disk.img", GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", /* raw format */ GUESTFS_ADD_DRIVE_OPTS_READONLY, 0, /* for write */ -1 /* this marks end of optional arguments */ ) == -1) exit (EXIT_FAILURE); /* Run the libguestfs back-end. */ if (guestfs_launch (g) == -1) exit (EXIT_FAILURE); /* Get the list of devices. Because we only added one drive * above, we expect that this list should contain a single * element. */ char **devices = guestfs_list_devices (g); if (devices == NULL) exit (EXIT_FAILURE); if (devices[0] == NULL || devices[1] != NULL) { fprintf (stderr, "error: expected a single device from list-devices\n"); exit (EXIT_FAILURE); } /* Partition the disk as one single MBR partition. */ if (guestfs_part_disk (g, devices[0], "mbr") == -1) exit (EXIT_FAILURE); /* Get the list of partitions. We expect a single element, which * is the partition we have just created. */ char **partitions = guestfs_list_partitions (g); if (partitions == NULL) exit (EXIT_FAILURE); if (partitions[0] == NULL || partitions[1] != NULL) { fprintf (stderr, "error: expected a single partition from list-partitions\n"); exit (EXIT_FAILURE); } /* Create an ext4 filesystem on the partition. */ if (guestfs_mkfs (g, "ext4", partitions[0]) == -1) exit (EXIT_FAILURE); /* Now mount the filesystem so that we can add files. */ if (guestfs_mount_options (g, "", partitions[0], "/") == -1) exit (EXIT_FAILURE); /* Create some files and directories. */ if (guestfs_touch (g, "/empty") == -1) exit (EXIT_FAILURE); const char *message = "Hello, world\n"; if (guestfs_write (g, "/hello", message, strlen (message)) == -1) exit (EXIT_FAILURE); if (guestfs_mkdir (g, "/foo") == -1) exit (EXIT_FAILURE); /* This uploads the local file /etc/resolv.conf into the disk image. */ if (guestfs_upload (g, "/etc/resolv.conf", "/foo/resolv.conf") == -1) exit (EXIT_FAILURE); /* Because 'autosync' was set (above) we can just close the handle * and the disk contents will be synchronized. You can also do * this manually by calling guestfs_umount_all and guestfs_sync. */ guestfs_close (g); /* Free up the lists. */ for (i = 0; devices[i] != NULL; ++i) free (devices[i]); free (devices); for (i = 0; partitions[i] != NULL; ++i) free (partitions[i]); free (partitions); exit (EXIT_SUCCESS); }
gcc -Wall test.c -o test -lguestfs ./test
disk.img
というディスクイメージが残ります。これは guestfish で調べることができます。
guestfish --ro -a disk.img -m /dev/sda1 ><fs> ll / ><fs> cat /foo/resolv.conf
16.12. virt-sysprep: 仮想マシン設定のリセット
$ yum install libguestfs-tools-c
$ yum install /usr/bin/virt-sysprep
表16.1 virt-sysprepコマンド
コマンド | 説明 | 例 |
---|---|---|
--help | 特定のコマンドまたはパッケージ全体に関する簡単なヘルプエントリーを表示します。詳細なヘルプは、man ページの virt-sysprep を参照してください。 | $ virt-sysprep --help |
-a [file] or --add [file] | 指定されたfileを追加します。これは、ゲスト仮想マシンからのディスクイメージである必要があります。ディスクイメージの形式は自動検出されます。これを上書きして、特定の形式に強制する場合は、--format オプションを使用します。 | $ virt-sysprep --add /dev/vms/disk.img |
-c [URI] or --connect [URI] | libvirt を使用している場合は、指定の URI に接続します。省略した場合、KVM ハイパーバイザーを介して接続します。ゲストブロックデバイスを直接指定 (virt-sysprep -a) すると、libvirt はまったく使用されません。 | $ virt-sysprep -c qemu:///system |
-d [guest] or --domain [guest] | 指定したゲスト仮想マシンのすべてのディスクを追加します。ドメイン名の代わりにドメイン UUID を使用できます。 | $ virt-sysprep --domain 90df2f3f-8857-5ba9-2714-7d95907b1c9e |
-n または --dry-run または --dryrun | ゲスト仮想マシンで、読み取り専用の "dry run" sysprep 操作を実行します。これにより sysprep 操作が実行されますが、末尾のディスクに対する変更はすべて破棄されます。 | $ virt-sysprep -n |
--enable [operations] | 指定したoperationsを有効にします。可能な操作の一覧を表示するには、--list コマンドを使用します。 | $ virt-sysprep --enable ssh-hotkeys,udev-persistent-net |
--format [raw |qcow2 |auto ] | -a オプションのデフォルトは、ディスクイメージの形式を自動検出することです。これを使用すると、コマンドラインに続く -a オプションのディスク形式が強制されます。--format auto を使用すると、後続の -a オプションの自動検出に戻ります (上述の -a コマンドを参照)。 | $ virt-sysprep --format raw -a disk.img は、disk.img に対して raw 形式 (自動検出なし) を強制しますが、virt-sysprep --format raw -a disk.img --format auto -a another.img は、disk.img に対して raw 形式 (自動検出なし) を強制し、another.img では自動検出に戻ります。信頼できない raw 形式のゲストディスクイメージがある場合は、このオプションを使用してディスク形式を指定する必要があります。これにより、悪意のあるゲストで発生する可能性のあるセキュリティーの問題を回避できます。 |
--list-operations | virt-sysprep プログラムでサポートされている操作を一覧表示します。これらは、1 行に 1 つずつ表示され、1 つ以上の空白で区切られたフィールドがあります。出力の最初のフィールドは操作名であり、--enable フラグに指定できます。2 番目のフィールドは、操作がデフォルトで有効になっている場合は * 文字で、そうでない場合は空白になります。同じ行のその他のフィールドには、操作の説明が記載されています。 | $ virt-sysprep --list-operations |
--mount-options | ゲスト仮想マシンの各マウントポイントにマウントオプションを設定します。mountpoint:options のペアのセミコロンで区切られたリストを使用します。この一覧をシェルから保護するために、この一覧の周囲に引用符を付ける必要がある場合があります。 | $ virt-sysprep --mount-options "/:notime" は、notime 操作で root ディレクトリーをマウントします。 |
--selinux-relabel および --no-selinux-relabel | virt-sysprep は、ゲストの最初の起動時に SELinux の再ラベル付けを常にスケジュールするわけではありません。場合によっては、再ラベル付けが実行されます (たとえば、virt-sysprep がファイルを変更した場合)。ただし、すべての操作でファイルのみを削除する場合 (たとえば、--enable delete --delete /some/file を使用する場合)、再ラベル付けはスケジュールされません。--selinux-relabel オプションを使用すると、常に SELinux の再ラベル付けが強制されますが、--no-selinux-relabel が設定されている場合、再ラベル付けはスケジュールされません。--selinux-relabel を使用して、ファイルに正しい SELinux ラベルが付いていることを確認することをお勧めします。 | $ virt-sysprep --selinux-relabel |
-q or --quiet | ログメッセージを出力しないようにします。 | $ virt-sysprep -q |
-v or --verbose | デバッグ目的で詳細なメッセージを有効にします。 | $ virt-sysprep -v |
-V または --version | virt-sysprep のバージョン番号を表示し、終了します。 | $ virt-sysprep -V |
--root-password | root パスワードを設定します。新しいパスワードを明示的に指定する場合や、選択したファイルの最初の行の文字列を使用する場合に使用できます。これにより、安全性が高まります。 |
$ virt-sysprep
--root-password password: 123456 -a guest.img
または
$ virt-sysprep
--root-password file: SOURCE_FILE_PATH -a guest.img
|
16.13. トラブルシューティング
$ libguestfs-test-tool
===== TEST FINISHED OK =====
16.14. その他のドキュメントの入手先
第17章 ゲスト仮想マシン管理用のグラフィカルユーザーインターフェイスツール
17.1. virt-viewer
virt-viewer
は、ゲスト仮想マシンのグラフィカルコンソールを表示するための最小限のコマンドラインユーティリティーです。コンソールには、VNC または SPICE プロトコルを使用してアクセスします。ゲストは、名前、ID、または UUID で参照できます。ゲストが実行していない場合は、ビューアーが起動するまで待機してからコンソールに接続するように設定できます。ビューアーはリモートホストに接続してコンソール情報を取得し、同じネットワークトランスポートを使用してリモートコンソールにも接続できます。
# sudo yum install virt-viewer
構文
# virt-viewer [OPTIONS] {guest-name|id|uuid}
ゲスト仮想マシンへの接続
# virt-viewer guest-name-or-UUID
# virt-viewer --connect qemu:///system guest-name-or-UUID
# virt-viewer --connect xen://example.org/ guest-name-or-UUID
# virt-viewer --direct --connect xen+ssh://root@example.org/ guest-name-or-UUID
Interface
図17.1 サンプルの virt-viewer インターフェイス
ホットキーの設定
--hotkeys
オプションを使用します。
# virt-viewer --hotkeys=action1=key-combination1[,action2=key-combination2] guest-name-or-UUID
- toggle-fullscreen
- release-cursor
- smartcard-insert
- smartcard-remove
例17.1 virt-viewer ホットキーの設定
# virt-viewer --hotkeys=toggle-fullscreen=shift+f11 qemu:///system testguest
キオスクモード
-k
または --kiosk
オプションでゲストに接続します。
例17.2 キオスクモードでの virt-viewer の使用
# virt-viewer --connect qemu:///system guest-name-or-UUID --kiosk --kiosk-quit on-disconnect
17.2. remote-viewer
remote-viewer
は、SPICE および VNC に対応するシンプルなリモートデスクトップディスプレイクライアントです。これは、機能のほとんどと制限を virt-viewer と共有します。
remote-viewer
ユーティリティーをインストールするには、以下を実行します。
# sudo yum install virt-viewer
構文
# remote-viewer [OPTIONS] {guest-name|id|uuid}
ゲスト仮想マシンへの接続
例17.3 SPICE を使用したゲストディスプレイへの接続
# remote-viewer spice://testguest:5900
例17.4 VNC を使用したゲストディスプレイへの接続
testguest2
と呼ばれるマシンの VNC サーバーに接続します。
# remote-viewer vnc://testguest2:5900
Interface
図17.2 サンプルの remote-viewer インターフェイス
第18章 仮想ネットワーク
18.1. 仮想ネットワークスイッチ
図18.1 2 つのゲストを持つ仮想ネットワークスイッチ
$ ip addr show virbr0 3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
18.2. ブリッジモード
図18.2 ブリッジモードの仮想ネットワークスイッチ
18.3. ネットワークアドレス変換モード
図18.3 2 つのゲストで NAT を使用する仮想ネットワークスイッチ
# iptables -j SNAT --to-source [start]-[end]
18.3.1. DNS および DHCP
図18.4 dnsmasq を実行している仮想ネットワークスイッチ
18.4. ルーティングモード
図18.5 ルーティングモードの仮想ネットワークスイッチ
18.5. 分離モード
図18.6 分離モードの仮想ネットワークスイッチ
18.6. デフォルト設定
libvirtd
におけるこの既定の設定を示しています。
図18.7 デフォルトの libvirt ネットワーク設定
eth0
、eth1
、および eth2
)。これは、ルーティングモードおよび NAT モードでのみ役に立ち、新しい仮想ネットワークを作成する場合は、dev=<interface> オプション、または virt-manager で定義できます。
18.7. 一般的なシナリオの例
18.7.1. ブリッジモード
- 既存ネットワークにゲスト仮想マシンをホスト物理マシンとともにデプロイすると、仮想マシンと物理マシンの違いがエンドユーザーに透過的になります。
- 既存の物理ネットワーク設定を変更せずに仮想マシンをデプロイします。
- 既存の物理ネットワークに簡単にアクセスできる必要があるゲスト仮想マシンをデプロイします。既存のブロードキャストドメイン (DHCP など) のサービスにアクセスする必要がある物理ネットワークにゲスト仮想マシンを配置します。
- VLAN が使用されている既存のネットワークにゲスト仮想マシンを接続する。
18.7.2. ルーティングモード
DMZ
セキュリティー上の理由から、1 つ以上のノードが制御されたサブネットワークに配置されているネットワークを検討してください。このような特別なサブネットワークのデプロイメントは一般的な慣例であり、サブネットワークは DMZ と呼ばれています。このレイアウトの詳細は、以下の図を参照してください。
図18.8 サンプルの DMZ 設定
仮想サーバーのホスト
それぞれが 2 つの物理ネットワーク接続のある複数のホスト物理マシンを持つ仮想サーバーホスティング会社について考えてみます。管理とアカウンティングにはいずれかのインターフェイスが使用されており、もう 1 つは仮想マシンによる接続用です。各ゲストには独自のパブリック IP アドレスがありますが、ホストの物理マシンはプライベート IP アドレスを使用するため、ゲストの管理は内部管理者しか行えません。このシナリオを理解するには、以下の図を参照してください。
図18.9 仮想サーバーホスティングのサンプル設定
18.7.3. NAT モード
18.7.4. 分離モード
18.8. 仮想ネットワークの管理
- Edit メニューから、Connection Details を選択します。
図18.10 ホスト物理マシンの詳細の選択
- これにより、Connection Details メニューーが開きます。Virtual Networks タブをクリックします。
図18.11 仮想ネットワークの設定
- 使用可能なすべての仮想ネットワークは、メニューの左側のボックスに一覧表示されます。このボックスから仮想ネットワークを選択し、必要に応じて編集することで、仮想ネットワークの設定を編集できます。
18.9. 仮想ネットワークの作成
- Connection Details メニューから Virtual Networks タブを開きます。プラス記号 (+) のアイコンで識別される Add Network ボタンをクリックします。詳細は、「仮想ネットワークの管理」 を参照してください。
図18.12 仮想ネットワークの設定
これにより、Create a new virtual network ウィンドウが開きます。進む をクリックして続けます。図18.13 新しい仮想ネットワークの作成
- 仮想ネットワークに適切な名前を入力し、Forward をクリックします。
図18.14 仮想ネットワークに名前を付ける
- 仮想ネットワークの IPv4 アドレス空間を入力し、Forward をクリックします。
図18.15 IPv4 アドレス空間の選択
- IP アドレスの Start 範囲および End 範囲を指定して、仮想ネットワークに DHCP 範囲を定義します。進む をクリックして続けます。
図18.16 DHCP 範囲の選択
- 仮想ネットワークを物理ネットワークに接続する方法を選択します。
図18.17 物理ネットワークへの接続
Forwarding to physical networkを選択した場合は、Destinationを Any physical device にするか、特定の物理デバイスにするかを選択します。また、Modeを NAT にするか、Routed にするかを選択します。進む をクリックして続けます。 - これで、ネットワークを作成する準備が整いました。ネットワークの設定を確認し、Finish をクリックします。
図18.18 ネットワークを作成する準備ができました
- 新しい仮想ネットワークが、 Connection Details ウィンドウの Virtual Networks タブで利用できるようになります。
18.10. 仮想ネットワークのゲストへの割り当て
- Virtual Machine Manager ウィンドウで、ネットワークが割り当てられるゲストを強調表示します。
図18.19 表示する仮想マシンの選択
- 仮想マシンマネージャーのEdit メニューから、Virtual Machine Details を選択します。
図18.20 仮想マシンの詳細の表示
- Virtual Machine Details ウィンドウの Add Hardware ボタンをクリックします。
図18.21 仮想マシンの詳細ウィンドウ
- Add new virtual hardware ウィンドウで、左側のペインから Network を選択し、Host device メニューからネットワーク名 (この例では network1) を選択して、Finish をクリックします。
図18.22 Add new virtual hardware ウィンドウからネットワークを選択します
- 新しいネットワークが、起動時にゲストに表示される仮想ネットワークインターフェイスとして表示されるようになりました。
図18.23 ゲストハードウェア一覧に新しいネットワークが表示されました。
18.11. 物理インターフェイスへの仮想 NIC の直接接続
物理インターフェイスの配信モード
- VEPA
- 仮想イーサネットポートアグリゲーター (VEPA) モードでは、ゲストからのすべてのパケットが外部スイッチに送信されます。これにより、ユーザーはスイッチを介してゲストトラフィックを強制的に送信できます。VEPA モードが適切に機能するには、外部スイッチも ヘアピンモード に対応する必要があります。これにより、宛先がソースゲストと同じホストマシンのゲストであるパケットが、外部スイッチによりホストに返されます。
図18.24 VEPA モード
- bridge
- 宛先がソースゲストと同じホストマシン上にあるパケットは、ターゲットの macvtap デバイスに直接配信されます。直接配信を成功させるには、ソースデバイスとターゲットデバイスの両方がブリッジモードになっている必要があります。いずれかのデバイスが VEPA モードの場合は、ヘアピン対応の外部スイッチが必要です。
図18.25 ブリッジモード
- プライベート
- すべてのパケットは外部スイッチに送信されます。また、外部ルーターまたはゲートウェイを介して送信され、これらがホストに送り返す場合に、同じホストマシン上のターゲットゲストにのみ配信されます。プライベートモードを使用すると、1 台のホスト上にある個別の仮想マシン間での通信を阻止することができます。移行元デバイスまたは移行先デバイスのいずれかがプライベートモードの場合は、以下の手順が行われます。
図18.26 プライベートモード
- パススルー
- この機能は、移行機能を失うことなく、物理インターフェイスデバイスまたはSR-IOV 仮想機能 (VF) をゲストに直接接続します。すべてのパケットは、指定されたネットワークデバイスに直接送信されます。パススルーモードではネットワークデバイスをゲスト間で共有できないため、ネットワークデバイスは 1 つのゲストにしか渡せないことに注意してください。
図18.27 passthrough モード
<devices> ... <interface type='direct'> <source dev='eth0' mode='vepa'/> </interface> </devices>
Virtual Station Interface のタイプ
- managerid
- VSI Manager ID は、VSI タイプおよびインスタンス定義を含むデータベースを識別します。これは整数値で、値 0 は予約されています。
- typeid
- VSI タイプ ID は、ネットワークアクセスを特徴付ける VSI タイプを識別します。VSI の種類は通常、ネットワーク管理者が管理します。これは整数値です。
- typeidversion
- VSI タイプバージョンでは、複数のバージョンの VSI タイプが許可されます。これは整数値です。
- instanceid
- VSI インスタンス ID 識別子は、VSI インスタンス (仮想マシンの仮想インターフェイス) が作成されると生成されます。これは、グローバルに一意の識別子です。
- profileid
- プロファイル ID には、このインターフェイスに適用されるポートプロファイルの名前が含まれます。この名前は、ポートプロファイルデータベースにより、ポートプロファイルからネットワークパラメーターに解決され、これらのネットワークパラメーターはこのインターフェイスに適用されます。
<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>
<devices> ... <interface type='direct'> <source dev='eth0' mode='private'/> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices> ...
18.12. ネットワークフィルターの適用
18.12.1. はじめに
- network
- ethernet -- bridging モードで使用する必要があります。
- bridge
例18.1 ネットワークフィルターリングの例
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'/> </interface> </devices>
例18.2 説明の拡張
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <parameter name='IP' value='10.0.0.1'/> </filterref> </interface> </devices>
18.12.2. チェーンのフィルター
- root
- mac
- stp (スパニングツリープロトコル)
- vlan
- arp と rarp
- ipv4
- ipv6
例18.3 ARP トラフィックフィルターリング
<filter name='no-arp-spoofing' chain='arp' priority='-500'> <uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid> <rule action='drop' direction='out' priority='300'> <mac match='no' srcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='350'> <arp match='no' arpsrcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='400'> <arp match='no' arpsrcipaddr='$IP'/> </rule> <rule action='drop' direction='in' priority='450'> <arp opcode='Reply'/> <arp match='no' arpdstmacaddr='$MAC'/> </rule> <rule action='drop' direction='in' priority='500'> <arp match='no' arpdstipaddr='$IP'/> </rule> <rule action='accept' direction='inout' priority='600'> <arp opcode='Request'/> </rule> <rule action='accept' direction='inout' priority='650'> <arp opcode='Reply'/> </rule> <rule action='drop' direction='inout' priority='1000'/> </filter>
18.12.3. チェーンの優先度のフィルターリング
表18.1 チェーンのデフォルトの優先度の値のフィルターリング
チェーン (接頭辞) | デフォルトの優先度 |
---|---|
stp | -810 |
mac | -800 |
vlan | -750 |
ipv4 | -700 |
ipv6 | -600 |
arp | -500 |
rarp | -400 |
18.12.4. フィルターにおける変数の使用
MAC
は、ネットワークインターフェイスの MAC アドレスに指定されます。この変数を参照するフィルターリングルールは、自動的にインターフェイスの MAC アドレスに置き換えられます。これは、MAC パラメーターを明示的に指定する必要なく機能します。上記の IP パラメーターに似た MAC パラメーターを指定できる場合でも、libvirt は、インターフェイスが使用する MAC アドレスを認識しているため、推奨できません。
IP
は、仮想マシン内のオペレーティングシステムが、指定のインターフェイスで使用する IP アドレスを表します。パラメーターが明示的に指定されずに参照されている場合に、インターフェイスで使用されている IP アドレス (つまり IP パラメーターの値) を libvirt デーモンが判断しようとする限り、IP パラメーターは特別なものとなります。現在の IP アドレス検出の制限は、この機能の使用方法と、その使用時に想定される制限に関する「制限事項」を参照してください。「チェーンのフィルター」 に示す XML ファイルには、フィルター no-arp-spoofing
が含まれています。これは、ネットワークフィルター XML を使用して MAC 変数および IP 変数を参照する例です。
$
という文字が付くことに注意してください。変数の値の形式は、XML で識別されるフィルター属性で期待されるタイプである必要があります。上記の例では、IP
パラメーターは、標準形式の正しい IP アドレスを保持する必要があります。正しい構造を指定しないと、フィルター変数が値に置き換わりません。また、ホットプラグの使用時に、仮想マシンの起動が妨げられたり、インターフェイスの接続が妨げられたりします。各 XML 属性で期待されるタイプの一部を、サンプル例18.4「サンプルの変数の種類」に示します。
例18.4 サンプルの変数の種類
<devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <parameter name='IP' value='10.0.0.1'/> <parameter name='IP' value='10.0.0.2'/> <parameter name='IP' value='10.0.0.3'/> </filterref> </interface> </devices>
<rule action='accept' direction='in' priority='500'> <tcp srpipaddr='$IP'/> </rule>
<rule action='accept' direction='in' priority='500'> <udp dstportstart='$DSTPORTS[1]'/> </rule>
例18.5 さまざまな変数の使用
<rule action='accept' direction='in' priority='500'> <ip srcipaddr='$SRCIPADDRESSES[@1]' dstportstart='$DSTPORTS[@2]'/> </rule>
SRCIPADDRESSES = [ 10.0.0.1, 11.1.2.3 ] DSTPORTS = [ 80, 8080 ]
- 10.0.0.1, 80
- 10.0.0.1, 8080
- 11.1.2.3, 80
- 11.1.2.3, 8080
- 10.0.0.1, 80
- 11.1.2.3, 8080
18.12.5. 自動 IP アドレス検出と DHCP スヌーピング
18.12.5.1. はじめに
CTRL_IP_LEARNING
を使用して、使用する IP アドレスの学習方法を指定できます。有効な値は、any、dhcp、または none です。
TRL_IP_LEARNING
が設定されていない場合のデフォルト設定です。この方法では、インターフェイスごとに 1 つの IP アドレスのみが検出されます。ゲスト仮想マシンの IP アドレスが検出されると、IP アドレススプーフィングがフィルターのいずれかで阻止された場合などに、そのアドレスへの IP ネットワークトラフィックがロックされます。この場合、仮想マシンのユーザーはゲスト仮想マシン内のインターフェイスで IP アドレスを変更できません。このインターフェイスは、IP アドレスのスプーフィングと見なされます。ゲスト仮想マシンが別のホスト物理マシンに移行されるか、サスペンド操作後に再開されると、ゲスト仮想マシンによって送信される最初のパケットによって、ゲスト仮想マシンが特定のインターフェイスで使用できる IP アドレスが再度決定されます。
18.12.5.2. DHCP スヌーピング
DHCPSERVER
を、有効な DHCP サーバーの IP アドレスに設定し、この変数を使用して着信 DHCP 応答をフィルターリングするフィルターを提供します。
例18.6 DHCP スヌーピングに対する IP のアクティブ化
<interface type='bridge'> <source bridge='virbr0'/> <filterref filter='clean-traffic'> <parameter name='CTRL_IP_LEARNING' value='dhcp'/> </filterref> </interface>
18.12.6. 予約されている変数
表18.2 予約変数
変数名 | 定義 |
---|---|
MAC | インターフェイスの MAC アドレス |
IP | インターフェイスで使用されている IP アドレスの一覧 |
IPV6 | 現在実装されていません。インターフェイスで使用中の IPV6 アドレスの一覧を表示します。 |
DHCPSERVER | 信頼できる DHCP サーバーの IP アドレスの一覧 |
DHCPSERVERV6 | 現在実装されていない: 信頼できる DHCP サーバーの IPv6 アドレスのリスト |
CTRL_IP_LEARNING | IP アドレス検出モードの選択 |
18.12.7. 要素と属性の概要
<filter>
という名前が付けられています。name
属性は、指定されたフィルターの一意の名前を提供します。chain
属性は任意ですが、基本となるホスト物理マシンのファイアウォールサブシステムを使用すると、効率的に処理するために、特定のフィルターをより適切に編成できます。現在、システムがサポートしているのは、root
、ipv4
、ipv6
、arp
、および rarp
のチェーンのみです。
18.12.8. その他のフィルターの参照
例18.7 クリーンなトラフィックフィルターの例
<filter name='clean-traffic'> <uuid>6ef53069-ba34-94a0-d33d-17751b9b8cb1</uuid> <filterref filter='no-mac-spoofing'/> <filterref filter='no-ip-spoofing'/> <filterref filter='allow-incoming-ipv4'/> <filterref filter='no-arp-spoofing'/> <filterref filter='no-other-l2-traffic'/> <filterref filter='qemu-announce-self'/> </filter>
18.12.9. フィルタールール
例18.8 ネットワークトラフィックフィルターリングの例
<filter name='no-ip-spoofing' chain='ipv4'> <uuid>fce8ae33-e69e-83bf-262e-30786c1f8072</uuid> <rule action='drop' direction='out' priority='500'> <ip match='no' srcipaddr='$IP'/> </rule> </filter>
- action は必須で、次の値を指定できます。
- drop (ルールに一致すると、分析は行われずにパケットが静かに破棄されます)
- reject (ルールを一致させると、分析は行われずに ICMP 拒否メッセージが生成されます)
- accept (ルールを一致させるとパケットを受け付けますが、これ以上分析は行いません)
- return (ルールを一致させるとこのフィルターが渡されますが、制御を呼び出しフィルターに戻して詳細な分析を行います)
- continue (ルールの一致は次のルールに進み、詳細な分析が行われます)
- direction は必須で、次の値を指定できます。
- 着信トラフィックには in
- 送信トラフィックには out
- 着信および送信トラフィックには inout
- priority は任意です。ルールの優先度は、他のルールに関連してルールがインスタンス化される順序を制御します。値が低いルールは、値が大きいルールの前にインスタンス化されます。有効な値の範囲は、-1000 から 1000 です。この属性を指定しないと、優先度 500 がデフォルトで割り当てられます。root チェーンのフィルターリングルールは、優先順位に従って、root チェーンに接続されたフィルターでソートルールが分類されることに注意してください。これにより、フィルターリングルールとフィルターチェーンへのアクセスをインターリーブできます。詳細は、「チェーンの優先度のフィルターリング」 を参照してください。
- statematch はオプションです。設定可能な値は 0 または false で、基本的な接続状態の一致を無効にします。デフォルトの設定は true または 1 です。
18.12.10. サポートされているプロトコル
srcipaddr
を示しています。以下のセクションでは、どの属性が有効で、どのタイプのデータが期待されるかを示します。使用可能なデータ型は以下のとおりです。
- UINT8 : 8 ビット整数。範囲 0〜255
- UINT16 : 16 ビット整数。範囲 0〜65535
- MAC_ADDR: 00:11:22:33:44:55 などのドット付き 10 進形式の MAC アドレス
- MAC_MASK: FF:FF:FF:FC:00:00 などの MAC アドレス形式の MAC アドレスマスク
- IP_ADDR: 10.1.2.3 などのドット付き 10 進形式の IP アドレス
- P_MASK: ドット付き 10 進数形式 (255.255.248.0) または CIDR マスク (0-32) の IP アドレスマスク
- IPV6_ADDR: FFFF::1 などの数値形式の IPv6 アドレス
- IPV6_MASK: 数値形式の IPv6 マスク (FFFF:FFFF:FC00::) または CIDR マスク (0-128)
- STRING: 文字列
- BOOLEAN - 'true'、'yes'、'1'、または 'false'、'no'、'0'
- IPSETFLAGS: ipset の送信元フラグおよび宛先フラグで、パケットヘッダーの送信元部分または宛先部分から機能を選択する最大 6 つの 'src' 要素または 'dst' 要素 (例: src、src、dst) で記述されます。ここで提供する 'selectors' の数は、参照される ipset のタイプによって異なります。
IP_MASK
または IPV6_MASK
タイプのものを除くすべての属性は、値が no の match 属性を使用して除外できます。複数の否定属性をまとめてグループ化できます。以下の XML フラグメントは、抽象属性を使用したこのような例を示しています。
[...] <rule action='drop' direction='in'> <protocol match='no' attribute1='value1' attribute2='value2'/> <protocol attribute3='value3'/> </rule> [...]
attribute1
value1
と一致せず、プロトコルプロパティーattribute2
は value2
と一致せず、プロトコルプロパティー attribute3
は value3
と一致します。
18.12.10.1. MAC(イーサネット)
表18.3 MAC プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
dstmacaddr | MAC_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
protocolid | UINT16 (0x600-0xffff), STRING | レイヤー 3 プロトコル ID。有効な文字列は、[arp, rarp, ipv4, ipv6] などです。 |
comment | STRING | 最大 256 文字のテキスト文字列 |
[...] <mac match='no' srcmacaddr='$MAC'/> [...]
18.12.10.2. VLAN (802.1Q)
表18.4 VLAN プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
dstmacaddr | MAC_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
vlan-id | UINT16 (0x0-0xfff, 0 - 4095) | VLAN ID |
encap-protocol | UINT16 (0x03c-0xfff), String | カプセル化レイヤー 3 プロトコル ID で、有効な文字列は arp、ipv4、ipv6 です。 |
comment | STRING | 最大 256 文字のテキスト文字列 |
18.12.10.3. STP (スパニングツリープロトコル)
表18.5 STP プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
type | UINT8 | BPDU (Bridge Protocol Data Unit) のタイプ |
flags | UINT8 | BPDU flagdstmacmask |
root-priority | UINT16 | root 優先度の範囲の開始 |
root-priority-hi | UINT16 (0x0-0xfff, 0 - 4095) | root 優先度の範囲の終了 |
root-address | MAC _ADDRESS | root の MAC アドレス |
root-address-mask | MAC _MASK | root の MAC アドレスマスク |
roor-cost | UINT32 | root パスコスト (範囲開始) |
root-cost-hi | UINT32 | root パスコスト範囲の終了 |
sender-priority-hi | UINT16 | 送信者優先度の範囲の終了 |
sender-address | MAC_ADDRESS | BPDU 送信側 MAC アドレス |
sender-address-mask | MAC_MASK | BPDU 送信側 MAC アドレスマスク |
port | UINT16 | ポート識別子 (範囲開始) |
port_hi | UINT16 | ポート識別子の範囲の終了 |
msg-age | UINT16 | メッセージエージタイマー (範囲開始) |
msg-age-hi | UINT16 | メッセージエージタイマーの範囲の終了 |
max-age-hi | UINT16 | 最大エージタイマーの範囲の終了 |
hello-time | UINT16 | Hello time タイマー (範囲開始) |
hello-time-hi | UINT16 | Hello time タイマーの範囲の終了 |
forward-delay | UINT16 | 転送遅延 (範囲開始) |
forward-delay-hi | UINT16 | 転送遅延の範囲の終了 |
comment | STRING | 最大 256 文字のテキスト文字列 |
18.12.10.4. ARP/RARP
表18.6 ARP プロトコルタイプおよび RARP プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
dstmacaddr | MAC_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
hwtype | UINT16 | ハードウェアの種類 |
protocoltype | UINT16 | プロトコルタイプ |
opcode | UINT16, STRING | Opcode の有効な文字列は、Request、Reply、Request_Reverse、Reply_Reverse、DRARP_Request、DRARP_Reply、DRARP_Error、InARP_Request、ARP_NAK です。 |
arpsrcmacaddr | MAC_ADDR | ARP/RARP パケットのソース MAC アドレス |
arpdstmacaddr | MAC _ADDR | ARP/RARP パケットの宛先 MAC アドレス |
arpsrcipaddr | IP_ADDR | ARP/RARP パケットのソース IP アドレス |
arpdstipaddr | IP_ADDR | ARP/RARP パケットの宛先 IP アドレス |
gratuitous | BOOLEAN | Gratuitous ARP パケットを確認するかどうかを示すブール値 |
comment | STRING | 最大 256 文字のテキスト文字列 |
18.12.10.5. IPv4
表18.7 IPv4 プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
dstmacaddr | MAC_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
protocol | UINT8, STRING | レイヤー 4 プロトコル識別子。protocol に有効な文字列は、tcp、udp、udplite、esp、ah、icmp、igmp、sctp などです。 |
srcportstart | UINT16 | 有効なソースポートの範囲の開始。プロトコルが必要です。 |
srcportend | UINT16 | 有効なソースポートの範囲の終了。プロトコルが必要です。 |
dstportstart | UNIT16 | 有効な宛先ポートの範囲の開始。プロトコルが必要です。 |
dstportend | UNIT16 | 有効な宛先ポートの範囲の終了。プロトコルが必要です。 |
comment | STRING | 最大 256 文字のテキスト文字列 |
18.12.10.6. IPv6
表18.8 IPv6 プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信元の MAC アドレスに適用されるマスク |
dstmacaddr | MAC_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
protocol | UINT8, STRING | レイヤー 4 プロトコル識別子。protocol に有効な文字列は、tcp、udp、udplite、esp、ah、icmpv6、sctp などです。 |
scrportstart | UNIT16 | 有効なソースポートの範囲の開始。プロトコルが必要です。 |
srcportend | UINT16 | 有効なソースポートの範囲の終了。プロトコルが必要です。 |
dstportstart | UNIT16 | 有効な宛先ポートの範囲の開始。プロトコルが必要です。 |
dstportend | UNIT16 | 有効な宛先ポートの範囲の終了。プロトコルが必要です。 |
comment | STRING | 最大 256 文字のテキスト文字列 |
18.12.10.7. TCP/UDP/SCTP
表18.9 TCP/UDP/SCTP プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
scripto | IP_ADDR | ソース IP アドレスの範囲の開始 |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
scrportstart | UNIT16 | 有効なソースポートの範囲の開始。プロトコルが必要です。 |
srcportend | UINT16 | 有効なソースポートの範囲の終了。プロトコルが必要です。 |
dstportstart | UNIT16 | 有効な宛先ポートの範囲の開始。プロトコルが必要です。 |
dstportend | UNIT16 | 有効な宛先ポートの範囲の終了。プロトコルが必要です。 |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
flags | STRING | TCP のみ - mask/flags の形式で、mask と flags の各々が、SYN、ACK、URG、PSH、FIN、RST、NONE、ALL のコンマで区切りリストになります。 |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.10.8. ICMP
表18.10 ICMP プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信側の MAC アドレスに適用されるマスク |
dstmacaddr | MAD_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の開始 |
scripto | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
type | UNIT16 | ICMP のタイプ |
code | UNIT16 | ICMP コード |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.10.9. IGMP、ESP、AH、UDPLITE、'ALL'
表18.11 IGMP、ESP、AH、UDPLITE、'ALL'
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcmacmask | MAC_MASK | 送信側の MAC アドレスに適用されるマスク |
dstmacaddr | MAD_ADDR | 宛先の MAC アドレス |
dstmacmask | MAC_MASK | 宛先の MAC アドレスに適用されるマスク |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の開始 |
scripto | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.10.10. IPV6 経由の TCP/UDP/SCTP
表18.12 IPv6 のプロトコルタイプ経由の TCP、UDP、SCTP
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の開始 |
scripto | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
srcportstart | UINT16 | 有効なソースポートの範囲の開始 |
srcportend | UINT16 | 有効なソースポートの範囲の終了 |
dstportstart | UINT16 | 有効な宛先ポートの範囲の開始 |
dstportend | UINT16 | 有効な宛先ポートの範囲の終了 |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.10.11. ICMPv6
表18.13 ICMPv6 プロトコルタイプ
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の開始 |
scripto | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
type | UINT16 | ICMPv6 のタイプ |
code | UINT16 | ICMPv6 コード |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.10.12. IPv6 経由の IGMP, ESP, AH, UDPLITE, 'ALL'
表18.14 IPv プロトコルタイプ経由の IGMP、ESP、AH、UDPLITE、'ALL'
属性名 | データタイプ | 定義 |
---|---|---|
srcmacaddr | MAC_ADDR | 送信側の MAC アドレス |
srcipaddr | IP_ADDR | ソース IP アドレス |
srcipmask | IP_MASK | マスクがソース IP アドレスに適用されました。 |
dstipaddr | IP_ADDR | 宛先 IP アドレス |
dstipmask | IP_MASK | 宛先 IP アドレスに適用されるマスク |
srcipfrom | IP_ADDR | ソース IP アドレスの範囲の開始 |
scripto | IP_ADDR | ソース IP アドレスの範囲の終了 |
dstipfrom | IP_ADDR | 宛先 IP アドレスの範囲の開始 |
dstipto | IP_ADDR | 宛先 IP アドレスの範囲の終了 |
comment | STRING | 最大 256 文字のテキスト文字列 |
state | STRING | NEW、ESTABLISHED、RELATED、INVALID、または NONE のコンマ区切りのリスト |
ipset | STRING | libvirt の外部で管理される IPSet の名前 |
ipsetflags | IPSETFLAGS | IPSet のフラグ。ipset 属性が必要です。 |
18.12.11. 高度なフィルター設定のトピック
18.12.11.1. 接続追跡
例18.9 TCP ポートへの接続を無効にするなどの XML
[...] <rule direction='in' action='accept' statematch='false'> <cp dstportstart='12345'/> </rule> [...]
18.12.11.2. 接続数の制限
例18.10 接続に制限を設定する XML サンプルファイル
[...] <rule action='drop' direction='in' priority='400'> <tcp connlimit-above='1'/> </rule> <rule action='accept' direction='in' priority='500'> <tcp dstportstart='22'/> </rule> <rule action='drop' direction='out' priority='400'> <icmp connlimit-above='1'/> </rule> <rule action='accept' direction='out' priority='500'> <icmp/> </rule> <rule action='accept' direction='out' priority='500'> <udp dstportstart='53'/> </rule> <rule action='drop' direction='inout' priority='1000'> <all/> </rule> [...]
sysfs
のタイムアウトを調整することです。このコマンドは、ICMP 接続トラッキングのタイムアウトを 3 秒に設定します。これは、ある ping が終了すると、別の ping が 3 秒後に開始できることになります。
18.12.11.3. コマンドラインツール
nwfilter
という接頭辞で始まります。以下のコマンドを使用できます。
- nwfilter-list - UUID と、すべてのネットワークフィルターの名前の一覧を表示します。
- nwfilter-define - 新しいネットワークフィルターを定義するか、既存のフィルターを更新します (名前を指定する必要があります)。
- nwfilter-undefine - 指定したネットワークフィルターを削除します (名前を指定する必要があります)。現在使用しているネットワークフィルターを削除しないでください。
- nwfilter-dumpxml - 指定したネットワークフィルターを表示します (名前を指定する必要があります)。
- nwfilter-edit - 指定したネットワークフィルターを編集します (名前を指定する必要があります)。
18.12.11.4. 既存のネットワークフィルター
表18.15 ICMPv6 プロトコルタイプ
Command Name | 説明 |
---|---|
no-arp-spoofing | ゲスト仮想マシンが ARP トラフィックをスプーフィングするのを防ぎます。このフィルターは、ARP 要求および応答メッセージのみを許可し、それらのパケットにゲスト仮想マシンの MAC アドレスと IP アドレスが含まれるようにします。 |
allow-dhcp | ゲスト仮想マシンが DHCP 経由で (任意の DHCP サーバーから) IP アドレスを要求できるようにします。 |
allow-dhcp-server | ゲスト仮想マシンが、指定した DHCP サーバーから IP アドレスを要求できるようにします。DHCP サーバーの、ドットで区切られた 10 進数の IP アドレスは、このフィルターを参照する必要があります。変数の名前は DHCPSERVER でなければなりません。 |
no-ip-spoofing | ゲスト仮想マシンが、パケット内の送信元 IP アドレスとは異なる IP パケットを送信しないようにします。 |
no-ip-multicast | ゲスト仮想マシンが IP マルチキャストパケットを送信しないようにします。 |
clean-traffic | MAC、IP、および ARP のスプーフィングを防ぎます。このフィルターは、他のいくつかのフィルターをビルディングブロックとして参照します。 |
18.12.11.5. 独自のフィルターの作成
- mac
- stp (スパニングツリープロトコル)
- vlan (802.1Q)
- arp, rarp
- ipv4
- ipv6
例18.11 カスタムフィルターの作成
- 仮想マシンのインターフェイスによる MAC、IP、および ARP のスプーフィングの阻止
- 仮想マシンのインターフェイスの TCP ポート 22 および 80 のみを開く
- 仮想マシンがインターフェイスから ping トラフィックを送信できるようにしますが、インターフェイスで仮想マシンの ping を行わないようにします。
- 仮想マシンが DNS ルックアップ (ポート 53 への UDP) を実行できるようにします。
clean-traffic
ネットワークフィルターにより満たされています。そのため、これを行う方法は、カスタムフィルターから参照することです。
test
と呼ばれ、フィルターを関連付けるインターフェイスが eth0
と呼ばれていると、フィルターの名前は test-eth0
となります。
<filter name='test-eth0'> <!- - This rule references the clean traffic filter to prevent MAC, IP and ARP spoofing. By not providing an IP address parameter, libvirt will detect the IP address the guest virtual machine is using. - -> <filterref filter='clean-traffic'/> <!- - This rule enables TCP ports 22 (ssh) and 80 (http) to be reachable - -> <rule action='accept' direction='in'> <tcp dstportstart='22'/> </rule> <rule action='accept' direction='in'> <tcp dstportstart='80'/> </rule> <!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine including ping traffic - -> <rule action='accept' direction='out'> <icmp/> </rule>> <!- - This rule enables outgoing DNS lookups using UDP - -> <rule action='accept' direction='out'> <udp dstportstart='53'/> </rule> <!- - This rule drops all other traffic - -> <rule action='drop' direction='inout'> <all/> </rule> </filter>
18.12.11.6. サンプルのカスタムフィルター
例18.12 ネットワークインターフェイスの説明のサンプル XML
[...] <interface type='bridge'> <source bridge='mybridge'/> <filterref filter='test-eth0'/> </interface> [...]
<!- - enable outgoing ICMP echo requests- -> <rule action='accept' direction='out'> <icmp type='8'/> </rule>
<!- - enable incoming ICMP echo replies- -> <rule action='accept' direction='in'> <icmp type='0'/> </rule>
例18.13 2 番目の例のカスタムフィルター
- ゲスト仮想マシンのインターフェイスの MAC、IP、および ARP スプーフィングを防ぎます。
- ゲスト仮想マシンのインターフェイスで TCP ポート 22 および 80 のみを開きます。
- ゲスト仮想マシンがインターフェイスから ping トラフィックを送信できるようにしますが、インターフェイスでゲスト仮想マシンへの ping は許可しません。
- ゲスト仮想マシンが DNS ルックアップ (ポート 53 への UDP) を実行できるようにします。
- ftp サーバーを有効にし (アクティブモード)、ゲスト仮想マシン内で実行できるようにします。
<filter name='test-eth0'>
<!- - This filter (eth0) references the clean traffic
filter to prevent MAC, IP, and ARP spoofing. By not providing an IP address parameter, libvirt will detect the IP address the guest virtual machine is using. - ->
<filterref filter='clean-traffic'/>
<!- - This rule enables TCP port 21 (FTP-control) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='21'/>
</rule>
<!- - This rule enables TCP port 20 for guest virtual machine-initiated FTP data connection related to an existing FTP control connection - ->
<rule action='accept' direction='out'>
<tcp srcportstart='20' state='RELATED,ESTABLISHED'/>
</rule>
<!- - This rule accepts all packets from a client on the FTP data connection - ->
<rule action='accept' direction='in'>
<tcp dstportstart='20' state='ESTABLISHED'/>
</rule>
<!- - This rule enables TCP port 22 (SSH) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='22'/>
</rule>
<!- -This rule enables TCP port 80 (HTTP) to be reachable - ->
<rule action='accept' direction='in'>
<tcp dstportstart='80'/>
</rule>
<!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
<rule action='accept' direction='out'>
<icmp/>
</rule>
<!- - This rule enables outgoing DNS lookups using UDP - ->
<rule action='accept' direction='out'>
<udp dstportstart='53'/>
</rule>
<!- - This rule drops all other traffic - ->
<rule action='drop' direction='inout'>
<all/>
</rule>
</filter>
- #modprobe nf_conntrack_ftp (利用可能な場合)
- #modprobe ip_conntrack_ftp (上記が利用可能でない場合)
<filter name='test-eth0'>
<!- - This filter references the clean traffic
filter to prevent MAC, IP and ARP spoofing. By not providing and IP address parameter, libvirt will detect the IP address the VM is using. - ->
<filterref filter='clean-traffic'/>
<!- - This rule allows the packets of all previously accepted connections to reach the guest virtual machine - ->
<rule action='accept' direction='in'>
<all state='ESTABLISHED'/>
</rule>
<!- - This rule allows the packets of all previously accepted and related connections be sent from the guest virtual machine - ->
<rule action='accept' direction='out'>
<all state='ESTABLISHED,RELATED'/>
</rule>
<!- - This rule enables traffic towards port 21 (FTP) and port 22 (SSH)- ->
<rule action='accept' direction='in'>
<tcp dstportstart='21' dstportend='22' state='NEW'/>
</rule>
<!- - This rule enables traffic towards port 80 (HTTP) - ->
<rule action='accept' direction='in'>
<tcp dstportstart='80' state='NEW'/>
</rule>
<!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
<rule action='accept' direction='out'>
<icmp state='NEW'/>
</rule>
<!- - This rule enables outgoing DNS lookups using UDP - ->
<rule action='accept' direction='out'>
<udp dstportstart='53' state='NEW'/>
</rule>
<!- - This rule drops all other traffic - ->
<rule action='drop' direction='inout'>
<all/>
</rule>
</filter>
18.12.12. 制限事項
- 仮想マシンの移行は、ゲスト仮想マシンのトップレベルフィルターが参照するフィルターツリー全体が、ターゲットホストの物理マシンで利用可能な場合にのみ対応します。たとえば、ネットワークフィルターの
clean-traffic
は、すべての libvirt インストールで利用可能である必要があり、このフィルターを参照するゲスト仮想マシンの移行を有効にする必要があります。バージョンの互換性が問題ではないことを確認するには、パッケージを定期的に更新して、最新バージョンの libvirt を使用していることを確認してください。 - インターフェイスに関連付けられたネットワークトラフィックフィルターを失わないように、バージョン 0.8.1 以降の libvirt インストール間で移行を行う必要があります。
- ゲスト仮想マシンが VLAN (802.1Q) パケットを送信しても、プロトコル ID の arp、rarp、ipv4、ipv6 のルールでフィルターをかけることはできません。これらは、プロトコル ID、MAC、および VLAN でのみフィルターにかけることができます。そのため、フィルターの clean-traffic の例 例18.1「ネットワークフィルターリングの例」 は予想通りに機能しません。
18.13. トンネルの作成
18.13.1. マルチキャストトンネルの作成
<devices>
要素に以下の XML の詳細を指定します。
図18.28 マルチキャストトンネル XML の例
... <devices> <interface type='mcast'> <mac address='52:54:00:6d:90:01'> <source address='230.0.0.1' port='5558'/> </interface> </devices> ...
18.13.2. TCP トンネルの作成
<devices>
要素に配置します。
図18.29 TCP トンネルドメイン XMl の例
... <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> ...
18.14. vLAN タグの設定
図18.30 vVLAN タグの設定 (対応しているネットワークタイプのみ)
<network> <name>ovs-net</name> <forward mode='bridge'/> <bridge name='ovsbr0'/> <virtualport type='openvswitch'> <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> </virtualport> <vlan trunk='yes'> <tag id='42' nativeMode='untagged'/> <tag id='47'/> </vlan> <portgroup name='dontpanic'> <vlan> <tag id='42'/> </vlan> </portgroup> </network>
<vlan>
要素は、このネットワークを使用してすべてのゲストのトラフィックに適用する 1 つ以上の vlan タグを指定できます (openvswitch および type='hostdev' SR-IOV ネットワークは、ゲストトラフィックの透過的な VLAN タグ付けをサポートします。標準の linux ブリッジや libvirt 自体の仮想ネットワークを含むその他の場合はすべて、これをサポートしません。802.1 Qbh (vn-link) スイッチおよび 802.1Qbg (VEPA) スイッチは、(libvirt の外部で) ゲストトラフィックを特定の vlan にタグ付けする独自の方法を提供します。) 想定どおりに、tag 属性は使用する vlan タグを指定します。ネットワークに複数の<vlan>
要素が定義されている場合は、指定されたすべてのタグを使用して VLAN トランクを実行することが想定されます。単一のタグを使用した VLAN トランキングが必要な場合は、オプションの属性 trunk='yes' を VLAN 要素に追加できます。
<tag>
要素でオプションの nativeMode 属性を使用します。nativeMode は、tagged または untagged に設定できます。要素の id 属性は、ネイティブ vlan を設定します。
<vlan>
要素は、<portgroup>
要素でも指定できます。また、ドメインの <interface>
要素でも指定できます。複数の場所で vlan タグが指定されている場合は、<interface>
の設定が優先され、その後にインターフェイス設定で選択した<portgroup>
の設定が優先されます。<network>
の<vlan>
は、<portgroup>
または <interface>
に指定がない場合にのみ選択されます。
18.15. 仮想ネットワークへの QoS の適用
第19章 qemu-kvm コマンド、フラグ、および引数
19.1. はじめに
ホワイトリスト形式
- <name> - 構文の説明で使用する場合、この文字列はユーザー定義の値に置き換える必要があります。
- [a|b|c] - 構文の説明で使用される場合、| で区切られた文字列の 1 つのみ使用されています。
- コメントが存在しない場合、オプションはすべての可能な値でサポートされます。
19.2. Basic Options
エミュレートされたマシン
プロセッサータイプ
- Opteron_G5 - AMD Opteron 63xx class CPU
- Opteron_G4 - AMD Opteron 62xx class CPU
- Opteron_G3 - AMD Opteron 23xx (AMD Opteron Gen 3)
- Opteron_G2 - AMD Opteron 22xx (AMD Opteron Gen 2)
- Opteron_G1 - AMD Opteron 240 (AMD Opteron Gen 1)
- Westmere - Westmere E56xx/L56xx/X56xx (Nehalem-C)
- Haswell - Intel Core Processor (Haswell)
- SandyBridge - Intel Xeon E312xx (Sandy Bridge)
- Nehalem - Intel Core i7 9xx (Nehalem Class Core i7)
- Penryn - Intel Core 2 Duo P9xxx (Penryn Class Core 2)
- Conroe - Intel Celeron_4x0 (Conroe/Merom Class Core 2)
- cpu64-rhel5 - Red Hat Enterprise Linux 5 がサポートする QEMU 仮想 CPU バージョン
- cpu64-rhel6 - Red Hat Enterprise Linux 6 がサポートする QEMU 仮想 CPU バージョン
- default - 特別なオプションは、上記のデフォルトのオプションを使用します。
プロセッサートポロジー
NUMA システム
Memory Size
キーボードのレイアウト
ゲスト名
ゲスト UUID
19.3. ディスクオプション
ジェネリックドライブ
- readonly[on|off]
- werror[enospc|report|stop|ignore]
- rerror[report|stop|ignore]
- id=<id>ドライブの ID には、if=none に対して次の制限があります。
- IDE ディスクには次の形式の <id> が必要です: drive-ide0-<BUS>-<UNIT>正しい形式の例:-drive if=none,id=drive-ide0-<BUS>-<UNIT>,... -device ide-drive,drive=drive-ide0-<BUS>-<UNIT>,bus=ide.<BUS>,unit=<UNIT>
- file=<file><file> の値は、次のルールで解析されます。
- フロッピーデバイスを <file> として渡すことはサポートされていません。
- cd-rom デバイスを <file> として渡すことは、cdrom メディアタイプ (media=cdrom) でのみ、IDE ドライブ (if=ide または if=none + -device ide-drive) としてのみサポートされます。
- <file> がブロックデバイスでも文字デバイスでもない場合は、: を含めることはできません。
- if=<interface>次のインターフェイスがサポートされています: none、ide、virtio、floppy。
- index=<index>
- media=<media>
- cache=<cache>サポートされている値: none、ライトバックまたはライトスルー。
- copy-on-read=[on|off]
- snapshot=[yes|no]
- serial=<serial>
- aio=<aio>
- 形式 =< format>このオプションは必須ではなく、省略できます。ただし、これはセキュリティーリスクを表すため、生のイメージにはお勧めしません。サポートされている形式は次のとおりです。
- qcow2
- raw
Boot Option
Snapshot Mode
19.4. 表示オプション
グラフィックを無効にする
VGA カードエミュレーション
- cirrus - Cirrus Logic GD5446 ビデオカード。
- std - Bochs VBE 拡張機能を備えた標準 VGA カード。
- qxl - スパイス準仮想カード。
- none - VGA カードを無効にします。
VNC ディスプレイ
- [<host>]:<port>
- unix:<path>
- share[allow-exclusive|force-shared|ignore]
- none - 他のオプションを指定せずにサポートされます。
- to=<port>
- reverse
- password
- tls
- x509=</path/to/certificate/dir> - -tlsが指定されている場合にサポートされます。
- x509verify=</path/to/certificate/dir> - tlsが指定されている場合にサポートされます。
- sasl
- acl
スパイスデスクトップ
- port=<number>
- addr=<addr>
- ipv4ipv6
- password=<secret>
- disable-ticketing
- disable-copy-paste
- tls-port=<number>
- x509-dir=</path/to/certificate/dir>
- x509-key-file=<file>x509-key-password=<file>x509-cert-file=<file>x509-cacert-file=<file>x509-dh-key-file=<file>
- tls-cipher=<list>
- tls-channel[main|display|cursor|inputs|record|playback]plaintext-channel[main|display|cursor|inputs|record|playback]
- image-compression=<compress>
- jpeg-wan-compression=<value>zlib-glz-wan-compression=<value>
- streaming-video=[off|all|filter]
- agent-mouse=[on|off]
- playback-compression=[on|off]
- seamless-migratio=[on|off]
19.5. ネットワークオプション
TAP ネットワーク
- ifname
- fd
- script
- downscript
- sndbuf
- vnet_hdr
- vhost
- vhostfd
- vhostforce
19.6. デバイスオプション
一般的なデバイス
- id
- bus
- pci-assign
- host
- bootindex
- configfd
- addr
- rombar
- romfile
- multifunction
デバイスに複数の機能がある場合は、それらすべてを同じゲストに割り当てる必要があります。 - rtl8139
- mac
- netdev
- bootindex
- addr
- e1000
- mac
- netdev
- bootindex
- addr
- virtio-net-pci
- ioeventfd
- vectors
- 間接的
- event_idx
- csum
- guest_csum
- gso
- guest_tso4
- guest_tso6
- guest_ecn
- guest_ufo
- host_tso4
- host_tso6
- host_ecn
- host_ufo
- mrg_rxbuf
- status
- ctrl_vq
- ctrl_rx
- ctrl_vlan
- ctrl_rx_extra
- mac
- netdev
- bootindex
- x-txtimer
- x-txburst
- tx
- addr
- qxl
- ram_size
- vram_size
- revision
- cmdlog
- addr
- ide-drive
- unit
- のドライブ
- physical_block_size
- bootindex
- ver
- wwn
- virtio-blk-pci
- class
- のドライブ
- logical_block_size
- physical_block_size
- min_io_size
- opt_io_size
- bootindex
- ioeventfd
- vectors
- indirect_desc
- event_idx
- scsi
- addr
- virtio-scsi-pci - 6.3 のテクノロジープレビュー。6.4 以降でサポートされています。Windows ゲストの場合、テクノロジープレビューであった Windows Server 2003 は 6.5 以降サポートされなくなりました。ただし、Windows Server 2008 と 2012、および Windows デスクトップ 7 と 8 は、6.5 以降完全にサポートされています。
- vectors
- indirect_desc
- event_idx
- num_queues
- addr
- isa-debugcon
- isa-serial
- index
- iobase
- irq
- chardev
- virtserialport
- nr
- chardev
- name
- virtconsole
- nr
- chardev
- name
- virtio-serial-pci
- vectors
- class
- indirect_desc
- event_idx
- max_ports
- flow_control
- addr
- ES1370
- addr
- AC97
- addr
- intel-hda
- addr
- hda-duplex
- CAD
- hda-micro
- CAD
- hda-output
- CAD
- i6300esb
- addr
- ib700 - プロパティーなし
- sga - プロパティーなし
- virtio-balloon-pci
- indirect_desc
- event_idx
- addr
- usb-tablet
- migrate
- port
- usb-kbd
- migrate
- port
- usb-mouse
- migrate
- port
- usb-ccid - 6.2 以降でサポート
- port
- slot
- usb-host - 6.2 以降のテクノロジープレビュー
- hostbus
- hostaddr
- hostport
- vendorid
- productid
- isobufs
- port
- usb-hub - 6.2 以降でサポート
- port
- usb-ehci - 6.2 以降のテクノロジープレビュー
- freq
- maxframes
- port
- usb-storage - 6.2 以降のテクノロジープレビュー
- のドライブ
- bootindex
- serial
- removable
- port
- usb-redir - 6.3 のテクノロジープレビュー、6.4 以降サポート
- chardev
- filter
- scsi-cd - 6.3 のテクノロジープレビュー、6.4 以降サポート
- のドライブ
- logical_block_size
- physical_block_size
- min_io_size
- opt_io_size
- bootindex
- ver
- serial
- scsi-id
- lun
- channel-scsi
- wwn
- scsi-hd - 6.3 のテクノロジープレビュー、6.4 以降サポート
- のドライブ
- logical_block_size
- physical_block_size
- min_io_size
- opt_io_size
- bootindex
- ver
- serial
- scsi-id
- lun
- channel-scsi
- wwn
- scsi-block - 6.3 のテクノロジープレビュー、6.4 以降サポート
- のドライブ
- bootindex
- scsi-disk - 6.3 のテクノロジープレビュー
- drive=drive
- logical_block_size
- physical_block_size
- min_io_size
- opt_io_size
- bootindex
- ver
- serial
- scsi-id
- lun
- channel-scsi
- wwn
- piix3-usb-uhci
- piix4-usb-uhci
- ccid-card-passthru
グローバルデバイス設定
- isa-fdc
- driveA
- driveB
- bootindexA
- bootindexB
- qxl-vga
- ram_size
- vram_size
- revision
- cmdlog
- addr
キャラクターデバイス
- null,id=<id> - null device
- socket,id=<id>,port=<port>[,host=<host>][,to=<to>][,ipv4][,ipv6][,nodelay][,server][,nowait][,telnet] - tcp socket
- socket,id=<id>,path=<path>[,server][,nowait][,telnet] - unix socket
- file,id=<id>,path=<path> - trafit to file.
- stdio,id=<id> - standard i/o
- spicevmc,id=<id>,name=<name> - spice channel
USB を有効にする
19.7. Linux/Multiboot ブート
カーネルファイル
Ram ディスク
コマンドラインパラメーター
19.8. エキスパートオプション
KVM 仮想化
カーネルモードの PIT 再挿入を無効にする
No Shutdown
再起動しない
シリアルポート、モニター、QMP
- stdio - standard input/output
- null - null デバイス
- file:<filename> - ファイルに出力します。
- tcp:[<host>]:<port>[,server][,nowait][,nodelay] - TCP Net console.
- unix:<path>[,server][,nowait] - Unix ドメインソケット
- mon:<dev_string> - 上記のデバイス。モニターの多重化にも使用されます。
- none - disable、-serial に対してのみ有効です。
- chardev:<id> - chardev で作成された文字デバイス。
リダイレクトのモニター
手動 CPU スタート
RTC
Watchdog
Watchdog の反応
ゲストメモリーバッキング
SMBIOS エントリー
19.9. ヘルプと情報オプション
Help
バージョン
Audio Help
19.10. その他のオプション
移行
デフォルト設定なし
デバイス設定ファイル
ロードされた保存状態
第20章 ドメイン XML の操作
<ドメイン>
要素を指します。ドメイン XML には、2 つの属性があります。type
は、ドメインの実行に使用されるハイパーバイザーを指定します。許可される値はドライバー固有ですが、KVM
などが含まれます。id
は、実行中のゲスト仮想マシンの一意の整数識別子です。アクティブでないマシンには、id 値が設定されていません。本章のセクションでは、ドメイン XML のコンポーネントについて説明します。ドメイン XML の操作が必要な場合は、本書のその他の章を参照してください。
20.1. 一般情報およびメタデータ
図20.1 ドメイン XML メタデータ
<domain type='xen' id='3'> <name>fv0</name> <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid> <title>A short description - title - of the domain</title> <description>Some human readable description</description> <metadata> <app1:foo xmlns:app1="http://app1.org/app1/">..</app1:foo> <app2:bar xmlns:app2="http://app1.org/app2/">..</app2:bar> </metadata> ... </domain>
表20.1 一般的なメタデータ要素
要素 | 説明 |
---|---|
<name> | 仮想マシンの名前を割り当てます。この名前は英数字のみで設定され、1 台のホストの物理マシンの範囲内で固有である必要があります。永続的な設定ファイルを保存するためにファイル名を形成するためによく使用されます。 |
<uuid> | 仮想マシンのグローバルに一意識別子を割り当てます。形式は RFC4122 に準拠している必要があります (例: 3e3fce45-4f53-4fa7-bb32-11f34168b82b 。新しいマシンの定義時/作成時に省略した場合は、ランダムな UUID が生成されます。sysinfo 仕様を使用して、UUID を提供することもできます。 |
<title> | title ドメインの簡単な説明のための領域を作成します。タイトルには改行を含めないでください。 |
<description> | タイトルとは異なり、このデータは libvirt によって使用されることはなく、ユーザーが表示したい情報を含めることができます。 |
<metadata> | アプリケーションで使用できるため、カスタムメタデータを XML ノード/ツリーの形式で保存できます。アプリケーションは、XML ノード/ツリーでカスタム名前空間を使用し、名前空間ごとにトップレベル要素を 1 つのみ使用する必要があります (アプリケーションが構造を必要とする場合は、その名前空間要素のサブ要素を持つ必要があります)。 |
20.2. オペレーティングシステムの起動
20.2.1. BIOS ブートローダー
図20.2 BIOS ブートローダードメイン XML
... <os> <type>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='hd'/> <boot dev='cdrom'/> <bootmenu enable='yes'/> <smbios mode='sysinfo'/> <bios useserial='yes' rebootTimeout='0'/> </os> ...
表20.2 BIOS ブートローダー要素
要素 | 説明 |
---|---|
<type> | ゲスト仮想マシンで起動するオペレーティングシステムの種類を指定します。hvm は、OS がベアメタル上で実行するように設計されているため、完全仮想化が必要であることを示しています。linux は、Xen 3 ハイパーバイザーゲスト ABI をサポートする OS を指します。オプションの属性も 2 つあります。arch は仮想化に対する CPU アーキテクチャーを指定し、machine はマシンタイプを参照します。詳細については、『ドライバー機能』を参照してください。 |
<loader> | ドメイン作成プロセスを支援するために使用されるファームウェアの一部を指します。Xen の完全仮想化ドメインを使用する場合にのみ必要です。 |
<boot> | fd 、hd 、cdrom 、または network のいずれかの値を取り、次に検討するブートデバイスを指定するために使用されます。ブート要素を複数回繰り返して、順番に試行するブートデバイスの優先順位リストを設定できます。同じタイプの複数のデバイスは、バスの順序を維持しながら、ターゲットに従ってソートされます。ドメインを定義した後、libvirt によって (virDomainGetXMLDesc を介して) 返される XML 設定は、ソートされた順序でデバイスをリストします。ソートされると、最初のデバイスが起動可能としてマークされます。詳細は、『BIOS ブートローダー』を参照してください。 |
<bootmenu> | ゲスト仮想マシンの起動時にインタラクティブな起動メニュープロンプトを有効にするかどうかを設定します。enable 属性は、yes または no のいずれかになり ます。指定しない場合は、ハイパーバイザーのデフォルトが使用されます。 |
<smbios> | ゲスト仮想マシンで SMBIOS 情報をどのように表示するかを指定します。mode 属性は、emulate (ハイパーバイザーがすべての値を生成できるようにする)、host (UUID を除くブロック 0 とブロック 1 のすべてをホスト物理マシンの SMBIOS 値からコピーします。virConnectGetSysinfo 呼び出しを使用して、どの値がコピーされているかを確認することができます)、または sysinfo (sysinfo 要素の値を使用) のいずれかとして指定する必要があります。指定しない場合は、ハイパーバイザーのデフォルト設定が使用されます。 |
<bios> | この要素には、yes または no の値を持つ属性 useserial があります。この属性は、ユーザーがシリアルポートで BIOS メッセージを表示できるようにする Serial Graphics Adapter を有効または無効にします。したがって、シリアルポートを定義する必要があります。別の属性、rebootTimeout があることに注意してください。これは、起動が失敗した場合にゲスト仮想マシンが再度起動を開始するかどうか、および開始する期間を制御します (BIOS による)。値はミリ秒単位で、最大は 65535 で、特別な値 -1 は再起動を無効にします。 |
20.2.2. ホスト物理マシンブートローダー
図20.3 ホスト物理マシンのブートローダードメイン XML
... <bootloader>/usr/bin/pygrub</bootloader> <bootloader_args>--append single</bootloader_args> ...
表20.3 BIOS ブートローダー要素
要素 | 説明 |
---|---|
<bootloader> | ホスト物理マシン OS のブートローダー実行可能ファイルへの完全修飾パスを提供します。このブートローダーは、起動するカーネルを選択します。ブートローダーの必要な出力は、使用中のハイパーバイザーによって異なります。 |
<bootloader_args> | コマンドライン引数をブートローダーに渡すことができます (オプションのコマンド) |
20.2.3. ダイレクトカーネルブート
図20.4 ダイレクトカーネルブート
... <os> <type>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <kernel>/root/f8-i386-vmlinuz</kernel> <initrd>/root/f8-i386-initrd</initrd> <cmdline>console=ttyS0 ks=http://example.com/f8-i386/os/</cmdline> <dtb>/root/ppc.dtb</dtb> </os> ...
表20.4 ダイレクトカーネルブート要素
要素 | 説明 |
---|---|
<type> | BIOS ブートのセクションで説明されているものと同じです。 |
<loader> | BIOS ブートのセクションで説明されているものと同じです。 |
<kernel> | ホスト物理マシン OS のカーネルイメージへの完全修飾パスを指定します |
<initrd> | ホスト物理マシンの OS の (任意) ramdisk イメージへの完全修飾パスを指定します。 |
<cmdline> | システムの起動時にカーネル (またはインストーラー) に渡される引数を指定します。これは、代替のプライマリーコンソール (シリアルポートなど)、またはインストールメディアソース/キックスタートファイルを指定するためによく使用されます |
20.3. SMBIOS システム情報
図20.5 SMBIOS システム情報
... <os> <smbios mode='sysinfo'/> ... </os> <sysinfo type='smbios'> <bios> <entry name='vendor'>LENOVO</entry> </bios> <system> <entry name='manufacturer'>Fedora</entry> <entry name='vendor'>Virt-Manager</entry> </system> </sysinfo> ...
<sysinfo>
要素には、サブ要素のレイアウトを決定する必須の属性type
があり、以下のように定義されます。
smbios
- サブ要素は特定の SMBIOS 値を呼び出します。これは、<os>
要素の smbios サブ要素と併用するとゲスト仮想マシンに影響します。sysinfo の各サブ要素は、SMBIOS ブロックの名前を付け、その中の要素は、ブロック内のフィールドを記述するエントリー要素のリストになります。以下のブロックおよびエントリーが認識されます。bios
- SMBIOS の ブロック 0 で、エントリー名はvendor
、version
、date
、およびrelease
から取得されます。<system>
- SMBIOS のブロック 1 で、エントリー名はmanufacturer
、product
、version
、serial
、uuid
、sku
、およびfamily
から取得します。uuid
エントリーが最上位の uuid 要素とともに指定されている場合は、その 2 つの値が一致している必要があります。
20.4. CPU Allocation
図20.6 CPU の割り当て
<domain> ... <vcpu placement='static' cpuset="1-4,^3,6" current="1">2</vcpu> ... </domain>
<cpu>
要素は、ゲスト仮想マシンのオペレーティングシステムに割り当てる仮想 CPU (vCPU) の最大数を定義します。この最大数は 1 から、ハイパーバイザーで対応している最大数までの間でなければなりません。この要素には、cpuset
属性を指定できます。属性は、ドメインプロセスおよび仮想 CPU をデフォルトで固定できる物理 CPU 番号のコンマ区切りのリストです。
cputune
属性を使用して個別に指定できることに注意してください。emulatorpin
属性が <cputune>
で指定されている場合、<vcpu>
で指定された cpuset
値は無視されます。
vcpupin
に値を設定した仮想 CPU では、cpuset
設定が無視されます。vcpupin
が指定されていない仮想 CPU は、cpuset
で指定された物理 CPU に固定されます。cpuset
一覧の各要素は、単一の CPU 番号、CPU 番号の範囲、または前の範囲から除外される CPU 番号が後に続くキャレット (^) のいずれかになります。属性 current
を使用して、有効にする仮想 CPU の最大数より少ない数を指定することができます。
placement
を使用して、ドメインプロセスの CPU 配置モードを指定できます。placement
は、static
または auto
のいずれかに設定できます。<vcpu placement='auto'>
を設定すると、システムは numad をクエリーし、<numatune>
タグで指定された設定を使用し、<vcpu>
の他の設定を無視します。<vcpu placement='static'>
を設定すると、システムは <numatune>
の設定ではなく、<vcpu placement>
タグで指定された設定を使用します。
20.5. CPU チューニング
図20.7 CPU チューニング
<domain> ... <cputune> <vcpupin vcpu="0" cpuset="1-4,^2"/> <vcpupin vcpu="1" cpuset="0,1"/> <vcpupin vcpu="2" cpuset="2,3"/> <vcpupin vcpu="3" cpuset="0,4"/> <emulatorpin cpuset="1-3"/> <shares>2048</shares> <period>1000000</period> <quota>-1</quota> <emulator_period>1000000</emulator_period> <emulator_quota>-1</emulator_quota> </cputune> ... </domain>
表20.5 CPU チューニング要素
要素 | 説明 |
---|---|
<cputune> | ドメインの CPU 調整可能パラメーターに関する詳細を提供します。これは任意です。 |
<vcpupin> | ドメイン VCPU が固定されるホスト物理マシンの物理 CPU を指定します。これを省略し、要素 <vcpu> の属性 cpuset が指定されていない場合、vCPU はデフォルトですべての物理 CPU に固定されます。これには 2 つの必須属性が含まれ、vcpu 属性は id を指定し、cpuset 属性は要素 <vcpu> の属性 cpuset と同じです。 |
<emulatorpin> | エミュレーター vcpu を含まないドメインのサブセット を固定するホスト物理マシンの CPU を指定します。これを省略し、要素 <vcpu> の属性 cpuset が指定されていない場合、emulator はデフォルトですべての物理 CPU に固定されます。これには、固定する物理 CPU を指定する 1 つの必須属性 cpuset が含まれています。要素 <vcpu> の属性 配置 が auto の場合には、emulatorpin は許可されません。 |
<共有> | ドメインの比例的な加重共有を指定します。これを省略すると、デフォルトでオペレーティングシステムに固有のデフォルト値になります。値の単位がない場合は、その他のゲスト仮想マシンの設定を基準にして計算されます。たとえば、ゲスト仮想マシンが 2048 の値で設定されている場合、1024 の値で設定されたゲスト仮想マシンの 2 倍の処理時間が得られます。 |
<period> | 施行間隔をマイクロ秒単位で指定します。period を使用することにより、ドメインの各 vcpu は、割り当てられたクォータに相当する実行時間を超えて消費することはできなくなります。この値は、以下の範囲内である必要があります: 1000-1000000 。0 の値を持つ <period> は、値がないことを意味します。 |
<quota> | 最大許容帯域幅をマイクロ秒単位で指定します。quota が負の値のドメインは、ドメインの帯域幅が無限であることを示します。つまり、帯域幅は制御されません。値は次の範囲内である必要があります: 1000〜18446744073709551 または 0 未満。0 の値を持つquota は、値がないことを意味します。この機能を使用すると、すべての vcpu で同じ速度で実行できます。 |
<emulator_period> | 施行間隔をマイクロ秒単位で指定します。<emulator_period> 内では、ドメインのエミュレータースレッド (vcpu を除く) が、<emulator_quota> 相当の実行時間より多くを消費することはできません。<emulator_period> は、次の範囲内でなければなりません: 1000 - 1000000 。0 の <emulator_period> は、値がないことを意味します。 |
<emulator_quota> | ドメインのエミュレータースレッド (vcpu を除く) で許可される最大帯域幅をマイクロ秒単位で指定します。<emulator_quota> が負の値のドメインは、ドメインがエミュレータースレッド (vcpu を除く) に無限の帯域幅を持つことを示します。これは、帯域幅が制御されないことを示しています。値は次の範囲内である必要があります: 1000〜18446744073709551 、または 0 未満。0 の<emulator_quota> は、値がないことを意味します。 |
20.6. メモリーバッキング
<memoryBacking>
要素には、<hugepages>
要素が設定されている場合があります。これにより、ハイパーバイザーは、ゲスト仮想マシンのメモリーを通常のネイティブページサイズではなく、hugepages を使用して割り当てる必要があることを通知します。
図20.8 メモリーバッキング
<domain> ... <memoryBacking> <hugepages/> </memoryBacking> ... </domain>
20.7. メモリーの調整
図20.9 メモリーの調整
<domain> ... <memtune> <hard_limit unit='G'>1</hard_limit> <soft_limit unit='M'>128</soft_limit> <swap_hard_limit unit='G'>2</swap_hard_limit> <min_guarantee unit='bytes'>67108864</min_guarantee> </memtune> ... </domain>
表20.6 メモリーチューニング要素
要素 | 説明 |
---|---|
<memtune> | ドメインのメモリー調整可能パラメーターに関する詳細を提供します。これを省略すると、デフォルトで OS が提供するデフォルトになります。パラメーターはプロセス全体に適用されるため、制限を設定する場合は、ゲスト仮想マシン RAM、ゲスト仮想マシンビデオ RAM を合計し、メモリーオーバーヘッドを考慮に入れる必要があります。最後のピースは判断が難しいので、試行錯誤を繰り返します。調整可能パラメーターごとに、<memory> と同じ値を使用して、入力中のユニット番号を指定できます。下位互換性のために、出力は常に KiB になります。 |
<hard_limit> | ゲスト仮想マシンが使用できる最大メモリー量です。この値の 単位 は、kibibytes (1024 バイトのブロック) で表されます |
<soft_limit> | メモリーの競合中に強制されるメモリー制限です。この値の 単位 、は kibibytes (1024 バイトのブロック) で表されます |
<swap_hard_limit> | 最大メモリーと、ゲスト仮想マシンが使用できるスワップの合計です。この値の 単位 は、kibibytes (1024 バイトのブロック) で表されます。これは、提供された <hard_limit> 値より大きくなければなりません |
<min_guarantee> | ゲスト仮想マシンに保証される最小メモリー割り当てです。この値の単位は kibibytes (1024 バイトのブロック) で表されます |
20.8. NUMA ノードのチューニング
図20.10 NUMA ノードのチューニング
> <domain> ... <numatune> <memory mode="strict" nodeset="1-4,^3"/> </numatune> ... </domain>
表20.7 NUMA ノードのチューニング要素
要素 | 説明 |
---|---|
<numatune> | ドメインプロセスの NUMA ポリシーを制御することにより、NUMA ホストの物理マシンのパフォーマンスを調整する方法を説明します。 |
<memory> | NUMA ホストの物理マシンでドメインプロセスにメモリーを割り当てる方法を指定します。これにはいくつかのオプション属性が含まれます。属性 mode は、interleave 、strict 、または preferred のいずれかです。値が指定されていない場合、デフォルトは strict に設定されます。属性 nodeset は、要素 <vcpu> の属性 cpuset と同じ構文を使用して、NUMA ノードを指定します。属性placement は、ドメインプロセスのメモリー配置モードを示すために使用できます。その値は、static または auto のいずれかになります。属性 <nodeset> が指定されている場合、デフォルトで <vcpu> または static の <placement> になります。auto は、ドメインプロセスが numad のクエリーから返されたアドバイザリーノードセットからのみメモリーを割り当てることを示し、属性 nodeset の値が指定されている場合は無視されます。vcpu の属性 placement が auto で、<numatune> が指定されていない場合は、<placement> auto と mode strict のデフォルトの numatune が暗黙的に追加されます。 |
20.9. ブロック I/O チューニング
図20.11 ブロック I/O チューニング
<domain> ... <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> ... </domain>
表20.8 ブロック I/O チューニング要素
要素 | 説明 |
---|---|
<blkiotune> | このオプション要素は、ドメインの blkio cgroup 調整可能パラメーターを調整する機能を提供します。これを省略すると、デフォルトで OS が提供するデフォルトになります。 |
<weight> | この任意の weight 要素は、ゲスト仮想マシンの全体的な I/O ウェイトです。この値は、100 - 1000 の範囲で指定してください。 |
<device> | ドメインには、ドメインが使用している各ホスト物理マシンブロックデバイスのウェイトをさらに調整する複数の<device> 要素が含まれる場合があります。複数のゲスト仮想マシンのディスクが、1 つのホストの物理マシンブロックデバイスを共有できることに注意してください。また、このパラメーターは、同じホストの物理マシンファイルシステム内のファイルでバッキングされているため、各ゲスト仮想マシンのディスクデバイスに関連付けられるのではなく、グローバルドメインレベルで設定します (1 つの<disk> に適用できる <iotune> 要素との違いを確認してください)。各デバイス要素には、2 つの必須サブ要素があります。<path> はデバイスの絶対パスを表し、<weight> はそのデバイスの相対的な重みを示します。許容範囲は 100 - 1000 になります。 |
20.10. リソースのパーティション設定
<resource>
要素は、リソースのパーティション設定に関連する設定をグループ化します。現在、ドメインを配置するリソースパーティションのパスを定義するコンテンツの子要素パーティションをサポートしています。リストにパーティションがない場合は、ドメインがデフォルトパーティションに置かれます。ゲスト仮想マシンを起動する前にパーティションが存在することを確認するのは、アプリ/管理者の責任です。デフォルトでは、(ハイパーバイザー固有の) デフォルトパーティションのみが存在すると想定できます。
図20.12 リソースのパーティション設定
<resource> <partition>/virtualmachines/production</partition> </resource>
20.11. CPU モデルとトポロジー
qemu32
と qemu64
は基本的な CPU モデルですが、他のモデル (追加機能付き) も利用できます。各モデルとそのトポロジーは、ドメイン XML の以下の要素を使用して指定されます。
図20.13 CPU モデルとトポロジーの例 1
<cpu match='exact'> <model fallback='allow'>core2duo</model> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='1'/> <feature policy='disable' name='lahf_lm'/> </cpu>
図20.14 CPU モデルとトポロジーの例 2
<cpu mode='host-model'> <model fallback='forbid'/> <topology sockets='1' cores='2' threads='1'/> </cpu>
図20.15 CPU モデルとトポロジーの例 3
<cpu mode='host-passthrough'/>
図20.16 CPU モデルとトポロジーの例 4
<cpu> <topology sockets='1' cores='2' threads='1'/> </cpu>
表20.9 CPU モデルとトポロジー要素
要素 | 説明 |
---|---|
<cpu> | この要素には、vCPU 機能セットのすべてのパラメーターが含まれています。 |
<match> | <cpu> 要素に示されている機能が、使用可能な vCPU とどの程度一致している必要があるかを指定します。<topology> が <cpu> 要素にネストされた唯一の要素である場合は、match 属性を省略できます。match 属性に使用できる値は、以下のとおりです。
match 属性が <cpu> 要素から省略されている場合、デフォルト設定の match='exact' が使用されます。 |
<mode> | このオプション属性を使用すると、ゲスト仮想マシンの CPU を、ホストの物理マシンの CPU にできるだけ近づけるように設定できます。mode 属性に使用できる値は、以下のとおりです。
|
<model> | ゲスト仮想マシンが要求する CPU モデルを指定します。利用可能な CPU モデルとその定義の一覧は、libvirt の データディレクトリーにインストールされている cpu_map.xml ファイルを参照してください。ハイパーバイザーが、正確な CPU モデルを使用できない場合、libvirt は、CPU 機能の一覧を維持しながら、ハイパーバイザーが対応する最も近いモデルに自動的にフォールバックします。オプションの fallback 属性を使用すると、この動作を禁止できます。この場合、対応していない CPU モデルを要求するドメインを起動しようとすると失敗します。フォールバック属性で対応している値は、allow (デフォルト) と forbid です。オプションの vendor_id 属性を使用すると、ゲスト仮想マシンが認識するベンダー id を設定できます。ちょうど 12 文字の長さである必要があります。設定しない場合は、ホスト物理マシンのベンダー id が使用されます。一般的な値は、AuthenticAMD および GenuineIntel です。 |
<vendor> | ゲスト仮想マシンが要求する CPU ベンダーを指定します。この要素がないと、ゲスト仮想マシンは、ベンダーに関係なく、指定された機能と一致する CPU で実行します。サポートされているベンダーの一覧は、cpu_map.xml を参照してください。 |
<topology> | ゲスト仮想マシンに提供される仮想 CPU の要求されたトポロジーを指定します。ソケット、コア、およびスレッドには、それぞれゼロ以外の値を 3 つ指定する必要があります。つまり、CPU ソケットの合計数、ソケットごとのコア数、およびコアごとのスレッド数です。 |
<feature> | 選択した CPU モデルが提供する機能を微調整するために使用する、ゼロ以上の要素を含むことができます。既知の機能名のリストは、CPU モデルと同じファイルにあります。各機能要素の意味は、ポリシー属性により異なります。この属性は、次のいずれかの値に設定する必要があります。
|
20.11.1. ゲスト仮想マシンの NUMA トポロジー
<numa>
要素とドメイン XML の以下を使用して指定できます。
図20.17 ゲスト仮想マシンの NUMA トポロジー
<cpu> <numa> <cell cpus='0-3' memory='512000'/> <cell cpus='4-7' memory='512000'/> </numa> </cpu> ...
cpus
は、ノードの一部である CPU または CPU の範囲を指定します。memory
は、ノードメモリーを kibibytes (1024 バイトのブロック) で指定します。各セルまたはノードには、0 から始まる昇順で cellid
または nodeid
が割り当てられます。
20.12. イベントの設定
図20.18 イベントの設定
<on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <on_lockfailure>poweroff</on_lockfailure>
表20.10 イベント設定要素
状態 | 説明 |
---|---|
<on_poweroff> | ゲスト仮想マシンがパワーオフを要求した場合に実行するアクションを指定します。使用可能な引数は、以下の 4 つです。
|
<on_reboot> | ゲスト仮想マシンが再起動を要求した場合に実行するアクションを指定します。使用可能な引数は、以下の 4 つです。
|
<on_crash> | ゲスト仮想マシンがクラッシュした場合に実行するアクションを指定します。さらに、以下の追加アクションに対応します。
|
<on_lockfailure> | ロックマネージャーがリソースロックを失ったときに実行するアクションを指定します。以下のアクションは、libvirt によって認識されますが、すべてが個々のロックマネージャーによってサポートされる必要はありません。アクションを指定しないと、各ロックマネージャーはデフォルトのアクションを実行します。以下の引数を使用できます。
|
20.13. 電源管理
図20.19 電源管理
... <pm> <suspend-to-disk enabled='no'/> <suspend-to-mem enabled='yes'/> </pm> ...
<pm>
要素は、引数 yes
を使用して有効にすることも、引数 no
を使用して無効にすることもできます。BIOS サポートは、引数 suspend-to-disk
を使用して S3 に実装でき、引数 suspend-to-mem
スリープ状態を使用して S4 に実装できます。何も指定しないと、ハイパーバイザーはデフォルト値のままになります。
20.14. ハイパーバイザーの機能
state='on'
) または無効 (state='off'
) にできます。
図20.20 ハイパーバイザーの機能
... <features> <pae/> <acpi/> <apic/> <hap/> <privnet/> <hyperv> <relaxed state='on'/> </hyperv> </features> ...
<features>
要素に一覧表示されます。<state>
を指定しないと無効になります。利用可能な機能は、capabilities
XML を呼び出して確認できますが、完全仮想化ドメインの一般的な設定は次のとおりです。
表20.11 ハイパーバイザーの機能要素
状態 | 説明 |
---|---|
<pae> | 物理アドレス拡張モードでは、32 ビットのゲスト仮想マシンが 4GB を超えるメモリーにアドレスを指定できます。 |
<acpi> | 電力管理に役立ちます。たとえば、KVM ゲスト仮想マシンでは、正常なシャットダウンが機能する必要があります。 |
<apic> | プログラム可能な IRQ 管理を使用できるようにします。この要素には、on および off の値を持つオプションの属性eoi があります。これは、ゲスト仮想マシンの EOI (割り込みの終了) の可用性を設定します。 |
<hap> | ハードウェアで利用可能な場合に、ハードウェア支援ページングの使用を有効にします。 |
hyperv | Microsoft Windows を実行しているゲスト仮想マシンの動作を改善するためのさまざまな機能を有効にします。値を on または off にして 緩和された オプションの属性を使用すると、タイマーの緩和制約が有効または無効になります |
20.15. 時間管理
localtime
に設定する必要があることに注意してください。
図20.21 時間管理
... <clock offset='localtime'> <timer name='rtc' tickpolicy='catchup' track='guest'> <catchup threshold='123' slew='120' limit='10000'/> </timer> <timer name='pit' tickpolicy='delay'/> </clock> ...
表20.12 時間管理要素
状態 | 説明 |
---|---|
<clock> | offset 属性には 4 つの値を指定できます。これにより、ゲスト仮想マシンのクロックをホスト物理マシンに同期させる方法を詳細に制御できます。ハイパーバイザーは、常にすべてのポリシーをサポートする必要はないことに注意してください。
|
<timer> | 下記を参照してください。 |
<frequency> | これは、name ="tsc" が実行される頻度を指定する符号なし整数です。 |
<mode> | mode 属性は、name = "tsc" <timer> の管理方法を制御し、auto 、native 、emulate 、paravirt 、または smpsafe に設定できます。その他のタイマーは常にエミュレートされます。 |
<あり> | ゲスト仮想マシンで特定のタイマーが使用可能であるかどうかを指定します。yes または no に設定できます。 |
<timer>
要素には name
属性が含まれている必要があり、指定された名前に応じて次の属性を持つ場合があります。
<name>
- 変更するtimer
を選択します。次の値が許容されます。kvmclock
(QEMU-KVM),pit
(QEMU-KVM)、またはrtc
(QEMU-KVM)、またはtsc
(libxl のみ)。platform
は現在サポートされていないことに注意してください。- track - タイマートラックを指定します。次の値を使用できます:
boot
、guest
、またはwall
。track
はname="rtc"
に対してのみ有効です。 tickpolicy
- ゲスト仮想マシンにティックを挿入する期限が過ぎた場合の動作を指定します。設定可能な値は、以下のとおりです。delay
- 通常のレートでティックを配信し続けます。ゲスト仮想マシンの時間は、ティックの遅延により遅れます。catchup
- ティックの遅れを取り戻すために、高いレートでティックを配信しますキャッチアップが完了すると、ゲスト仮想マシンの時間は表示されません。また、オプションとして、threshold、slew、limit の 3 つの属性があり、それぞれ正の整数とすることができます。merge
- 遅れたティックを単一のティックにマージし、それらを挿入します。マージの実行方法によっては、ゲスト仮想マシンの時間が遅れる可能性があります。discard
- 遅れたティックを破棄し、デフォルトの間隔設定で今後の挿入を続行します。失われたティックを処理する明示的なステートメントがない限り、ゲスト仮想マシンの時間が遅延する場合があります。
20.16. 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 バス仮想乱数発生器
vector
の値を 32 より大きく設定することは推奨されません。virtio-balloon-pci および virtio-rng-pci を除くすべての virtio デバイスは、vector
引数を受け入れます。
図20.22 デバイス - 子要素
... <devices> <emulator>/usr/lib/xen/bin/qemu-dm</emulator> </devices> ...
<emulator>
要素の内容は、デバイスモデルエミュレーターバイナリーへの完全修飾パスを指定します。capabilities XML は、各特定のドメインタイプまたはアーキテクチャーの組み合わせに使用する推奨されるデフォルトエミュレーターを指定します。
20.16.1. ハードドライブ、フロッピーディスク、CDROM
図20.23 デバイス - ハードドライブ、フロッピーディスク、CDROM
... <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> ... <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> <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> <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <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> <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> </devices> ...
20.16.1.1. ディスク要素
<disk>
要素は、ディスクを記述するための主要なコンテナーです。属性type
は、<disk>
要素で使用できます。以下のタイプが許可されています。
file
block
dir
network
20.16.1.2. ソース要素
<disk type='file''>
の場合、file
属性は、ディスクを保持しているファイルへの完全修飾パスを指定します。<disk type='block'>
の場合、dev
属性は、ディスクとして機能するホスト物理マシンデバイスへのパスを指定します。file
と block
の両方で、以下で説明する 1 つ以上のオプションのサブ要素 seclabel
を使用して、そのソースファイルのみのドメインセキュリティーラベル付けポリシーを上書きできます。ディスクタイプが dir
の場合、dir
属性は、ディスクとして使用するディレクトリーへの完全修飾パスを指定します。ディスクタイプが network
の場合、protocol 属性は、要求されたイメージにアクセスするためのプロトコルを指定します。可能な値は、nbd
、rbd
、sheepdog
、または gluster
です。
rbd
、sheepdog
、または gluster
の場合、使用するボリュームやイメージを指定するには、追加の属性 name
が必須です。ディスクのタイプが network
の場合、source
には、接続するホスト物理マシンを指定するために使用される type='dir'
および type='network'
を含む、ゼロ以上の host
サブ要素が含まれることがあります。cdrom またはフロッピー (デバイス属性) を表すfile
ディスクタイプで、ソースファイルにアクセスできない場合にディスクをどうするかという動作のポリシーを定義できます。これは、startupPolicy
属性を次の値で操作することによって行われます。
mandatory
は、何らかの理由で欠落している場合に障害の原因となります。これはデフォルト設定です。requisite
は、起動時に欠落している場合は失敗し、移行/復元/復帰時に欠落している場合はドロップします。optional
- 起動の試行時にない場合はドロップします。
20.16.1.3. ミラー要素
<mirror>
の場所が最終的にソースと同じ内容を持ち、属性形式のファイル形式 (ソースの形式とは異なる場合あり) の場合に存在します。属性 ready が存在する場合は、ディスクがピボットする準備ができていることが分かっています。存在しない場合は、ディスクが依然としてコピー中である可能性があります。現在、この要素は出力でのみ有効で、入力では無視されます。
20.16.1.4. ターゲット要素
<target>
要素は、ディスクがゲスト仮想マシン OS に公開されるバス/デバイスを制御します。dev 属性は、論理デバイスの名前を示します。実際のデバイス名が、ゲスト仮想マシンの OS のデバイス名にマッピングされる保証はありません。オプションのバス属性では、エミュレートするディスクデバイスの種類を指定します。指定できる値はドライバー固有で、一般的な値は ide
、scsi
、virtio
、xen
、usb
、または sata
です。省略した場合、バスタイプはデバイス名のスタイルから推測されます。たとえば、'sda'
という名前のデバイスは通常、SCSI バスを使用してエクスポートされます。オプションの属性 tray
は、リムーバブルディスク (CD-ROM やフロッピーディスクなど) のトレイステータスを示します。値は open
または closed
のいずれかです。デフォルト設定は closed
です。詳細は、ターゲット要素を参照してください。
20.16.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 操作数。
20.16.1.6. driver
<driver>
要素を使用すると、ディスクの提供に使用されるハイパーバイザードライバーに関する詳細を指定できます。以下のオプションが使用できます。
- ハイパーバイザーが複数のバックエンドドライバーをサポートする場合、
name
属性はプライマリーバックエンドドライバー名を選択し、任意の type 属性はサブタイプを提供します。可能なタイプのリストについては、ドライバー要素を参照してください。 - オプションの
cache
属性は、キャッシュメカニズムを制御します。使用できる値は、default
、none
、writethrough
、writeback
、directsync
(writethrough
と同様ですが、ホスト物理マシンのページキャッシュをバイパスします) およびunsafe
(ホスト物理マシンはすべてのディスク io をキャッシュする場合があります) です。ゲスト仮想マシン仮想マシンからの同期要求は無視されます)。 - オプションの
error_policy
属性は、ハイパーバイザーがディスクの読み取りまたは書き込みエラーでどのように動作するかを制御します。可能な値は、stop
、report
、ignore
、およびenospace
です。error_policy
のデフォルト設定はreport
です。読み取りエラーのみに対する動作を制御するオプションのrerror_policy
もあります。rerror_policy
が指定されていない場合、error_policy
は読み取りおよび書き込みエラーの両方に使用されます。rerror_policy
が指定されている場合は、読み取りエラーのerror_policy
をオーバーライドします。また、enospace
は読み取りエラーの有効なポリシーではないため、error_policy
がenospace
に設定され、no rerror_policy
が指定されていない場合は、読み取りエラーのデフォルト設定であるreport
が使用される点に注意してください。 - オプションの
io
属性は、I/O の特定のポリシーを制御します。qemu
ゲスト仮想マシン仮想マシンはthreads
とnative
をサポートします。オプションのioeventfd
属性を使用すると、ディスクデバイスのドメイン I/O の非同期処理を設定できます。デフォルトは、ハイパーバイザーの判断に任されます。指定できる値はon
とoff
です。これを有効にすると、別のスレッドが I/O を処理している間にゲスト仮想マシンの仮想マシンを実行できます。通常、I/O の実行中にシステム CPU の使用率が高くなったゲスト仮想マシンの仮想マシンは、この恩恵を受けます。一方、ホストの物理マシンが過負荷になると、ゲスト仮想マシンの仮想マシンの I/O レイテンシーが増加します。io
を操作する必要があることを完全に証明している場合を除き、デフォルト設定を変更せず、ハイパーバイザーが設定を指示できるようにすることを強くお勧めします。 - オプションの
event_idx
属性は、デバイスイベント処理のいくつかの側面を制御し、on
またはoff
のいずれかに設定できます。on の場合、ゲスト仮想マシン仮想マシンの割り込みと終了の数を減らします。デフォルトではハイパーバイザーが決定し、デフォルトの設定はon
になります。この動作が最適ではない状況がある場合、この属性は機能を強制的にoff
にする方法を提供します。event_idx
を操作する必要があることを完全に証明している場合を除き、デフォルト設定を変更せず、ハイパーバイザーが設定を指示できるようにすることを強くお勧めします。 - オプションの
copy_on_read
属性は、リードバックファイルをイメージファイルにコピーするかどうかを制御します。使用できる値は、on
または<off>
のいずれかです。copy-on-read
は、同じバッキングファイルセクターに繰り返しアクセスすることを回避し、バッキングファイルが低速のネットワーク上にある場合に役立ちます。デフォルトでは、copy-on-read
はoff
です。
20.16.1.7. 追加のデバイス要素
device
要素内では、以下の属性を使用できます。
<boot>
- ディスクが起動可能であることを指定します。追加の起動値
<order>
- システムの起動時にデバイスを試行する順序を指定します。<デバイスごと>
のブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できません。
<encryption>
- ボリュームの暗号化方法を指定します。詳細については、ストレージの暗号化ページを参照してください。<readonly>
- ゲスト仮想マシンがデバイスを変更できないことを示します。この設定は、attribute
device='cdrom'
を使用するディスクの既定値です。共有可能
デバイスがドメイン間で共有される必要があることを示しています (ハイパーバイザーと 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 つの属性をサポートします:viz
、name
、port
、transport
、socket
。それぞれ、ホスト名、ポート番号、トランスポートタイプ、およびソケットへのパスを指定します。この要素の意味と要素数は、以下に示すようにprotocol
属性により異なります。追加のホスト属性
nbd
- nbd-server を実行しているサーバーを指定します。使用できるのは、1 台のホスト物理マシンだけです。rbd
- RBD タイプのサーバーを監視し、1 つ以上のホスト物理マシンで使用できます。sheepdog
- sheepdog サーバーのいずれかを指定し (デフォルトは localhost:7000)、ホスト物理マシンの 1 つを使用するか、またはいずれとも使用することができません。gluster
- glusterd デーモンを実行しているサーバーを指定します。使用できる物理マシンは 1 つだけです。トランスポート属性の有効な値は、tcp
、rdma
、またはunix
です。何も指定しないと、tcp
が想定されます。transport がunix
の場合、socket
属性は unix ソケットへのパスを指定します。
<address>
- ディスクを、コントローラーの指定したスロットに関連付けます。実際の<controller>
デバイスは多くの場合、推測できますが、明示的に指定することもできます。type
属性は必須で、通常はpci
またはdrive
です。pci
コントローラーの場合、bus
、slot
、およびfunction
の追加属性と、オプションのdomain
およびmultifunction
が存在する必要があります。multifunction
のデフォルトはoff
です。drive
コントローラーでは、追加の属性controller
、bus
、target
、およびunit
が利用できます。それぞれの属性のデフォルト設定は0
です。auth
- ソースへのアクセスに必要な認証情報を提供します。これには、認証時に使用するユーザー名を識別する必須属性username
と、必須属性type
を持つサブ要素secret
が含まれます。詳細は、デバイス要素を参照してください。geometry
- ジオメトリー設定を上書きする機能を提供します。これは、主に S390 DASD ディスクまたは古い DOS ディスクに役立ちます。cyls
- シリンダーの数を指定します。heads
- ヘッドの数を指定します。secs
- トラックごとのセクター数を指定します。trans
- BIOS-Translation-Modus を指定し、none
、lba
、またはauto
の値を設定できますblockio
- ブロックデバイスを、以下のブロックデバイスプロパティーのいずれかで上書きできます。blockio オプション
logical_block_size
- ゲスト仮想マシン仮想マシン OS にレポートし、ディスク I/O の最小単位を記述します。physical_block_size
- ゲスト仮想マシンの仮想マシン OS を報告し、ディスクのハードウェアセクターサイズを説明します。これは、ディスクデータの調整に関連付けることができます。
20.16.2. ファイルシステム
図20.24 デバイス - ファイルシステム
... <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> ...
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
。現在、これは QEMU/KVM ドライバーの type='mount' でのみ機能します。以下の値を使用できます。passthrough
- ゲスト仮想マシン内から設定されたユーザーのアクセス許可設定を使用してソースにアクセスすることを指定します。指定されていない場合、これがデフォルトのアクセスモードです。mapped
- ハイパーバイザーの権限設定を使用してソースにアクセスすることを指定します。squash
-'passthrough'
と同様に、例外は、chown
などの特権操作の失敗が無視されることです。これにより、ハイパーバイザーを非ルートとして実行するユーザーがパススルーのようなモードを使用できるようになります。
<source>
: ゲスト仮想マシンでアクセスされるホストの物理マシンのリソースを指定します。name
属性は<type='template'>
と共に使用する必要があります。dir
属性は<type='mount'>
と共に使用する必要があります。usage
属性は、<type='ram'>
とともに使用され、メモリー使用量を KB 単位で設定します。target
- ゲスト仮想マシンでソースドライバーにアクセスできる場所を指定します。ほとんどのドライバーの場合、これは自動マウントポイントですが、QEMU-KVM の場合、これはマウントする場所のヒントとしてゲスト仮想マシンにエクスポートされる任意の文字列タグにすぎません。readonly
- ファイルシステムをゲスト仮想マシンの読み取り専用マウントとしてエクスポートできるようにします。デフォルトでは、read-write
アクセスが許可されています。space_hard_limit
- このゲスト仮想マシンのファイルシステムで使用可能な最大スペースを指定しますspace_soft_limit
- このゲスト仮想マシンのファイルシステムで使用可能な最大スペースを指定します。コンテナーは、猶予期間中、ソフト制限を超えることが許可されています。その後、ハード制限が適用されます。
20.16.3. デバイスアドレス
<address>
サブ要素があります。入力でアドレス (またはアドレス内の任意の属性) が省略された場合、libvirt は適切なアドレスを生成します。レイアウトをさらに制御する必要がある場合は明示的なアドレスが必要になります。address 要素を含むデバイスの例は、以下を参照してください。
type
があります。特定のデバイスに使用するアドレスの選択は、デバイスやゲスト仮想マシンのアーキテクチャーによって一部が制約されます。たとえば、ディスクデバイスは type='disk'
を使用し、コンソールデバイスは、32 ビット AMD および Intel アーキテクチャーの type='pci'
、または AMD64 と Intel 64、ゲスト仮想マシン、または PowerPC64 pseries ゲスト仮想マシンの type='spapr-vio'
使用します。各アドレス<type>
には、デバイスの配置先を制御する追加のオプション属性があります。追加の属性は、以下のとおりです。
type='pci'
- PCI アドレスには、以下の追加属性があります。ドメイン
(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 桁のバス番号)スロット
属性 (バス内の 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 進値アドレス) をこの属性に割り当てることができます。
20.16.4. コントローラー
<controller>
要素を指定する必要がある場合があります。
図20.25 コントローラー要素
... <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
、"vmpvscsi"
の 1 つであるオプションの属性 model
があります。virtio-scsi コントローラーとドライバーは、KVM と Windows の両方のゲスト仮想マシンで動作することに注意してください。<controller type='scsi'>
には、指定したキュー数のマルチキューサポートを有効にする属性 num_queues
もあります。
"usb"
コントローラーには、"piix3-uhci"
、"piix4-uhci"
、"ehci"
、"ich9-ehci1"
、"ich9-uhci1"
、"ich9-uhci2"
、"ich9-uhci3"
、"vt82c686b-uhci"
、"pci-ohci"
、または、"nec-xhci"
の 1 つであるオプションの属性 model
があります。また、ゲスト仮想マシンで USB バスを明示的に無効にする必要がある場合は、model='none'
を使用できます。PowerPC64 "spapr-vio" アドレスには、関連付けられたコントローラーがありません。
address
は、上記のセマンティクスを使用して、コントローラーとマスターバスの正確な関係を指定できます。
master
があります。コンパニオンコントローラーはマスターと同じバスにあるため、コンパニオンインデックスの値は同じである必要があります。
図20.26 デバイス - コントローラー - 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> ...
20.16.5. デバイスリース
図20.27 デバイス - デバイスリース
... <devices> ... <lease> <lockspace>somearea</lockspace> <key>somekey</key> <target path='/some/lease/path' offset='1024'/> </lease> ... </devices> ...
lease
セクションには、以下の引数を指定できます。
lockspace
- 鍵が保持されているロック領域を識別する任意の文字列です。ロックマネージャーは、ロックスペース名の形式や長さに追加の制限を課す場合があります。key
- 取得するリースを一意に識別する任意の文字列。ロックマネージャーは、キーの形式や長さに追加の制限を課す場合があります。target
- ロックスペースに関連付けられたファイルの完全修飾パス。オフセットは、リースがファイル内に保存される場所を指定します。ロックマネージャーがオフセットを必要としない場合は、この値を0
に設定します。
20.16.6. ホスト物理マシンのデバイス割り当て
20.16.6.1. USB / PCI デバイス
hostdev
要素を使用してゲスト仮想マシンに渡すことができます。管理ツールを使用してホスト物理マシンを変更することにより、ドメイン xml ファイルの以下のセクションが設定されます。
図20.28 デバイス - ホスト物理マシンのデバイス割り当て
... <devices> <hostdev mode='subsystem' type='usb'> <source startupPolicy='optional'> <vendor id='0x1234'/> <product id='0xbeef'/> </source> <boot order='2'/> </hostdev> </devices> ...
図20.29 デバイス - ホスト物理マシンのデバイス割り当ての代替案
... <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> ...
表20.13 ホスト物理マシンのデバイス割り当て要素
パラメーター | 説明 |
---|---|
hostdev | これは、ホスト物理マシンデバイスを説明する主要なコンテナーです。USB デバイスの場合、パススルー mode は常に subsystem であり、type は USB デバイスの場合は usb 、PCI デバイスの場合は pci です。PCI デバイスの managed が yes の場合、ゲスト仮想マシンに渡される前にホストの物理マシンからデタッチされ、ゲスト仮想マシンの終了後にホストの物理マシンに再割り当てられます。PCI および USB デバイスの managed が省略されるか、または no である場合、ゲスト仮想マシンを起動するか、デバイスをホットプラグする前に、virNodeDeviceDettach (または virsh nodedev-dettach) の引数を使用する必要があります。また、ゲスト仮想マシンのホットプラグまたは停止後に virNodeDeviceReAttach (または virsh nodedev-reattach) を使用します。 |
source | ホストの物理マシンから見たデバイスを説明します。USB デバイスは、vendor 要素および product 要素を使用してベンダー/プロダクト id でアドレスを指定するか、address 要素を使用して、ホスト物理マシンのデバイスのアドレスを指定します。一方、PCI デバイスは、アドレスによってのみ記述できます。USB デバイスのソース要素には、startupPolicy 属性が含まれる場合があります。これを使用すると、指定したホスト物理マシンの USB デバイスが見つからない場合の対処方法に関するルールを定義できます。この属性は、次の値を受け入れます。
|
vendor, product | このような要素には、それぞれ USB ベンダーと製品 ID を指定する id 属性があります。ID は、10 進数、16 進数 (0x で始まる)、または 8 進数 (0 で始まる) で指定できます。 |
boot | デバイスが起動可能であることを指定します。この属性の順序により、システムの起動シーケンスでデバイスが試行される順序が決定します。デバイスごとのブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できません。 |
rom | PCI デバイスの ROM がゲスト仮想マシンに表示される方法を変更する場合に使用されます。オプションの bar 属性は on または off に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップで表示されるかどうかを決定します。(PCI のドキュメントでは、rombar 設定により、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 つの属性を持ちます。 |
20.16.6.2. ブロック / キャラクターデバイス
hostdev
要素を変更することで、ゲスト仮想マシンに渡すことができます。これは、コンテナーベースの仮想化でのみ可能であることに注意してください。
図20.30 デバイス - ホスト物理マシンのデバイス割り当てブロックキャラクターデバイス
... <hostdev mode='capabilities' type='storage'> <source> <block>/dev/sdf1</block> </source> </hostdev> ...
図20.31 デバイス - ホスト物理マシンのデバイス割り当てブロックキャラクターデバイスの代替案 1
... <hostdev mode='capabilities' type='misc'> <source> <char>/dev/input/event3</char> </source> </hostdev> ...
図20.32 デバイス - ホスト物理マシンのデバイス割り当てブロックキャラクターデバイスの代替案 2
... <hostdev mode='capabilities' type='net'> <source> <interface>eth0</interface> </source> </hostdev> ...
表20.14 ブロック/ キャラクターデバイス要素
パラメーター | 説明 |
---|---|
hostdev | これは、ホスト物理マシンデバイスを説明する主要なコンテナーです。ブロックデバイス/キャラクターデバイスの場合、パススルー mode は常に capabilities になります。ブロックデバイスの場合は type は block に、キャラクターデバイスの場合は char になります。 |
source | これは、ホストの物理マシンから見たデバイスを説明します。ブロックデバイスの場合は、ホスト物理マシンの OS のブロックデバイスへのパスが、ネストされた block 要素で提供され、キャラクターデバイスの場合は char 要素が使用されます。 |
20.16.7. リダイレクトされたデバイス
図20.33 デバイス - リダイレクトされたデバイス
... <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> ...
表20.15 リダイレクトされたデバイス要素
パラメーター | 説明 |
---|---|
redirdev | これは、リダイレクトされたデバイスを記述するためのメインコンテナーです。USB デバイスの場合、bus は usb である必要があります。追加の属性タイプが必要で、対応しているシリアルデバイスタイプのいずれかと一致するものが、トンネルのホスト物理マシン側の説明に使用されます。通常は、type='tcp' または type='spicevmc' (SPICE グラフィックデバイスの usbredir チャンネルを使用) です。redirdev 要素には、オプションのサブ要素 address があります。これは、デバイスを特定のコントローラーに関連付けることができます。target サブ要素は必要ありませんが、source などのサブ要素は、指定の type に応じて必要になる場合があります (キャラクターデバイスのコンシューマーはゲスト仮想マシンに表示されるデバイスではなく、ハイパーバイザー自体であるため)。 |
boot | デバイスが起動可能であることを指定します。order 属性は、システムの起動順序においてデバイスが試行される順序を決定します。デバイスごとのブート要素は、BIOS ブートローダーセクションの一般的なブート要素とは併用できません。 |
redirfilter | これは、特定のデバイスをリダイレクトから除外するフィルタールールを作成するために使用されます。サブ要素 usbdev を使用して、各フィルタールールを定義します。class 属性は USB クラスコードです。 |
20.16.8. スマートカードデバイス
smartcard
要素を介してゲスト仮想マシンに提供することができます。ホストマシン上の USB スマートカードリーダーデバイスは、ホストとゲストの両方が使用できるようにすることはできず、ゲストから削除されたときにホストコンピューターをロックできるため、単純なデバイスパススルーを使用するゲストでは使用できません。したがって、一部のハイパーバイザーは、ゲスト仮想マシンにスマートカードインターフェイスを提示できる特別な仮想デバイスを提供します。これには、ホストマシンから、またはサードパーティーのスマートカードプロバイダーによって作成されたチャンネルから認証情報を取得する方法を説明するいくつかのモードがあります。キャラクターデバイスを介した USB デバイスリダイレクトのパラメーターを設定するには、ドメイン XML の次のセクションを編集します。
図20.34 デバイス - スマートカードデバイス
... <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(チップ/スマートカードインターフェイスデバイス) カードのように動作する USB バス上のデバイスを認識します。
表20.16 スマートカードモードの要素
パラメーター | 説明 |
---|---|
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 バスコントローラーとの間の関連を微調整します (「デバイスアドレス」 を参照してください)。
20.16.9. Network Interfaces
図20.35 デバイス - ネットワークインターフェイス
... <devices> <interface type='bridge'> <source bridge='xenbr0'/> <mac address='00:16:3e:5d:c7:9e'/> <script path='vif-bridge'/> <boot order='1'/> <rom bar='off'/> </interface> </devices> ...
<interface>
要素には、属性 type='pci'
を使用してインターフェイスを特定の pci スロットに関連付けることができるオプションの <address>
サブ要素があります (「デバイスアドレス」 を参照してください)。
20.16.9.1. 仮想ネットワーク
<ネットワーク>
定義で個別に説明されている複数ホストの物理マシン環境)。さらに、名前付きネットワーク定義によって詳細が記述されている接続を提供します。仮想ネットワークの forward mode
設定によっては、ネットワークが完全に分離している (<forward>
要素が指定されていない) 場合と、NAT を使用して明示的なネットワークデバイスまたはデフォルトルートに接続している (forward mode='nat'
) 場合、NAT を使用せずにルーティングしている (forward mode='route'/
) 場合、またはホスト物理マシンのネットワークインターフェイス (macvtap を使用) またはブリッジデバイス (forward mode=' bridge|private|vepa|passthrough'/
) のいずれかに直接接続している場合があります。
<target>
要素 (「ターゲット要素の上書き」 を参照) で上書きできます。
<direct>
ネットワーク接続 (以下で説明) と同様に、タイプ network
の接続は <virtualport>
要素を指定し、vepa (802.1Qbg) または 802.1Qbh 準拠のスイッチに転送される設定データと共に、Open vSwitch 仮想スイッチに転送できます。
<network>
の設定によって異なる場合があるため、仮想ポートの種類の属性を省略し、複数の異なる仮想ポートの種類の属性を指定することもできます (特定の属性を除外することもできます)。ドメインの起動時に、ネットワークで定義されたタイプと属性、およびインターフェイスによって参照されるポートグループをマージすることにより、完全な <virtualport>
要素が構築されます。新しく構築された仮想ポートは、両方の組み合わせです。下位の仮想ポートの属性は、上位の仮想ポートで定義された属性に変更を加えることはできません。インターフェイスが最高の優先度を取り、ポートグループが最低の優先度を取ります。
profileid
と interfaceid
の両方を提供する必要があります。managerid
、typeid
、profileid
などの仮想ポートから入力するその他の属性は任意です。
図20.36 デバイス - ネットワークインターフェイス - 仮想ネットワーク
... <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> ...
20.16.9.2. LAN へのブリッジ
<vnetN>
の名前で作成された関連する tun
デバイスがあります。これは <target>
要素 (「ターゲット要素の上書き」 を参照) で上書きすることもできます。<tun>
デバイスは、ブリッジにスレーブされます。IP 範囲/ネットワーク設定は、LAN で使用されるものです。これにより、物理マシンと同様に、ゲスト仮想マシンの完全な着信ネットアクセスと発信ネットアクセスが提供されます。
virtualport type='openvswitch'/
を追加することで、Open vSwitch ブリッジデバイスに接続することもできます。Open vSwitch タイプ virtualport は、parameters
要素に 2 つのパラメーターを指定できます。1 つは、この特定のインターフェイスを Open vSwitch に固有に識別するために使用される標準の uuid であるinterfaceid
(指定しないと、インターフェイスの最初の定義時にランダムなinterfaceid
が生成されます) で、もう 1 つは Open vSwitch にインターフェイス<port-profile>
として送信されるオプションのprofileid
です。ブリッジを LAN 設定に設定するには、管理ツールを使用して、ドメイン XML の以下の部分を設定します。
図20.37 デバイス - ネットワークインターフェイス - 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>
20.16.9.3. ポートマスカレードの範囲の設定
図20.38 ポートマスカレードの範囲
<forward mode='nat'> <address start='192.0.2.1' end='192.0.2.10'/> </forward> ...
20.16.9.4. ユーザー空間の SLIRP スタック
図20.39 デバイス - ネットワークインターフェイス - ユーザー空間の SLIRP スタック
... <devices> <interface type='user'/> ... <interface type='user'> <mac address="00:11:22:33:44:55"/> </interface> </devices> ...
20.16.9.5. 一般的なイーサネット接続
vnetN
の名前で作成されたtun
デバイスがありますが、target
要素で上書きすることもできます。tun
デバイスを作成した後、必要なホスト物理マシンネットワーク統合を実行することが期待されるシェルスクリプトが実行されます。初期設定では、このスクリプトは /etc/qemu-ifup
と呼ばれていますが、上書きできます (「ターゲット要素の上書き」 を参照)。
図20.40 デバイス - ネットワークインターフェイス - 汎用イーサネット接続
... <devices> <interface type='ethernet'/> ... <interface type='ethernet'> <target dev='vnet7'/> <script path='/etc/qemu-ifup-mynet'/> </interface> </devices> ...
20.16.9.6. 物理インターフェイスへの直接接続
<interface type='direct'>
を使用すると、仮想マシンの NIC がホスト上の指定された物理インターフェイスに接続されます。
vepa
(仮想イーサネットポートアグリゲータ)。これはデフォルトのモード、bridge
、または private
です。
図20.41 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続
... <devices> ... <interface type='direct'> <source dev='eth0' mode='vepa'/> </interface> </devices> ...
表20.17 物理インターフェイス要素への直接接続
要素 | 説明 |
---|---|
vepa | ゲスト仮想マシンのパケットはすべて外部ブリッジに送信されます。パケットの送信先が、パケットの送信元と同じホスト物理マシン上のゲスト仮想マシンであるパケットは、VEPA 対応のブリッジによりホスト物理マシンに返されます (現在のブリッジは、通常 VEPA 対応ではありません)。 |
bridge | 宛先が、送信元と同じホストの物理マシンにあるパケットは、ターゲットの macvtap デバイスに直接配信されます。直接配信する場合は、作成元デバイスと宛先デバイスの両方がブリッジモードになっている必要があります。いずれかが vepa モードにある場合は、VEPA 対応のブリッジが必要です。 |
プライベート | すべてのパケットは外部ブリッジに送信されます。また、外部ルーターまたはゲートウェイを介して送信され、そのデバイスがホストの物理マシンに返す場合は、同じホストの物理マシンのターゲット VM にのみ配信されます。移行元デバイスまたは移行先デバイスのいずれかがプライベートモードの場合は、以下の手順が行われます。 |
パススルー | この機能は、移行機能を失うことなく、SRIOV 対応 NIC の仮想機能をゲスト仮想マシンに直接接続します。すべてのパケットは、設定したネットワークデバイスの VF/IF に送信されます。デバイスの機能によっては、追加の前提条件や制限が適用される場合があります。たとえば、これにはカーネル 2.6.38 以降が必要です。 |
表20.18 物理インターフェイスの追加要素への直接接続
要素 | 説明 |
---|---|
managerid | VSI Manager ID は、VSI タイプおよびインスタンス定義を含むデータベースを識別します。これは整数値で、値 0 が予約されます。 |
typeid | VSI タイプ ID は、ネットワークアクセスを特徴付ける VSI タイプを識別します。VSI の種類は通常、ネットワーク管理者が管理します。これは整数値です。 |
typeidversion | VSI タイプバージョンでは、複数のバージョンの VSI タイプが許可されます。これは整数値です。 |
instanceid | VSI インスタンス ID 識別子は、VSI インスタンス (仮想マシンの仮想インターフェイス) が作成されると生成されます。これは、グローバルに一意の識別子です。 |
profileid | プロファイル ID には、このインターフェイスに適用されるポートプロファイルの名前が含まれます。この名前は、ポートプロファイルデータベースにより、ポートプロファイルからネットワークパラメーターに解決され、これらのネットワークパラメーターはこのインターフェイスに適用されます。 |
図20.42 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続追加パラメーター
... <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> ...
図20.43 デバイス - ネットワークインターフェイス - 物理インターフェイスへの直接接続、さらなる追加パラメーター
... <devices> ... <interface type='direct'> <source dev='eth0' mode='private'/> <virtualport type='802.1Qbh'> <parameters profileid='finance'/> </virtualport> </interface> </devices> ...
profileid
属性には、このインターフェイスに適用されるポートプロファイルの名前が含まれます。この名前は、ポートプロファイルデータベースにより、ポートプロファイルからネットワークパラメーターに解決され、これらのネットワークパラメーターはこのインターフェイスに適用されます。
20.16.9.7. PCI パススルー
source
要素で指定される PCI ネットワークデバイスは、ジェネリックデバイスパススルーを使用してゲスト仮想マシンに直接割り当てられます。このデバイスの MAC アドレスは、最初にオプションで設定された値に設定され、そのデバイスの MAC アドレスがオプションで指定された virtualport
要素を使用して 802.1Qbh 対応スイッチに関連付けられます (type='direct' ネットワークデバイスの場合は、上記の仮想ポートの例を参照してください)。標準的なシングルポートの PCI イーサネットカードドライバー設計の制限により、この方法で割り当てることができるのは Single Root I/O Virtualization (SR-IOV) virtual function (VF) デバイスのみとなることに注意してください。標準的なシングルポートの PCI または PCIe イーサネットカードをゲスト仮想マシンに割り当てる場合は、従来の hostdev
デバイス定義を使用します。
hostdev
デバイスの機能と非常に似ています。相違点は、パススルーデバイスに MAC アドレスとvirtualport
を指定できることです。この機能が不要な場合、SR-IOV に対応していない標準のシングルポート PCI カード、PCIe カード、または USB ネットワークカードがある場合 (そのため、ゲスト仮想マシンドメインに割り当てられた後にリセット中に設定済みの MAC アドレスを失います)、または 0.9.11 よりも古い libvirt のバージョンを使用している場合は、標準の hostdev
を使用して、interface type='hostdev'/
の代わりに、ゲスト仮想マシンにデバイスを割り当てます。
図20.44 デバイス - ネットワークインターフェイス - 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> ...
20.16.9.8. マルチキャストトンネル
mcast
に設定/作成されます。そして、mac アドレスおよびソースアドレスを提供します。結果は、ドメイン XML に加えられた変更に表示されます。
図20.45 デバイス - ネットワークインターフェイス - マルチキャストトンネル
... <devices> <interface type='mcast'> <mac address='52:54:00:6d:90:01'> <source address='230.0.0.1' port='5558'/> </interface> </devices> ...
20.16.9.9. TCP トンネル
interface type
を操作し、server
または client
に設定/変更し、Mac と送信元アドレスを提供することによって作成されます。結果は、ドメイン XML に加えられた変更に表示されます。
図20.46 デバイス - ネットワークインターフェイス - 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> ...
20.16.9.10. NIC ドライバー固有のオプションの設定
driver
サブ要素の属性として設定されます。このようなオプションは、管理ツールを使用して設定し、ドメイン XML の以下のセクションを設定します。
図20.47 デバイス - ネットワークインターフェイス - 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> ...
表20.19 virtio NIC ドライバー要素
パラメーター | 説明 |
---|---|
name | オプションの name 属性では、使用するバックエンドドライバーの種類が強制されます。値は、qemu (ユーザー空間のバックエンド) または vhost (カーネルにより vhost モジュールが提供されることが必要なカーネルバックエンド) のいずれかになります。カーネルサポートのない vhost ドライバーを要求しようとする場合は拒否されます。デフォルト設定は、vhost ドライバーが存在する場合は vhost になりますが、存在しない場合は警告なしに qemu に戻ります。 |
txmode | 送信バッファーが満杯になった場合にパケットの送信を処理する方法を指定します。値は、iothread または timer のいずれかになります。iothread に設定すると、パケット tx はドライバーの下半分の iothread ですべて実行されます (このオプションは、qemu コマンドラインの "-device" virtio-net-pci オプションに "tx=bh" を追加することに変換されます)。timer に設定すると、qemu で tx 処理が行われます。現在送信可能な tx データよりも多くの tx データが存在する場合は、qemu が他の処理を行うために移動する前にタイマーが設定されます。タイマーが実行されると、さらなるデータを送信するために別の試みが行われます。一般に、このオプションを変更することが絶対に必要であると確信している場合を除いて、このオプションはそのままにしておく必要があります。 |
ioeventfd | ユーザーがインターフェイスデバイスのドメイン I/O 非同期処理を設定できるようにします。デフォルトは、ハイパーバイザーの判断に任されます。許可される値は on と off です。このオプションを有効にすると、qemu は、別のスレッドが I/O を処理している間にゲスト仮想マシンを実行できます。通常、I/O の実行中にシステム CPU の使用率が高くなったゲスト仮想マシンは、この恩恵を受けます。一方、物理ホストマシンのオーバーロードは、ゲスト仮想マシンの I/O レイテンシーを増加させる可能性もあります。したがって、このオプションを変更することが絶対に必要であると確信している場合を除いて、このオプションはそのままにしておく必要があります。 |
event_idx | event_idx 属性は、デバイスイベント処理の一部の側面を制御します。値は on または off のいずれかになります。on を選択すると、ゲスト仮想マシンの割り込みと終了の数が減ります。デフォルトは on です。この動作が最適ではない状況がある場合、この属性は機能を強制的にオフにする方法を提供します。変更が絶対に必要であると確信している場合を除いて、このオプションはそのままにしておく必要があります。 |
20.16.9.11. ターゲット要素の上書き
図20.48 デバイス - ネットワークインターフェイス - ターゲット要素の上書き
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> </interface> </devices> ...
20.16.9.12. 起動順序の指定
図20.49 起動順序の指定
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <boot order='1'/> </interface> </devices> ...
20.16.9.13. インターフェイス ROM BIOS 設定
図20.50 インターフェイス ROM BIOS 設定
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <rom bar='on' file='/etc/fake/boot.bin'/> </interface> </devices> ...
bar
属性は on
または off
に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップで表示されるかどうかを決定します。(PCI のドキュメントでは、rombar 設定により、ROM のベースアドレスレジスターの存在が制御されます。)ROM バーが指定されていない場合、qemu のデフォルトが使用されます (古いバージョンの qemu はデフォルトの off
を使用していましたが、新しい qemus のデフォルトは on
です)。オプションの file
属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルを指定するために使用されます。これは、ネットワークデバイスに別のブート ROM を提供する際に役立ちます。
20.16.9.14. QoS (Quality of Service)
bandwidth
要素には、最大で 1 つのインバウンドおよび最大で 1 つのアウトバウンド子要素を設定できます。このような子要素のいずれかを外した場合は、トラフィックの方向に QoS が適用されません。したがって、ドメインの受信トラフィックのみを形成する場合は、受信のみを使用し、その逆も同様です。
average
(または以下のような floor
) が 1 つずつあります。average
は、シェイプされるインターフェイスの平均ビットレートを指定します。次に、2 つのオプションの属性があります。インターフェイスがデータを送信できる最大速度を指定する peak
と、ピーク速度で burst できるバイト数を指定するburst
です。属性に使用できる値は整数です。
average
属性および peak
属性の単位は キロバイト/秒 で、burst
はキロバイト単位でのみ設定されます。また、着信トラフィックにはfloor
属性を指定できます。これにより、シェーピングのインターフェイスでは最小限のスループットが保証されます。floor
を使用する場合は、すべてのトラフィックが QoS の決定が行われる 1 つのポイントを通過する必要があります。このため、forward
タイプが route
、nat
、または no forward at all である interface type='network'/
の場合のみに使用できます。仮想ネットワーク内では、接続されているすべてのインターフェイスに、少なくとも着信 QoS セット (average
以上) が必要ですが、floor 属性では average
を指定する必要がありません。ただし、peak
属性および burst
属性には依然としてaverage
が必要です。現時点では、Ingress qdiscs にクラスがないため、floor
は受信トラフィックにのみ適用でき、送信トラフィックには適用されません。
図20.51 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> ...
20.16.9.15. VLAN タグの設定 (サポートされているネットワークタイプのみ)
図20.52 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
要素でゲスト仮想マシンのネットワークトラフィックに適用する 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 トランクを実行することが想定されます。単一のタグを使用した vlan トランキングが必要な場合は、オプションの属性 trunk='yes'
をトップレベルの vlan 要素に追加できます。
20.16.9.16. 仮想リンクの状態の変更
state
に指定できる値は、up
および down
です。値として down
が指定されている場合、インターフェイスはネットワークケーブルが切断されているかのように動作します。この要素が指定されていない場合のデフォルトの動作は、リンク状態を up
にすることです。
図20.53 仮想リンクの状態の変更
... <devices> <interface type='network'> <source network='default'/> <target dev='vnet0'/> <link state='down'/> </interface> <devices> ...
20.16.10. 入力デバイス
図20.54 入力デバイス
... <devices> <input type='mouse' bus='usb'/> </devices> ...
<input>
要素には 1 つの必須属性があります。type
は次のように設定できます: mouse
または tablet
。後者は絶対的なカーソル移動を提供し、前者は相対的な移動を使用します。オプションの bus
属性を使用すると、デバイスタイプを詳細に指定できます。また、xen
(準仮想化)、ps2
、および usb
に設定できます。
<address>
があります。これは、上記で説明されているように、デバイスを特定の PCI スロットに関連付けることができます。
20.16.11. ハブデバイス
図20.55 ハブデバイス
... <devices> <hub type='usb'/> </devices> ...
usb
のみになります。hub 要素には、type='usb'
をオプションに持つオプションのサブ要素 address
があり、デバイスを特定のコントローラーに関連付けることができます。
20.16.12. グラフィカルフレームバッファー
図20.56 グラフィカルフレームバッファー
... <devices> <graphics type='sdl' display=':0.0'/> <graphics type='vnc' port='5904'> <listen type='address' address='192.0.2.1'/> </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
属性があり、以下の説明に従って、sdl
、vnc
、rdp
、または desktop
の値をとります。
表20.20 グラフィカルフレームバッファー要素
パラメーター | 説明 |
---|---|
sdl | これにより、ホスト物理マシンのデスクトップにウィンドウが表示されます。3 つのオプションの引数を取ることができます。使用するディスプレイの 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 値のみを受け入れます。そして、すべてのハイパーバイザーでサポートされていないことに注意してください。QEMU は、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 属性は、デフォルトのチャネルセキュリティーポリシーを設定します。有効な値は、secure 、insecure 、およびデフォルトの any になります (可能な場合は secure になりますが、安全なパスが利用できない場合にエラーになるのではなく、insecure にフォールバックします)。 |
graphics
要素内に 1 つ以上の channel
要素を追加することによって実現されます。有効なチャンネル名は、main
、display
、inputs
、cursor
、playback
、record
、smartcard
、および usbredir
などです。
図20.57 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>
image
圧縮を設定するイメージ (auto_glz、auto_lz、quick、glz、lz、off を受け入れる)、wan 上のイメージの JPEG 圧縮用の jpeg
(auto、never、always を受け入れる)、wan イメージ圧縮を設定するための zlib
(auto、never、always を受け入れる) およびオーディオストリーム圧縮を有効にするための playback
(on または off を受け入れる)。
streaming
要素によって設定され、その mode
属性を filter
の 1 つ、all
または off
に設定します。
clipboard
要素により設定されます。これはデフォルトで有効になっており、copypaste
プロパティーを no
に設定することで無効にできます。
mouse
要素によって設定され、その mode
属性を server
または client
のいずれかに設定します。mode を指定しない場合は、qemu のデフォルトが使用されます (client
モード)。
表20.21 追加のグラフィカルフレームバッファー要素
パラメーター | 説明 |
---|---|
rdp | RDP サーバーを起動します。port 属性は、TCP ポート番号を指定します (自動割り当ての必要があることを示す従来の構文として -1 を使用)。autoport 属性は、使用する TCP ポートの自動割り当てを指定する際に推奨される構文です。replaceUser 属性は、VM への複数の同時接続を許可するかどうかを決定するブール値です。新規クライアントがシングル接続モードで接続する場合に、multiUser 属性で既存の接続をドロップする必要があるか、また、新規の接続を VRDP サーバーで確立する必要があるかを指定します。 |
desktop | この値は、現時点では VirtualBox ドメイン用に予約されています。sdl と同様に、ホスト物理マシンデスクトップにウィンドウを表示しますが、VirtualBox ビューアーを使用します。sdl と同様に、オプション属性の display および fullscreen を受け入れます。 |
listen | グラフィックタイプ vnc および spice のリスニングソケットを設定するために使用されるアドレス情報を graphics に配置する代わりに、listen と呼ばれる graphics の個別のサブ要素である listen 属性を指定できます (上記の例を参照)。listen は次の属性を受け入れます。
|
20.16.13. ビデオデバイス
図20.58 ビデオデバイス
... <devices> <video> <model type='vga' vram='8192' heads='1'> <acceleration accel3d='yes' accel2d='yes'/> </model> </video> </devices> ...
graphics
要素には必須のtype
属性があり、以下の説明に従って、"sdl"、"vnc"、"rdp"、または "desktop" の値をとります。
表20.22 グラフィカルフレームバッファー要素
パラメーター | 説明 |
---|---|
video | video 要素は、ビデオデバイスを説明するコンテナーです。後方互換性のために、動画が設定されておらず、ドメイン XML に graphics 要素がある場合は、ゲスト仮想マシンの種類に応じたデフォルトの video が追加されます。ram または vram が指定されていない場合は、デフォルト値が使用されます。 |
model | これには、利用可能なハイパーバイザー機能に応じて、vga 、cirrus 、vmvga 、xen 、vbox 、または qxl の値を取る必須の type 属性があります。また、vram と、ヘッドを使用した数値を使用して、ビデオメモリーの量をキビバイト (1024 バイトのブロック) で提供することもできます。 |
アクセラレーション | アクセラレーションに対応している場合は、acceleration 要素の accel3d 属性および accel2d 属性を使用して有効にする必要があります。 |
address | オプションの address サブ要素を使用すると、ビデオデバイスを特定の PCI スロットに関連付けることができます。 |
20.16.14. コンソール、シリアル、パラレル、およびチャネルデバイス
図20.59 コンソール、シリアル、パラレル、およびチャネルデバイス
... <devices> <parallel type='pty'> <source path='/dev/pts/2'/> <target port='0'/> </parallel> <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> ...
address
があり、デバイスを特定のコントローラーまたは PCI スロットに関連付けることができます。
20.16.15. ゲスト仮想マシンのインターフェイス
図20.60 ゲスト仮想マシンインターフェイスパラレルポート
... <devices> <parallel type='pty'> <source path='/dev/pts/2'/> <target port='0'/> </parallel> </devices> ...
<target>
には、ポート番号を指定する port
属性を指定できます。ポートには 0 から始まる番号が付けられています。通常、0、1、または 2 つのパラレルポートがあります。
図20.61 ゲスト仮想マシンインターフェイスのシリアルポート
... <devices> <serial type='pty'> <source path='/dev/pts/3'/> <target port='0'/> </serial> </devices> ...
<target>
には、ポート番号を指定する port
属性を指定できます。ポートには 0 から始まる番号が付けられています。通常、シリアルポートは 0、1、または 2 です。オプションの type
属性もあり、その値には 2 つの選択肢があります。1 つは isa-serial
で、もう 1 つは usb-serial
です。type
がない場合は、isa-serial
がデフォルトで使用されます。usb-serial の場合、type='usb'
の任意のサブ要素 <address>
で、上記の特定のコントローラーにデバイスを関連付けることができます。
<console>
要素は、対話式コンソールを表すために使用されます。以下のルールに従い、使用中のゲスト仮想マシンのタイプによって、コンソールは準仮想化デバイスである場合と、シリアルデバイスのクローンである場合があります。
targetType
属性が設定されていない場合、デフォルトのデバイスtype
はハイパーバイザーのルールに従います。libvirt に渡された XML を再クエリーする際に、デフォルトのtype
が追加されます。完全に仮想化されたゲスト仮想マシンの場合、デフォルトのデバイスタイプは通常、シリアルポートです。targetType
属性がserial
で、<serial>
要素が存在しない場合は、console 要素が<serial>
要素にコピーされます。<serial>
要素がすでに存在する場合は、console 要素は無視されます。targetType
属性がserial
でない場合は、通常処理されます。- 最初の
<console>
要素のみが、serial
のtargetType
を使用できます。セカンダリーコンソールはすべて準仮想化する必要があります。 - s390 では、console 要素が sclp または sclplm (ラインモード) の targetType を使用できます。SCLP は、s390 のネイティブのコンソールタイプです。SCLP コンソールには関連付けられたコントローラーがありません。
図20.62 ゲスト仮想マシンインターフェイス - 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 つだけです。
20.16.16. チャネル
図20.63 チャネル
... <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/qemu/f16x86_64.agent'/> <target type='virtio' name='org.qemu.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 チャネル。<channel>
は/dev/vport*
の下のゲスト仮想マシンで公開され、オプションの要素name
が指定されている場合は、/dev/virtio-ports/$name
(詳細は、http://fedoraproject.org/wiki/Features/VirtioSerial を参照してください)。オプションの要素address
では、チャンネルを特定のtype='virtio-serial'
コントローラーに関連付けることができます (上記を参照)。QEMU では、名前が org.qemu.guest_agent.0 の場合、libvirt は、ゲスト仮想マシンのシャットダウンやファイルシステムの静止などのアクションのために、ゲスト仮想マシンにインストールされているゲスト仮想マシンエージェントと対話できます。spicevmc
- 準仮想化 SPICE チャンネル。ドメインには、グラフィックデバイスとしての SPICE サーバーも必要です。この時点で、ホストの物理マシンがメインチャネル全体でメッセージをピギーバックします。属性がtype='virtio';
のtarget
要素が必要です。オプションの属性name
は、ゲスト仮想マシンがチャネルにアクセスする方法を制御し、デフォルトはname='com.redhat.spice.0'
になります。オプションの<address>
要素は、チャンネルを特定のtype='virtio-serial'
コントローラーに関連付けることができます。
20.16.17. ホストの物理マシンインターフェイス
表20.23 キャラクターデバイスの要素
パラメーター | 説明 | XML スニペット |
---|---|---|
ドメインログファイル | キャラクターデバイスのすべての入力を無効にし、仮想マシンのログファイルに出力を送信します |
|
デバイスログファイル | ファイルが開かれ、キャラクターデバイスに送信したすべてのデータがファイルに書き込まれます。 |
|
仮想コンソール | キャラクターデバイスを仮想コンソールのグラフィカルフレームバッファーに接続します。通常、これには "ctrl+alt+3" のような特別なホットキーシーケンスを介してアクセスします。 |
|
Null デバイス | キャラクターデバイスをボイドに接続します。入力にデータが提供されることはありません。書き込まれたデータはすべて破棄されます。 |
|
擬似 TTY | 疑似 TTY は、/dev/ptmx を使用して割り当てられます。virsh console などの適切なクライアントは、接続してローカルのシリアルポートと対話できます。 |
|
NB 特殊ケース | NB 特殊なケースで、<console type='pty'> の場合、TTY パスもトップレベルの <console> タグの属性 tty='/dev/pts/3' として複製されます。これにより、<console> タグの構文が簡略化されました。 | |
ホスト物理マシンのデバイスプロキシー | キャラクターデバイスは、基本となる物理キャラクターデバイスに渡されます。エミュレートシリアルポートはホスト物理マシンのシリアルポートにのみ接続するなど、デバイスの種類が一致する必要があります。シリアルポートをパラレルポートに接続しないでください。 |
|
名前付きパイプ | キャラクターデバイスは、名前付きパイプに出力を書き込みます。詳細については、pipe(7) の man ページを参照してください。 |
|
TCP クライアント/サーバー | キャラクターデバイスは、リモートサーバーに接続する TCP クライアントとして機能します。 |
または、クライアント接続を待機している TCP サーバーとして機能します。
または、raw の TCP の代わりに telnet を使用できます。また、telnets (セキュアな telnet) および tls も使用できます。
|
UDP ネットワークコンソール | キャラクターデバイスは UDP netconsole サービスとしてパケットの送受信を行います。これは不可逆のサービスです。 |
|
UNIX ドメインソケットクライアント/サーバー | キャラクターデバイスは、UNIX ドメインソケットサーバーとして機能し、ローカルクライアントからの接続を受け入れます。 |
|
20.17. サウンドデバイス
図20.64 仮想サウンドカード
... <devices> <sound model='es1370'/> </devices> ...
model
が 1 つあります。これは、実際のサウンドデバイスをエミュレートするものを指定します。有効な値は、基本となるハイパーバイザーに固有のものですが、一般的な選択肢は 'es1370'
、'sb16'
、'ac97'
、および 'ich6'
です。また、ich6 モデルセットを持つ sound 要素には、さまざまなオーディオコーデックをオーディオデバイスに割り当てるためのオプションの codec
サブ要素を追加できます。指定しない場合は、再生および録画を許可するために、デフォルトのコーデックが割り当てられます。有効な値は 'duplex'
(ラインインおよびラインアウトをアドバタイズ) および 'micro'
(スピーカーおよびマイクをアドバタイズ) です。
図20.65 サウンドデバイス
... <devices> <sound model='ich6'> <codec type='micro'/> <sound/> </devices> ...
<address>
があります。このサブ要素は、デバイスを特定の PCI スロットに接続できます (上記を参照)。
20.18. ウォッチドッグデバイス
<watchdog>
要素を介してゲスト仮想マシンに追加できます。ウォッチドッグデバイスには、ゲスト仮想マシンに追加のドライバーおよび管理デーモンが必要です。libvirt 設定でウォッチドッグを有効にするだけでは、それ自体では何の役にも立ちません。現在、ウォッチドッグの実行時にサポート通知はありません。
図20.66 ウォッチドッグデバイス
... <devices> <watchdog model='i6300esb'/> </devices> ... ... <devices> <watchdog model='i6300esb' action='poweroff'/> </devices> </domain>
model
- 必要なmodel
属性は、実際のウォッチドッグデバイスをエミュレートするものを指定します。有効な値は、基になるハイパーバイザーに固有のものです。model
属性は、以下の値をとることができます。i6300esb
- 推奨されるデバイスで、PCI Intel 6300ESB をエミュレートします。ib700
- ISA iBase IB700 をエミュレートします。
action
- オプションのaction
属性は、ウォッチドッグの期限が切れたときに行うアクションを説明します。有効な値は、基になるハイパーバイザーに固有のものです。action
属性には、以下の値を指定できます。reset
: デフォルト設定で、ゲスト仮想マシンを強制的にリセットします。shutdown
- ゲスト仮想マシンを正常にシャットダウンします (推奨されません)。poweroff
: ゲスト仮想マシンを強制的にオフにします。pause
: ゲスト仮想マシンを一時停止します。none
- 何も実行しません。dump
- ゲスト仮想マシンを自動的にダンプします。
20.19. メモリーバルーンデバイス
<memballoon>
要素として表示されます。必要に応じて自動的に追加されるため、特定の PCI スロットを割り当てる必要がない限り、ゲスト仮想マシン XML にこの要素を明示的に追加する必要はありません。memballoon デバイスを明示的に無効にする必要がある場合は、model='none'
を使用できることに注意してください。
図20.67 メモリーバルーンデバイス
... <devices> <memballoon model='virtio'/> </devices> ...
図20.68 手動で追加したメモリーバルーンデバイス
... <devices> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain>
model
属性は、どのようなバルーンデバイスが提供されるかを指定します。有効な値は、仮想化プラットフォームに固有です。'virtio'
は KVM ハイパーバイザーのデフォルト設定であり、'xen'
は Xen ハイパーバイザーのデフォルト設定です。
20.20. セキュリティーラベル
<seclabel>
要素により、セキュリティードライバーの動作を制御できます。基本的な動作モードは、'dynamic'
で、libvirt が一意のセキュリティーラベルを自動的に生成します。'static'
では、アプリケーションまたは管理者がラベルを選択します。'none'
では、制限が無効になっています。動的ラベル生成では、libvirt は、仮想マシンに関連付けられたリソースに常に自動的に再ラベル付けします。静的ラベル割り当てでは、デフォルトで、管理者またはアプリケーションは、すべてのリソースにラベルが正しく設定されていることを確認する必要があります。ただし、必要に応じて自動再ラベル付けを有効にすることができます。
model
を使用して定義できます。最上位のセキュリティーラベルの有効な入力 XML 設定は次のとおりです。
図20.69 セキュリティーラベル
<seclabel type='dynamic' model='selinux'/> <seclabel type='dynamic' model='selinux'> <baselabel>system_u:system_r:my_svirt_t:s0</baselabel> </seclabel> <seclabel type='static' model='selinux' relabel='no'> <label>system_u:system_r:svirt_t:s0:c392,c662</label> </seclabel> <seclabel type='static' model='selinux' relabel='yes'> <label>system_u:system_r:svirt_t:s0:c392,c662</label> </seclabel> <seclabel type='none'/>
'type'
属性が指定されていない場合は、セキュリティードライバーのデフォルト設定 ('none'
または 'dynamic'
) が使用されます。<baselabel>
を設定し、'type'
を設定しないと、型が 'dynamic'
であると想定されます。自動リソース再ラベル付けが有効な実行中のゲスト仮想マシンの XML を表示する場合は、追加の XML 要素 imagelabel
が含まれます。これは出力専用の要素であるため、ユーザー提供の XML ドキュメントでは無視されます。
type
- libvirt が一意のセキュリティーラベルを自動的に生成するかどうかを判断するために、static
、dynamic
、またはnone
を指定します。model
- 有効なセキュリティーモデル名で、現在アクティブなセキュリティーモデルと一致しますrelabel
-yes
またはno
のいずれかです。動的ラベル割り当てを使用する場合は、これを常にyes
にする必要があります。静的ラベル割り当てでは、デフォルトはno
になります。<label>
- 静的ラベリングを使用する場合は、仮想ドメインに割り当てる完全なセキュリティーラベルを指定する必要があります。コンテンツの形式は、使用されているセキュリティードライバーによって異なります。SELinux
- SELinux のコンテキストです。AppArmor
- AppArmor プロファイル。DAC
- 所有者とグループをコロンで区切ります。ユーザー/グループ名または uid/gid の両方として定義できます。ドライバーはまずこれらの値を名前として解析しようとしますが、先頭にあるプラス記号を使用すると、ドライバーが値を uid または gid として解析するように強制できます。
<baselabel>
- 動的ラベル付けを使用する場合は、ベースセキュリティーラベルを指定するためにオプションで使用できます。コンテンツの形式は、使用されているセキュリティードライバーによって異なります。<imagelabel>
- 出力専用の要素です。仮想ドメインに関連付けられたリソースで使用されるセキュリティーラベルを示します。コンテンツの形式は、使用しているセキュリティードライバーによって異なります。再ラベル付けが有効な場合、ラベル付けを無効にすることで、特定のソースファイル名に対して行われるラベル付けを微調整することもできます (ファイルが NFS またはその他に存在する場合に便利です)。セキュリティーラベル付けがないファイルシステム) または代替ラベルの要求 (管理アプリケーションがドメイン間ですべてではないが一部のリソースを共有できるようにする特別なラベルを作成する場合に便利です)。seclabel 要素がトップレベルドメイン割り当てではなく特定のパスに割り当てられている場合は、属性の relabel または sub-element ラベルのみがサポートされます。
20.21. ドメイン XML 設定の例
図20.70 ドメイン XML 設定の例
<domain type='qemu'> <name>QEmu-fedora-i686</name> <uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid> <memory>219200</memory> <currentMemory>219200</currentMemory> <vcpu>2</vcpu> <os> <type arch='i686' machine='pc'>hvm</type> <boot dev='cdrom'/> </os> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='file' device='cdrom'> <source file='/home/user/boot.iso'/> <target dev='hdc'/> <readonly/> </disk> <disk type='file' device='disk'> <source file='/home/user/fedora.img'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> </interface> <graphics type='vnc' port='-1'/> </devices> </domain>
図20.71 ドメイン XML 設定の例
<domain type='kvm'> <name>demo2</name> <uuid>4dea24b3-1d52-d8f3-2516-782e98a23fa0</uuid> <memory>131072</memory> <vcpu>1</vcpu> <os> <type arch="i686">hvm</type> </os> <clock sync="localtime"/> <devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <source file='/var/lib/libvirt/images/demo2.img'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> <mac address='24:42:53:21:52:45'/> </interface> <graphics type='vnc' port='-1' keymap='de'/> </devices> </domain>
第21章 トラブルシューティング
21.1. デバッグおよびトラブルシューティングツール
- kvm_stat - 参照 「kvm_stat」
- trace-cmd
- ftrace 『Red Hat Enterprise Linux 開発者ガイド』を参照してください。
- vmstat
- iostat
- lsof
- systemtap
- crash
- sysrq
- sysrq t
- sysrq w
- ifconfig
- tcpdumptcpdump コマンドは、ネットワークパケットをスニッフィングします。tcpdump は、ネットワーク異常やネットワーク認証の問題を見つける際に役立ちます。tcpdump のグラフィカルバージョンでは、wireshark という名前のグラフィカルバージョンがあります。
- brctlbrctlは、Linux カーネル内のイーサネットブリッジ設定を検証して設定するネットワークツールです。次のコマンド例を実行する前に、root アクセス権が必要です。
# brctl show bridge-name bridge-id STP enabled interfaces ----------------------------------------------------------------------------- virtbr0 8000.feffffff yes eth0 # brctl showmacs virtbr0 port-no mac-addr local? aging timer 1 fe:ff:ff:ff:ff: yes 0.00 2 fe:ff:ff:fe:ff: yes 0.00 # brctl showstp virtbr0 virtbr0 bridge-id 8000.fefffffffff designated-root 8000.fefffffffff root-port 0 path-cost 0 max-age 20.00 bridge-max-age 20.00 hello-time 2.00 bridge-hello-time 2.00 forward-delay 0.00 bridge-forward-delay 0.00 aging-time 300.01 hello-timer 1.43 tcn-timer 0.00 topology-change-timer 0.00 gc-timer 0.02
- strace は、システムコールと、別のプロセスが受信して使用したイベントを追跡するコマンドです。
- vncviewer は、サーバーまたは仮想マシンで実行している VNC サーバーに接続します。yum install tigervnc を使用して vncviwer をインストールします。
- vncserver は、サーバーでリモートデスクトップを起動します。リモートセッションを介して、virt-manager などのグラフィカルユーザーインターフェイスを実行できます。yum install tigervnc-server を使用して vncserver をインストールします。
21.2. ディザスターリカバリーの準備
/etc/libvirt
ディレクトリーからのすべてのファイル。/var/lib/libvirt
ディレクトリーから、以下の項目をバックアップします。/var/lib/libvirt/dnsmasq
にある現在の dnsmasqDHCP リース/var/lib/libvirt/network
にある実行中の仮想ネットワーク設定ファイル- ゲストの現在の状態を保存するときに virt-manager によって作成されるゲスト仮想マシンファイル (存在する場合)。これらは
/var/lib/libvirt/qemu/save/
ディレクトリーにあります。virsh save command を使用して仮想マシンを作成した場合、ファイルは、ユーザーが virsh save 用に指定した場所にあります。 - qemu-img create および virsh snapshot-create コマンドによって作成され、ユーザーがコマンドに指定した場所にあるゲスト仮想マシンのスナップショットファイル。
- virt-manager によって作成されたゲスト仮想マシンのディスクイメージ (存在する場合)。これは、
/var/lib/libvirt/images/
ディレクトリーにあります。virsh pool-define コマンドを使用して仮想ストレージを作成した場合、イメージファイルはユーザーが virsh pool-define に指定した場所にあります。ゲストイメージファイルをバックアップする方法については、次の手順で説明されている手順を使用してください。手順21.1「ディザスターリカバリーの目的でゲスト仮想マシンのディスクイメージのバックアップを作成する」。
- ブリッジを使用している場合は、
/etc/sysconfig/network-scripts/ifcfg-<bridge_name>
にあるファイルもバックアップする必要があります。 - オプションで、
/var/lib/libvirt/qemu/dump
にあるゲスト仮想マシンのコアダンプファイルをバックアップして、障害の原因を分析するために使用することもできます。ただし、一部のシステムでは、これらのファイルが非常に大きくなる可能性があることに注意してください。
手順21.1 ディザスターリカバリーの目的でゲスト仮想マシンのディスクイメージのバックアップを作成する
- ゲスト仮想マシンのディスクイメージのみをバックアップするには、
/var/lib/libvirt/images
にあるファイルをバックアップします。LVM 論理ボリュームを使用してゲスト仮想マシンのディスクイメージをバックアップするには、次のコマンドを実行します。# lvcreate --snapshot --name snap --size 8G /dev/vg0/data
このコマンドは、64G ボリュームの一部として 8G のサイズの snap という名前のスナップショットボリュームを作成します。 - 次のようなコマンドを使用して、スナップショットのファイルを作成します。
# mkdir /mnt/virt.snapshot
- 次のコマンドを使用して、作成したディレクトリーとスナップショットボリュームをマウントします。
# mount /dev/vg0/snap /mnt/virt.snapshot
- 次のいずれかのコマンドを使用して、ボリュームをバックアップします。
# tar -pzc -f /mnt/backup/virt-snapshot-MM-DD-YYYY.tgz /mnt/virt.snapshot++++++++++++
# rsync -a /mnt/virt.snapshot/ /mnt/backup/virt-snapshot.MM-DD-YYYY/
21.3. virsh ダンプファイルの作成
#virsh dump <domain> <corefilepath> [--bypass-cache] { [--live] | [--crash] | [--reset] } [--verbose] [--memory-only]
- --live は、実行中のマシンにダンプファイルを作成し、一時停止しません。
- --crash はゲスト仮想マシンを停止し、ダンプファイルを生成します。主な違いは、ゲスト仮想マシンが停止として表示されず、理由がクラッシュしたことです。virt-manager では、ステータスが一時停止として表示されることに注意してください。
- --reset は、ダンプが成功した後にゲスト仮想マシンをリセットします。これらの 3 つのスイッチは相互に排他的であることに注意してください。
- --bypass-cache は、O_DIRECT を使用してファイルシステムキャッシュをバイパスします。
- --memory-only ダンプファイルは elf ファイルとして保存され、ドメインのメモリーと cpu の一般的なレジスター値のみが含まれます。このオプションは、ドメインがホストデバイスを直接使用する場合に非常に役立ちます。
- --verbose - ダンプの進捗を表示します。
21.4. kvm_stat
kvm
カーネルモジュールからランタイム統計を取得する python スクリプトです。kvm_stat コマンドは、kvm
に表示されるゲストの動作を診断するために使用できます。特に、ゲストのパフォーマンスに関連する問題です。現在、報告されている統計はシステム全体を対象としており、実行中のすべてのゲストの動作が報告されます。このスクリプトを実行するには、qemu-kvm-tools パッケージをインストールする必要があります。
kvm
カーネルモジュールが読み込まれ、debugfs がマウントされている必要があります。上記のいずれかの機能が有効になっていない場合は、debugfs または kvm
モジュールを有効にするために必要な手順が表示されます。以下に例を示します。
# kvm_stat Please mount debugfs ('mount -t debugfs debugfs /sys/kernel/debug') and ensure the kvm modules are loaded
# mount -t debugfs debugfs /sys/kernel/debug
kvm_stat 出力
kvm_stat コマンドは、すべてのゲストとホストの統計情報を出力します。(Ctrl+c または q を使用して) コマンドが終了するまで、出力は更新されます。
# kvm_stat kvm statistics efer_reload 94 0 exits 4003074 31272 fpu_reload 1313881 10796 halt_exits 14050 259 halt_wakeup 4496 203 host_state_reload 1638354 24893 hypercalls 0 0 insn_emulation 1093850 1909 insn_emulation_fail 0 0 invlpg 75569 0 io_exits 1596984 24509 irq_exits 21013 363 irq_injections 48039 1222 irq_window 24656 870 largepages 0 0 mmio_exits 11873 0 mmu_cache_miss 42565 8 mmu_flooded 14752 0 mmu_pde_zapped 58730 0 mmu_pte_updated 6 0 mmu_pte_write 138795 0 mmu_recycled 0 0 mmu_shadow_zapped 40358 0 mmu_unsync 793 0 nmi_injections 0 0 nmi_window 0 0 pf_fixed 697731 3150 pf_guest 279349 0 remote_tlb_flush 5 0 request_irq 0 0 signal_exits 1 0 tlb_flush 200190 0
変数の説明
- efer_reload
- 拡張機能イネーブルレジスタ (EFER) のリロードの数。
- 終了
- すべての
VMEXIT
呼び出しの数。 - fpu_reload
VMENTRY
が FPU の状態を再読み込みした回数。ゲストが浮動小数点ユニット (FPU) を使用している場合、fpu_reload は増分されます。- halt_exits
halt
呼び出しによるゲストの終了数。通常、このタイプの終了は、ゲストがアイドル状態になると表示されます。- halt_wakeup
halt
からのウェイクアップの数。- host_state_reload
- ホスト状態の完全なリロードの数 (現時点では tallies MSR 設定およびゲスト MSR 読み込み)。
- ハイパーコール
- ゲストハイパーバイザーサービス呼び出しの数。
- insn_emulation
- ホストによってエミュレートされたゲスト命令の数。
- insn_emulation_fail
insn_emulation
の試行に失敗した回数。- io_exits
- I/O ポートアクセスから終了するゲストの数。
- irq_exits
- 外部割り込みによるゲストの終了回数。
- irq_injections
- ゲストに送信された割り込みの数。
- irq_window
- 未処理の割り込みウィンドウから終了するゲストの数。
- ラージページ
- 現在使用中の大きなページの数。
- mmio_exits
- メモリーマップ I/O(MMIO) アクセスにより、ゲストが終了する回数。
- mmu_cache_miss
- 作成された KVM MMU シャドウページの数。
- mmu_flooded
- MMU ページへの過剰な書き込み操作の検出数。これは、個々の書き込み操作ではなく、検出された書き込み操作をカウントします。
- mmu_pde_zapped
- ページディレクトリーエントリー (PDE) 破棄操作の数。
- mmu_pte_updated
- ページテーブルエントリー (PTE) 破棄操作の数。
- mmu_pte_write
- ゲストページテーブルエントリー (PTE) の書き込み操作の数。
- mmu_recycled
- 再利用できるシャドウページの数。
- mmu_shadow_zapped
- 無効化されたシャドウページの数。
- mmu_unsync
- まだリンクが解除されていない同期されていないページの数。
- nmi_injections
- ゲストへのマスク不可割り込み (NMI) インジェクションの数。
- nmi_window
- (未処理の) マスク不可割り込み (NMI) ウィンドウからのゲストの終了回数。
- pf_fixed
- 固定 (非ページング) ページテーブルエントリー (PTE) マップの数。
- pf_guest
- ゲストに挿入されたページフォールトの数。
- remote_tlb_flush
- リモート (sibling CPU) トランスレーションルックアサイドバッファー (TLB) フラッシュ要求の数。
- request_irq
- ゲスト割り込みウィンドウ要求が終了する数。
- signal_exits
- ホストからの保留中の信号によってゲストが終了する回数。
- tlb_flush
- ハイパーバイザーが実行する
tlb_flush
操作の数。
/sys/kernel/debug/kvm/
ディレクトリーにある疑似ファイルとしてエクスポートされます。
21.5. ゲスト仮想マシンのシャットダウンに失敗する
手順21.2 ゲスト仮想マシンでのゲストエージェントチャネルの設定
- ゲスト仮想マシンを停止します。
- ゲスト仮想マシンの ドメイン XML を開き、以下のスニペットを追加します。
図21.1 ゲストエージェントチャネルの設定
<channel type='unix'> <source mode='bind'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
- virsh start [domain] を実行して、ゲスト仮想マシンを起動します。
- ゲスト仮想マシン (yum install qemu-guest-agent) に qemu-guest-agent をインストールし、システムの起動時にサービス (qemu-guest-agent.service) として自動的に実行されるようにします。詳細は、10章qemu-img および QEMU ゲストエージェント を参照してください。
21.6. シリアルコンソールのトラブルシューティング
- 出力データは削除またはスクラブルされます。
ttyS0
、Windows では COM1
と呼ばれます。
/boot/grub/grub.conf
ファイルを変更します。kernel
の行に console=tty0 console=ttyS0,115200
を追加します。
title Red Hat Enterprise Linux Server (2.6.32-36.x86-64)
root (hd0,0)
kernel /vmlinuz-2.6.32-36.x86-64 ro root=/dev/volgroup00/logvol00 \
console=tty0 console=ttyS0,115200
initrd /initrd-2.6.32-36.x86-64.img
# virsh console
21.7. 仮想化ログファイル
- 完全に仮想化された各ゲストログは、
/var/log/libvirt/qemu/
ディレクトリーにあります。各ゲストログは GuestName.log という名前で、サイズ制限に達すると定期的に圧縮されます。
21.8. ループデバイスエラー
/etc/modprobe.d/
ディレクトリーで調整できます。以下の行を追加します。
options loop max_loop=64
21.9. ライブマイグレーションエラー
21.10. BIOS での Intel VT-x および AMD-V Virtualization ハードウェア拡張の有効化
手順21.3 BIOS での仮想化拡張機能の有効化
- コンピューターを再起動し、システムの BIOS メニューを開きます。通常、これは delete キー、F1 キー、または Alt キーと F4 キーを押して実行できます。
BIOS での仮想化拡張機能の有効化
注記以下の手順の多くは、使用しているマザーボード、プロセッサーのタイプ、チップセット、および OEM により異なる場合があります。システムの設定に関する正しい情報は、お使いのシステムの付随するドキュメントを参照してください。- Processor サブメニューを開きます。プロセッサー設定メニューは、Chipset、Chipset、または Northbridge で非表示にすることができます。
- Intel Virtualization Technology を有効にします (Intel VT-x としても知られています)。AMD-V 拡張機能は、BIOS では無効にできないため、事前に有効にしておく必要があります。仮想化拡張機能は、OEM やシステム BIOS によっては、Virtualization Extensions、Vanderpool、またはその他の名前にラベルが付けられている場合があります。
- オプションが利用できる場合は、Intel VT-d または AMD IOMMU を有効にします。PCI デバイスの割り当てには、Intel VT-d および AMD IOMMU を使用します。
- Save & Exitを選択します。
- マシンを再起動します。
- マシンが起動したら、cat /proc/cpuinfo |grep -E "vmx|svm" を実行します。
--color
の指定は任意ですが、検索用語を強調表示したい場合は便利です。コマンドが出力すると、仮想化拡張機能が有効になります。出力がない場合は、システムの仮想化拡張機能や、正しい BIOS 設定が有効になっていない可能性があります。
21.11. KVM ネットワークパフォーマンス
e1000
) ドライバーも、エミュレートされたドライバーとしてサポートされていることに注意してください。e1000
ドライバーを使用するには、以下の手順の virtio
を e1000
に置き換えます。最適なパフォーマンスを得るには、virtio
ドライバーを使用することを推奨します。
手順21.4 virtio ドライバーへの切り替え
- ゲストオペレーティングシステムをシャットダウンします。
- virsh コマンドでゲストの設定ファイルを編集します (
GUEST
はゲストの名前です)。# virsh edit
GUEST
virsh edit コマンドは、$EDITOR シェル変数を使用して、使用するエディターを決定します。 - 設定のネットワークインターフェイスセクションを見つけます。このセクションは、以下のスニペットと似ています。
<interface type='network'> [output truncated] <model type='rtl8139' /> </interface>
- model 要素の type 属性を
'rtl8139'
から'virtio'
に変更します。これにより、ドライバーが rtl8139 ドライバーから e1000 ドライバーに変更されます。<interface type='network'> [output truncated] <model type=
'virtio'
/> </interface> - 変更を保存し、テキストエディターを終了します。
- ゲストオペレーティングシステムを再起動します。
その他のネットワークドライバーを使用した新しいゲストの作成
別のネットワークドライバーを使用して、新しいゲストを作成することもできます。ネットワーク接続でゲストをインストールするのが困難な場合に必要になることがあります。この方法では、テンプレートとして使用するために、少なくとも 1 つのゲストが作成されている (CD または DVD からインストールされている可能性あり) 必要があります。
- 既存のゲスト (この例では Guest1) から XML テンプレートを作成します。
# virsh dumpxml Guest1 > /tmp/guest-template.xml
- XML ファイルをコピーして編集し、一意のフィールド (仮想マシン名、UUID、ディスクイメージ、MAC アドレス、およびその他の一意のパラメーター) を更新します。UUID および MAC アドレス行を削除できることに注意してください。virsh を実行すると、UUID と MAC アドレスが生成されます。
# cp /tmp/guest-template.xml /tmp/new-guest.xml # vi /tmp/new-guest.xml
ネットワークインターフェイスセクションにモデル行を追加します。<interface type='network'> [output truncated] <model type='virtio' /> </interface>
- 新しい仮想マシンを作成します。
# virsh define /tmp/new-guest.xml # virsh start new-guest
21.12. libvirt を使用して外部スナップショットを作成するための回避策
21.13. 日本語キーボードを使用したゲストコンソールでの文字の欠落
atkdb.c: Unknown key pressed (translated set 2, code 0x0 on isa0060/serio0). atkbd.c: Use 'setkeycodes 00 <keycode>' to make it known.
- 影響を受けるゲストを virt-manager で開きます。
- View → Details をクリックします。
- 一覧で Display VNC を選択します。
- Keymap プルダウンメニューで、Auto を ja に変更します。
- Apply ボタンをクリックします。
- virsh edit <target guest> を実行します。
- <graphics> タグに以下の属性を追加します。keymap='ja'。以下に例を示します。
<graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>
21.14. 仮想化拡張機能の検証
- 次のコマンドを実行して、CPU 仮想化拡張機能が利用可能であることを確認します。
$ grep -E 'svm|vmx' /proc/cpuinfo
- 出力を分析します。
- 以下の出力には、Intel VT-x 拡張機能が含まれる Intel プロセッサーを示す
vmx
エントリーが含まれます。flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
- 以下の出力には、AMD-V 拡張機能が含まれる AMD プロセッサーを示す
svm
エントリーが含まれます。flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8legacy ts fid vid ttp tm stc
出力を受信した場合、プロセッサーにはハードウェア仮想化拡張機能があります。ただし、状況によっては、製造元が BIOS で仮想化拡張機能を無効にする場合があります。flags:
出力コンテンツは、システム上のハイパースレッド、コア、または CPU ごとに 1 回ずつ、複数回表示される場合があります。BIOS で仮想化拡張機能を無効にすることができます。拡張機能が表示されない場合、または完全仮想化が機能しない場合は、手順21.3「BIOS での仮想化拡張機能の有効化」 を参照してください。 KVM サブシステムがロードされていることを確認します
追加のチェックとして、kvm
モジュールがカーネルに読み込まれていることを確認します。# lsmod | grep kvm
出力にkvm_intel
またはkvm_amd
が含まれる場合は、kvm
ハードウェア仮想化モジュールが読み込まれ、システムが要件を満たしています。
付録A 仮想ホストメトリクスデーモン (vhostmd)
付録B 関連情報
B.1. オンラインリソース
- http://www.libvirt.org/ は、libvirt 仮想化 API の公式 Web サイトです。
- https://virt-manager.org/ は、仮想マシンを管理するグラフィカルアプリケーションである Virtual Machine Manager (virt-manager) のプロジェクトの Web サイトです。
- Red Hat Virtualization - http://www.redhat.com/products/cloud-computing/virtualization/
- Red Hat 製品ドキュメント - https://access.redhat.com/documentation/en/
- 仮想化テクノロジーの概要 - http://virt.kernelnewbies.org
B.2. インストールされているドキュメント
- man virsh および
/usr/share/doc/libvirt-<version-number>
- virsh 仮想マシン管理ユーティリティーのサブコマンドとオプション、およびlibvirt
仮想ライブラリー API の包括的な情報が含まれます。 /usr/share/doc/gnome-applet-vm-<version-number>
- ローカルで実行している仮想マシンを監視および管理する GNOME グラフィカルパネルアプレットのドキュメント。/usr/share/doc/libvirt-python-<version-number>
-libvirt
ライブラリーの Python バインディングの詳細を説明します。libvirt-python
パッケージにより、python の開発者は、libvirt
仮想化管理ライブラリーとインターフェイスするプログラムを作成できます。/usr/share/doc/python-virtinst-<version-number>
- 仮想マシン内で Fedora および Red Hat Enterprise Linux 関連のディストリビューションのインストールを開始する際に役に立つ、virt-install コマンドに関するドキュメントを提供します。/usr/share/doc/virt-manager-<version-number>
- Virtual Machine Manager に関するドキュメントを提供します。このドキュメントは、仮想マシンを管理するグラフィカルツールを提供します。
付録C 更新履歴
改訂履歴 | |||
---|---|---|---|
改訂 1-502 | Mon Mar 08 2017 | Jiri Herrmann | |
| |||
改訂 1-501 | Mon May 02 2016 | Jiri Herrmann | |
| |||
改訂 1-500 | Thu Mar 01 2016 | Jiri Herrmann | |
| |||
改訂 1-449 | Thu Oct 08 2015 | Jiri Herrmann | |
| |||
改訂 1-447 | Fri Jul 10 2015 | Dayle Parker | |
|