R ed H a t E n t er p r i s e L i n u x 6 仮想化管理ガイド 仮想環境を管理する Laura Novich Scott Radvan Dayle Parker Red Hat Enterprise Linux 6 仮想化管理ガイド 仮想環境を管理する Laura Novich Red Hat Customer Content Services [email protected] Scott Radvan Red Hat Customer Content Services [email protected] Dayle Parker Red Hat Customer Content Services [email protected] 法律上の 通知 Copyrig ht © 2015 Red Hat, Inc. This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the orig inal. If the document is modified, all Red Hat trademarks must be removed. Red Hat, as the licensor of this document, waives the rig ht to enforce, and ag rees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman log o, JBoss, MetaMatrix, Fedora, the Infinity Log o, and RHCE are trademarks of Red Hat, Inc., reg istered in the United States and other countries. Linux ® is the reg istered trademark of Linus Torvalds in the United States and other countries. Java ® is a reg istered trademark of Oracle and/or its affiliates. XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL ® is a reg istered trademark of MySQL AB in the United States, the European Union and other countries. Node.js ® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project. The OpenStack ® Word Mark and OpenStack Log o are either reg istered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community. All other trademarks are the property of their respective owners. 概要 仮想化管理ガイドでは、ホスト物理マシン、ネットワーク構築、ストレージ、デバイスなどの管理、ゲスト仮想マ シン管理、およびトラブルシューティングについて解説しています。 目次 目次 . . 1章 第 . . .は. じ. め . に . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . 1.1. Virtualiz atio n ドキュメントスイート 12 . . 2. 章. .サ. ーバ 第 . . .ーの . . ベ . .ス. トプラ . . . ク . .ティ . . ス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 . . . . . . . . . . 3. 章. .仮. 想 第 . 化 . . の. セキ . . .ュ. リ. ティ . .ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 . . . . . . . . 3 .1. ストレージのセキュリティーに関する問題 14 3 .2. S ELinux と仮想化 14 3 .3. S ELinux 16 3 .4. 仮想化のファイアウォール情報 16 . . 4. 章. .s .Vi. r .t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 第 . . . . . . . . 4 .1. セキュリティーと仮想化 19 4 .2. s Virt のラベル 19 . . 5. 章. .K.VM 第 . . の . .ラ. イ. ブ . マ . .イ.グ. レーシ . . . .ョ.ン. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. 1. . . . . . . 5 .1. ライブマイグレーションの要件 21 5 .2. ライブマイグレーションと Red Hat Enterpris e Linux バージョンの互換性 23 5 .3. 共有ストレージの例: NFS を使用した単純な移行 23 5 .4. virs h を使用した KVM のライブマイグレーション 25 5 .4.1. virs h を使用した移行に関するヒント 27 5 .4.2. virs h mig rate コマンドのオプション 28 5 .5. virt-manag er を使用した移行 29 . . 6. 章. .ゲス 第 . . トの . . .リ.モ. ート管 . . . .理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. 6. . . . . . . 6 .1. S S H によるリモート管理 36 6 .2. T LS と S S L 経由のリモート管理 38 6 .3. トランスポートモード 41 . . 7章 第 . . .K .VM . . での . . . オ. ーバ . . .ーコ . .ミ . ット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 5. . . . . . . 7.1. はじめに 45 7.2. 仮想化 CPU のオーバーコミット 46 . . 8. 章. .K.S.M. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 8. . . . . . . 第 . . 9. 章. .ゲス 第 . . ト仮 . . .想. マ. シ . ン . .の. 高 . 度 . . な. 管 . .理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. 2. . . . . . . 9 .1. コントロールグループ (cg ro up) 9 .2. Hug e pag e のサポート 9 .3. Hyper-V ハイパーバイザー上で Red Hat Enterpris e Linux をゲスト仮想マシンとして実行する 9 .4. ゲスト仮想マシンのメモリー割り当て 9 .5. ゲスト仮想マシンを自動的に起動する 9 .6. ゲスト仮想マシンの S MART ディスクモニタリングを無効にする 9 .7. VNC サーバーを設定する 9 .8. 固有の MAC アドレスを新たに生成する 9 .8.1. ゲスト仮想マシンの新しい MAC を作成する別の方法 9 .9. ゲスト仮想マシンのレスポンスタイムを改善する 9 .10. libvirt による仮想マシンのタイマー管理 9 .10.1. timer は clo ck の子要素です。 9 .10.2. track 9 .10.3. tickpo licy 9 .10.4. frequency、mo de、および pres ent 9 .10.5. クロック同期を使用した例 9 .11. PMU を使用してゲスト仮想マシンのパフォーマンスを監視する 9 .12. ゲスト仮想マシンの電力管理 52 52 53 53 54 55 55 55 55 56 57 58 58 59 59 59 60 60 1 仮 想 化 管 理 ガイ ド . . 10 第 . .章. .ゲス . . ト仮 . . 想 . . マ. シ . ン . .デ. バ . イ . ス . .の. 設 . 定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. 2. . . . . . . 10.1. PCI デバイス 10.1.1. virs h を使用した PCI デバイスの割り当て 10.1.2. virt-manag er を使用した PCI デバイスの割り当て 10.1.3. virt-ins tall を使用した PCI デバイスの割り当て 10.1.4. 割り当てた PCI デバイスの切り離し 10.1.5. PCI ブリッジの作成 10.1.6. PCI パススルー 10.1.7. S R-IO V デバイスの場合の PCI 割り当て (パススルー) の設定 10.1.8. S R-IO V 仮想機能のプールから PCI デバイス割り当てを設定する 10.2. US B デバイス 10.2.1. ゲスト仮想マシンへの US B デバイスの割り当て 10.2.2. US B デバイスのリダイレクトに制限を設ける 10.3. デバイスコントローラーの設定 10.4. デバイスのアドレス設定 10.5. ゲスト仮想マシンのストレージコントローラーの管理 10.6. 乱数ジェネレーター (RNG) デバイス 63 64 67 70 72 74 74 75 77 79 79 80 81 84 85 86 . . 11章 第 . . . Q . .E.M. U. - .i m . g. . および . . . . Q. E. M . U . . ゲス . . .トエージ . . . . ェ . ン . .ト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. 8. . . . . . . 11.1. qemu-img の使い方 88 11.2. Q EMU ゲストエージェント 93 11.2.1. ゲストエージェントのインストールおよび有効化 11.2.2. ゲストエージェントとホスト間の通信設定 93 93 11.2.3. Q EMU ゲストエージェントの使用 11.2.4. libvirt による Q EMU ゲストエージェントの使用 94 94 1.2.5. ゲスト仮想マシンディスクバックアップの作成 1 11.3. Windo ws ゲスト上での Q EMU ゲストエージェントの実行 11.3.1. Windo ws ゲスト上での Q EMU ゲストエージェントにおける libvirt コマンドの使用 11.4. デバイスのリダイレクトに制限を設ける 11.5. 仮想 NIC に接続しているネットワークブリッジまたはホスト物理マシンを動的に変更する 95 96 99 99 100 . . 12 第 . .章. .ス. トレージ . . . . の . . 概. 念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 . . 2. . . . . . . 12.1. ストレージプール 102 12.2. ボリューム 103 . . 13 第 . .章. .ス. トレージ . . . . プール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 . . 5. . . . . . . 13.1. ディスクベースのストレージプール 13.1.1. virs h でディスクベースのストレージプールを作成する 105 106 13.1.2. virs h を使ってストレージプールを削除する 13.2. パーティションベースのストレージプール 13.2.1. virt-manag er を使用してパーティションベースのストレージプールを作成する 108 108 108 13.2.2. virt-manag er を使用してストレージプールを削除する 13.2.3. virs h を使用したパーティションベースのストレージプールの作成 13.2.4. virs h を使用してストレージプールを削除する 13.3. ディレクトリーベースのストレージプール 13.3.1. virt-manag er を使用したディレクトリーベースのストレージプール作成 13.3.2. virt-manag er を使用したストレージプールの削除 13.3.3. virs h を使用したディレクトリーベースのストレージプールの作成 13.3.4. virs h を使用したストレージプールの削除 13.4. LVM ベースのストレージプール 2 112 112 114 115 115 118 119 121 121 13.4.1. virt-manag er を使用した LVM ベースのストレージプールの作成 13.4.2. virt-manag er を使用したストレージプールの削除 122 127 13.4.3. virs h を使用した LVM ベースのストレージプールの作成 13.4.4. virs h を使用したストレージプールの削除 127 129 目次 13.4.4. virs h を使用したストレージプールの削除 13.5. iS CS I ベースのストレージプール 13.5.1. ソフトウェア iS CS I ターゲットの設定 13.5.2. virt-manag er に iS CS I ターゲットを追加する 13.5.3. virt-manag er を使用したストレージプールの削除 13.5.4. virs h を使用した iS CS I ベースのストレージプールの作成 13.5.5. virs h を使用したストレージプールの削除 13.6. NFS ベースのストレージプール 13.6.1. virt-manag er を使用した NFS ベースストレージプールの作成 13.6.2. virt-manag er を使用したストレージプールの削除 129 129 129 133 136 137 139 139 139 142 13.7. Glus terFS ストレージプール 13.7.1. virs h を使用した Glus terFS ストレージプールの作成 143 143 13.7.2. virs h を使用した Glus terFS ストレージプールの削除 13.8. S CS I デバイスで NPIV 仮想アダプター (vHBA) を使用する 145 145 13.8.1. vHBA の作成 13.8.2. vHBA を使用してストレージプールを作成する 145 147 13.8.3. 仮想マシンが vHBA LUN を使用するよう設定する 13.8.4. vHBA ストレージプールの破棄 149 149 . . 14 第 . .章. .ボリ . . ュ. ーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 . . 1. . . . . . . 14.1. ボリュームの作成 14.2. ボリュームのクローン作成 151 151 14.3. ゲストにストレージデバイスを追加する 14.3.1. ゲストにファイルベースのストレージを追加する 152 152 14.3.2. ゲストにハードドライブと他のブロックデバイスを追加する 14.4. ボリュームの消去と削除 155 156 . . 15 第 . .章. .v i. r s. h . .を. 使 . 用 . .し. たゲス . . . .ト仮 . .想 . マ . .シ. ン. の . 管 . . 理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 . . 8. . . . . . . 15.1. 一般的なコマンド 15.1.1. help 158 158 15.1.2. quit と exit 15.1.3. vers io n 159 159 15.1.4. 引数の表示 15.1.5. co nnect 159 159 15.1.6. 基本的な情報の表示 15.1.7. NMI の挿入 160 160 15.2. 15.3. 15.4. 15.5. virs h を使ったデバイスの割り当てと更新 インターフェースデバイスの割り当て CDRO M メディアの変更 ドメインコマンド 160 161 161 162 15.5.1. 起動時に自動的に起動するようにドメインを設定 15.5.2. ゲスト仮想マシンのシリアルコンソールの接続 15.5.3. XML ファイルによるドメインの定義 15.5.4. ドメインの説明またはタイトルの編集および表示 162 162 162 162 15.5.5. デバイスブロック統計の表示 15.5.6. ネットワーク統計の取得 15.5.7. ドメインの仮想インターフェースのリンク状態の変更 15.5.8. ドメインの仮想インターフェースのリンク状態の一覧表示 15.5.9. ネットワークインターフェース帯域幅パラメーターの設定 163 163 163 164 164 15.5.10. 実行中ドメインのメモリー統計の取得 15.5.11. ブロックデバイスのエラーの表示 15.5.12. ブロックデバイス容量の表示 15.5.13. ドメインに関連付けられたブロックデバイスの表示 164 165 165 165 15.5.14. ドメインに関連付けられた仮想インターフェースの表示 165 3 仮 想 化 管 理 ガイ ド 15.5.14. ドメインに関連付けられた仮想インターフェースの表示 15.5.15. blo ckco mmit を使用したバッキングチェーンの短縮化 15.5.16. blo ckpull を使用したバッキングチェーンの短縮化 15.5.17. blo ckres iz e を使用したドメインパスのサイズ変更 15.5.18. ライブブロックコピーによるディスクイメージの管理 165 165 166 167 168 15.5.19. グラフィカル表示への接続用の URI の表示 15.5.20. ドメイン検索コマンド 15.5.21. Q EMU 引数のドメイン XML への変換 15.5.22. ドメインのコアのダンプファイルの作成 169 169 170 171 15.5.23. 仮想マシンの XML ダンプの作成 (設定ファイル) 15.5.24. 設定ファイルでのゲスト仮想マシンの作成 15.6. ゲスト仮想マシンの設定ファイルの編集 15.6.1. 多機能 PCI デバイスを KVM ゲスト仮想マシンに追加する 15.6.2. 15.6.3. 15.6.4. 15.6.5. 15.6.6. 後に再起動するために実行中のドメインを停止する 指定されたドメインについての CPU 統計の表示 スクリーンショットの保存 キーストロークの組み合わせの指定されたドメインへの送信 プロセスのシグナル名を仮想プロセスに送信 5.6.7. VNC ディスプレイの IP アドレスとポート番号の表示 1 15.7. NUMA ノードの管理 15.7.1. ノード情報の表示 15.7.2. NUMA パラメーターの設定 174 174 175 175 176 176 176 176 176 15.7.3. NUMA セルの空きメモリー容量の表示 15.7.4. CPU 一覧の表示 15.7.5. CPU 統計の表示 15.7.6. ホスト物理マシンの一時停止 15.7.7. ノードメモリーパラメーターの設定 177 177 177 177 178 15.7.8. ホストノード上のデバイスの作成 15.7.9. ノードデバイスの切り離し 15.7.10. デバイスを設定の検索 15.7.11. ノード上デバイスの一覧表示 178 178 178 178 15.7.12. ノードのリセットのトリガー 15.8. ゲスト仮想マシンの起動、一時停止、再開、保存および復元 15.8.1. 定義されたドメインの起動 15.8.2. ゲスト仮想マシンの一時停止 15.8.3. 実行中のドメインの一時停止 4 171 173 173 173 179 179 179 179 180 15.8.4. pms us pend 状態のドメインを起動 15.8.5. ドメインの定義解除 15.8.6. ゲスト仮想マシンの再開 15.8.7. ゲスト仮想マシンの保存 180 180 180 181 15.8.8. ゲストの復元に使用されるドメイン XML ファイルの更新 15.8.9. ドメイン XML ファイルの抽出 15.8.10. ドメイン XML 設定ファイルの編集 15.8.11. ゲスト仮想マシンの復元 181 181 181 182 15.9. ゲスト仮想マシンのシャットダウン、再起動および強制終了 15.9.1. ゲスト仮想マシンのシャットダウン 15.9.2. Red Hat Enterpris e Linux 7 ホスト上の Red Hat Enterpris e Linux 6 ゲストのシャットダウン 15.9.3. libvirt-g ues ts 設定の設定内容の操作 15.9.4. ゲスト仮想マシンの再起動 182 182 182 185 187 15.9.5. ゲスト仮想マシンの強制終了 15.9.6. 仮想マシンのリセット 15.10. ゲスト仮想マシン情報の取り込み 15.10.1. ゲスト仮想マシンのドメイン ID の取得 187 187 187 187 15.10.2. ゲスト仮想マシンのドメイン名の取得 188 目次 15.10.2. ゲスト仮想マシンのドメイン名の取得 15.10.3. ゲスト仮想マシンの UUID の取得 15.10.4. ゲスト仮想マシン情報の表示 15.11. ストレージプールコマンド 15.11.1. ストレージプール XML の検索 188 188 188 188 189 15.11.2. ストレージプールの作成、定義、および開始 15.11.2.1. ストレージプールの構築 15.11.2.2. XML ファイルからのストレージプールの作成および定義 15.11.2.3. raw パラメーターからのストレージプールの作成および開始 189 189 189 190 15.11.2.4. ストレージの自動起動 15.11.3. ストレージプールの停止および削除 15.11.4. プール用の XML ダンプファイルの作成 15.11.5. ストレージプールの設定ファイルの編集 15.11.6. ストレージプールの変換 190 190 190 190 191 15.12. ストレージボリュームコマンド 15.12.1. ストレージボリュームの作成 15.12.1.1. XML ファイルからのストレージボリュームの作成 15.12.1.2. ストレージボリュームのクローン作成 15.12.2. 15.12.3. 15.12.4. 15.12.5. 15.12.6. ストレージボリュームの削除 ストレージボリューム情報の XML ファイルへのダンプ ボリューム情報の一覧表示 ストレージボリューム情報の取得 ストレージボリュームのアップロードおよびダウンロード 15.12.6.1. コンテンツのストレージボリュームへのアップロード 15.12.6.2. ストレージボリュームからのコンテンツのダウンロード 15.12.7. ストレージボリュームのサイズ変更 5.13. ゲスト仮想マシン別の情報の表示 1 191 191 191 192 192 193 193 193 193 193 193 194 194 15.13.1. ゲスト仮想マシンの表示 15.13.2. 仮想 CPU 情報を表示する 15.13.3. 仮想 CPU の親和性を設定する 15.13.4. ドメインの仮想 CPU 数についての情報の表示 194 195 196 196 15.13.5. 仮想 CPU の親和性を設定する 15.13.6. 仮想 CPU 数を設定する 15.13.7. メモリー割り当てを設定する 15.13.8. ドメインのメモリー割り当ての変更 15.13.9. ゲスト仮想マシンのブロックデバイス情報の表示 197 197 198 199 200 5.13.10. ゲスト仮想マシンのネットワークデバイス情報の表示 1 15.14. 仮想ネットワークを管理する 15.15. virs h を使用したゲスト仮想マシンの移行 15.15.1. インターフェースコマンド 200 200 201 201 15.15.1.1. XML ファイルによるホスト物理マシンインターフェースの定義と開始 15.15.1.2. ホストインターフェース用 XML 設定ファイルの編集 15.15.1.3. アクティブなホストインターフェースの一覧表示 15.15.1.4. MAC アドレスのインターフェース名への変換 15.15.1.5. 特定ホスト物理マシンのインターフェースの停止 201 202 202 202 202 15.15.1.6. ホスト設定ファイルの表示 15.15.1.7. ブリッジデバイスの作成 15.15.1.8. ブリッジデバイスの破棄 15.15.1.9. インターフェーススナップショットの操作 202 202 202 203 15.15.2. スナップショットの管理 15.15.2.1. スナップショットの作成 15.15.2.2. 現在のドメインのスナップショットの作成 15.15.2.3. 現在のドメインのスナップショットの取得 15.15.2.4. s naps ho t-edit-do main 203 203 204 204 205 5 仮 想 化 管 理 ガイ ド 15.15.2.4. s naps ho t-edit-do main 205 15.15.2.5. s naps ho t-info -do main 15.15.2.6. s naps ho t-lis t-do main 15.15.2.7. s naps ho t-dumpxml do main s naps ho t 15.15.2.8. s naps ho t-parent do main 205 205 206 206 15.15.2.9. s naps ho t-revert do main 15.15.2.10. s naps ho t-delete do main 15.16. ゲスト仮想マシンの CPU モデルの設定 15.16.1. はじめに 15.16.2. ホスト物理マシン CPU モデルに関する認識 206 207 207 207 208 15.16.3. ホスト物理マシンのプールに適合する互換性のある CPU モデルの決定 15.17. ゲスト仮想マシンの CPU モデルの設定 15.18. ゲスト仮想マシンのリソースの管理 15.19. スケジュールパラメーターの設定 208 210 211 212 15.20. ディスク I/O スロットリング 15.21. ブロック I/O パラメーターの表示または設定 15.22. メモリーのチューニングを設定する 15.23. 仮想ネットワークコマンド 212 213 213 213 15.23.1. 仮想ネットワークの自動起動 15.23.2. XML ファイルによる仮想ネットワークの作成 15.23.3. XML ファイルによる仮想ネットワークの定義 213 214 214 15.23.4. 仮想ネットワークの停止 214 15.23.5. ダンプファイルの作成 15.23.6. 仮想ネットワークの XML 設定ファイルの編集 214 214 15.23.7. 仮想ネットワークについての情報の取得 214 15.23.8. 仮想ネットワークについての情報の一覧表示 15.23.9. ネットワーク UUID からネットワーク名への変換 215 215 15.23.10. 停止状態の(定義済み)ネットワークの起動 15.23.11. 停止状態のネットワークの設定の定義解除 215 215 15.23.12. ネットワーク名からネットワーク UUID への変換 215 15.23.13. 既存のネットワーク定義ファイルの更新 215 . . 16 第 . .章. .仮. 想 . マ . .シ. ン. マ . ネ . .ージ . . ャ. ー . . ( .v i. r t. -.m. a. n.a .g .e r. ). を . 使 . . っ. て. ゲス . . .トを . .管 . 理 . .す. る. . . . . . . . . . . . . . . . . 2. 17 . . . . . . . . 16.1. virt-manag er を起動する 16.2. 仮想マシンマネージャーのメインウィンドウ 217 218 16.3. 仮想ハードウェアの詳細ウィンドウ 16.3.1. US B デバイスをゲスト仮想マシンに割り当てる 218 220 16.4. 仮想マシンのグラフィカルコンソール 222 16.5. リモート接続を追加する 16.6. ゲストの詳細を表示する 224 225 16.7. パフォーマンスの監視 16.8. ゲストの CPU 使用率を表示する 232 233 16.9. ホストの CPU 使用率を表示する 234 16.10. ディスク I/O を表示する 16.11. ネットワーク I/O を表示する 235 237 . . 17章 第 . . . オ . .フ. ラ. イ. ン . ツール . . . . でゲス . . . . ト仮 . . 想 . .マ. シ. ン . の . . デ. ィ. ス . ク . .にア . . ク. セス . . .す. る. . . . . . . . . . . . . . . . . . . . . . 2. 4. 1. . . . . . . 17.1. はじめに 241 17.2. 用語について 241 17.3. インストール 17.4. g ues tfis h のシェル 242 242 17.4.1. g ues tfis h でファイルシステムを表示する 17.4.1.1. 手作業で一覧表示する 6 243 243 17.4.1.2. g ues tfis h による検出の使用 244 17.4.1.3. ゲスト仮想マシンの名前でゲスト仮想マシンにアクセスする 245 目次 7.4.1.3. ゲスト仮想マシンの名前でゲスト仮想マシンにアクセスする 1 17.4.2. g ues tfis h を使ってファイルを編集する 245 245 17.4.3. g ues tfis h を使ったその他の動作 17.4.4. g ues tfis h を使ってシェルスクリプトを作成する 245 245 17.4.5. Aug eas と libg ues tfs を使ってスクリプトを作成する 246 17.5. その他のコマンド 17.6. virt-res cue: レスキューシェル 247 247 17.6.1. はじめに 17.6.2. virt-res cue を実行する 247 248 17.7. virt-df: ディスクの使用量を監視する 17.7.1. はじめに 17.7.2. virt-df を実行する 17.8. virt-res iz e: オフラインのゲスト仮想マシンのサイズを変更する 17.8.1. はじめに 17.8.2. ディスクイメージの拡張 17.9. virt-ins pecto r: ゲスト仮想マシンを検査する 17.9.1. はじめに 17.9.2. インストール 17.9.3. virt-ins pecto r を実行する 17.10. virt-win-reg : Windo ws レジストリーを読み込み、編集する 249 249 249 250 250 250 252 252 252 252 254 17.10.1. はじめに 17.10.2. インストール 254 254 17.10.3. virt-win-reg の使い方 254 17.11. プログラミング言語で API を使用する 17.11.1. C プログラムで API と通信する 255 256 17.12. virt-s ys prep: 仮想マシン設定のリセット 17.13. トラブルシューティング 259 262 17.14. その他のドキュメントについて 262 . . 18 第 . .章. .ゲス . . ト仮 . . 想 . . マ. シ . ン . .管. 理 . の . .単. 純 . な . . ツール . . . .の. 使 . 用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. 6. 3. . . . . . . 18.1. virt-viewer の使用 263 18.2. remo te-viewer 264 . . 19 第 . .章. .仮. 想 . ネ . .ットワーク . . . . .の . 構 . . 築. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. 6. 6. . . . . . . 19.1. 仮想ネットワークのスイッチ 19.2. ブリッジモード 266 267 19.3. Netwo rk Addres s T rans latio n モード 19.3.1. DNS と DHCP 268 268 19.4. ルーティングモード 269 19.5. 隔離モード 19.6. デフォルト設定 270 271 19.7. 一般的な事例 271 19.7.1. ブリッジモード 19.7.2. ルーティングモード 272 272 19.7.3. NAT モード 19.7.4. 隔離モード 274 274 19.8. 仮想ネットワークを管理する 274 19.9. 仮想ネットワークを作成する 19.10. 仮想ネットワークをゲストに接続する 275 282 19.11. 物理インターフェースに直接に接続する 19.12. ネットワークのフィルター機能を適用する 286 288 19.12.1. はじめに 288 19.12.2. フィルターチェーン 19.12.3. フィルターチェーンの優先度 289 291 7 仮 想 化 管 理 ガイ ド 19.12.4. フィルター内での変数の使い方 291 19.12.5. 自動 IP アドレス検出と DHCP スヌーピング 19.12.5.1. はじめに 293 293 9.12.5.2. DHCP スヌーピング 1 19.12.6. 予約済み変数 293 294 19.12.7. 要素と属性の概要 295 19.12.8. 他のフィルターへの参照 19.12.9. フィルタールール 295 295 19.12.10. 対応しているプロトコル 19.12.10.1. MAC (イーサネット) 296 297 19.12.10.2. VLAN (802.1Q ) 298 19.12.10.3. S T P (S panning T ree Pro to co l) 19.12.10.4. ARP/RARP 298 299 19.12.10.5. IPv4 19.12.10.6. IPv6 299 300 19.12.10.7. T CP/UDP/S CT P 301 19.12.10.8. ICMP 19.12.10.9. IGMP、ES P、AH、UDPLIT E、' ALL' 302 302 19.12.10.10. IPV6 経由の T CP/UDP/S CT P 303 19.12.10.11. ICMPv6 19.12.10.12. IPv6 経由の IGMP、ES P、AH、UDPLIT E、' ALL' 304 304 19.12.11. 高度なフィルター設定について 19.12.11.1. 接続の追跡 305 305 19.12.11.2. 接続数を制限する 305 19.12.11.3. コマンドラインツール 19.12.11.4. 事前に用意されるネットワークフィルター 307 307 19.12.11.5. 独自のフィルターを記述する 19.12.11.6. サンプルのカスタムフィルター 308 310 19.12.12. 限界 19.13. トンネルの作成 19.13.1. マルチキャストトンネルの作成 19.13.2. T CP トンネルの作成 19.14. vLAN タグの設定 19.15. Q o S の仮想ネットワークへの適用 313 313 313 314 314 315 . . 2. 0. 章. .q.e .m. u.- kv 第 . . m. .コ. マ. ン . ド . 、. フ . ラ . .グ. 、.および . . . 引 . .数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. 16 . . . . . . . . 2 0.1. はじめに 316 ホワイトリスト形式 2 0.2. 基本オプション 316 316 エミュレートしたマシン 316 プロセッサーのタイプ プロセッサーのトポロジー 316 317 N UMA システム メ モリーのサイズ 317 317 キーボードのレイアウト 317 ゲスト名 ゲストの UUID 317 317 2 0.3. ディスクのオプション 汎用ドライブ ブートオプション ナップショットモード ス 2 0.4. ディスプレイのオプション グラフィックを無効にする 8 317 317 318 318 318 319 目次 VGA カードのエミュレーション 319 VNC ディスプレイ 319 S pice デスクトップ 2 0.5. ネットワークのオプション T AP ネットワーク 2 0.6. デバイスのオプション 汎用デバイス 319 320 320 321 321 グローバルデバイスの設定 キャラクターデバイス 327 328 U S B を有効にする 328 2 0.7. Linux/マルチブートの起動 カーネルファイル R AM ディスク コ マンドラインパラメーター 2 0.8. 専門的なオプション 328 328 328 328 328 K VM 仮想化 カーネルモードの PIT 再インジェクションを無効にする 328 329 シャットダウンなし 329 再起動なし シリアルポート、 モニター、 Q MP 329 329 モニターのリダイレクト 手動による CPU 起動 329 329 R T C 329 Watchdo g Watchdo g のリアクション 330 330 ゲストメモリーのバッキング S MBIO S エントリー 330 330 2 0.9. ヘルプなどのオプション 330 ヘ ルプ バージョン 330 330 オーディオのヘルプ 2 0.10. その他のオプション 330 330 移行 (マイグレーション) 330 デ フォルト設定なし デ バイスの設定ファイル 330 330 ロードされ保存された状態 331 . . 2. 1章 第 . . .ド.メ. イ. ン. .X.M. L. の . .操. 作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. 3. 2. . . . . . . 2 1.1. 一般的な情報およびメタデータ 332 2 1.2. オペレーティングシステムの起動 2 1.2.1. BIO S ブートローダー 333 333 2 1.2.2. ホスト物理マシンのブートローダー 2 1.2.3. カーネルからの直接起動 334 335 2 1.3. S MBIO S システム情報 336 2 1.4. CPU の割り当て 2 1.5. CPU のチューニング 337 337 2 1.6. メモリーのバッキング 2 1.7. メモリーチューニング 339 339 2 1.8. NUMA ノードのチューニング 340 2 1.9. ブロック I/O チューニング 2 1.10. リソースパーティション作成 341 342 2 1.11. CPU モデルおよびトポロジー 2 1.11.1. ゲスト仮想マシンの NUMA トポロジー 343 346 2 1.12. イベント設定 347 9 仮 想 化 管 理 ガイ ド 10 2 1.12. イベント設定 347 2 1.13. 電力管理 2 1.14. ハイパーバイザーの機能 349 349 2 1.15. 時間管理 350 2 1.16. デバイス 2 1.16.1. ハードドライブ、フロッピーディスク、CDRO M 352 353 2 1.16.1.1. ディスク要素 2 1.16.1.2. ソース要素 354 354 2 1.16.1.3. Mirro t 要素 355 2 1.16.1.4. T arg et 要素 2 1.16.1.5. io tune 355 355 2 1.16.1.6. driver 2 1.16.1.7. 追加のデバイス要素 356 356 2 1.16.2. ファイルシステム 358 2 1.16.3. デバイスアドレス 2 1.16.4. コントローラー 359 360 2 1.16.5. デバイスのリース 361 2 1.16.6. ホスト物理マシンのデバイス割り当て 2 1.16.6.1. US B / PCI デバイス 362 362 1.16.6.2. ブロック / キャラクターデバイス 2 2 1.16.7. リダイレクトされるデバイス 364 366 2 1.16.8. スマートカードデバイス 367 2 1.16.9. ネットワークインターフェース 2 1.16.9.1. 仮想ネットワーク 369 369 2 1.16.9.2. LAN のブリッジ 2 1.16.9.3. ポートのマスカレード範囲の設定 370 371 2 1.16.9.4. ユーザー領域 S LIRP スタック 371 2 1.16.9.5. 汎用イーサネット接続 2 1.16.9.6. 物理インターフェースへの直接割り当て 372 372 2 1.16.9.7. PCI パススルー 2 1.16.9.8. マルチキャストトンネル 375 375 2 1.16.9.9. T CP トンネル 376 2 1.16.9.10. NIC ドライバー固有オプションの設定 2 1.16.9.11. ターゲット要素のオーバーライド 377 378 2 1.16.9.12. 起動順序の指定 378 2 1.16.9.13. インターフェース RO M BIO S 設定 2 1.16.9.14. Q o S (Q uality o f S ervice) 379 379 2 1.16.9.15. VLAN タグの設定 (サポートされるネットワークタイプでのみ) 2 1.16.9.16. 仮想リンク状態の変更 380 381 2 1.16.10. 入力デバイス 381 2 1.16.11. ハブデバイス 2 1.16.12. グラフィカルフレームバッファー 382 382 2 1.16.13. ビデオデバイス 2 1.16.14. コンソール、シリアル、パラレル、およびチャンネルデバイス 385 386 2 1.16.15. ゲスト仮想マシンのインターフェース 387 2 1.16.16. チャンネル 2 1.16.17. ホスト物理マシンインターフェース 389 390 2 1.17. サウンドデバイス 2 1.18. ウォッチドッグデバイス 394 395 2 1.19. メモリーバルーンデバイス 396 2 1.20. T PM デバイス 2 1.21. セキュリティーラベル 397 397 2 1.22. ドメイン XML 設定例 399 目次 . . 2. 2. 章. .トラ 第 . . ブ. ル . .シ. ュ. ーティ . . . ン . .グ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 0. 1. . . . . . . 2 2.1. デバッグおよびトラブルシューティングのツール 401 2 2.2. virs h ダンプファイルの作成 2 2.3. kvm_s tat 402 403 2 2.4. ゲスト仮想マシンがシャットダウンに失敗する 2 2.5. シリアルコンソールでのトラブルシューティング 406 407 2 2.6. 仮想化のログファイル 407 2 2.7. ループデバイスエラー 2 2.8. ライブマイグレーションに関するエラー 407 408 2 2.9. BIO S で Intel VT -x と AMD-V の仮想化ハードウェア拡張を有効にする 2 2.10. KVM ネットワークのパフォーマンス 408 409 2 2.11. libvirt による外部スナップショット作成の回避策 410 2 2.12. 日本語キーボードのゲストコンソールで欠如している文字 2 2.13. 仮想化拡張機能を確認する 410 411 . . 録. A. .仮. 想 付 . ホス . . . トメ . . トリ . . ック . .ス . デ . . ーモ . . ン . . (.v ho . . s. t. m. d. ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 13 . . . . . . . . . . 録. B. .そ. の 付 . 他 . .の. リ. ソ . ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 14 . . . . . . . . B .1. オンラインリソース B .2. インストールされているドキュメント 414 414 . . 録. C 付 . . 改. 訂 . .履. 歴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 15 . . . . . . . . 11 仮 想 化 管 理 ガイ ド 第1章 はじめに 1.1. V irtualiz ation ドキュメ ントス イート Red Hat では、様々な仮想化製品のドキュメントを豊富に提供しています。Red Hat Enterprise Linux および同梱 製品のドキュメントには、以下のようなガイドが含まれます。 『Red Hat Enterprise Linux 仮想化スタートガイド 』: 仮想化の概念、利点、ツールについて概説し、Red Hat の仮想化関連ドキュメントおよび製品の概要を記載しています。 『Red Hat Enterprise Linux 仮想化ホスト設定およびゲストインストールガイド』: 仮想化ソフトウェアのインス トールおよびホスト物理マシン上のゲスト仮想マシンの設定について記載しています。 『Red Hat Enterprise Linux 仮想化管理ガイド』 (本書): virt-manager または virsh のいずれかを主要設定 ツールとして使用した、ホスト物理マシン、ネットワーク、ストレージ、デバイスおよびゲスト仮想マシンの管理につい て説明します。このガイドには、libvirt および QEMU についての参考情報と、トラブルシューティング情報も記載し ています。 『Red Hat Enterprise Linux 仮想化セキュリティーガイド』: Red Hat が提供する仮想化セキュリティーテクノロ ジーについての概要を説明しています。また、仮想化環境内のホスト物理マシン、ゲスト仮想マシン、共有インフラ ストラクチャーおよびリソースのセキュリティーを保護するための推奨事項も記載しています。 『Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイド』: システムおよびゲスト仮想マシンで、仮想 化パフォーマンスの機能とオプションを最大限に活用するためのヒント、コツおよびアドバイスを記載しています。 『Red Hat Enterprise Linux V2V ガイド』: VM、Xen および VMware ESX/ESX(i) ハイパーバイザーから Red Hat Enterprise Virtualizatio n および libvirt で管理されている KVM への仮想マシンのインポートにつ いて記載しています。 Red Hat Enterprise Virtualizatio n ドキュメントスイートは、Red Hat Enterprise Virtualizatio n プラットフォー ムおよび関連製品のインストール、アプリケーション開発、設定および使用方法に関する情報を提供します。 『Red Hat Enterprise Virtualizatio n インストールガイド』: Red Hat Enterprise Virtualizatio n 環境を準 備し、セットアップする方法、および Red Hat Enterprise Virtualizatio n 環境を最新リリースにアップグレードす る方法について記載しています。さらに、ハイパーバイザーをセットアップする方法や、Red Hat Enterprise Virtualizatio n 環境の初期設定を実行する方法についても概説しています。 『Red Hat Enterprise Virtualizatio n 管理ガイド』: Red Hat Enterprise Virtualizatio n 環境を最初にセッ トアップした後に設定し、管理する方法について記載しています。これには、ハイパーバイザーやストレージドメイン、 および外部プロバイダーを環境に追加する方法や、仮想マシン、仮想ディスクおよびテンプレートなどのリソースを 管理する方法、およびバックアップを取る方法や復元する方法などが含まれます。 『Red Hat Enterprise Virtualizatio n ユーザーガイド』: 基本タブや拡張タブで提供される機能を含む Red Hat Enterprise Virtualizatio n 環境のユーザーポータルの使い方、仮想マシンおよびテンプレートの作成およ び使用方法、さらにはリソース使用を監視する方法について記載しています。 『Red Hat Enterprise Virtualizatio n テクニカルガイド』: Red Hat Enterprise Virtualizatio n に特有の REST API、Pytho n、Java ソフトウェア開発キット、およびコマンドラインツールの使用方法について記載していま す。さらに、Red Hat Enterprise Virtualizatio n の背後にある基盤となる技術コンセプトについて概説していま す。 注記 これらの製品についてのすべてのガイドは、Red Hat カスタマーポータル (https://access.redhat.co m/do cumentatio n/en-US/) からご覧いただけます。 12 第 2 章 サ ーバ ーの ベ ス トプラ ク ティ ス 第2章 サーバーのベストプラクティス Red Hat Enterprise Linux ホストのパフォーマンスを強化する場合に次のような作業やヒントが役に立ちます。その 他のヒントについては、『Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイド』 を参照してください。 enfo rcing モードで SELinux を実行します。 s e t e n fo r c e コマンドを使って enfo rcing モードで SELinux が 実行するよう設定します。 # setenforce 1 不必要なサービスはすべて削除するか、または無効にします (A u t o F S 、N F S 、F TP 、H TTP 、N IS 、t e ln e t d 、s e n d m a il など)。 サーバー上にはプラットフォームの管理に必要な最低限のユーザーアカウントのみを追加します。不必要なユー ザーアカウントは削除してください。 ホストでは不必要なアプリケーションは実行しないようにしてください。ホストでアプリケーションを実行すると仮想 マシンのパフォーマンスに影響を与えるため、サーバーの安定性に影響を与える可能性があります。サーバーをク ラッシュさせる可能性のあるアプリケーションは、サーバー上のすべての仮想マシンをダウンさせてしまう原因とも なります。 仮想マシンのインストールおよびイメージを集中管理できる場所を使用します。仮想マシンのイメージは / v a r / lib / lib v ir t / im a g e s / に格納してください。仮想マシンのイメージをこれ以外のディレクトリーに格納 する場合は、そのディレクトリーを SELinux ポリシーに追加し、インストールを開始する前にラベルの付け直しを必 ず行ってください。集中管理のできる共有可能なネットワークストレージの使用を強くお勧めします。 13 仮 想 化 管 理 ガイ ド 第3章 仮想化のセキュリティー 仮想化の技術を導入する際には、ホスト物理マシンとそのオペレーティングシステムが攻撃されないようにする必要が あります。この場合、ホス ト とは、システム、デバイス、メモリー、ネットワークのほかにすべてのゲスト仮想マシンを管 理する Red Hat Enterprise Linux システムのことです。ホスト物理マシンが保護されていないと、システム内のす べてのゲスト仮想マシンが脆弱になります。仮想化を使用してシステム上のセキュリティーを強化する方法にはいくつ かの種類があります。担当者または担当者の企業は 導入計画 を作成する必要があります。この導入計画には、以下 を含める必要があります。 動作仕様 ご使用のゲスト仮想マシンで必要なサービスの指定 ホスト物理サーバーとこれらのサービスに必要なサポートの指定 以下は、導入計画の作成時に考慮すべきセキュリティー問題です。 ホスト物理マシン上では必要となるサービスのみを実行する。ホスト物理マシン上で実行されているプロセスや サービスが少ないほど、セキュリティーのレベルとパフォーマンスが高くなります。 ハイパーバイザー上で SELinux を有効にする。SELinux と仮想化の使用方法についての詳細は、「SELinux と 仮想化」 を参照してください。その他のセキュリティーに関するヒントは、『Red Hat Enterprise Linux 仮想化セ キュリティーガイド』 に記載されています。 ファイアーウォールを使用してホスト物理マシンへのトラフィックを制限する。攻撃からホストを保護するデフォルト 拒否ルールでファイアウォールを設定できます。また、ネットワークを介するサービスを制限することも重要です。 標準ユーザーのホストのオペレーティングシステムに対するアクセスを許可しない。ホストのオペレーティングシス テムに特権が設定されている場合、特権のないアカウントにアクセスを許可すると、セキュリティーレベルが危険に さらされる可能性があります。 3.1. ス トレージ の セキュリティーに関す る問題 ゲスト仮想マシンに対する管理者のセキュリティー権限を持つユーザーは誰でもホスト物理マシンのパーティションを 変更できるため、このレベルのセキュリティー権限は実際のシステム管理者のみに付与することが不可欠になります。 さらに、以下の点を考慮する必要があります。 ホスト物理マシンでは、fs t a b ファイル、in it r d ファイル内でファイルシステムを識別するため、またはコマンドラ インで使用するためのディスクラベルを使用することができません。権限の限られたユーザー、とりわけゲスト仮想 マシンのユーザーがパーティション全域または LVM ボリュームへの書き込みアクセスを持つ場合、それらが誤っ て削除されたり、さらにはこの誤操作により同じストレージを使用している他のすべてのゲスト仮想マシンに影響 が及ぶ可能性があります。 ゲスト仮想マシンのユーザーにはディスク全域またはブロックデバイス (例: / d e v / s d b ) への書き込みアクセスを 付与すべきではありません。これを防ぐために / d e v / s d b 1 または LVM ボリュームなどのパーティションを使用し ます。 3.2. SELinux と仮想化 SELinux (Security Enhanced Linux) は、Linux のセキュリティーを強化するために Linux コミュニティーの支援 の下に NSA (米国の国家安全保障局) によって開発されました。SELinux は攻撃者の能力を制限して、バッファー オーバーフローアタックや権限エスカレーションなど多くの一般的なセキュリティー上の弱点を防止するために機能し ます。これらの利点により、すべての Red Hat Enterprise Linux システムは SELinux を有効にした状態で強制 モードで実行する必要があります。 手順3 . 1 S E L in u x を有効にし たゲス ト 仮想マ シ ン上での 論理ボリュ ーム の 作成と マ ウント 14 第 3 章 仮 想 化 の セキ ュ リ ティ ー 1. 論理ボリュームを作成します。この例では、 v o lu m e g r o u p というボリュームグループ上に N e w V o lu m e N a m e という 5 ギガバイトの論理ボリュームを作成します。また、この例はディスク領域が十分 にあることを前提としています。ネットワークデバイス上で追加のストレージを作成し、そのストレージへのアク セスをゲストに付与する必要がある場合があります。詳細は、14 章ボリューム を参照してください。 # lvcreate -n N e w V o lu m e N a m e -L 5 G v o lu m e g r o u p 2. ext3 などの拡張属性に対応できるファイルシステムで N e w V o lu m e N a m e 論理ボリュームをフォーマットし ます。 # m ke2fs -j / d e v / v o lu m e g r o u p / N e w V o lu m e N a m e 3. 新しい論理ボリュームをマウントする新規のディレクトリーを作成します。このディレクトリーはファイルシステム のどこに配置しても構いません。ただし、重要なシステムディレクトリー (/ e t c 、/ v a r 、/ s y s ) またはホーム ディレクトリー (/ h o m e 、/ r o o t など) 内には配置しないようにしてください。この例では、/ v ir t s t o r a g e というディレクトリーを使用しています。 # m kdir / v ir t s t o r a g e 4 . 論理ボリュームをマウントします。 # m ount / d e v / v o lu m e g r o u p / N e w V o lu m e N a m e / v ir t s t o r a g e 5. 作成したばかりのフォルダーの SELinux タイプを設定します。 # sem anage fcontext -a -t virt_im age_t "/virtstorage(/.*)?" targeted ポリシー (targeted はデフォルトのポリシー) を使用すると、コマンドにより次のような 1 行が / e t c / s e lin u x / t a r g e t e d / c o n t e x t s / file s / file _ c o n t e x t s .lo c a l ファイルに追加されま す。この行によって変更が永続化されます。 /virtstorage(/.*)? system _u:object_r:virt_im age_t:s0 6 . 次のコマンドを実行して、マウントポイント (/ v ir t s t o r a g e ) とその下のすべてのファイルのタイプを v ir t _ im a g e _ t に変更します (r e s t o r e c o n コマンドと s e t file s コマンドは / e t c / s e lin u x / t a r g e t e d / c o n t e x t s / file s / 内のファイルを読み込みます)。 # restorecon -R -v /virtstorage 15 仮 想 化 管 理 ガイ ド 注記 ファイルシステム上に新しいファイルを作成します (t o u c h コマンドを使用)。 # touch /virtstorage/newfile 次のコマンドを使用してファイルのラベルが変更されていることを確認します。 # sudo ls -Z /virtstorage -rw-------. root root system _u:object_r:virt_im age_t:s0 newfile 上記の出力は、新しいファイルが正しい属性の v ir t _ im a g e _ t を持っていることを示しています。 3.3. SELinux このセクションには、仮想化の導入で SELinux を使用する際に考慮すべきトピックが含まれています。システムの変 更を導入したり、デバイスを追加したりする場合には、SELinux ポリシーを随時更新する必要があります。ゲスト仮想 マシン用に LVM ボリュームを設定するには、それぞれの基礎となるブロックデバイスとボリュームグループの SELinux コンテキストを修正する必要があります。p o lic y c o r e u t ilis - p y t h o n パッケージをインストールしてい ること (y u m in s t a ll p o lic y c o r e u t ilis - p y t h o n ) を確認してから、次のコマンドを実行します。 # sem anage fcontext -a -t virt_im age_t -f -b /dev/sda2 # restorecon /dev/sda2 KVM と S E L in u x 以下の表は、libvirt で起動した場合に KVM に影響を与える SELinux ブール値を示しています。 KVM の S E L in u x ブ ール 値 S E L in u x ブ ール 値 説明 virt_use_co mm virt によるシリアルおよびパラレル通信ポートの使用を 許可します。 virt による fuse ファイルの読み込みを許可します。 virt による NFS ファイルの管理を許可します。 virt による CIFS ファイルの管理を許可します。 sanlo ck による virt lib ファイルの管理を許可します。 virt によるデバイス設定 (PCI) の管理を許可します。 仮想マシンによる xserver との対話を許可します。 virt による USB デバイスの使用を許可します。 virt_use_fusefs virt_use_nfs virt_use_samba virt_use_sanlo ck virt_use_sysfs virt_use_xserver virt_use_usb 3.4 . 仮想化の ファイアウォール情報 ゲスト仮想マシンと対応する管理ユーティリティー間の通信のために様々なポートが使用されます。 16 第 3 章 仮 想 化 の セキ ュ リ ティ ー 注記 ゲスト仮想マシン上のネットワークサービスはいずれも、外部アクセスを可能にするためにゲスト仮想マシンに 適用できるポートを開いておく必要があります。ゲスト仮想マシン上のネットワークサービスにファイアウォール が設定されている場合、これにアクセスすることはできません。常にゲスト仮想マシンのネットワーク設定を最 初に確認してください。 ICMP 要求を許可する必要があります。ICMP パケットはネットワークテストに使用されます。ICMP パケットがブ ロックされていると、ゲスト仮想マシンに ping できません。 ポート 22 は、SSH アクセスおよび初期インストール用に開いておきます。 ポート 8 0 または 4 4 3 (RHEV Manager のセキュリティー設定によって異なる) が、ホスト物理マシンに関する 情報を通信するために vdsm-reg サービスで使用されます。 ポート 56 34 から 6 16 6 までが SPICE プロトコルを使ったゲスト仮想マシンのコンソールアクセスに使用されま す。 ポート 4 9152 から 4 9216 までが KVM を使用した移行に使用されます。同時に行なう移行の数に応じて、この 範囲内のどのポートでも使用できます。 また、共有ブリッジおよびデフォルトのブリッジ用に IP 転送を有効 (n e t .ip v 4 .ip _ fo r w a r d = 1 ) にする必 要があります。この変数は libvirt をインストールすると有効になるため、手動で無効にしない限り、仮想化パッ ケージをインストールすると有効になります。 注記 物理ブリッジデバイスには IP 転送を有効にする必要は あり ません 。ゲスト仮想マシンが物理ブリッジを介して 接続されている場合には、トラフィックは IP 転送などの IP 設定を必要としないレベルでのみ機能します。 17 仮 想 化 管 理 ガイ ド 第4 章 sVirt sVirt は Red Hat Enterprise Linux 6 に導入されている技術のことで、SELinux と仮想化を統合します。sVirt は ゲスト仮想マシンの使用時には Mandato ry Access Co ntro l (MAC) を適用してセキュリティーを強化し、ハイパー バイザー内のバグに対してシステムを堅牢にします。これはホスト物理マシンや他のゲスト仮想マシン上の攻撃を防ぐ のにとくに役立ちます。 本章では、Red Hat Enterprise Linux 6 での sVirt による仮想化技術の統合について説明します。 非仮想化環境 非仮想化環境では、ホスト物理マシンは物理的に相互に分離しているため、各ホスト物理マシンは web サーバーや DNS サーバーなどのサービスで構成される自己完結型の環境を有しています。こうしたサービスは独自のユーザー 空間や、ホスト物理マシンのカーネル、および物理ハードウェアと直接通信し、ネットワークにそれぞれのサービスを直 接提供します。以下の図は、非仮想化環境を示しています。 ユーザー空間: すべてのユーザーモードのアプリケーションと一部のドライバーが実行されるメモリー領域で す。 Web アプリケーション (web アプリケーションサーバー): ブラウザーでアクセスできる Web コンテンツを配信 します。 ホストカーネル: ホスト物理マシンの特権カーネル、カーネル拡張およびほとんどのデバイスドライバーを実行 する目的で厳密に確保されます。 DNS サーバー: DNS レコードを保存し、ユーザーが IP アドレスではなく論理名を使って Web ページにアク セスできるようにします。 仮想化環境 仮想化環境では、複数の仮想オペレーティングシステムを、ホスト物理マシン上にある単一のカーネル上で稼働させる ことができます。以下の図は、仮想化環境を示しています。 18 第 4 章 s Vi r t 4 .1. セキュリティーと仮想化 サービスを仮想化していない場合、マシンは物理的に分離されています。ネットワーク攻撃は別として、セキュリティー 上の弱点は通常、攻撃を受けたマシンに内在します。複数のサービスを仮想化環境に集めると、追加の脆弱性がシス テム内に発生します。ゲスト仮想マシンが不正利用する可能性のあるセキュリティー上の不具合がハイパーバイザー にある場合、このゲスト仮想マシンはホスト物理マシンだけでなく、そのホスト物理マシン上で実行している他のゲスト 仮想マシンも攻撃できることになります。こうした攻撃は、ゲスト仮想マシンの範囲を超えて、他のゲスト仮想マシンを 攻撃にさらす可能性もあります。 sVirt は、ゲスト仮想マシンを隔離して、不正利用されている場合に追加の攻撃を開始する能力を抑制するためのも のです。以下の図が示すように、攻撃はゲスト仮想マシンの範囲を超えることはできず、他のゲスト仮想マシンに侵入 することができません。 SELinux は、MAC (Mandato ry Access Co ntro l) の実装内で仮想化インスタンス用のプラグ可能なセキュリ ティーフレームワークを導入します。sVirt のフレームワークにより、ゲスト仮想マシンとそのリソースに対する固有のラ ベル付けが可能になります。ラベルが付けられると、ルールの適用が可能になり、異なるゲスト間のアクセスを拒否で きるようになります。 4 .2. sV irt の ラベル 19 仮 想 化 管 理 ガイ ド 4 .2. sV irt の ラベル SELinux の保護下にある他のサービスと同様に、sVirt はプロセスベースのメカニズムと制約を使用して、ゲスト仮 想マシン全体に追加のセキュリティー層を提供します。通常の使用では、sVirt が背後で作動していることすら気づか ないことでしょう。このセクションでは、sVirt のラベル付け機能について説明します。 以下の出力に示されるように、sVirt を使用すると、仮想化されるゲスト仮想マシンの各プロセスにラベル付けが行な われ、動的に生成されるレベルで実行されるようになります。各プロセスは複数の異なるレベルにより、他の仮想マシ ンから分離されます。 # ps -eZ | grep qem u system _u:system _r:svirt_t:s0:c8 7,c520 27950 ? 00:00:17 qem u-kvm 以下の出力で示されるように、実際のディスクイメージは、プロセスに一致するよう自動的にラベル付けされます。 # ls -lZ /var/lib/libvirt/im ages/* system _u:object_r:svirt_im age_t:s0:c8 7,c520 im age1 以下の表は、sVirt の使用時に割り当てられるさまざまなコンテキストラベルの概要を示しています。 表4 . 1 s Virt コンテキ ス ト ラベ ル S E L in u x コンテキ ス ト タイプ/ 説明 system_u:system_r:svirt_t:MCS1 ゲスト仮想マシンのプロセスです。MCS1 はランダムな MCS フィールドです。約 50 万種のラベルに対応してい ます。 ゲスト仮想マシンのイメージです。同じ MCS フィールド を持つ s virt _ t プロセスのみがこれらのイメージの読み 込みと書き込みを行なうことができます。 ゲスト仮想マシンの共有する読み込み/書き込みコンテ ンツです。すべての s virt _ t プロセスは svirt_image_t:s0 ファイルに書き込みを行なうことがで きます。 system_u:o bject_r:svirt_image_t:MCS1 system_u:o bject_r:svirt_image_t:s0 sVirt を使用する際、静的なラベル付けを行なうこともできます。静的なラベルを使用すると、管理者はゲスト仮想マシ ンに、MCS/MLS フィールドを含む特殊なラベルを選択することができます。管理者が静的にラベル付けした、仮想化 されたゲスト仮想マシンを実行する場合は、イメージファイルにも正しいラベルを設定してください。ゲスト仮想マシン は、常にそのラベルで起動することになるため、静的にラベル付けされた仮想化マシンのコンテンツの修正を sVirt シ ステムが行なうことはありません。これにより、sVirt コンポーネントが MLS 環境で実行できるようになります。また、要 件に応じて 1 つのシステム上で機密度のレベルの異なる複数のゲスト仮想マシンを実行することもできます。 20 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 第5章 K VM のライブマイグレーション 本章では、あるホスト物理マシンで実行中のゲスト仮想マシンを別のホスト物理マシンに移行する方法について説明 します。どちらのインスタンスでも、ホスト物理マシンは KVM ハイパーバイザーを実行しています。 移行とは、ゲスト仮想マシンをあるホスト物理マシンから別のホスト物理マシンに移行するプロセスです。移行が可能 である理由は、ゲスト仮想マシンはハードウェア上で直接実行されておらず、仮想化環境内で実行されているためで す。移行は以下の点で有用となります。 負荷分散: ホスト物理マシンに負荷がかかりすぎた場合に使用率の低いホスト物理マシンにゲスト仮想マシンを 移動したり、別のホスト物理マシンの使用率が低くなっている場合にそちらにゲスト仮想マシンを移動して負荷分 散をすることができます。 ハードウェアの非依存性: ホスト物理マシン上のハードウェアデバイスのアップグレード、追加または削除などを行 う必要がある場合、ゲスト仮想マシン群を安全に別のホスト物理マシンに移動することができます。つまり、テスト 仮想マシンはハードウェアを改善する際に生じ得るダウンタイムを経験することはありません。 省エネ: ゲスト仮想マシンを別のホスト物理マシンに再配分し、電源をオフにして節電することで使用量の低い時 間帯にコストを節約することができます。 地理的な移行: ゲスト仮想マシンは、待ち時間を短縮するため、または重大な状況が発生した場合に別の場所に 移動することができます。 ゲスト仮想マシンのメモリーと仮想化しているデバイスの状態を移行先ホスト物理マシンに送信することで移行が行 なわれます。移行するゲスト仮想マシンのイメージは、ネットワーク接続されている共有ストレージに格納することをお 勧めします。また、仮想マシンを移行する際の共有ストレージには libvirt 管理のストレージプールを使用することをお 勧めします。 移行はライブまたはオフラインのいずれでも実行することができます。 ライブマイグレーションでは、ゲスト仮想マシンをソースのホスト物理マシン上で稼働させたままそのメモリーページを 移行先ホスト物理マシンに順番に転送します。移行時に、KVM はすでに転送されたページに変更がないかソースを 監視し、最初のページがすべて転送されるとこれらの検出した変更の転送を開始します。また、KVM は移行時の転 送速度を推定できるため、データ残量の転送時間が一定の設定時間になると (デフォルトでは 10 ミリ秒)、オリジナ ルのゲスト仮想マシンを停止して残りのデータを転送し、移行先ホスト物理マシンでその同じゲスト仮想マシンを再開 します。 ライブでは行なわない移行の場合には、ゲスト仮想マシンをいったん停止してからゲスト仮想マシンのメモリーイメージ を移行先ホスト物理マシンに移行します。移行後に移行先ホスト物理マシンでゲスト仮想マシンを再開し、ソースのホ スト物理マシンでゲスト仮想マシンが使用していたメモリーを解放します。この移行が完了するまでに要する時間は ネットワークの帯域幅および待ち時間によって異なります。ネットワークが混雑している場合や帯域幅が狭い場合は、 移行にかかる時間も長くなります。 オリジナルのゲスト仮想マシンが KVM が移行先ホスト物理マシンに移行するよりも速い速度でページを変更する場 合、ライブマイグレーションがいつまでも完了しない状態になるため、オフライン移行を使用してください。 5.1. ライブマ イグ レーションの 要件 ゲスト仮想マシンの移行には以下が必要になります。 移行の 要件 次のいずれかのプロトコルを使用してゲスト仮想マシンを共有ストレージにインストールする場合: ファイバーチャンネルベースの LUN 21 仮 想 化 管 理 ガイ ド iSCSI FCo E NFS GFS2 SCSI RDMA プロトコル (SCSI RCP): Infiniband および 10 GbE iWARP アダプターで使用されているブ ロックエクスポートプロトコル 表5.1「ライブマイグレーションの互換性」の表で移行できるプラットフォームとバージョンを確認してください。また、 Red Hat Enterprise Linux 6 は、共有ストレージ上で raw および qco w2 イメージを使用したゲスト仮想マシン のライブマイグレーションに対応していることに注意してください。 両方のシステムで適切な TCP/IP ポートを開いておく必要があります。ファイアウォールが使用されている場合に は、ポートの詳細について、「仮想化のファイアウォール情報」を参照してください。 共有ストレージ媒体のエクスポートを行うシステムが別途必要になります。ストレージは、移行に使用する 2 つの ホスト物理マシンのいずれにも存在させないようにしてください。 共有ストレージは、ソースシステムと移行先システムの同じ場所にマウントします。マウントするディレクトリー名も 同一にする必要があります。異なるパスでイメージを維持することは可能ですが、推奨されていません。virtmanager を使って移行を行なう予定の場合、パス名は同一である必要があります。ただし、virsh を使って移行を 行なう予定の場合は、移行する際に - - x m l オプションや pre-ho o ks を使うと異なるネットワーク設定やマウント ディレクトリーを使用することができます。共有ストレージがなくても、- - c o p y - s t o r a g e - a ll オプションを使っ て移行を完了することも可能です (非推奨)。p r e h o o k s についての詳細は、libvirt.o rg を参照してください。ま た、XML オプションについては、21章ドメイン XML の操作 をご覧ください。 公共のブリッジタップネットワーク内の既存のゲスト仮想マシンで移行を行う場合、ソースのホスト物理マシンと移 行先ホスト物理マシンは同じネットワーク内になければなりません。ネットワークが異なると、ゲスト仮想マシンの ネットワークが移行後に機能しなくなります。 Red Hat Enterprise Linux 5 および 6 では、KVM ゲスト仮想マシンのデフォルトキャッシュモードは n o n e に 設定されおり、これがディスク状態の不整合を回避します。(たとえば、v ir s h a t t a c h - d is k c a c h e n o n e を使って) キャッシュオプションを n o n e に設定すると、仮想ゲストマシンのファイルすべてが (o p e n システムコー ル呼び出しの際に) O _ D IR E C T フラグを使って開かれるようになり、ホスト物理マシンのキャッシュが迂回され、 仮想ゲストマシンにのみキャッシュが提供されます。キャッシュモードを n o n e に設定すると潜在的な不整合問題 が回避され、仮想マシンのライブ移行が可能になります。キャッシュを n o n e に設定することについての詳細情報 は、「ゲストにストレージデバイスを追加する」 を参照してください。 lib v ir t d サービスが有効になっていること (# c h k c o n fig lib v ir t d o n )、またこのサービスを実行している こと (# s e r v ic e lib v ir t d s t a r t ) を確認します。移行を効率的に行なえるかどうかは / e t c / lib v ir t / lib v ir t d .c o n f 設定ファイル内のパラメーターの設定によって決まる点にも十分に注意してく ださい。 手順5 . 1 lib virt d . co n f の 設定 1. lib v ir t d .c o n f を開くには、ro o t で次のコマンドを実行する必要があります。 # vim /etc/libvirt/libvirtd.conf 2. 必要に応じてパラメーターを変更し、ファイルを保存します。 3. lib v ir t d サービスを再起動します。 # service libvirtd restart 22 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 5.2. ライブマ イグ レーションと Re d Hat Ente rprise Linux バージ ョンの 互換性 サポートされているライブマイグレーションは、以下の 表5.1「ライブマイグレーションの互換性」 に示されています。 表5 . 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 ) サポートあり 完全サポート サポートなし サポートあり 注記 問題がある場合はご 報告ください 問題がある場合はご 報告ください 既知の問題について は 移行に関するトラ ブルシューティングを 参照してください 既知の問題について は 移行に関するトラ ブルシューティングを 参照してください 移行に関す るト ラブ ル シ ュ ーティング S P ICE に関す る問題 — 6 .0 → 6 .1 の移行を行う場合、SPICE に互換性のない変更点があることが判明しま した。この場合、クライアントを切断してから接続し直すとオーディオとビデオの機能が一時的に失われます。これ は一時的であり、すべてのサービスは再開されます。 US B に関す る問題 — Red Hat Enterprise Linux 6 .2 では、移行サポートを含む USB 機能を追加していま すが、USB デバイスをリセットすると、そのデバイスで実行されていたすべてのアプリケーションは中断されてしま いました。この問題は Red Hat Enterprise Linux 6 .4 で解決されており、今後のバージョンでは発生しないは ずです。6 .4 より前のバージョンでこの問題が生じることを防ぐには、USB デバイスを使用中に移行を行なわない ようにしてください。 移行プロ ト コル に関す る問題 — 下位移行で「unkno wn sectio n erro r」が出される場合、このエラーは一時 的なエラーの可能性があるため移行プロセスを繰り返してみてください。これにより、問題が修復される可能性が あります。解決できなかった場合には問題の報告してください。 ネ ッ ト ワーク ス ト レ ージ の 設定 共有ストレージを設定してその共有ストレージにゲスト仮想マシンをインストールします。 または、「共有ストレージの例: NFS を使用した単純な移行」にある NFS の例を使用します。 5.3. 共有ス トレージ の 例: NFS を使用した単純な移行 23 仮 想 化 管 理 ガイ ド 重要 この例では、NFS を使ってゲスト仮想マシンのイメージを他の KVM ホスト物理マシンと共有します。これは大 規模なインストールでは現実的な方法ではありませんが、ここでは移行手法を説明する目的で使用していま す。移行や実行するゲスト仮想マシンが数台以上になる場合には、この例を適用しないでください。また、 s y n c パラメーターが有効である必要があります。これは、NFS ストレージを適切にエクスポートするために必要で す。また、NFS がソースのホスト物理マシンにマウントされていることが強く推奨されます。ゲスト仮想マシンの イメージは、ソースのホスト物理マシンに直接マウントされている NFS で作成される必要があります。NFS ファ イルロックは KVM でサポートされていないので、使用し ない でください。 大規模な導入には iSCSI ストレージを選択するのがよいでしょう。設定の詳細については、「iSCSI ベースの ストレージプール」を参照してください。 また、このセクションの内容は 『Red Hat Linux ストレージ管理ガイド』 に記載されている詳細な説明の代わりとなる ものではありません。NFS の設定方法や、IP テーブルの開き方、およびファイアウォールの設定方法などの詳細につい ては、『Red Hat Linux ストレージ管理ガイド』 を参照してください。 1. ディス ク イメージ 用ディレ ク ト リーを作成す る この共有 ディレクトリーには、ゲスト仮想マシン用のディスクイメージを格納します。このた め、/ v a r / lib / lib v ir t / im a g e s とは別の場所にディレクトリーを作成します。例を示します。 # m kdir /var/lib/libvirt-im g/im ages 2. NFS 設定フ ァ イル に新規ディレ ク ト リーパ ス を追加す る NFS 設定ファイルはテキストファイルで、/ e t c / e x p o r t s に格納されています。このファイルを開き、上記ス テップ 1 で作成したファイルへのパスを追加します。 # echo "/var/lib/libvirt-im g/im ages" >> /etc/exports/[NFS -Config-FILENAM E.txt] 3. NFS を起動す る a. NFS のポートが ip t a b le s (20 4 9 など) で開かれていることを確認します。また、NFS を / e t c / h o s t s .a llo w ファイルに追加します。 b. NFS サービスを起動します。 # service nfs start 4 . ソ ース および移行先に共有ス ト レ ージ をマ ウント す る 以下のコマンドをソースシステム上で 1 回、さらに移行先システム上でもう 1 回実行し て、/ v a r / lib / lib v ir t / im a g e s ディレクトリーを両方のシステムにマウントします。 # m ount s o u r c e _ h o s t :/var/lib/libvirt-im g/im ages /var/lib/libvirt/im ages 24 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 警告 この手順で作成されたディレクトリーが 「ライブマイグレーションの要件」 にある要件にしたがってい ることを確認してください。また、ディレクトリーには適切な SELinux ラベルが付けられている必要が ある場合があります。詳細情報は、Red Hat Enterprise Linux 6 ストレージ管理ガイド の NFS の 章を参照してください。 5.4 . virsh を使用した KV M の ライブマ イグ レーション ゲスト仮想マシンは v ir s h コマンドで別のホスト物理マシンに移行することができます。m ig r a t e コマンドは以下の 形式のパラメーターを受け入れます。 # virsh m igrate --live G u e s t N a m e D e s t in a t io n U R L ライブマイグレーションが不要な場合は、 --live オプションは省略しても構いません。その他のオプションについて は、「virsh migrate コマンドのオプション」をご覧ください。 G u e s t N a m e パラメーターは移行するゲスト仮想マシンの名前を表します。 D e s t in a t io n U R L パラメーターは移行先ホスト物理マシンの接続 URL です。移行先システムでも Red Hat Enterprise Linux の同じバージョンを稼働していなければなりません。また、同じハイパーバイザーを使用し lib v ir t を実行しておく必要があります。 注記 通常の移行とピアツーピアの移行では、 D e s t in a t io n U R L パラメーターの意味が異なります。 通常の移行の場合: D e s t in a t io n U R L は、ソースのゲスト仮想マシンから見た移行先ホスト物理マシ ンの URL になります。 ピアツーピア移行の場合: D e s t in a t io n U R L は、ソースのホスト物理マシンから見た移行先ホスト物理 マシンの URL になります。 コマンドを入力すると、移行先システムの ro o t パスワードの入力が求められます。 重要 移行が正常に行なわれるには、移行先ホスト物理マシンのエントリーがソースサーバーの / e t c / h o s t s 内 になければなりません。以下の例のように、このファイル内に移行先ホスト物理マシンの IP アドレスとホスト名 を入力します。移行先ホスト物理マシンの IP アドレスとホスト名をそれぞれ適切なものに置き換えてください。 10.0.0.20 host2.exam ple.com 例: virs h を使用し たライブ マ イグ レ ーシ ョ ン 25 仮 想 化 管 理 ガイ ド この例では h o s t 1.e x a m p le .c o m から h o s t 2 .e x a m p le .c o m に移行を行っています。環境に適したホスト物 理マシンの名前を使用してください。この例では g u e s t 1- r h e l6 - 6 4 という名前の仮想マシンを移行しています。 この例では、共有ストレージが正しく設定されており、前提条件をすべて満たしていると仮定しています (移行の要件 を参照)。 1. ゲス ト 仮想マ シ ンが 実行中であるこ と を確認す る ソースシステム h o s t 1.e x a m p le .c o m で g u e s t 1- r h e l6 - 6 4 が実行中であることを確認します。 [root@ host1 ~]# virsh list Id Nam e S tate ---------------------------------10 guest1-rhel6 -6 4 running 2. ゲス ト 仮想マ シ ンを移行す る 次のコマンドを実行してゲスト仮想マシンを移行先となる h o s t 2 .e x a m p le .c o m にライブマイグレーショ ンします。移行先 URL の末尾に / s y s t e m を追加し、libvirt にフルアクセスが必要であることを伝えます。 # virsh m igrate --live g u e s t 1- r h e l6 - 6 4 q e m u +s s h :/ / h o s t 2 .e x a m p le .c o m / s y s t e m コマンドを入力すると、移行先システムの ro o t パスワードの入力が求められます。 3. 待機す る 負荷やゲスト仮想マシンのサイズにより移行にかかる時間は異なります。v ir s h はエラーが発生した場合し か報告しません。ゲスト仮想マシンは、移行が完全に終了するまでソースのホストマシンで継続的に実行され ます。 4. ゲス ト 仮想マ シ ンが 移行先ホス ト に到達し て いるこ と を確認す る 移行先システムの h o s t 2 .e x a m p le .c o m で g u e s t 1- r h e l6 - 6 4 が実行中であることを確認します。 [root@ host2 ~]# virsh list Id Nam e S tate ---------------------------------10 guest1-rhel6 -6 4 running これでライブマイグレーションが完了しました。 26 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 注記 libvirt では、TLS/SSL、UNIX ソケット、SSH、および暗号化されていない TCP などの各種のネットワーク方 式に対応しています。他の方式を利用する方法についての詳細は、6 章ゲストのリモート管理 を参照してくだ さい。 注記 稼働していないゲスト仮想マシンの移行は v ir s h m ig r a t e では行えません。稼働していないゲスト仮想マ シンを移行するには、次のスクリプトを使用してください。 virsh dum pxm l G uest1 > G uest1.xm l virsh -c qem u+ssh://<target-system -FQ DN> virsh undefine G uest1 define G uest1.xm l 5.4 .1. virs h を使用した移行に関す る ヒ ント 複数の移行を別々のコマンドシェルで実行する同時ライブマイグレーションが可能です。ただし、それぞれの移行インス タンスは (ソースと移行先) それぞれの MAX_CLIENT 値を使用するため、この移行は慎重に計算した上で行なわな ければなりません。デフォルトの設定値は 20 なので、10 インスタンスまでは設定を変更せずに行なうことができます。 設定値を変更する必要がある場合は、手順5.1「libvirtd.co nf の設定」の手順を参照してください。 1. 手順5.1「libvirtd.co nf の設定」の手順に従って libvirtd.co nf ファイルを 開きます。 2. Pro cessing co ntro ls セクションを見つけます。 ################################################################# # # Processing controls # # The m axim um num ber of concurrent client connections to allow # over all sockets com bined. #m ax_clients = 20 # The m inim um lim it sets the num ber of workers to start up # initially. If the num ber of active clients exceeds this, # then m ore threads are spawned, upto m ax_workers lim it. # Typically you'd want m ax_workers to equal m axim um num ber # of clients allowed #m in_workers = 5 #m ax_workers = 20 # The num ber of priority workers. If all workers from above # pool will stuck, som e calls m arked as high priority # (notably dom ainDestroy) can be executed in this pool. #prio_workers = 5 27 仮 想 化 管 理 ガイ ド # Total global lim it on concurrent RPC calls. S hould be # at least as large as m ax_workers. Beyond this, RPC requests # will be read into m em ory and queued. This directly im pact # m em ory usage, currently each request requires 256 KB of # m em ory. S o by default upto 5 M B of m em ory is used # # XXX this isn't actually enforced yet, only the per-client # lim it is used so far #m ax_requests = 20 # Lim it on concurrent requests from a single client # connection. To avoid one client m onopolizing the server # this should be a sm all fraction of the global m ax_requests # and m ax_workers param eter #m ax_client_requests = 5 ################################################################# 3. m a x _ c lie n t s と m a x _ w o r k e r s のパラメーター設定値を変更します。この 2 つのパラメーターの数字を 同一にしておくことを推奨しています。 m a x _ c lie n t s は移行ごとに 2 つのクライアントを使用し (ソース側 と移行先に 1 つずつ)、 m a x _ w o r k e r s は実行フェーズではソース側で 1 wo rker、移行先で 0 wo rker を 使用し、終了フェーズでは移行先で 1 wo rker を使用します。 重要 m a x _ c lie n t s と m a x _ w o r k e r s のパラメーター設定値は、全ゲスト仮想マシンの libvirtd サー ビスへの接続により生じます。つまり、同じゲスト仮想マシンを使用し、同時に移行を行なっている ユーザーはすべて m a x _ c lie n t s と m a x _ w o r k e r s パラメーターに設定された制限値に影響を 受けます。このため、同時ライブマイグレーションを行なう際は、まず最大値を注意深く検討する必要が あります。 4 . ファイルを保存してサービスを再起動します。 注記 移行中に接続が中断される場合がありますが、これは開始後に認証が行なわれていない SSH セッ ションが多すぎる場合に発生します。デフォルトでは、 sshd で認証前の状態が許可されるのは 10 セッションのみです。この設定は sshd 設定ファイル (/ e t c / s s h / s s h d _ c o n fig ) 内の M a x S t a r t u p s パラメーターで制御されています。このパラメーターは調整する必要がある場合が あります。Do S 攻撃 (リソースの過剰な消費) などを防ぐ目的でこの制限が設けられているため、こ のパラメーターを調整する際は注意が必要です。この値を高く設定しすぎると、当初の目的が意味が なくなってしまいます。パラメーターを変更する場合は、/ e t c / s s h / s s h d _ c o n fig を編集して M a x S t a r t u p s 行の先頭にある # を削除し、 10 (デフォルト値) の値をさらに大きな数値に変更し ます。ファイルを保存して sshd サービスを再起動するのを忘れないようにしてください。詳細 は、s s h d _ c o n fig の man ページを参照してください。 5.4 .2. virs h mig rate コマ ンド の オプション --live のほかにも、virsh migrate コマンドは次のようなオプションを受け取ります。 --direct - ダイレクト移行に使用します。 28 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン --p2p - ピアツーピア移行に使用します。 --tunnelled - トンネル化する移行に使用します。 --persistent - ドメインを移動先ホスト物理マシンでもそのまま永続的な状態に維持します。 --undefineso urce - ソースのホスト物理マシンのゲスト仮想マシンを削除します。 --suspend - ドメインを移動先ホスト物理マシンでもそのまま一時停止の状態に維持します。 --co py-sto rage-all (非推奨) - 共有しないストレージでディスクの完全コピーを行なう移行を示します。 --co py-sto rage-inc (非推奨) - 共有しないストレージで増分コピーを行なう移行を示します (ソースと移動先間 で共有する同じベースイメージ)。いずれの場合も、ディスクのイメージは移動先ホスト物理マシン上になければなり ません。 --co py-sto rage-*. (非推奨) オプションは、libvirt に対し、ソースのホスト物理マシン上にあるイメージか らのデータを移動先ホスト物理マシン上の同じ場所にあるイメージに転送するよう指示するだけです。詳細は、カス タマーポータル上の Do es kvm suppo rt live migratio n with no n-shared sto rage? を参照してください。 --change-pro tectio n - 移行の実行中に、互換性のない設定変更がドメインに対して行なわれないよう強制し ます。このフラグは、ハイパーバイザーでサポートされている場合に暗黙的に有効になります。ただし、ハイパーバイ ザーに変更保護のサポート機能がない場合には、これを明示的に使用して移行を拒否することができます。 --unsafe - 移行を強制的に実施し、安全のための手順はすべて無視します。 --verbo se - 移行実施中の進捗状況を表示します。 [--abo rt-o n-erro r] - ソフトエラー (I/O エラーなど) が移行プロセス中に発生する場合に移行をキャンセルしま す。 [--migrateuri] - 移行 URI、通常は省略されます。 [--do main <string>]- ドメイン名、id または uuid [--desturi <string>] - クライアント(通常の移行)またはソース(P2P 移行)から見える移動先ホスト物理マシン の接続 URI [--migrateuri] - 移行 URI(通常は省略可) --timeo ut <seco nds> - ライブマイグレーションカウンターが N 秒を超えるとゲスト仮想マシンを強制的に一時 停止します。ライブマイグレーションでしか使用できません。タイムアウトが開始されると、一時停止しているゲスト 仮想マシンで移行が続行されます。 dname - 移行中にドメイン名を新しい名前に変更する場合に使用します。このオプションも通常は省略できます。 [--dname] <string> - 移行中にゲスト仮想マシンの名前を新しい名前に変更します (サポートされる場合) --xml - 基礎となるストレージにアクセスする際にソースと移動先間で異なる名前を構成するなど、ドメイン XML の ホスト固有の部分に多数の変更を加える場合、指定するファイル名を使用して、移動先で使用する代替 XML ファ イルを与えることができます。このオプションは通常は省略します。 詳細については virsh の man ページを参照してください。 5.5. virt- manag e r を使用した移行 このセクションでは、v ir t - m a n a g e r を使ってあるホスト物理マシンから別のホスト物理マシンに KVM ゲスト仮想 マシンを移行する方法について説明します。 1. virt -ma n a g e r を開く 29 仮 想 化 管 理 ガイ ド v ir t - m a n a g e r を開きます。メインメニューバーで ア プリケ ーシ ョ ン → シ ス テム ツール → 仮想マ シ ン マ ネ ージ ャー の順に選択し v ir t - m a n a g e r を起動します。 図5 . 1 Virt -M a n a g e r の メインメニュ ー 2. 移動先の ホス ト 物理マ シ ンに接続す る フ ァ イル メニューをクリックし、次に 接続を追加 をクリックして移動先ホスト物理マシンに接続します。 図5 . 2 「接続を追加」の ウィンドウを開く 3. 接続を追加す る 30 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 接続を追加 のウィンドウが表示されます。 図5 . 3 移動先の ホス ト 物理マ シ ンへ の 接続を追加す る 以下のような詳細を入力します。 ハイパーバイザー : Q E M U/ KVM を選択します。 メソッド : 接続方式を選択します。 ユーザー名 : リモートのホスト物理マシンのユーザー名を入力します。 ホスト名 : リモートのホスト物理マシンのホスト名を入力します。 接続 ボタンをクリックします。この例では SSH 接続を使用しているため、次のステップで指定ユーザーのパ スワードを入力する必要があります。 31 仮 想 化 管 理 ガイ ド 図5 . 4 パ ス ワードの 入力 4 . ゲス ト 仮想マ シ ンを移行す る ソースのホスト物理マシン内にあるゲストの一覧を開き (ホスト名の左側にある小さい三角をクリックし)、移 行するゲスト (この例では g u e s t 1 -rh e l6 -6 4 ) を右クリックしてから マ イグ レ ーシ ョ ン をクリックします。 図5 . 5 移行す るゲス ト の 選択 新し いホス ト フィールドのドロップダウンリストを使い、ゲスト仮想マシンの移行先とするホスト物理マシンを 選択し、マ イグ レ ーシ ョ ン をクリックします。 32 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 図5 . 6 移行先ホス ト 物理マ シ ンの 選択と 移行プロ セス の 開始 進捗ウィンドウが表示されます。 図5 . 7 進捗ウィンドウ 33 仮 想 化 管 理 ガイ ド virt -ma n a g e r には、移行先ホストで実行されている新たに移行したゲスト仮想マシンが表示されるように なります。ソースのホスト物理マシンで実行されていたゲスト仮想マシンは「停止中」の状態で表示されます。 図5 . 8 移行先ホス ト 物理マ シ ンで実行され る移行済みゲス ト 仮想マ シ ン 5. オ プシ ョ ン - ホス ト 物理マ シ ンの ス ト レ ージ の 詳細を表示す る 編集 メニューの 接続の 詳細 をクリックすると、接続の詳細ウィンドウが表示されます。 ストレージ タブをクリックします。移行先ホスト物理マシンの iSCSI ターゲットの詳細が表示されます。移 行済みゲスト仮想マシンがストレージを使用しているマシンとして一覧表示されることに注意してください。 34 第 5 章 K VM の ラ イ ブ マ イ グ レーシ ョ ン 図5 . 9 ス ト レ ージ の 詳細 このホストは以下の XML 設定で定義されていました。 <pool type='iscsi'> <nam e>iscsirhel6 guest</nam e> <source> <host nam e='virtlab22.exam ple.com .'/> <device path='iqn.2001-05.com .iscsivendor:0-8 a0906 -fbab74a06 a700000017a4cc8 9-rhevh'/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool> ... 図5 . 1 0 移行先ホス ト 物理マ シ ンの X M L 設定 35 仮 想 化 管 理 ガイ ド 第6章 ゲストのリモート管理 このセクションでは、 s s h または TLS と SSL を使用してゲストをリモートで管理する方法を説明します。SSH につい ての詳細は、『Red Hat Enterprise Linux 導入ガイド』 をご覧ください。 6.1. SSH によるリモ ート管理 ssh パッケージは、リモートの仮想化サーバーに安全に管理機能を送信できる暗号化されたネットワークプロトコルを 提供します。ここで説明される方法では、S S H 接続を介して安全にトンネル化した lib v ir t 管理用接続を使ってリ モートのマシン群を管理します。認証はすべてローカルの S S H エージェントで収集したパスフレーズまたはパスワー ド、および S S H パブリックキーの暗号を使って行われます。さらに、各ゲストの VNC コンソールも S S H 経由でトン ネル化されます。 S S H を使って仮想マシンをリモートで管理する場合は、以下の点に注意してください。 仮想マシンの管理を行う場合、リモートのマシンには ro o t でログインしてアクセスする必要があります。 初期接続のセットアップには時間がかかる場合があります。 すべてのホストまたはゲスト上でユーザーのキーを無効にする場合の標準的な方法や普通の方法というものはあ りません。 リモートマシンの台数が多くなると、SSH ではスケーラビリティーが低下します。 注記 Red Hat Enterprise Virtualizatio n を利用すると多数の仮想マシン群のリモート管理が可能になります。 詳細は、Red Hat Enterprise Virtualizatio n のドキュメントを参照してください。 SSH アクセスには以下のパッケージが必要になります。 o penssh o penssh-askpass o penssh-clients o penssh-server v ir t - m a n a g e r の S S H ア ク セス を設定す る - パ ス ワードなし の 場合と パ ス ワードを必要と す る場合 次の手順では、まだ S S H キーのセットアップを行なっていないゼロの状態から開始することを想定しています。SSH キーのセットアップや他のシステムへのキーのコピーがすでに完了している場合は、この手順は省略して構いません。 36 第 6 章 ゲス トの リ モ ート管 理 重要 SSH キーはユーザー固有となるため所有者以外は使用できません。キーの所有者はそのキーを生成した人に なります。キーの共有はできません。 リモートホストへの接続を行う場合、そのキーを所有しているユーザーが v ir t - m a n a g e r を実行しなけれ ばなりません。つまり、リモートのシステムが ro o t 以外のユーザーによって管理されている場合、v ir t m a n a g e r は特権のないモードで実行されなければなりません。リモートのシステムがローカルの ro o t ユー ザーによって管理されている場合は、ro o t ユーザーに SSH キーを作成させて所有させる必要があります。 ローカルホストは、特権を持たないユーザーで v ir t - m a n a g e r を使って管理することはできません。 1. オ プシ ョ ン: ユーザ ーの 切り 替え 必要に応じてユーザーの切り替えを行います。ここでは、他のホストおよびローカルホストをリモートで管理す るためにローカルの ro o t ユーザーを使用します。 $ su 2. S S H キ ーペ ア の 生成 v ir t - m a n a g e r を使用するマシン上でパブリックキーを生成します。ここではキーの格納先にデフォルトの ~ / .s s h / ディレクトリーを使用します。 # ssh-keygen -t rsa 3. キ ーをリモ ート の ホス ト 群にコピ ー パスワードがないリモートログインまたはパスフレーズがあるリモートログインには、管理を行うシステムに SSH キーを配信しておく必要があります。s s h - c o p y - id コマンドを使って、指定されたシステムアドレス (この例では r o o t @ h o s t 2 .e x a m p le .c o m ) の ro o t ユーザーにキーをコピーします。 # s s h - c o p y - id - i ~ / .s s h / id _ r s a .p u b r o o t @ h o s t 2 .e x a m p le .c o m root@ host2.exam ple.com 's password: ここで、s s h r o o t @ h o s t 2 .e x a m p le .c o m コマンドを使ってマシンにログインしてみま す。.s s h / a u t h o r iz e d _ k e y s ファイルに予期しないキーが追加されていないことを確認します。 必要に応じて、他のシステムにも同じ手順を繰り返します。 4 . オ プシ ョ ン: パ ス フ レ ーズを s s h -a g e n t に追加 既存の ssh-agent にパスフレーズを追加する方法を以下に示します。この作業は ssh-agent を実行して いないと失敗します。エラーや競合を避けるため、SSH パラメーターが正しく設定されていることを確認してく ださい。詳細は、『Red Hat Enterprise Linux 導入ガイド』 を参照してください。 必要に応じて、SSH キーのパスフレーズを s s h - a g e n t に追加します。ローカルのホストで次のコマンドを 使い、パスフレーズを追加して (ある場合) パスワード入力をしないログインを有効にします。 # s s h - a d d ~ / .s s h / id _ r s a SSH キーがリモートのシステムに追加されます。 37 仮 想 化 管 理 ガイ ド lib v ir t デーモ ン ( lib v ir t d ) lib v ir t デーモンは仮想マシンの管理用のインターフェースを提供します。lib v ir t d デーモンをインストールし、管 理を必要とするすべてのリモートホストで実行しておく必要があります。 $ ssh root@ som ehost # c h k c o n fig lib v ir t d o n # s e r v ic e lib v ir t d s t a r t lib v ir t d と S S H の設定が完了したら、仮想マシンへのリモートアクセスおよびリモート管理が可能になるはずで す。また、この時点で V N C を使ったゲストへのアクセスも可能になるはずです。 virt -ma n a g e r でリモ ート ホス ト 群にア ク セス す る リモートホスト群は virt-manager GUI ツールで管理することができます。パスワード入力をしないログインを行うに は、virt-manager を実行するユーザーが SSH キーを所有していなければなりません。 1. virt-manager を起動します。 2. フ ァ イル ->接続を追加 の順に開きます。 図6 . 1 接続を追加の メニュ ー 3. ドロップダウンメニューを使ってハイパーバイザーのタイプを選択し、リモ ート ホス ト に接続 のチェックボック スをクリックして接続の メソ ッ ド (この例では SSH 経由のリモートトンネル) を開き、ユーザ ー名 と ホス ト 名 を入力します。次に 接続 をクリックします。 6.2. TLS と SSL 経由の リモ ート管理 38 第 6 章 ゲス トの リ モ ート管 理 TLS と SSL を使って仮想マシンを管理することができます。TLS と SSL によりスケーラビリティーが向上しますが、 SSH を使用する場合より複雑になります (「SSH によるリモート管理」を参照)。TLS と SSL は安全な接続を確保する ために Web ブラウザーで使用される同一のテクノロジーです。lib v ir t 管理接続は、着信接続用の TCP ポートを 開きます。この接続には安全な暗号化が行なわれ、x50 9 証明書に基づいて認証されます。TLS と SSL での管理に 必要な認証用証明書を作成し、実装する方法を以下に示します。 手順6 . 1 T L S 管理の 認証局 ( CA) キ ーを作成す る 1. まず最初に c e r t t o o l ユーティリティーがインストールされていることを確認します。インストールされていな い場合は、以下を実行します。 # y u m in s t a ll g n u t ls - u t ils 2. 次のコマンドを使ってプライベートキーを生成します。 # c e r t t o o l - - g e n e r a t e - p r iv k e y > c a k e y .p e m 3. キーを生成したら、次にキーに自己署名できるよう署名ファイルを作成します。署名の詳細を含むファイルを作 成して、c a .in fo という名前を付けます。このファイルには次の行を含めてください。 # v im c a .in fo cn = Nam e of your organization ca cert_signing_key 4 . 自己署名キーを次のコマンドで生成します。 # c e r t t o o l - - g e n e r a t e - s e lf- s ig n e d - - lo a d - p r iv k e y c a k e y .p e m - t e m p la t e c a .in fo - - o u t file c a c e r t .p e m ファイルを生成し終わったら、r m コマンドで ca.info ファイルは削除して構いません。生成プロセスで作成さ れたファイルには c a c e r t .p e m という名前が付けられます。このファイルがパブリックキー (証明書) になり ます。ロードしたファイル c a k e y .p e m がプライベートキーです。このファイルは共有スペースには保管しない ようにし、このキーは機密扱いにしてください。 5. c a c e r t .p e m 認証局証明書ファイルをすべてのクライアントおよびサーバーの / e t c / p k i/ C A / c a c e r t .p e m ディレクトリーにインストールし、この認証局で発行した証明書は信頼でき る証明書であることを通知します。このファイルの内容を表示させる場合は、次のコマンドを実行します。 # c e r t t o o l - i - - in file c a c e r t .p e m 認証局の設定は以上です。認証局のプライベートキーは安全な場所に保管してください。クライアントやサー バーの証明書を発行する際に必要となります。 手順6 . 2 サ ーバ ーの 証明書を発行す る 以下の手順は、X.50 9 Co mmo nName (CN) フィールドをサーバーのホスト名に設定して証明書を発行する方法を 示しています。CN は、クライアントがサーバーに接続する際に使用するホスト名と一致しなければなりません。この例 では、クライアントは q e m u :/ / m y c o m m o n n a m e / s y s t e m という URI を使用してサーバーに接続するので、CN フィールドも同様に myco mmo nname にします。 1. サーバーのプライベートキーを作成します。 39 仮 想 化 管 理 ガイ ド # c e r t t o o l - - g e n e r a t e - p r iv k e y > s e r v e r k e y .p e m 2. まず s e r v e r .in fo という名前のテンプレートファイルを作成して認証局のプライベートキー用の署名を 生成します。CN にはサーバーのホスト名と同じ名前を必ず設定してください。 organization = Nam e of your organization cn = m ycom m onnam e tls_www_server encryption_key signing_key 3. 次のコマンドで証明書を作成します。 # c e r t t o o l - - g e n e r a t e - c e r t ific a t e - - lo a d - p r iv k e y s e r v e r k e y .p e m - lo a d - c a - c e r t ific a t e c a c e r t .p e m - - lo a d - c a - p r iv k e y c a k e y .p e m \ - t e m p la t e s e r v e r .in fo - - o u t file s e r v e r c e r t .p e m 4 . 次の 2 種類のファイルが生成されます。 serverkey.pem - サーバーのプライベートキー servercert.pem - サーバーのパブリックキー プライベートキーを保存する場所は機密扱いにしてください。ファイルの内容を表示するには、次のコマンドを 実行します。 # c e r t t o o l - i - - in ifile s e r v e r c e r t .p e m このファイルを開いた場合、C N = パラメーターが前の手順で設定した CN と同じであることを確認してくださ い。この例の場合は m y c o m m o n n a m e になります。 5. この 2 つのファイルを次の場所にインストールします。 s e r v e r k e y .p e m - サーバーのプライベートキーです。このファイルは 「/ e t c / p k i/ lib v ir t / p r iv a t e / s e r v e r k e y .p e m 」に配置します。 s e r v e r c e r t .p e m - サーバーの証明書です。このファイルはサーバーの「 / e t c / p k i/ lib v ir t / s e r v e r c e r t .p e m 」に配置します。 手順6 . 3 ク ライア ント の 証明書を発行す る 1. すべてのクライアント (virt-manager など libvirt でリンクしているすべてのプログラム) について、適切な名 前に設定された X.50 9 Distinguished Name (DN) で証明書を発行する必要があります。これについて は企業レベルで検討する必要があります。 たとえば、次のような情報を使用します。 C=US A,S T=North Carolina,L=Raleigh,O =Red Hat,CN=nam e_of_client この手順は 手順6 .2「サーバーの証明書を発行する」とよく似ていますが、次の点が異なります。 2. プライベートキーを次のコマンドで作成します。 # c e r t t o o l - - g e n e r a t e - p r iv k e y > c lie n t k e y .p e m 40 第 6 章 ゲス トの リ モ ート管 理 3. まず最初に c lie n t .in fo という名前のテンプレートファイルを作成して、認証局のプライベートキーの署 名を生成します。ファイルには次の行が含めます (地域や場所に応じてフィールドをカスタマイズしてくださ い)。 country = US A state = North Carolina locality = Raleigh organization = Red Hat cn = client1 tls_www_client encryption_key signing_key 4 . 次のコマンドで証明書に署名します。 # c e r t t o o l - - g e n e r a t e - c e r t ific a t e - - lo a d - p r iv k e y c lie n t k e y .p e m - lo a d - c a - c e r t ific a t e c a c e r t .p e m \ - - lo a d - c a - p r iv k e y c a k e y .p e m - t e m p la t e c lie n t .in fo - - o u t file c lie n t c e r t .p e m 5. 証明書をクライアントマシンにインストールします。 # c p c lie n t k e y .p e m / e t c / p k i/ lib v ir t / p r iv a t e / c lie n t k e y .p e m # c p c lie n t c e r t .p e m / e t c / p k i/ lib v ir t / c lie n t c e r t .p e m 6.3. トランス ポートモ ード リモート管理用に、lib v ir t では次のようなトランスポートモードに対応しています。 T ra n s p o rt L a ye r S e cu rit y ( T L S ) Transpo rt Layer Security TLS 1.0 (SSL 3.1) で認証され、暗号化される TCP/IP ソケットは、通常パブリック ポート番号でリッスンします。これを使用するには、クライアントとサーバーの証明書を生成する必要があります。標準 のポートは 16 514 です。 UNIX ソ ケ ッ ト UNIX ドメインソケットはローカルマシン上でのみアクセス可能となります。ソケットは暗号化されず、認証には SELinux または UNIX のパーミッションを使用します。標準のソケット名は / v a r / r u n / lib v ir t / lib v ir t s o c k と / v a r / r u n / lib v ir t / lib v ir t - s o c k - r o (読み取り専用接続) です。 SSH Secure Shell pro to co l (SSH) 接続経由でトランスポートされます。Netcat ( nc パッケージ) をインストールしてお く必要があります。libvirt デーモン (lib v ir t d ) がリモートマシン上で実行されている必要があります。SSH アクセス 用にポート 22 を開けておく必要があります。いずれかの SSH キー管理 (s s h - a g e n t など) を使用しないとパス ワードの入力が求められます。 41 仮 想 化 管 理 ガイ ド e xt e x t パラメーターは、libvirt の対象範囲外となる手段でリモートマシンに接続を行う外部プログラムに使用されます。 このパラメーターはサポートされていません。 T CP 暗号化されていない TCP/IP ソケットです。実稼働での使用には推奨されません。通常は無効になっていますが、テス トを行う場合や信頼できるネットワークで使用する場合などには管理者によって有効にされることがあります。デフォル トのポートは 16 50 9 です。 他に指定がない場合、デフォルトのトランスポートモードは TLS です。 リモ ート URI URI (Unifo rm Reso urce Identifier) は、リモートホストに接続するために v ir s h と libvirt によって使用されます。 また URI は v ir s h コマンドに - - c o n n e c t パラメータを付けて使用すると、リモートホストで単一コマンドや移行 を実行することができます。リモート URI は一般的なローカル URI を取り、ホスト名またはトランスポート名を追加して 形成されます。特殊なケースとして、「リモート」の URI スキームを使用すると、リモート libvirtd サーバーは最適なハ イパーバイザードライバーを探索するように指示されます。これはローカル接続用に NULL URI を渡すのと同等です。 libvirt URI は汎用の形式を取ります (角括弧 [] 内の内容はオプションの関数を表します)。 driver[+transport]://[usernam e@ ][hostnam e][:port]/path[?extraparam eters] ハイパーバイザー (ドライバー) が QEMU の場合、パスは必須になります。XEN の場合、パスはオプションになりま す。 以下は有効なリモート URI のいくつかの例です。 qemu://ho stname/ xen://ho stname/ xen+ssh://ho stname/ 外部の場所を対象とする場合は、トランスポートメソッドまたはホスト名を指定する必要があります。詳細 は、http://libvirt.o rg/guide/html/Applicatio n_Develo pment_Guide-Architecture-Remo te_URIs.html を参照してください。 リモ ート 管理の 例 h o s t 2 という名前のリモート KVM ホストに接続します。SSH トランスポートを使用し、SSH ユーザー名は v ir t u s e r です。co nnect コマンドは c o n n e c t [ < n a m e > ] [ - - r e a d o n ly ] です。ここでの < n a m e > は、説明されている有効な URI になります。v ir s h c o n n e c t コマンドについての詳細は、「co nnect」 を参照 してください。 q e m u +s s h :/ / v ir t u s e r @ h o t 2 / ホスト上にある h o s t 2 という名前のリモート KVM ハイパーバイザーに接続します。TLS を使用します。 q e m u :/ / h o s t 2 / 42 第 6 章 ゲス トの リ モ ート管 理 テス ト 事例 ローカルの KVM ハイパーバイザーに非標準の UNIX ソケットで接続します。この例では、UNIX ソケットへの完 全パスが明示的に指定されています。 q e m u +u n ix :/ / / s y s t e m ? s o c k e t = / o p t / lib v ir t / r u n / lib v ir t / lib v ir t - s o c k 暗号化していない TCP/IP 接続で libvirt デーモンに接続します。IP アドレスが 10 .1.1.10 でポートが 50 0 0 のサーバーへの接続です。この例ではデフォルト設定で test ドライバーが使用されています。 t e s t +t c p :/ / 10 .1.1.10 :5 0 0 0 / d e fa u lt 追加の URI パ ラメーター 追加パラメーターをリモート URI に追加することができます。以下の表に認識されているパラメーターを示します (表 6 .1「追加の URI パラメーター」)。これ以外のパラメーターはすべて無視されます。パラメーターの値は URI エスケー プにしなければならない点に注意してください (つまり、疑問符 (?) をパラメーターの前に付けると、特殊文字が URI 形式に変換されます)。 表6 . 1 追加の URI パ ラメーター 名前 ト ランス ポート モ ード 詳細 使用事例 name すべてのモード name=qemu:///syste m co mmand ssh と ext so cket unix と ssh name がリモートの virCo nnectOpen 関数 に渡されます。name は通 常、リモート URI からトラン スポート、ホスト名、ポート 番号、ユーザー名および追 加パラメーターを取り除い たものになります。ただし、 非常に複雑なケースでは、 name を明示的に指定す る方がよい場合がありま す。 外部コマンドです。ext トラ ンスポートの場合に必要で す。ssh の場合、デフォルト は ssh です。co mmand の PATH が検索されま す。 UNIX ドメインソケットへの パスで、デフォルトを上書き します。ssh トランスポート の場合、これがリモートの netcat コマンドに渡され ます (netcat を参照)。 co mmand=/o pt/o pen ssh/bin/ssh so cket=/o pt/libvirt/ru n/libvirt/libvirt-so ck 43 仮 想 化 管 理 ガイ ド 名前 ト ランス ポート モ ード 詳細 使用事例 netcat ssh リモートシステムに接続す netcat=/o pt/netcat/b る場合に n e t c a t コマン in/nc ドを使用することができま す。デフォルトの netcat パラメーターは n c コマンド を使用します。SSH トラン スポートの場合、libvirt に より以下の形式で SSH コ マンドが構成されます。 c o m m a n d -p p o r t [-l usernam e] hostnam e n e t c a t -U so cket p o r t 、 u s e r n a m e 、およ び h o s t n a m e の各パラ メーターをリモート URI の 一部として指定できま す。 c o m m a n d 、 n e t c a t 、 および s o c k e t は他の追 加パラメーターから取られ たものです。 no _verify tls no _tty ssh 44 ゼロ以外の値に設定する no _verify=1 と、クライアント側のサー バー証明書のチェックが無 効になります。サーバー側 のクライアント証明書の チェックまたは IP アドレス のチェックを無効にする場 合は、libvirtd 設定を変更 する必要があります。 ゼロ以外の値に設定する no _tty=1 と、リモートマシンに自動的 にログインできない場合に SSH がパスワードの入力 を求めてこないようにしま す。ターミナルにアクセス できない場合にこれを使用 します。 第 7章 K VM での オ ーバ ーコ ミ ット 第7章 K VM でのオーバーコミット 7.1. はじめ に KVM ハイパーバイザーは、CPU およびメモリーのオーバーコミットに対応しています。システム上に実際に存在する物 理的なリソースの容量を超える仮想化 CPU または仮想化メモリーを割り当てるのがオーバーコミットです。CPU の オーバーコミットを行うことで、使用率の低い仮想化サーバーやデスクトップをより少数のサーバーで実行することが できるため、リソースとしてのシステム数が節約でき、節電効果や冷却効果、サーバーのハードウェアに対する投資効 果などの実質的な効果を得ることができます。 ほとんどのプロセスで割り当てられたメモリーを常に 10 0 % 必要とすることはありません。KVM ではこの性質を利用 することで、ホスト物理マシンに実際にある物理的なメモリー以上のメモリーをゲスト仮想マシンに割り当てることがで きます。これをリソースのオーバーコミットと呼びます。 重要 オーバーコミットがあらゆるメモリー関連の問題に対する理想的なソリューションとなるわけではありません。メ モリー不足に対処するための推奨される方法は、すべてのゲストのメモリー (およびホスト OS の 4 GB) の合 計がホスト物理マシンの物理的なメモリーより少なくなるよう、ゲストに少な目のメモリーを割り当てることで す。ゲスト仮想マシンにさらに多くのメモリーが必要な場合は、ゲスト仮想マシンの swap 領域を増やします。 それでもなお、オーバーコミットを採用する場合には慎重に行なうようにしてください。 KVM ハイパーバイザーで実行しているゲスト仮想マシン群には、そのマシン群専用に割り当てられた物理的な RAM ブロックはありません。代わりに、各ゲスト仮想マシンはホスト物理マシンの Linux プロセスとして動作します。つまり、 メモリーが要求された場合にのみホスト物理マシンの Linux カーネルによってメモリーが割り当てられます。また、ホ スト物理マシンのメモリー管理機能により、物理的なメモリーと swap 領域間でゲスト仮想マシンのメモリーを移動さ せることができます。オーバーコミットを採用する際は、すべてのゲスト仮想マシンだけでなく物理ホストのプロセスも 処理できるよう、ホスト物理マシン上に十分な swap 領域を配分する必要があるのはこのためです。原則として、ホス ト物理マシンのオペレーティングシステムには最大 4 GB のメモリーと最小 4 GB の swap 領域が必要となります。 詳細は、例7.1「メモリーのオーバーコミット例」 を参照してください。 Red Hat ナレッジベース には、swap パーティションのサイズを安全かつ効率的に確定する方法について記載されて います。 注記 以下の例は、swap を設定する方法のみを説明するために提供されています。記載されている設定がご使用 の環境には適さない場合もありますので注意してください。 例7 . 1 メモ リーの オ ーバ ーコミ ッ ト 例 この例では、オーバーコミットに必要な swap 領域を計算する方法について説明しています。簡単に見えるかもし れませんが、オーバーコミットによる影響を無視しないようにしてください。先に進む前に、まず 重要 をご覧くださ い。 ExampleServer1 に物理 RAM が 32GB あるとします。このシステムは 50 ゲスト仮想マシンを実行するように 設定されています。各ゲストには 1GB の仮想化メモリーが必要になります。前述のように、ホスト物理マシンのシ ステム自体にも最大 4GB のメモリー (ゲスト仮想マシンのメモリーとは別) と swap 領域が最小でも 4 GB が追 加で必要になります。 45 仮 想 化 管 理 ガイ ド swap 領域は以下のように計算します。 すべてのゲスト仮想マシンに必要なメモリーの合計量を計算します。この例では、50 ゲスト仮想マシン * 1GB メモリー (1 ゲスト仮想マシンあたり) = 50 GB になります。 ホスト物理マシンのオペレーティングシステムおよびホスト物理マシンの最小 swap 領域に必要なメモリー量 に、ゲスト仮想マシンメモリー量を加えます。この例では、50 GB ゲスト仮想マシンメモリー + 4 GB ホスト物理 マシン OS + 4 GB swap 最小サイズ = 58 GB になります。 この値からシステム上にある物理 RAM の容量を引きます。この例では、58 GB - 32GB = 26 GB になりま す。 算出される値は割り当てる必要のある swap 領域になります。この例では、26 GB になります。 注記 オーバーコミットはすべてのゲスト仮想マシンで役に立つわけではありませんが、集中的なメモリー使用が最 小限となるデスクトップ仮想化の設定や、同一の設定の複数のゲスト仮想マシンを KSM で実行する場合など に機能することが明らかになっています。swap やメモリーのオーバーコミットの設定は、それぞれの環境や設 定が異なるため、プラグインのように簡単に採用できるものではなく、また設定の際に決まった定形があるわけ でもありません。 設定を変更する前に慎重に検討し、ご使用の環境や設定を完全に理解した上で変更を行 なってください。 KSM およびオーバーコミットについての詳細は、8 章KSM を参照してください。 7.2. 仮想化 CPU の オーバーコミット KVM ハイパーバイザーは、仮想化した CPU のオーバーコミットに対応しています。仮想化した CPU は、ゲスト仮想 マシンで許可できる負荷の限界までオーバーコミットすることができます。VCPU (仮想化 CPU) をオーバーコミットす る際は、負荷が 10 0 % に近づくと要求がドロップされたり、使用不可となるレスポンスタイムが発生する恐れがあるた め十分に注意してください。 仮想 CPU (VCPU) のオーバーコミットを行う最適な状態は、単一のホスト物理マシンに複数のゲスト仮想マシンがあ る場合です。ここでは、ゲストは同一の VCPU を共有しません。このタイプの負荷には、Linux スケジューラーが非常に 効率的です。KVM が安全にサポートするのは単一ホスト物理マシンにおいて、負荷が 10 0 % 未満のゲスト仮想マシ ンで、(5 台の仮想マシン上の) 5 つの VCPU に対して1 つの物理 CPU という割合の場合です。KVM はこれら全マ シン間で切り替えを実行し、負荷のバランスを取ります。 物理的なプロセッシングコア数を超えた状態の完全対称型マルチプロセッシングのゲスト仮想マシンはオーバーコ ミットできません。たとえば、VCPU 数が 4 つのゲスト仮想マシンは、デュアルコアプロセッサーのホスト物理マシンで は実行すべきではありません。実際の物理プロセッシングコア数を超えた状態の完全対称型マルチプロセッシングの ゲスト仮想マシンをオーバーコミットすると、パフォーマンスが大幅に低下する原因となります。 ゲスト仮想マシンに割り当てる VCPU 数は、最大でも物理的なコア数と同数にするのが適切であり、その場合は予想 通りの動作となります。たとえば、クアッドコア (プロセッサーコア数が 4 つ) のホストなら VCPU 数が 4つのゲスト仮 想マシンを実行できます。この場合、負荷が 10 0 % 未満なら、この設定で効率的に動作するはずです。 46 第 7章 K VM での オ ーバ ーコ ミ ット 重要 十分な検証を行っていない状態で、実稼働環境でのメモリーや CPU のオーバコミットは実施しないでくださ い。オーバーコミットしている環境では、メモリーやプロセッシングリソースを 10 0 % 使用するアプリケーション は不安定になる可能性があります。導入する前にテストを行ってください。 仮想マシンでのパフォーマンスを最適化する方法については、Red Hat Enterprise Linux 6 仮想化のチューニング と最適化ガイド を参照してください。 47 仮 想 化 管 理 ガイ ド 第8章 K SM 最近のオペレーティングシステムでは共有メモリーという概念が一般的になってきました。たとえば、プログラムが初め て起動する際に、そのプログラムはその親プログラムとすべてのメモリーを共有します。子プログラムまたは親プログラ ムのいずれかがメモリーの変更を試行すると、カーネルによって新しいメモリー領域が割り当てられ、元のコンテンツ がコピーされます。これにより、プログラムがこの新たな範囲を変更できるようになります。これがコピーオンライト (co py o n write) と呼ばれるものです。 KSM はこの概念を逆に応用した Linux の新しい機能になります。KSM により、カーネルはすでに実行中の複数のプ ログラムを検査し、それらのメモリーを比較することができます。メモリーの領域またはページがまったく同一である場 合は、KSM は複数ある同一メモリーページを 1 つのページに減らし、このページにはコピーオンライトのマークが付け られます。ページのコンテンツがゲスト仮想マシンによって変更された場合は、そのゲスト仮想マシン用に新しいペー ジが作成されます。 KSM は KVM を使った仮想化に便利です。ゲスト仮想マシンの起動時に、ゲスト仮想マシンは親の q e m u - k v m プロ セスからのメモリーしか継承しません。同じオペレーティングシステムやアプリケーションを複数のゲストが実行してい る場合、ゲスト仮想マシンがゲスト仮想マシンのオペレーティングシステムのコンテンツを実行し始めると、イメージを 共有することができるようになります。KSM はまったく同一のページのみを識別し、マージします。このため、ゲスト仮 想マシンが干渉されたり、ホスト物理マシンやゲストの安全に影響を与えることはありません。KSM の機能によって KVM は同一のゲスト仮想マシンのメモリー領域が共有されるよう要求することができます。 KSM によってメモリーの速度やその用途が広がります。KSM を使用すると、共通の処理データはキャッシュやメインメ モリーに格納されます。これにより KVM ゲストのキャッシュミスが低減するため、一部のアプリケーションやオペレー ティングシステムのパフォーマンスを向上させることができます。また、メモリーを共有することにより、ゲストの全体的な メモリー使用を抑えるため、より多くのリソースを有効に活用できるようになります。 注記 Red Hat Enterprise Linux 6 .5 より、KSM は NUMA 対応になりました。これにより、ページコアレッシング の実行時に NUMA ローカリティーが考慮されることになり、リモートノードに移行されるページに関連するパ フォーマンスの低下を防ぐことができるようになります。Red Hat は、KSM の使用時にはノード間のメモリー マージを控えることを推奨します。KSM が使用中の場合に は、/ s y s / k e r n e l/ m m / k s m / m e r g e _ a c r o s s _ n o d e s 調整可能パラメーターを 0 に変更し、複数の NUMA ノード間でのページのマージを防ぎます。多量のノード間マージが実行されると、カーネルメモリーのア カウンティング統計は相反する結果となる可能性があります。そのため、numad も KSM デーモンが多量のメ モリーをマージした後に混乱する可能性があります。システムに大量の空きメモリーがある場合、KSM デーモ ンをオフにし、無効にすることでパフォーマンスを向上させることができます。NUMA についての詳細は、『Red Hat Enterprise Linux パフォーマンスチューニングガイド』 を参照してください。 Red Hat Enterprise Linux では、KSM の管理に以下の 2 種類の方法を使用しています。 k s m サービス: KSM カーネルスレッドの起動と停止を行います。 k s m t u n e d サービス: k s m の制御と調整を行い、同じページのマージを動的に管理します。この k s m t u n e d サービスは k s m を起動し、メモリー共有が必要ない場合には k s m サービスを停止します。新規のゲストが作成 されたり、ゲストが破棄された場合には、 r e t u n e パラメーターを使い、この k s m t u n e d サービスに対して実行 の指示を出さなければなりません。 いずれのサービスも標準のサービス管理ツールで制御されます。 KS M サ ービ ス k s m サービスは qemu-kvm パッケージに含まれています。Red Hat Enterprise Linux 6 の KSM はデフォルトで はオフになっています。 ただし、Red Hat Enterprise Linux 6 を KVM ホスト物理マシンとして使用する場合は k s m / k s m t u n e d サービスによってオンになる可能性があります。 48 第 8 章 K S M k s m サービスを起動していない場合は、KSM で共有されるページは 20 0 0 ページのみになります。このデフォルト 値ではページ数が少ないため、メモリー節約で得られる利点も限られます。 k s m サービスを起動すると、KSM は最大でホスト物理マシンシステムのメインメモリーの 50 % まで共有するようにな ります。k s m サービスを起動して KSM がより多くのメモリーを共有できるようにします。 # service ksm start S tarting ksm : [ OK ] k s m サービスをデフォルトのスタートアップ順序に追加することができます。chkco nfig コマンドを使って k s m サー ビスを永続化します。 # chkconfig ksm on KS M チュ ーニング サ ービ ス k s m t u n e d サービスにはオプションがありません。k s m t u n e d サービスはループして k s m の調整を行います。ゲス ト仮想マシンが作成されたり、破棄された場合は、libvirt によって k s m t u n e d サービスに通知されます。 # service ksm tuned start S tarting ksm tuned: [ OK ] k s m t u n e d サービスは r e t u n e パラメーターを使って調整できます。 r e t u n e パラメーターの指示によって k s m t u n e d は手動によるチューニング機能を実行します。 ファイル内のパラメーターを変更する前に、以下の用語を明確に理解しておく必要があります。 t h r e s - キロバイト単位のアクティブ化しきい値です。 t h r e s 値とすべての q e m u - k v m プロセスによって消費 されるメモリー量である RSZ 値の合計がシステムメモリーの合計を上回ると、KSM サイクルがトリガーされます。 このパラメーターは、 K S M _ TH R E S _ C O E F に定義されるパーセンテージをキロ単位で表したものと同等です。 / e t c / k s m t u n e d .c o n f ファイルは k s m t u n e d サービスの設定ファイルになります。デフォルトの k s m t u n e d .c o n f ファイルの出力を以下に示します。 # Configuration file for ksm tuned. # How long ksm tuned should sleep between tuning adjustm ents # KS M _M O NITO R_INTERVAL=6 0 # M illisecond sleep between ksm scans for 16 G b server. # S m aller servers sleep m ore, bigger sleep less. # KS M _S LEEP_M S EC=10 # KS M _NPAG ES _BO O S T is added to the n p a g e s value, when fr e e m e m o r y is less than thres. # KS M _NPAG ES _BO O S T=300 # KS M _NPAG ES _DECAY Value given is subtracted to the n p a g e s value, when fr e e m e m o r y is greater than t h r e s . # KS M _NPAG ES _DECAY=-50 # KS M _NPAG ES _M IN is the lower lim it for the n p a g e s value. # KS M _NPAG ES _M IN=6 4 # KS M _NAG ES _M AX is the upper lim it for the n p a g e s value. # KS M _NPAG ES _M AX=1250 49 仮 想 化 管 理 ガイ ド # KS M _TRES _CO EF - is the RAM percentage to be calculated in param eter t h r e s . # KS M _THRES _CO EF=20 # KS M _THRES _CO NS T - If this is a low m em ory system , and the t h r e s value is less than K S M _ TH R E S _ C O N S T , then reset t h r e s value to K S M _ TH R E S _ C O N S T value. # KS M _THRES _CO NS T=2048 # uncom m ent the following to enable ksm tuned debug inform ation # LO G FILE=/var/log/ksm tuned # DEBUG =1 KS M の 変数と モ ニタリング KSM はモニタリングデータを / s y s / k e r n e l/ m m / k s m / ディレクトリーに格納します。このディレクトリー内のファイ ルはカーネルによって更新されるため、KSM の使用量と統計値の正確な記録となります。 以下に示す変数も / e t c / k s m t u n e d .c o n f ファイル内にある設定可能な変数となります。 / s y s / k e r n e l/ m m / k s m / 以下の フ ァ イル fu ll_ s ca n s 実行された完全スキャン数 p a g e s _ s h a re d 共有されたページの合計数 p a g e s _ s h a rin g 現在共有されているページ数 p a g e s _ t o _ s ca n スキャンされなかったページ数 p a g e s _ u n s h a re d 共有されなくなったページ数 p a g e s _ vo la t ile 揮発性のページ数 ru n KSM プロセスが実行しているかどうか s le e p _ millis e cs スリープのミリ秒数 / e t c / k s m t u n e d .c o n f ファイルに D E B U G = 1 の行を追加すると、KSM チューニングのアクティビティーが / v a r / lo g / k s m t u n e d ログファイルに格納されます。 L O G F IL E パラメーターを使用するとログファイルの場所を 変更することができます。ただし、ログファイルの場所を変更すると、SELinux 設定に特殊な設定が必要となる場合が あるため、この変更はお勧めできません。 KS M の 無効化 50 第 8 章 K S M KSM にはパフォーマンス上のオーバーヘッドがあり、特定の環境やホスト物理マシンシステムには負荷が大きすぎる 場合があります。 k s m t u n e d と k s m サービスを停止すると KSM を非アクティブ化することができます。これらのサービスの停止によ り KSM は非アクティブ化されますが、再起動後は元に戻ります。 # service ksm tuned stop S topping ksm tuned: # service ksm stop S topping ksm : [ OK ] [ OK ] 再起動後も KSM の非アクティブな状態を永続化するには、c h k c o n fig コマンドを使用します。 サービスをオフにす るには次のコマンドを実行します。 # chkconfig ksm off # chkconfig ksm tuned off 重要 KSM を使用する場合であっても、コミットする RAM に対して swap サイズの大きさが十分であることを確認 してください。KSM は同一または同様のゲストの RAM 使用量を低減します。十分な swap 領域がなくても KSM を使ってゲストをオーバーコミットすることはおそらく可能ですが、ゲスト仮想マシンのメモリー使用によっ てページが共有されなくなる可能性があるため推奨されません。 51 仮 想 化 管 理 ガイ ド 第9章 ゲスト仮想マシンの高度な管理 本章では、システムリソースがゲスト仮想マシンで利用可能な場合に、それらのリソースの微調整を行ったり、制御し たりするための高度な管理ツールについて説明します。 9.1. コントロールグ ループ (cg roup) Red Hat Enterprise Linux 6 では、 コントロールグループ と呼ばれる新たなカーネル機能を搭載しています。この 機能は cgro up とも呼ばれています。cgro up により、ユーザーは CPU 時間、システムメモリー、ネットワーク帯域幅 などのリソースやそれらのリソースの組み合わせをシステム上で実行中のユーザー定義のタスクグループ (プロセス) に割り当てることができるようになります。また、設定した cgro up のモニタリングを行ったり、特定のリソースに対する cgro up のアクセスを拒否することができるほか、稼働中のシステムで cgro up を動的に再設定することもできます。 cgro up 機能は lib virt で完全にサポートされています。デフォルトでは、各ゲストは lib virt により各種コントロー ラー用の別々のコントロールグループに配置されます (メモリー、CPU、blkio 、デバイスなど)。 ゲストは起動される時点ですでに cgro up に属します。ここで必要な設定は cgro up でのポリシーの設定のみになり ます。cgro up についての詳細は、『Red Hat Enterprise Linux リソース管理ガイド』 を参照してください。 9.2. Hug e pag e の サポート はじ め に 通常、x8 6 CPU は 4 kB ページ単位でメモリーに対応しますが、 huge page とも言われる大容量ページを使用する ことも可能です。KVM ゲストは huge page メモリーサポートとデプロイすることで、 TLB (Transactio n Lo o kaside Buffer) の CPU キャッシュヒット率を増加させてパフォーマンスを向上させることができます。huge page により、とくに大量のメモリーやメモリー集約型のワークロードに対するパフォーマンスが大幅に向上します。 Red Hat Enterprise Linux 6 では、huge page の使用によってページサイズを拡大することで、大量のメモリーを 効率的に管理することができます。 KVM ゲストに huge page を使用すると、ページテーブルに使用するメモリーが少なくなり、TLB (Translatio n Lo o kaside Buffer) ミスが減少します。これにより、とくにメモリー集約的な状況の場合にパフォーマンスが大幅に改 善します。 T ra n s p a re n t h u g e p a g e Transparent huge pages (THP) とは、アプリケーションに必要な TLB エントリーを削減するカーネル機能のこと です。また、すべての空きメモリーをキャッシュとして使用できるようにするためパフォーマンスが向上します。 Transparent huge page を使用する場合、q e m u .c o n f ファイルに特別な設定は必要ありませ ん。/ s y s / k e r n e l/ m m / r e d h a t _ t r a n s p a r e n t _ h u g e p a g e / e n a b le d が a lwa ys に設定されている場 合、Huge page がデフォルトで使用されます。 Transparent huge page によって hugetlbfs が使用できなくなるわけではありません。ただし、 hugetlbfs を使用 しない場合には、通常の 4 kb ページサイズではなく Transparent hugepage が KVM によって使用されます。 注記 Huge page を使用したメモリーパフォーマンスのチューニングの手順については、Red Hat Enterprise Linux 7 Virtualizatio n Tuning and Optimizatio n Guide を参照してください。 52 第 9 章 ゲス ト仮 想 マ シ ン の 高 度 な 管 理 9.3. Hype r- V ハ イパ ーバイザ ー上で Re d Hat Ente rprise Linux をゲス ト仮 想マ シンとして実行す る Red Hat Enterprise Linux ゲスト仮想マシンは、Micro so ft Windo ws Hyper-V ハイパーバイザーを実行する Micro so ft Windo ws ホスト物理マシン上で実行することが可能です。特に以下の機能強化により、Red Hat Enterprise Linux ゲスト仮想マシンの導入と管理がより簡単になりました。 アップグレードされた VMBUS プロトコル - VMBUS プロトコルが Windo ws 8 レベルにアップグレードされまし た。この機能強化の一環として、VMBUS 割り込みがゲストの利用可能なすべての仮想 CPU で処理できるよう になりました。さらに、Red Hat Enterprise Linux ゲスト仮想マシンと Windo ws ホスト物理マシン間のシグナ ルプロトコルが最適化されています。 統合フレームバッファードライバー - グラフィックスパフォーマンスを強化し、Red Hat Enterprise Linux デスク トップのユーザーに対して優れた解像度を提供します。 ライブ仮想マシンバックアップサポート - ライブ Red Hat Enterprise Linux ゲスト仮想マシンの中断なしのバッ クアップサポートを提供します。 固定サイズの Linux VHD を動的に拡張 - ライブのマウントされている固定サイズの Red Hat Enterprise Linux VHD の拡張を可能にします。 詳細は、Enabling Linux Suppo rt o n Windo ws Server 20 12 R2 Hyper-V の記事を参照してください。 注記 Hyper-V ハイパーバイザーでは、ディスクの未使用最終部分をユーザーが使用できるようにすることで、最後 のパーティションの後に空きスペースがある場合に Red Hat Enterprise Linux ゲスト上で GPT でパーティ ションされたディスクの圧縮をサポートします。しかし、この操作によってディスクの 2 番目の GPT ヘッダーが 警告を発することなく削除され、ゲストによってパーティションテーブルが検証されるとエラーメッセージが発生 することがあります (p a r t e d でパーティションテーブルを出力するときなど)。これは、Hyper-V の既知の制 限です。回避策として g d is k および e コマンドでエクスパートメニューを使用して、GPT ディスクを圧縮した 後に 2 番目の GPT ヘッダーを手動でリストアすることが可能です。さらに、Hyper-V マネージャーの expand オプションを使用すると、ディスクの最後以外の場所に 2 番目の GPT ヘッダーを置くこともできます が、p a r t e d で移動できます。これらのコマンドの詳細は、 g d is k および p a r t e d の man ページを参照し てください。 9.4 . ゲス ト仮想マ シンの メ モ リー割り当て 以下の手順は、ゲスト仮想マシンにメモリーを割り当てる方法を示しています。以下に示す割り当て作業が有効になる のは起動時のみであり、メモリーの値に変更を加えた場合は次の起動時まで有効になりません。1 ゲストあたりに割り 当てることのできる最大メモリーは 4 TiB です。ただし、このメモリー割り当てはホスト物理マシンのリソースが提供で きる範囲を超えない場合にのみ有効です。 有効なメモリーの単位: バイト、 b または b y t e s キロバイト、 K B (10 3 または 1,0 0 0 バイト) キビバイト、 k または K iB (210 または 10 24 バイト) メガバイト、 M B (10 6 または 1,0 0 0 ,0 0 0 バイト) 53 仮 想 化 管 理 ガイ ド メビバイト、 M または M iB (220 または 1,0 4 8 ,576 バイト) ギガバイト、 G B (10 9 または 1,0 0 0 ,0 0 0 ,0 0 0 バイト) ギビバイト、 G または G iB (230 または 1,0 73,74 1,8 24 バイト) テラバイト、 TB (10 12 または 1,0 0 0 ,0 0 0 ,0 0 0 ,0 0 0 バイト) テビバイト、 T または TiB (240 または 1,0 99,511,6 27,776 バイト) libvirt により値はすべて直近のキビバイトに切り上げられ、またハイパーバイザーで対応できる単位までさらに切り上 げられる場合があるので注意してください。また、ハイパーバイザーの中には、4 0 0 0 KiB (または 4 0 0 0 x 210 また は 4 ,0 96 ,0 0 0 バイト) などの最小値を強制するものがあります。この値の単位は m e m o r y u n it というオプション の属性で確定されます。この属性では、測定単位がキビバイト (KiB) にデフォルト設定されます (210 または 10 24 バイトブロック単位)。 ゲスト仮想マシンがクラッシュする場合、オプションの属性 d u m p C o r e を使用して、ゲスト仮想マシンのメモリーを生 成されるコアダンプに含ませる ( d u m p C o r e = 'o n ' ) か、または含ませない ( d u m p C o r e = 'o ff' ) かの制御を行なう ことができます。デフォルト設定は o n になります。つまり、パラメーターが o ff に設定されていない限り、ゲスト仮想マ シンのメモリーはコアダンプに含まれることになります。 c u r r e n t M e m o r y 属性でゲスト仮想マシンの実際のメモリー割り当てを確定します。ゲスト仮想マシンのオンザフラ イでのメモリーバルーニングを許可するには、この値を最大割り当て値よりも小さくすることができます。この値の設定 を省略すると、memo ry 要素と同じ値にデフォルト設定されます。単位の属性の動作はメモリーの属性と同じです。 このセクションのすべてのケースでは、ドメイン XML を以下のように変更する必要があります。 <dom ain> <m em ory unit='KiB' dum pCore='off'>52428 8 </m em ory> <!-- changes the m em ory unit to KiB and does not allow the guest virtual m achine's m em ory to be included in the generated coredum p file --> <currentM em ory unit='KiB'>52428 8 </currentM em ory> <!-- m akes the current m em ory unit 52428 8 KiB --> ... </dom ain> 9.5. ゲス ト仮想マ シンを自動的に起動す る このセクションでは、ホスト物理マシンシステムの起動フェーズでゲスト仮想マシンを自動的に起動させる方法につい て説明します。 以下の例では、v ir s h を使ってゲスト仮想マシンの Te s t S e r v e r がホスト物理マシンの起動時に自動的に起動す るようにしています。 # virsh autostart Te s t S e r v e r Dom ain TestS erver m arked as autostarted これでゲスト仮想マシンが、ホスト物理マシンで自動的に起動するようになりました。 ゲスト仮想マシンの自動起動を停止するには、 - - d is a b le パラメーターを使用します。 # virsh autostart --disable Te s t S e r v e r Dom ain TestS erver unm arked as autostarted 54 第 9 章 ゲス ト仮 想 マ シ ン の 高 度 な 管 理 これでゲスト仮想マシンがホスト物理マシンで自動的に起動しなくなります。 9.6. ゲス ト仮想マ シンの SMA RT ディス クモ ニタリング を無効にす る 仮想ディスクおよび物理的なストレージデバイスはホスト物理マシンで管理されるため、SMART ディスクモニタリング は安全に無効にすることができます。 # service sm artd stop # chkconfig --del sm artd 9.7. V NC サーバーを設定す る VNC サーバーを設定するには、シ ス テム > 設定 にある リモ ート デス ク ト ッ プ アプリケーションを使用します。また は、v in o - p r e fe r e n c e s コマンドを実行することもできます。 次の手順に従って、専用 VNC サーバーセッションのセットアップを行ないます。 必要であれば、~ / .v n c / x s t a r t u p ファイルを作成し、vn cs e rve r が起動した場合は常に GNOME セッションを 起動するよう編集します。vn cs e rve r スクリプトを初めて実行する際に、VNC セッションに使用するパスワードの入 力が求められます。vnc サーバーファイルについての詳細は、『Red Hat Enterprise Linux インストールガイド』 を 参照してください。 9.8 . 固有の MA C アドレス を新たに生成す る ゲスト仮想マシンに固有の MAC アドレスを新たに生成しなければならない場合があります。本ガイドの作成時点で は、新しい MAC アドレスを生成するための使用できるコマンドラインツールはありません。このため、ここでは以下に示 すスクリプトを使用してゲスト仮想マシンの新しい MAC アドレスを生成することができます。このスクリプトには m a c g e n .p y という名前を付けてゲスト仮想マシンに保存します。そのディレクトリーから ./ m a c g e n .p y コマンドを 使ってスクリプトを実行します。これで新しい MAC アドレスが生成されます。出力例を以下に示します。 $ ./m acgen.py 00:16 :3e:20:b0:11 #!/usr/bin/python # m acgen.py script to generate a M AC address for guest virtual m achines # im port random # def random M AC(): m ac = [ 0x00, 0x16 , 0x3e, random .randint(0x00, 0x7f), random .randint(0x00, 0xff), random .randint(0x00, 0xff) ] return ':'.join(m ap(lam bda x: "% 02x" % x, m ac)) # print random M AC() 9.8.1. ゲス ト仮想マ シンの 新しい MAC を作成す る 別の 方法 p y t h o n - v ir t in s t の組み込みモジュールを使って、ゲスト仮想マシンの設定ファイルで使用する新しい MAC ア ドレスと U U ID を生成することもできます。 55 仮 想 化 管 理 ガイ ド # echo 'im port virtinst.util ; print\ virtinst.util.uuidToS tring(virtinst.util.random UUID())' | python # echo 'im port virtinst.util ; print virtinst.util.random M AC()' | python 上記のスクリプトは以下のようにスクリプトファイルとして実装することもできます。 #!/usr/bin/env python # -*- m ode: python; -*print "" print "New UUID:" im port virtinst.util ; print virtinst.util.uuidToS tring(virtinst.util.random UUID()) print "New M AC:" im port virtinst.util ; print virtinst.util.random M AC() print "" 9.9. ゲス ト仮想マ シンの レス ポンス タイム を改善す る 特定の負荷や使用パターンによって、ゲスト仮想マシンの応答が遅くなるときがあります。ゲスト仮想マシンの応答が 遅くなる、または応答しなくなる原因となる状況のいくつかを以下に示します。 過度にメモリーをオーバーコミットしている プロセッサーの使用率が高い状態でメモリーをオーバーコミットしている その他のビジーなプロセスや停止しているプロセスがホスト物理マシン上にある (q e m u - k v m プロセス以外) KVM ゲスト仮想マシンは Linux プロセスとして機能します。Linux プロセスはメインメモリー (物理 RAM) に永続的 に保持されることはなく、それらが使用されていない場合などはとくに swap 領域 (仮想メモリー) に置かれます。ゲス ト仮想マシンが長時間にわたって非アクティブな状態の場合は、ホスト物理マシンのカーネルはゲスト仮想マシンを swap に移動することがあります。この場合、swap は物理メモリーよりも速度が遅いため、ゲストが応答していないよ うに見えるかもしれません。しかし、ゲストがメインメモリーにいったんロードされるとこの状態は変わります。ゲスト仮想 マシンを swap からメインメモリーにロードするプロセスには、ゲスト仮想マシンに割り当てられる RAM の 1 ギガバイ トごとに数秒の時間がかかる場合があることに注意してください (ただし所要時間は swap に使用されるストレージ のタイプや各種コンポーネントのパフォーマンスによって異なります)。 メモリーがオーバーコミットしているかどうかやメモリー全体の使用量に関係なく、KVM ゲスト仮想マシンのプロセス を swap に移動させることができます。 安全ではないオーバーコミットレベルの使用や swap をオフにしたゲスト仮想マシンのプロセス、その他の重大なプ ロセスのオーバーコミットなどは推奨されません。メモリーのオーバーコミットを行なう際は、常にホスト物理マシンに十 分な swap 領域があることを確認してください。 KVM でオーバーコミットを行う方法についての詳細は、「はじめに」を参照してください。 56 第 9 章 ゲス ト仮 想 マ シ ン の 高 度 な 管 理 警告 仮想メモリーを使用すると、Linux システムがシステム上の物理 RAM に実際にあるメモリーより多くのメモ リーを使用できるようになります。メモリーをあまり使用していないプロセスをスワップアウトし、アクティブなプロ セスがメモリーを使用できるようにすることでメモリー使用率が改善されます。swap を無効にすると、すべての プロセスが物理 RAM に格納されるため、メモリー使用率が減少します。 swap をオフにする場合、ゲスト仮想マシンのオーバーコミットを行わないでください。swap なしにゲスト仮想 マシンをオーバーコミットすると、ゲスト仮想マシンまたはホスト物理マシンのシステムがクラッシュする可能性 があります。 9.10 . libvirt による仮想マ シンの タイマ ー管理 ゲスト仮想マシン上で時間を正確に管理することは、仮想化プラットフォームにおける主要な課題となります。複数の ハイパーバイザーが様々な方法で時間管理の問題を処理しようとします。libvirt では、ドメインの XML 内で <clo ck> と <timer> の要素を使い、ハイパーバイザーからは独立した時間管理の構成を提供します。ドメイン XML の編集は v ir s h e d it コマンドを使って行います。詳細は、「ゲスト仮想マシンの設定ファイルの編集」を参照してください。 < c lo c k > 要素は、ゲスト仮想マシンのクロックとホスト物理マシンのクロックとの同期方法を決定するために使用さ れます。clo ck 要素には次のような属性があります。 o ffs e t : ゲスト仮想マシンのクロックをどのようにホスト物理マシンのクロックでオフセットするかを判別します。 o ffset 属性の値は以下の値になります。 表9 . 1 O ffs e t 属性の 値 値 詳細 utc ゲスト仮想マシンのクロックは、起動時に UTC に同期 されます。 ゲスト仮想マシンのクロックは、起動時にホスト物理マ シンの設定タイムゾーンに同期されます (該当する場 合)。 ゲスト仮想マシンのクロックは、 t im e z o n e 属性で指 定したタイムゾーンに同期されます。 ゲスト仮想マシンのクロックは UTC の任意のオフセッ トに同期されます。UTC に対する差分を a d j u s t m e n t 属性を使って秒数単位で指定します。 ゲスト仮想マシンは RTC (リアルタイムクロック) を自 由に調整することができ、行われた調整は再起動後も 維持されます。これは RTC の調整が再起動するたび すべて失われる u t c モードとは対照的です。 lo caltime timezo ne variable 注記 デフォルトでは、u t c の値が仮想マシンのクロックオフセットとして設定されます。ただし、ゲスト仮想マシ ンのクロックが lo ca lt ime の値を使って実行される場合、ゲスト仮想マシンのクロックをホスト物理マシ ンのクロックと同期させるために、クロックオフセットを別の値に変更する必要があります。 t im e z o n e 属性は、ゲスト仮想マシンのクロックに使用されるタイムゾーンを決定します。 57 仮 想 化 管 理 ガイ ド a d j u s t m e n t 属性は、ゲスト仮想マシンのクロック同期の差分を指定します。UTC に対して増減する秒数を指 定します。 例9 . 1 常に UT C に同期す る <clock offset="utc" /> 例9 . 2 常にホス ト 物理マ シ ンの タイム ゾ ーンに同期す る <clock offset="localtim e" /> 例9 . 3 任意の タイム ゾ ーンに同期す る <clock offset="tim ezone" tim ezone="Europe/Paris" /> 例9 . 4 UT C に同期させて か ら 任意の 秒数を増減させる <clock offset="variable" adjustm ent="123456 " /> 9.10 .1. time r は clock の 子要素です 。 clo ck 要素には子要素として、ゼロまたはそれ以上の timer 要素を持たせることができます。timer 要素には以下の 属性を含めます。 n a m e のみが必須の属性となり、これ以外の属性はすべてオプションです。 n a m e 属性は、使用するタイムソースを決定するもので、以下のいずれかになります。 表9 . 2 n a me 属性の 値 値 詳細 pit Pro grammable Interval Timer - 定期的な割り込み が付いたタイマーです。 Real Time Clo ck - 継続的に実行するタイマーで、定 期的な割り込みが付いています。 Time Stamp Co unter - リセット後のティック数をカウ ントします。割り込みなしです。 KVM クロック - KVM ゲスト仮想マシン用に推奨してい るクロックソースです。KVM の pvclo ck または kvmclo ck によりゲスト仮想マシンがホスト物理マシンの ウォールクロックタイムを読み込みます。 rtc tsc kvmclo ck 9.10 .2. track t r a c k 属性は、タイマーで追跡する対象を指定します。name の値の r t c にのみ使用します。 表9 . 3 t ra ck 属性の 値 58 第 9 章 ゲス ト仮 想 マ シ ン の 高 度 な 管 理 値 詳細 bo o t 旧オプションの h o s t p h ys ica l ma ch in e に該当 します。これは未対応の追跡オプションです。 RTC が常にゲスト仮想マシンの時間を追跡します。 RTC が常にホストの時間を追跡します。 guest wall 9.10 .3. tickpolicy t ic k p o lic y 属性は、ゲスト仮想マシンにティックを渡すために使用されるポリシーです。以下の値を受け付けます。 表9 . 4 t ick p o licy 属性の 値 値 詳細 delay catchup merge discard 通常レートで配信を継続します (ティックが遅延する)。 遅れを取り戻すため、高めのレートで配信します。 複数のティックを単一のティックにマージします。 ミスしたティックはすべて破棄します。 9.10 .4 . fre que ncy、 mode 、 およ び pre s e nt fr e q u e n c y 属性は、Hz で測定される固定周波数を設定するために使用されます。この属性は、n a m e 要素の値が t s c の場合にのみ使用されます。それ以外のすべてのタイマーは固定周波数 (p it 、r t c ) で動作します。 m o d e は、タイムソースをゲスト仮想マシンに公開する方法を指定します。この属性は name の値が t s c の場合に のみ使用されます。それ以外のすべてのタイマーは常にエミュレートされます。コマンドは、< t im e r n a m e = 't s c ' fr e q u e n c y = 'N N N ' m o d e = 'a u t o |n a t iv e |e m u la t e |s m p s a fe '/ > のようになります。モードの定義を表 に示します。 表9 . 5 mo d e 属性の 値 値 詳細 auto TSC が不安定な場合はネイティブです。これ以外はネイ ティブな TSC アクセスを許可します。 常にネイティブな TSC アクセスを許可します。 常に TEC をエミュレートします。 常に TSC とインターロックの SMP をエミュレートしま す。 native emulate smpsafe p r e s e n t は、ゲスト仮想マシンに見えるデフォルトのタイマーセットを上書きします。 表9 . 6 p re s e n t 属性の 値 値 詳細 yes このタイマーをゲスト仮想マシンに見えるよう強制しま す。 このタイマーがゲスト仮想マシンに見えないように強制 します。 no 9.10 .5. クロック同期を使用した例 59 仮 想 化 管 理 ガイ ド 例9 . 5 RT C タイマ ーおよび P IT タイマ ーを使っ て ロ ーカ ル 時間に同期し て いるク ロ ッ ク 以下の例では、クロックは RTC タイマーおよび PIT タイマーを使ってローカル時間に同期しています。 <clock offset="localtim e"> <tim er nam e="rtc" tickpolicy="catchup" track="guest virtual m achine" /> <tim er nam e="pit" tickpolicy="delay" /> </clock> 注記 PIT clo ckso urce は、以下の条件の下で、6 4 ビットのホストで実行される 32 ビットのゲスト (PIT を使用 できない) と共に使用することができます。 ゲスト仮想マシンには 1 つの CPU のみ。 APIC タイマーは無効にされている必要がある ("no apictimer" コマンドラインオプションを使用)。 No HZ モードはゲストで無効にされている必要がある ("no hz=o ff" コマンドラインオプションを使用)。 高解像度タイマーモードはゲストで無効にされている必要がある ("highres=o ff" コマンドラインオプション を使用)。 PIT clo ckso urce は高解像度タイマーモードまたは No Hz モードのいずれとも互換性がない。 9.11. PMU を使用してゲス ト仮想マ シンの パ フォーマ ンス を監視す る Red Hat Enterprise Linux 6 .4 では、vPMU (仮想 PMU) がテクニカルプレビューとして採用されました。vPMU は Intel の PMU (Perfo rmance Mo nito ring Units) をベースとし、Intel マシン上でのみ使用できます。PMU に より、ゲスト仮想マシンがどのように動作しているのかを示す統計値を追跡することができます。 パフォーマンスモニタリングを使用すると、開発を行なう場合など、プロファイリング用のパフォーマンスツールを使いな がら CPU の PMU カウンターも使用することができます。仮想パフォーマンスモニタリングユニットの機能により、仮想 マシンのユーザーは、ゲスト仮想マシン内でパフォーマンス関連の問題を招く可能性のある要因を特定できるようにな るため、KVM ゲスト仮想マシンのプロファイリング機能が改善されます。 この機能を有効にする場合は - c p u h o s t フラグを設定する必要があります。 この機能に対応するのは Red Hat Enterprise Linux 6 を稼働しているゲスト仮想マシンのみで、この機能はデフォ ルトでは無効にされています。この機能は Linux perf ツールを使用しないと正しく動作しません。次のコマンドを使っ て perf パッケージを必ずインストールしてください。 # y u m in s t a ll p e r f . perf コマンドについての詳細は、p e r f の man ページをご覧ください。 9.12. ゲス ト仮想マ シンの 電力管理 Libvirt の Do main XML 内にある次のパラメーターを変更すると、ゲスト仮想マシンのオペレーティングシステムに 対する BIOS の広告を強制的に有効にしたり無効にしたりすることが可能です。 ... 60 第 9 章 ゲス ト仮 想 マ シ ン の 高 度 な 管 理 <pm > <suspend-to-disk enabled='no'/> <suspend-to-m em enabled='yes'/> </pm > ... p m 要素を使用すると、S3 (suspend-to -disk) と S4 (suspend-to -mem) の ACPI スリープ状態に対する BIOS サポートを有効 ('yes') にしたり無効 ('no ') にしたりすることができます。何も指定しないと、ハイパーバイザーはその デフォルト値のままになります。 61 仮 想 化 管 理 ガイ ド 第10章 ゲスト仮想マシンデバイスの設定 Red Hat Enterprise Linux 6 は、ゲスト仮想マシンの以下の 3 つのクラスのデバイスに対応します。 エミュレートされたデバイス は、実際のハードウェアを模倣する純粋の仮想デバイスです。変更されていないゲスト オペレーティングシステムは標準のインボックスドライバーを使ってこれらのデバイスと動作できるようになります。 Red Hat Enterprise Linux 6 は、最高 216 の virtio デバイスに対応します。 Virtio デバイス は、仮想マシン内で最適に動作するように設計された純粋の仮想デバイスです。Virtio デバイス は、エミュレートされたデバイスと似ていますが、Linux 以外の仮想マシンにはこれらのデバイスが必要とするドラ イバーがデフォルトで含まれていません。仮想マシンマネージャー (virt -ma n a g e r ) や Red Hat Enterprise Virtualizatio n Hyperviso r といった仮想化管理ソフトウェアは、対応する Linux 以外のゲストオペレーティング システムにこれらのドライバーを自動的にインストールします。Red Hat Enterprise Linux 6 は最高 70 0 の scsi ディスクに対応します。 割り当てデバイス は、仮想マシンに公開されている物理デバイスです。この方法は、パススルーとも呼ばれます。デ バイス割り当てにより、仮想マシンによる幅広いタスクでの PCI デバイスへの排他アクセスが可能になり、PCI デ バイスをゲストオペレーティングシステムに物理的にアタッチされているかのように表示させ、動作させることが可 能になります。Red Hat Enterprise Linux 6 は、仮想マシン 1 台あたり最高 32 の割り当てデバイスに対応し ます。 デバイス割り当ては、一部のグラフィックスデバイスを含め PCIe デバイス上でサポートされています。Nvidia K シリー ズ Quadro 、GRID、および Tesla グラフィックスカード GPU 機能が Red Hat Enterprise Linux 6 のデバイス割 り当てでサポートされるようになりました。パラレル PCI デバイスは割り当てデバイスとしてサポートされますが、セ キュリティーとシステム設定の競合により厳しい制限があります。 注記 仮想マシンにアタッチできるデバイス数は、いくつかの要素に左右されます。そのうちの 1 つは、QEMU プロセ ス (/ e t c / s e c u r it y / lim it s .c o n f で設定。/ e t c / lib v ir t / q e m u .c o n f によるオーバーライドが 可能) が開くファイル数です。この他には、仮想バスで利用可能なスロット数や sysctl で設定されたシステム 全体でのオープンファイルの制限があります。 特定デバイスの詳細および制限の詳細は、「デバイス」 を参照してください。 Red Hat Enterprise Linux 6 は、仮想マシンへの単一機能のスロットとして公開されるデバイスの PCI ホットプラ グをサポートします。単一機能のホットデバイスとマルチ機能のホットデバイスの個別の機能は、このサポートを有効 にするように設定できます。デバイスを仮想マシンへのマルチ機能の PCI スロットとして公開する設定は、ノンホットプ ラグアプリケーションに推奨されます。 62 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 注記 割り込み再マッピングのプラットフォームサポートは、割り当てデバイスを持つゲストをホストから完全に分離す るために必要です。このサポートがない場合、ホストは悪意のあるゲストからの割り込み挿入攻撃に対して脆 弱になる可能性があります。ゲストが信頼される環境では、管理者は v fio _ io m m u _ t y p e 1 モジュールに対 して a llo w _ u n s a fe _ in t e r r u p t s オプションを使用する PCI デバイス割り当て許可を選択できます。こ れは、以下を含む .co nf ファイル (例: lo c a l.c o n f ) を / e t c / m o d p r o b e .d に追加することで永続的に 実行できます。 options vfio_iom m u_type1 allow_unsafe_interrupts=1 または、sysfs エントリーを動的に使用することも同じことが実行できます。 # echo 1 > /sys/m odule/vfio_iom m u_type1/param eters/allow_unsafe_interrupts 10 .1. PCI デバイス PCI デバイス割り当ては、Intel VT-d または AMD IOMMU 対応のハードウェアプラットフォーム上でのみ利用可能 です。PCI デバイス割り当てが機能するには、Intel VT-d または AMD IOMMU の仕様が BIOS で有効化されてい る必要があります。 手順1 0 . 1 In t e l シ ス テム での P CI デバ イス 割り 当て 準備 1. In t e l VT -d 仕様の 有効化 Intel VT-d 仕様は、物理デバイスを直接仮想マシンに割り当てるためのハードウェアサポートを提供します。 この仕様は、Red Hat Enterprise Linux で PCI デバイス割り当てを使用するために必要なものです。 Intel VT-d 仕様は、BIOS で有効化されている必要があります。システムメーカーの中には、この仕様をデ フォルトで無効としているところもあります。この仕様に使う用語はメーカーによって異なります。使用されてい る用語に関しては、システムメーカーの資料を参照してください。 2. カ ーネ ル 内で In t e l VT -d をア ク ティブ 化す る カーネル内で Intel VT-d をアクティブ化するには、 in t e l_ io m m u = o n パラメーターを / e t c / s y s c o n fig / g r u b ファイルの GRUB_CMDLINX_LINUX 行の終わりの引用符の内側に追加し ます。 以下の修正例は、g r u b ファイルで Intel VT-d がアクティブ化されたものです。 G RUB_CM DLINE_LINUX="rd.lvm .lv=vg_VolG roup00/LogVol01 vconsole.font=latarcyrheb-sun16 rd.lvm .lv=vg_VolG roup_1/root vconsole.keym ap=us $ ([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/ rhcrashkernel-param || :) rhgb quiet in t e l_ io m m u = o n " 3. co n fig file の 再生成 以下を実行して /bo o t/grub2/grub.cfg を再生成します。 grub2-m kconfig -o /boot/grub2/grub.cfg 63 仮 想 化 管 理 ガイ ド 4 . 準備完了 システムを再起動して、変更を有効にします。これでシステムは、PCI デバイス割り当てに対応します。 手順1 0 . 2 AM D シ ス テム での P CI デバ イス 割り 当て 準備 1. AM D IO M M U 仕様の 有効化 AMD IOMMU 仕様は、Red Hat Enterprise Linux で PCI デバイス割り当てを使用するために必要なも のです。この仕様は、BIOS で有効化されている必要があります。システムメーカーのなかには、この仕様をデ フォルトで無効としているところもあります。 2. IO M M U カ ーネ ル サ ポート の 有効化 a m d _ io m m u = o n を / e t c / s y s c o n fig / g r u b の GRUB_CMDLINX_LINUX 行の終わりの引用符の 内側に追加し、AMD IOMMU 仕様が起動時に有効にされるようにします。 3. co n fig file の 再生成 以下を実行して /bo o t/grub2/grub.cfg を再生成します。 grub2-m kconfig -o /boot/grub2/grub.cfg 4 . 準備完了 システムを再起動して、変更を有効にします。これでシステムは、PCI デバイス割り当てに対応します。 10 .1.1. virs h を使用した PCI デバ イス の 割り当て このステップでは、KVM ハイパーバイザー上の仮想マシンに PCI デバイスを割り当てる方法を説明します。 以下の例では、PCI 識別子コード p c i_ 0 0 0 0 _ 0 1_ 0 0 _ 0 の PCIe ネットワークコントローラーと guest1-rhel6-64 という名前の完全仮想化ゲストマシンを使います。 手順1 0 . 3 virs h を使用し た P CI デバ イス の ゲス ト 仮想マ シ ンへ の 割り 当て 1. デバ イス の 特定 最初に、仮想マシンへのデバイス割り当てに指定されているPCI デバイスを特定します。ls p c i コマンドを使 用して利用可能な PCI デバイスを一覧表示します。ls p c i の出力は g r e p で絞り込むことができます。 この例では、以下の出力で強調表示されているイーサネットコントローラーを使用します。 # lspci | grep Ethernet 0 0 :19 .0 E t h e r n e t c o n t r o lle r : In t e l C o r p o r a t io n 8 2 5 6 7 L M - 2 G ig a b it N e t w o r k C o n n e c t io n 01:00.0 Ethernet controller: Intel Corporation 8 2576 G igabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 8 2576 G igabit Network Connection (rev 01) このイーサネットコントローラーは 0 0 :19 .0 の短い識別子で表示されています。この PCI デバイスを仮想マ シンに割り当てるには、v ir s h が使用する詳細な識別子を見つける必要があります。 64 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 これを実行するには、v ir s h n o d e d e v - lis t コマンドを使用して、ホストマシンにアタッチされている特定 の種類 (p c i ) のデバイスをすべて一覧表示します。次に、使用するデバイスの短い識別子にマップされてい る文字列の出力を探します。 この例では、短い識別子 0 0 :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_0 0 _ 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 デバイス番号は他のステップで必要になるので、その番号を書き留めま す。 2. デバ イス 情報の 確認 ドメインやバスおよび情報については、v ir s h n o d e d e v - d u m p x m l コマンドからの出力を参照することが できます。 virsh nodedev-dum pxm l pci_0000_00_19_0 <device> <nam e>pci_0000_00_19_0</nam e> <parent>com puter</parent> <driver> 65 仮 想 化 管 理 ガイ ド <nam e>e1000e</nam e> </driver> <capability type='pci'> <dom ain>0</dom ain> <bus>0</bus> <slot>25</slot> <function>0</function> <product id='0x1502'>8 2579LM G igabit Network Connection</product> <vendor id='0x8 08 6 '>Intel Corporation</vendor> <iom m uG roup num ber='7'> <address dom ain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iom m uG roup> </capability> </device> 注記 IOMMU グループは、IOMMU から見たデバイスの可視性と分離度に基づいて決定されます。それ ぞれの IOMMU グループには、1 つ以上のデバイスが含まれる可能性があります。複数のデバイス が表示される場合、IOMMU グループ内のすべてのエンドポイントが、ゲストに割り当てられるグルー プ内のすべてのデバイスに対して要求される必要があります。これは、追加のエンドポイントをゲスト に割り当てるか、または v ir s h n o d e d e v - d e t a c h を使用してそれらをホストから分離させるか のいずれかの方法で実行できます。単一グループに含まれるデバイスは、複数のゲスト間で分割した り、ホストとゲストの間で分割したりすることができないことがあります。PCIe ルートポート、スイッチ ポート、およびブリッジなどのノンエンドポイントのデバイスはホストドライバーから切り離せず、これら はエンドポイントの割り当てを妨げることはありません。 IOMMU グループ内のデバイスは、v ir s h n o d e d e v - d u m p x m l 出力の io mmuGro up セク ションを使用して判別できます。グループの各メンバーは、別個の「アドレス」フィールドで指定されま す。この情報は、以下を使用して sysfs 内に見つけることもできます。 $ ls /sys/bus/pci/devices/ 0000:01:00.0 /iom m u_group/devices/ この出力の一例を示します。 0000:01:00.0 0000:01:00.1 0 0 0 0 .0 1.0 0 .0 のみをゲストに割り当てるには、ゲストを起動する前に、使用されていないエンドポ イントをホストから切り離す必要があります。 $ virsh nodedev-detach pci_0000_01_00_1 3. 必要な設定詳細の 決定 設定ファイルで必要な値については、v ir s h n o d e d e v - d u m p x m l p c i_ 0 0 0 0 _ 0 0 _ 19 _ 0 コマンドの 出力を参照します。 サンプルのデバイスでは、以下の値が使用されています。bus = 0 、slo t = 25、functio n = 0 。10 進法の 設定では、これらの値を使用します。 bus='0' slot='25' 66 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 function='0' 4 . 設定詳細の 追加 仮想マシン名を特定して v ir s h e d it を実行し、< s o u r c e > セクションにデバイスエントリーを追加し、 PCI デバイスをゲスト仮想マシンに割り当てます。 # virsh edit guest1-rhel6 -6 4 <hostdev m ode='subsystem ' type='pci' m anaged='yes'> <source> <address dom ain='0' bus='0' slot='25' function='0'/> </source> </hostdev> または、仮想マシン名とゲストの XML ファイルを特定して v ir s h a t t a c h - d e v ic e を実行します。 virsh attach-device guest1-rhel6 -6 4 file .x m l 5. 仮想マ シ ンの 開始 # virsh start guest1-rhel6 -6 4 これで PCI デバイスは正しく仮想マシンに割り当てられ、ゲストオペレーティングシステムにアクセスできます。 10 .1.2. virt- manag e r を使用した PCI デバ イス の 割り当て PCI デバイスは、グラフィカルな v ir t - m a n a g e r ツールを使ってゲスト仮想マシンに追加することができます。以下 の手順では、Gigabit イーサネットコントローラーをゲスト仮想マシンに追加します。 手順1 0 . 4 virt -ma n a g e r を使用し た P CI デバ イス の ゲス ト 仮想マ シ ンへ の 割り 当て 1. ハ ードウェ ア 設定を開く ゲスト仮想マシンを開き、ハードウェアを追加 ボタンをクリックして新規デバイスを仮想マシンに追加しま す。 67 仮 想 化 管 理 ガイ ド 図1 0 . 1 仮想マ シ ンの ハ ードウェ ア 情報ウィンドウ 2. P CI デバ イス の 選択 左側の ハードウェア リストから P CI Ho s t D e vice を選択します。 未使用の PCI デバイスを選択します。別のゲストが使用している PCI デバイスを選択する場合、エラーが発 生する可能性があります。以下の例では、予備の 8 2576 ネットワークデバイスが使用されます。完了 をク リックしてセットアップを終了します。 68 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 図1 0 . 2 新たな仮想ハ ードウェ ア 追加ウィザ ード 3. 新規デバ イス の 追加 セットアップが完了し、ゲスト仮想マシンはこれで PCI デバイスに直接アクセスできます。 69 仮 想 化 管 理 ガイ ド 図1 0 . 3 仮想マ シ ンの ハ ードウェ ア 情報ウィンドウ 注記 デバイスの割り当てに失敗する場合、ホストに依然としてアタッチされている他のエンドポイントが同じ IOMMU グループ内にある可能性があります。virt-manager を使用してグループ情報を検索する方法はあ りませんが、virsh コマンドを使用して、IOMMU グループの範囲を分析し、必要な場合はデバイスを分離する ことができます。 IOMMU グループについての詳細および virsh を使用したエンドポイントデバイスを切り離す方法について は、「virsh を使用した PCI デバイスの割り当て」 の 注記 を参照してください。 10 .1.3. virt- ins tall を使用した PCI デバ イス の 割り当て virt -in s t a ll を使用して PCI デバイスを割り当てるには、 - - h o s t - d e v ic e パラメーターを使います。 手順1 0 . 5 virt -in s t a ll を使用し たゲス ト 仮想マ シ ンへ の P CI デバ イス 割り 当て 1. デバ イス の 特定 70 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 ゲスト仮想マシンへのデバイス割り当てに指定されているPCI デバイスを特定します。 # lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 8 256 7LM -2 G igabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 8 2576 G igabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 8 2576 G igabit Network Connection (rev 01) v ir s h n o d e d e v - lis t コマンドがシステムにアタッチされている全デバイスを一覧表示し、各 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 デバイス番号は他のステップで必要になるので、その番号を書き留めます。 ドメインやバスおよび機能の情報は、v ir s h n o d e d e v - d u m p x m l コマンドからの出力を参照することが できます。 # virsh nodedev-dum pxm l pci_0000_01_00_0 71 仮 想 化 管 理 ガイ ド <device> <nam e>pci_0000_01_00_0</nam e> <parent>pci_0000_00_01_0</parent> <driver> <nam e>igb</nam e> </driver> <capability type='pci'> <dom ain>0</dom ain> <bus>1</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>8 2576 G igabit Network Connection</product> <vendor id='0x8 08 6 '>Intel Corporation</vendor> <iom m uG roup num ber='7'> <address dom ain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iom m uG roup> </capability> </device> 注記 IOMMU グループに複数のエンドポイントがあり、それらのすべてがゲストに割り当てられている訳 ではない場合、ゲストを起動する前に以下のコマンドを実行して、他のエンドポイントをホストから手動 で切り離す必要があります。 $ virsh nodedev-detach pci_0000_00_19_1 IOMMU グループの詳細は、「virsh を使用した PCI デバイスの割り当て」 の 注記 を参照してくださ い。 2. デバ イス の 追加 v ir s h n o d e d e v コマンドからの PCI 識別子の出力を - - h o s t - d e v ic e パラメーターの値として使い ます。 virt-install \ --nam e=guest1-rhel6 -6 4 \ --disk path=/var/lib/libvirt/im ages/guest1-rhel6 -6 4.im g,size=8 \ --nonsparse --graphics spice \ --vcpus=2 --ram =2048 \ --location=http://exam ple1.com /installation_tree/RHEL6 .0-S erver-x8 6 _6 4/os \ --nonetworks \ --os-type=linux \ --os-variant=rhel6 --host-device=p c i_ 0 0 0 0 _ 0 1_ 0 0 _ 0 3. インス ト ール の 完了 これでゲストインストールが完了しました。PCI デバイスはゲストに割り当てられています。 10 .1.4 . 割り当てた PCI デバ イス の 切り離し 72 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 ホストの PCI デバイスがゲストマシンに割り当てられると、ホストはこのデバイスを使用できなくなります。このセクショ ンでは、v ir s h または virt -ma n a g e r を使ってデバイスをゲストから切り離す方法を説明します。これによって、ホ ストがデバイスを使えるようになります。 手順1 0 . 6 virs h を使用し た P CI デバ イス の ゲス ト か ら の 切り 離し 1. デバ イス の 切り 離し 以下のコマンドを使ってゲストの XML ファイル内から PCI デバイスを削除することで、ゲストから PCI デバ イスを切り離します。 # virsh detach-device nam e_of_guest file.xm l 2. デバ イス の ホス ト へ の 再割り 当て ( オ プシ ョ ン) デバイスが m a n a g e d モードの場合は、このステップを飛ばします。デバイスは自動的にホストに戻ります。 デバイスが m a n a g e d モードでない場合は、以下のコマンドを使用して PCI デバイスをホストマシンに再度 割り当てます。 # virsh nodedev-reattach device たとえば、p c i_ 0 0 0 0 _ 0 1_ 0 0 _ 0 デバイスをホストに再度割り当てるには、以下のようにします。 virsh nodedev-reattach pci_0000_01_00_0 これでこのデバイスはホストで使用できます。 手順1 0 . 7 virt -ma n a g e r を使用し た P CI デバ イス の ゲス ト か ら の 切り 離し 1. 仮想ハ ードウェ ア の 詳細ウィンドウを開く virt -ma n a g e r で、対象のデバイスを含む仮想マシンをダブルクリックします。仮想ハードウェアの詳 細表示 ボタンを選択し、仮想ハードウェアのリストを表示させます。 図1 0 . 4 仮想ハ ードウェ ア 詳細ボタン 2. デバ イス の 選択および削除 左パネルの仮想デバイスリストから切り離す PCI デバイスを選択します。 73 仮 想 化 管 理 ガイ ド 図1 0 . 5 切り 離す P CI デバ イス の 選択 削除 ボタンをクリックします。これでデバイスがホストで使用可能になります。 10 .1.5. PCI ブ リ ッジ の 作成 PCI (Peripheral Co mpo nent Interco nnect) ブリッジは、ネットワークカード、モデムおよび音声カードなどのデバ イスに割り当てるために使用されます。物理デバイスと同様に、仮想デバイスも PCI ブリッジに割り当てることができま す。かつてゲスト仮想マシンに追加できる PCI デバイスの数は 31 のみでした。現在では、31 番目の PCI デバイスが 追加されると、PCI ブリッジが自動的に 31 番目のスロットに配置され、追加の PCI デバイスはその PCI ブリッジに 移行します。それぞれの PCI ブリッジには、追加の 31 デバイスに対応する 31 のスロットがあり、それらすべてをブ リッジにすることができます。この方法で、90 0 を超えるデバイスをゲスト仮想マシンで利用可能にすることができま す。 注記 このアクションは、ゲスト仮想マシンが実行中の場合は実行することができません。シャットダウンされているゲ スト仮想マシンに PCI デバイスを追加する必要があります。 10 .1.6. PCI パ ス ス ルー PCI ネットワーク (< s o u r c e > 要素で指定される) は、汎用デバイスの パススルー を使用してゲストに直接割り当て られます。これは、最初にオプションとしてデバイスの MAC アドレスを設定済みの値に設定し、デバイスをオプション で指定した < v ir t u a lp o r t > 要素を使用して 8 0 2.1Qbh 対応スイッチに関連付けた後に行なわれます (上記の type='direct' ネットワークデバイスに指定された virtualpo rt の例を参照)。標準の単一ポート PCI イーサネット 74 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 カードドライバーの設計上の制限により、この方法で割り当てられるのは、SR-IOV (シングルルート I/O 仮想化) の 仮想機能 (VF) デバイスのみになります。標準の単一ポート PCI または PCIe イーサネットカードをゲストに割り当て るには、従来の < h o s t d e v > デバイスの定義を使用します。 従来のレガシーの KVM デバイス割り当てではなく、VFIO デバイス割り当てを使用するには (VFIO は、UEFI Secure Bo o t と互換性のあるデバイス割り当ての新しい方法です)、< t y p e = 'h o s t d e v '> インターフェースに、name 属 性を「vfio 」に設定してオプションの driver サブ要素を持たせることができます (または、< d r iv e r = 'k v m '> が現在 デフォルトになっているため、< d r iv e r > 要素を単純に省略することもできます)。 注記 ネットワークデバイスのインテリジェントパススルーは、標準の < h o s t d e v > デバイスと非常によく似ていま す。違いは、この方法では パススルーデバイスの MAC アドレスと < v ir t u a lp o r t > を指定できる点にあり ます。これらの機能が不要な場合で、標準の単一ポート PCI、PCIe、または SR-IOV をサポートしない (それゆ えゲストドメインへの割り当て後のリセット時に設定済み MAC アドレスが失われる) USB ネットワークがある か、または 0 .9.11 より古いバージョンの libvirt を使用している場合は、デバイスをゲストに割り当てるの に、< in t e r fa c e t y p e = 'h o s t d e v '/ > の代わりに標準の < h o s t d e v > を使用する必要があります。 <devices> <interface type='hostdev'> <driver nam e='vfio'/> <source> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </source> <m ac address='52:54:00:6 d:90:02'> <virtualport type='8 02.1Q bh'> <param eters profileid='finance'/> </virtualport> </interface> </devices> 図1 0 . 6 P CI デバ イス 割り 当て の X M L サ ンプル 10 .1.7. S R- IO V デバ イス の 場合の PCI 割り当て (パ ス ス ルー) の 設定 このセクションは、SR-IOV デバイスのみを対象とします。SR-IOV ネットワークカードは、複数の 仮想機能 (VF) を提 供します。これらの仮想機能は、それぞれ PCI デバイス割り当てを使用してゲスト仮想マシンに割り当てることができ ます。いったん割り当てられると、それぞれの仮想機能は完全物理ネットワークデバイスのように機能します。これによ り、多くのゲスト仮想マシンが、ホスト物理マシン上で単一スロットのみを使用していても、直接の PCI デバイス割り当 てによるパフォーマンス上の利点を得られます。 これらの仮想機能 (VF) は、要素 < h o s t d e v > を使用して従来の方法によりゲスト仮想マシンに割り当てられます が、SR-IOV VF ネットワークデバイスには永続的な固有の MAC アドレスがないため、ホスト物理マシンが再起動され るたびにゲスト仮想マシンのネットワーク設定を再設定する必要があるという問題が生じます。この問題を修復するに は、VF をホスト物理マシンに割り当てる前に MAC アドレスを設定する必要があり、この設定はゲスト仮想マシンの起 動時に毎回行う必要があります。他のオプションと同様にこの MAC アドレスを割り当てるには、以下で説明されてい る手順を参照してください: 手順10 .8 「SR-IOV での PCI デバイス割り当てのための MAC アドレス、vLAN、および仮 想ポートの設定」 手順1 0 . 8 S R-IO V での P CI デバ イス 割り 当て の ため の M AC ア ドレ ス 、 vL AN、 および仮想ポート の 設 定 75 仮 想 化 管 理 ガイ ド 定 まず、< h o s t d e v > 要素は、MAC アドレス割り当て、vLAN タグ ID 割り当て、または仮想ポートの割り当てなどの機 能固有のアイテムに使用することはできないことに留意してください。その理由は、< m a c > 、< v la n > 、および < v ir t u a lp o r t > 要素は < h o s t d e v > の有効な子ではないからです。それらは < in t e r fa c e > で有効であるた め、新規インターフェースタイプのサポートが追加されました (< in t e r fa c e t y p e = 'h o s t d e v '> )。この新規イン ターフェースのデバイスタイプは < in t e r fa c e > と < h o s t d e v > のハイブリッドとして機能します。そのため、PCI デ バイスをゲスト仮想マシンに割り当てる前に、 libvirt は、ゲスト仮想マシンの XML 設定ファイルに示されるネットワー ク固有のハードウェアまたはスイッチ (MAC アドレスの設定、vLAN タグの設定、および/または 8 0 2.1Qbh スイッチ との関連付け) を初期化します。vLAN タグの設定についての情報は、「vLAN タグの設定」 を参照してください。 1. ゲス ト 仮想マ シ ンをシ ャッ ト ダウンし ます 。 v ir s h s h u t d o w n コマンド (「ゲスト仮想マシンのシャットダウン」 を参照) を使用して、 guestVM という 名前のゲスト仮想マシンをシャットダウンします。 # v ir s h s h u t d o w n g u e s t V M 2. 情報を収集し ます 。 < in t e r fa c e t y p e = 'h o s t d e v '> を使用するには、SR-IOV 対応ネットワークカード、また Intel VT-d または AMD IOMMU 拡張のいずれかをサポートするホスト物理マシンハードウェアが必要であり、割り当て る VF の PCI アドレスを知っておく必要があります。 3. X M L フ ァ イル を開いて 編集し ます 。 編集する XML ファイルを開くには、# v ir s h s a v e - im a g e - e d it コマンドを実行します (詳細は、「ドメイ ン XML 設定ファイルの編集」 を参照してください)。ゲスト仮想マシンを以前の実行状態に戻したい場合 は、- - r u n n in g を使用できます。この例の設定ファイルの名前は、ゲスト仮想マシンの名前が guestVM なので guestVM.xml になります。 # v ir s h s a v e - im a g e - e d it g u e s t V M .x m l - - r u n n in g ユーザーのデフォルトエディターで guestVM.xml が開かれます。 4 . X M L フ ァ イル を編集し ます 。 以下のような < d e v ic e s > エントリーを持たせるように設定ファイル ( guestVM.xml) を更新します。 <devices> ... <interface type='hostdev' m anaged='yes'> <source> <address type='pci' dom ain='0x0' bus='0x00' slot='0x07' function='0x0'/> <!--these values can be decim al as well--> </source> <m ac address='52:54:00:6 d:90:02'/> <!--sets the m ac address--> <virtualport type='8 02.1Q bh'> <!--sets the virtual port for the 8 02.1Q bh switch--> <param eters profileid='finance'/> </virtualport> <vlan> 76 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 <!--sets the vlan tag--> <tag id='42'/> </vlan> </interface> ... </devices> 図1 0 . 7 h o s t d e v in t e rfa ce t yp e の ドメイン X M L の サ ンプル MAC アドレスを指定しない場合、それ以外のタイプのインターフェースデバイスと同様に、そのアドレスは自 動的に生成されます。さらに、< v ir t u a lp o r t > 要素は、8 0 2.11Qgh ハードウェアスイッチ (8 0 2.11Qbg (別名「VEPA」) に接続される場合にのみ使用されます。これらのスイッチは現在サポートされ ていません。 5. ゲス ト 仮想マ シ ンを再起動し ます 。 最初のステップでシャットダウンしたゲスト仮想マシンを再開するために v ir s h s t a r t コマンドを実行しま す (例では、ゲスト仮想マシンのドメイン名として guestVM を使用しています)。詳細は、「定義されたドメイン の起動」 を参照してください。 # v ir s h s t a r t g u e s t V M ゲスト仮想マシンが起動すると、設定済みの MAC アドレスと共に、物理ホストマシンのアダプターによって 指定されたネットワークデバイスが表示されます。この MAC アドレスは、ゲスト仮想マシンと物理ホストマシ ンの起動時に変更されることはありません。 10 .1.8. S R- IO V 仮想機能の プールか ら PCI デバ イス 割り当てを設定す る 特定の 仮想機能 (VF) の PCI アドレスをゲストの設定にハードコーディングする上で、2 つの重大な制限があります。 指定した VF は、ゲスト仮想マシンの起動時にはいつでも利用可能な状態でなければなりません。つまり、これは 管理者が単一のゲスト仮想マシンに対してそれぞれの VF を永久的に割り当てなければならないことを意味して います (またはそれぞれのゲスト仮想マシンの起動時に、現在使用されていない VF の PCI アドレスを指定するた めにすべてのゲスト仮想マシンの設定ファイルを修正する必要があります)。 ゲスト仮想マシンが別のホスト物理マシンに移行する場合、そのホスト物理マシンには、PCI バス上の同じ場所に 全く全く同じハードウェアがなければなりません (または、ここでも起動前にゲスト仮想マシンの設定を変更する必 要があります)。 これらの問題は、いずれも SR-IOV デバイスのすべての VF を含むデバイスプールと共に libvirt ネットワークを作成 することによって回避することができます。いったんこれが実行されると、このネットワークを参照するようにゲスト仮想 マシンを設定できます。ゲストが起動するたびに、単一の VF がプールからゲスト仮想マシンに割り当てられます。ゲス ト仮想マシンが停止すると、VF は別のゲスト仮想マシンが使用できるようにのプールに戻ります。 手順1 0 . 9 デバ イス プール の 作成 1. ゲス ト 仮想マ シ ンをシ ャッ ト ダウンし ます 。 v ir s h s h u t d o w n コマンド (「ゲスト仮想マシンのシャットダウン、再起動および強制終了」 を参照) を使用 して、 guestVM という名前のゲスト仮想マシンをシャットダウンします。 # v ir s h s h u t d o w n g u e s t V M 2. 設定フ ァ イル の 作成 77 仮 想 化 管 理 ガイ ド 任意のエディターを使用して、/ t m p ディレクトリーに XML ファイル (例:passthro ugh.xml という名前の ファイル) を作成します。p f d e v = 'e t h 3 ' は、各自の SR-IOV デバイスの物理機能 (PF) に置き換えるよう にしてください。 以下は、 物理機能 (PF) がホスト物理マシンの「eth3」に設定された、SR-IOV アダプターのすべての VF の プールを利用可能にするネットワーク定義のサンプルです。 <network> <nam e>passthrough</nam e> <!--This is the nam e of the file you created--> <forward m ode='hostdev' m anaged='yes'> <pf dev='m yNetDevNam e'/> -Use the netdev nam e of your S R-IO V devices PF here--> </forward> </network> <!- 図1 0 . 8 ネ ッ ト ワーク 定義ドメインの サ ンプル X M L 3. 新し い X M L フ ァ イル をロ ードし ます 。 /tmp/passthro ugh.xml を直前のステップで作成した XML ファイルの名前と場所に置き換え、以下のコ マンドを実行します。 # v ir s h n e t - d e fin e / t m p / p a s s t h r o u g h .x m l 4 . ゲス ト の 再起動 passthro ugh.xml を直前のステップで作成した XML ファイルの名前に置き換え、以下を実行します。 # v ir s h n e t - a u t o s t a r t p a s s t h r o u g h # v ir s h n e t - s t a r t p a s s t h r o u g h 5. ゲス ト 仮想マ シ ンを再起動し ます 。 最初のステップでシャットダウンしたゲスト仮想マシンを再開するために v ir s h s t a r t コマンドを実行しま す (例では、ゲスト仮想マシンのドメイン名として guestVM を使用しています)。詳細は、「定義されたドメイン の起動」 を参照してください。 # v ir s h s t a r t g u e s t V M 6 . デバ イス の パ ス ス ル ーの 開始 単一デバイスのみが表示されていますが、libvirt は、ゲスト仮想マシンの初回起動時に、PF に関連付けられ たすべての VF の一覧を自動的に派生させます。この起動には、以下のようなドメイン XML 内のインター フェース定義が使用されます。 <interface type='network'> <source network='passthrough'> 78 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 </interface> 図1 0 . 9 インターフ ェ ース ネ ッ ト ワーク 定義の サ ンプル ドメイン X M L 7. 検証 検証は、ネットワークを使用する最初のゲストの起動後に v ir s h n e t - d u m p x m l p a s s t h r o u g h コマ ンドで実行できます。以下のような出力が得られます。 <network connections='1'> <nam e>passthrough</nam e> <uuid>a6 b49429-d353-d7ad-318 5-4451cc78 6 437</uuid> <forward m ode='hostdev' m anaged='yes'> <pf dev='eth3'/> <address type='pci' dom ain='0x0000' bus='0x02' slot='0x10' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x10' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x10' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x10' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x11' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x11' <address type='pci' dom ain='0x0000' bus='0x02' slot='0x11' </forward> </network> function='0x1'/> function='0x3'/> function='0x5'/> function='0x7'/> function='0x1'/> function='0x3'/> function='0x5'/> 図1 0 . 1 0 X M L ダンプフ ァ イル p a s s t h ro u g h の 内容 10 .2. USB デバイス このセクションでは、USB デバイスの処理に必要なコマンドを扱います。 10 .2.1. ゲス ト仮想マ シンへ の US B デバ イス の 割り当て web カメラ、カードリーダー、キーボード、マウスなどのほとんどのデバイスは、USB ポートとケーブルを使ってコン ピューターに接続されます。これらのデバイスをゲスト仮想マシンに渡す方法として 2 つの方法があります。 USB パススルーの使用 - これには、ゲスト仮想マシンをホストしているホスト物理マシンに、デバイスを物理的に 接続している必要があります。この場合、SPICE は必要ではありません。ホスト上の USB デバイスは、コマンドライ ンまたは virt -ma n a g e r を使用してゲストに渡すことができます。virt ma n a g e r の指示については、「USB デバイスをゲスト仮想マシンに割り当てる」 を参照してください。 注記 virt -ma n a g e r は、ホットプラグまたはホットアンプラグデバイスで使用することはできません。USB デバ イスのホットプラグまたはホットアンプラグが必要な場合は、手順15.1「ゲスト仮想マシンが使用する USB デバイスのホットプラグ」 を参照してください。 USB リダイレクトの使用 - USB リダイレクトは、ホスト物理マシンがデータセンターで実行されている場合に最適 79 仮 想 化 管 理 ガイ ド に使用されます。ユーザーは、ローカルマシンまたはシンクライアントからゲスト仮想マシンに接続します。このロー カルマシンには、1 つの SPICE クライアントがあります。ユーザーは、任意の USB デバイスをシンクライアントに割 り当てることができ、SPICE クライアントはデータセンターのホスト物理マシンにこのデバイスをリダイレクトするの で、これをシンクライアント上で実行されているゲスト仮想マシンで使用することができます。 virt-manager を使用 した USB リダイレクトについての説明は、「USB デバイスをゲスト仮想マシンに割り当てる」を参照してください。 USB リダイレクトは、TCP プロトコルを使用して実行することができないことに注意してください (BZ#10 8 5318 を参照してください)。 10 .2.2. US B デバ イス の リ ダイレ クトに制限を設け る フィルターを使って特定のデバイスをリダイレクトの対象から外すには、フィルタープロパティーを - d e v ic e u s b r e d ir に渡します。フィルタープロパティーはフィルタールールで構成される文字列を取ります。ルールの形式は次の 通りです。 < c la s s > :< v e n d o r > :< p r o d u c t > :< v e r s io n > :< a llo w > 値 - 1 を使用すると、特定フィールドで任意の値を受け入れるように指定できます。| を区切りに使用することにより、 同じコマンドラインで複数のルールを使用することができます。 重要 デバイスがルールフィルターのいずれにも一致しない場合、これをリダイレクトすることができません。 例1 0 . 1 Win d o ws ゲス ト 仮想マ シ ンに関す るリダイレ ク ト の 制限を設け る場合の 例 1. Windo ws 7 ゲスト仮想マシンを用意します。 2. 次のコードの抜粋をゲスト仮想マシンのドメイン XML ファイルに追加します。 <redirdev bus='usb' type='spicevm c'> <alias nam e='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> 3. ゲスト仮想マシンを起動し、次のコマンドを実行して設定の変更を確認します。 #p s - e f | g r e p $ g u e s t _ n a m e - d e v ic e u s b - r e d ir , c h a r d e v = c h a r r e d ir 0 , id = r e d ir 0 , / filt e r = 0 x 0 8 :0 x 12 3 4 :0 x B E E F :0 x 0 2 0 0 :1|- 1:- 1:- 1:- 1:0 , b u s = u s b .0 , p o r t = 3 4 . USB デバイスをホスト物理マシンに挿入し、virt -ma n a g e r を使ってゲスト仮想マシンに接続します。 5. メニュー内の Re d ire ct US B S e rvice をクリックします。これにより、「So me USB devices are blo cked by ho st po licy」というメッセージが生成されます。O K をクリックして確認し、続行します。 フィルターが適用されます。 80 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 6 . フィルターよるキャプチャーが正しく動作するよう USB デバイスの製造元と製品を確認し、USB リダイレク トが可能になるよう、ゲスト仮想マシンのドメイン XML に次の変更を加えます。 <redirfilter> <usbdev class='0x08 ' vendor='0x0951' product='0x16 25' version='2.0' allow='yes'/> <usbdev allow='no'/> </redirfilter> 7. ゲスト仮想マシンを再起動し、virt -vie we r を使ってゲスト仮想マシンに接続します。USB デバイスがト ラフィックをゲスト仮想マシンにリダイレクトするようになります。 10 .3. デバイス コントローラーの 設定 ゲスト仮想マシンのアーキテクチャーにより、一部のデバイスバスは、仮想コントローラーに関連付けられた仮想デバイ スのグループと共に、複数回表示されることがあります。通常、libvirt は、明示的な 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' dom ain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </controller> ... </devices> ... 図1 0 . 1 1 仮想コント ロ ーラーの ドメイン X M L サ ンプル 各コントローラーには必須属性 < c o n t r o lle r t y p e > があります。これは、以下のいずかである必要があります。 ide fdc scsi sata usb ccid virtio -serial pci < c o n t r o lle r > 要素には、(< a d d r e s s > 要素の co ntro ller 属性で使用される) バスコントローラーが出現する 81 仮 想 化 管 理 ガイ ド 順序を記述する 10 進整数の必須属性 < c o n t r o lle r in d e x > があります。< c o n t r o lle r t y p e = 'v ir t io - s e r ia l'> の場合、コントローラー経由で接続できるデバイスの数を制御する 2 つの追加のオプション 属性 (p o r t s と v e c t o r s という名前) があります。Red Hat Enterprise Linux 6 では、デバイスにつき 32 vecto rs の使用までしかサポートされないことに注意してください。これ以上の vecto rs を使用すると、ゲスト仮想マ シンの移行が失敗します。 < c o n t r o lle r t y p e = 's c s i'> の場合、以下の値を取ることのできるオプション属性 m o d e l モデルがありま す。 auto buslo gic ibmvscsi lsilo gic lsisas10 6 8 lsisas10 78 virtio -scsi vmpvscsi < c o n t r o lle r t y p e = 'u s b '> の場合、次の値を取ることのできるオプション属性 m o d e l モデルがあります。 piix3-uhci piix4 -uhci ehci ich9-ehci1 ich9-uhci1 ich9-uhci2 ich9-uhci3 vt8 2c6 8 6 b-uhci pci-o hci nec-xhci 注記 USB バスをゲスト仮想マシンに対して明示的に無効にする必要がある場合は、< m o d e l= 'n o n e '> を使用 することができます。 コントローラー自体が PCI または USB バス上のデバイスである場合、オプションのサブ要素 < a d d r e s s > は、「デ バイスのアドレス設定」 に示される形式を使用して、コントローラーとマスターバスとの正確な関係を指定することが できます。 オプションのサブ属性 < d r iv e r > は、ドライバー固有のオプションを指定することができます。現在、これはコントロー ラーのキューの数を指定する属性 queues のみをサポートします。パフォーマンスを最大化するには、vCPU の数に一 致する値を指定することが推奨されます。 82 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 USB コンパニオンコントローラーには、コンパニオンとマスターコントローラーとの正確な関係を指定するためのオプ ションのサブ要素 < m a s t e r > があります。コンパニオンコントローラーは、そのマスターと同じバスにあり、コンパニ オンの in d e x 値は等しくなければなりません。 使用できる XML の例を示します。 ... <devices> <controller type='usb' index='0' <address type='pci' dom ain='0' </controller> <controller type='usb' index='0' <m aster startport='0'/> <address type='pci' dom ain='0' </controller> ... </devices> ... m odel='ich9-ehci1'> bus='0' slot='4' function='7'/> m odel='ich9-uhci1'> bus='0' slot='4' function='0' m ultifunction='on'/> 図1 0 . 1 2 US B コント ロ ーラーの ドメイン X M L サ ンプル PCI コントローラーには、以下の値を持てるオプションの m o d e l 属性があります。 pci-ro o t pcie-ro o t pci-bridge dmi-to -pci-bridge ro o t コントローラー (p c i- r o o t と p c ie - r o o t ) には、オプションの p c ih o le 6 4 要素があります。この要素は、 6 4 ビット PCI ホールのサイズを指定します (キロバイト単位、または p c ih o le 6 4 の u n it 属性で指定される単 位)。一部のゲスト仮想マシン ( Windo ws Server 20 0 3 など) は、u n it が無効に (0 に設定: u n it = '0 ' ) されな い場合、クラッシュを生じさせる可能性があります。 暗黙的な PCI バスを提供するマシンタイプの場合、in d e x = '0 ' が指定された pci-ro o t コントローラーは自動的に 追加され、PCI デバイスを使用するために必要になります。pci-ro o t にはアドレスがありません。PCI ブリッジは、デ バイスの数が多すぎて m o d e l= 'p c i- r o o t ' で指定される 1 つのバスに入らない場合や、ゼロより大きい PCI バ スの数が指定されている場合に自動的に追加されます。さらに、PCI ブリッジを手動で指定することができますが、そ れらのアドレスは、すでに指定された PCI コントローラーによって提供される PCI バスのみを参照するものである必要 があります。PCI コントローラーの index にギャップがあると、設定が無効になる可能性があります。以下の XML サ ンプルを < d e v ic e s > セクションに追加することができます。 ... <devices> <controller type='pci' index='0' m odel='pci-root'/> <controller type='pci' index='1' m odel='pci-bridge'> 83 仮 想 化 管 理 ガイ ド <address type='pci' dom ain='0' bus='0' slot='5' function='0' m ultifunction='off'/> </controller> </devices> ... 図1 0 . 1 3 P CI ブ リッ ジ の ドメイン X M L サ ンプル 暗黙的な PCI Express (PCIe) バスを提供するマシンタイプ (たとえば、Q35 チップセットに基づくマシンタイプ) の 場合、in d e x = '0 ' が指定された pcie-ro o t コントローラーがドメインの設定に自動的に追加されます。さらに、 pcie-ro o t にはアドレスがありませんが、31 スロット (1-31 までの番号) を提供し、PCIe デバイスを割り当てるため にのみ使用できます。pcie-ro o t コントローラーを持つシステムの標準 PCI デバイスを接続するため に、m o d e l= 'd m i- t o - p c i- b r id g e ' が設定された pci コントローラーが自動的に追加されます。dmi-to -pcibridge コントローラーは PCIe スロット (pcie-ro o t によって提供される) にプラグインされ、それ自体は 31 の標準 PCI スロット (ホットプラグ不可能) を提供します。ホットプラグ可能な PCI スロットをゲストシステム内で使用するに は、pci-bridge コントローラーが自動的に作成され、自動作成される dmi-to -pci-bridge コントローラーのスロット の 1 つに接続され、 libvirt で自動判別される PCI アドレスを持つすべてのゲストデバイスが、この pci-bridge デバ イス上に置かれます。 ... <devices> <controller type='pci' index='0' m odel='pcie-root'/> <controller type='pci' index='1' m odel='dm i-to-pci-bridge'> <address type='pci' dom ain='0' bus='0' slot='0xe' function='0'/> </controller> <controller type='pci' index='2' m odel='pci-bridge'> <address type='pci' dom ain='0' bus='1' slot='1' function='0'/> </controller> </devices> ... 図1 0 . 1 4 P CIe ( P CI e xp re s s ) の ドメイン X M L サ ンプル 10 .4 . デバイス の アドレス 設定 多くのデバイスには、ゲスト仮想マシンに提示されるデバイスが仮想バス上のどこに配置されるかを説明するオプショ ンの < a d d r e s s > サブ要素があります。アドレス (またはアドレス内のオプション属性) が入力で省略されている場 合、 libvirt は適切なアドレスを生成しますが、レイアウトにより多くの制御が必要な場合は明示的なアドレスが必要に なります。< a d d r e s s > 要素を含むドメイン XML のデバイスサンプルについては、図10 .6 「PCI デバイス割り当ての XML サンプル」 を参照してください。 すべてのアドレスには、デバイスが置かれるバスを記述する必須の属性 t y p e があります。指定されるデバイスに使 用するアドレスを選択することは、デバイスおよびゲスト仮想マシンのアーキテクチャーによって部分的に制限されま す。たとえば、< ディスク> デバイスは t y p e = 'd r iv e ' を使用し、< コンソール> デバイスは、i6 8 6 または x8 6 _6 4 ゲスト仮想マシンのアーキテクチャーで t y p e = 'p c i' を使用します。さらに、各アドレスの type には、表で 説明されるように、バス上のデバイスの配置される場所を制御するオプションの属性があります。 表1 0 . 1 サ ポート され て いるデバ イス ア ドレ ス の タイプ 84 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 ア ドレ ス タイプ 説明 type='pci' PCI アドレスには以下の追加属性があります。 do main (2 バイトの 16 進整数。 現在は qemu に よって使用されていません) bus (0 から 0 xff までの 16 進値) slo t (0 x0 から 0 x1f までの 16 進値) functio n (0 から 7 までの値) multifunctio n は、PCI コントロールレジスターに特 定のスロット/機能のマルチファンクションビットをオ ンにするように制御します。この属性は、デフォルトで 'o ff' になりますが、マルチファンクションが使用され るスロットのファンクション 0 では 'o n' に設定する 必要があります。 type='drive' ドライブアドレスには、以下の追加属性があります。 co ntro ller (2 桁のコントローラー番号) bus (2 桁のバス番号) target (2 桁のバス番号) unit (バス上の 2 桁のユニット番号) type='virtio -serial' それぞれの virtio -serial アドレスには以下の追加属性 があります。 co ntro ller (2 桁のコントローラー番号) bus (2 桁のバス番号) slo t (バス内の 2 桁のスロット) type='ccid' スマートカードに使用される CCID アドレスには、以下 の追加属性があります。 bus (2 桁のバス番号) slo t 属性 (バス内の 2 桁のスロット) type='usb' USB アドレスには以下の追加属性があります。 bus (0 から 0 xfff までの 16 進数) po rt (1.2 または 2.1.3.1 などの最高 4 つのオク テットからなるドット区切りの表記) type='isa' ISA アドレスには以下の追加属性があります。 io base irq 10 .5. ゲス ト仮想マ シンの ス トレージ コントローラーの 管理 Red Hat Enterprise Linux 6 .4 より、Red Hat Enterprise Linux 6 .4 以降を実行するゲスト仮想マシンに SCSI と virtio -SCSI デバイスが追加することがサポートされています。virtio ディスクとは異なり、SCSI デバイスには、ゲス ト仮想マシン内にコントローラーが存在することが求められます。Virtio -SCSI は、SCSI LUN に直接接続する機能を 提供し、virtio -blk と比較するとスケーラビリティーが改善されています。virtio -SCSI の利点は、28 デバイスしか処 理できず、PCI スロットを使い果たす virtio -blk とは異なり、数百のデバイスを処理できる点にあります。Virtio -SCSI は、以下の機能を使ってターゲットデバイスの機能セットを継承することを可能にします。 virtio -scsi コントローラーを介して仮想ハードドライブまたは CD を割り当てる 85 仮 想 化 管 理 ガイ ド QEMU scsi-blo ck デバイスを介して物理 SCSI デバイスをホストからゲストにパススルーする 28 -デバイスの制限のある virtio -blk とは異なり、1 ゲストごとに数百のデバイスの使用を可能にする このセクションでは、仮想 SCSI コントローラー (別名 "ホストバスアダプター": HBA) を作成し、ゲスト仮想マシンに SCSI ストレージを追加するために必要なステップを詳しく説明します。 手順1 0 . 1 0 仮想 S CS I コント ロ ーラーを作成す る 1. ゲスト仮想マシン (G u e s t 1 ) の設定を表示して、事前に存在している SCSI コントローラーを探します。 # virsh dum pxm l G uest1 | grep controller.*scsi デバイスコントローラーが存在する場合は、このコマンドが以下のように一行または複数行の出力を行いま す。 <controller type='scsi' m odel='virtio-scsi' index='0'/> 2. 先のステップでデバイスコントローラーが表示されない場合、新しいファイルでその 1 つを記述し、それを以下 のステップを実行して仮想マシンに追加します。 a. 新しいファイルに < c o n t r o lle r > 要素を書き込むことによってデバイスコントローラーを作成し、 このファイルを XML 拡張子を付けて保存します。たとえば、N e w H B A .x m l のようになります。 <controller type='scsi' m odel='virtio-scsi'/> b. v ir t io - s c s i- c o n t r o lle r .x m l で作成したばかりのデバイスコントローラーを使用中のゲス ト仮想マシン (例: Guest1) に関連付けます。 # virsh attach-device --config G uest1 ~/virtio-scsi-controller.xm l この例では、 - - c o n fig オプションはディスク接続の場合と同様の動作をします。詳細については 手順14 .2「ゲストに物理ブロックデバイスを追加する」 を参照してください。 3. 新しい SCSI ディスクまたは CD-ROM を追加します。「ゲストにファイルベースのストレージを追加する」 と 「ゲストにハードドライブと他のブロックデバイスを追加する」 のセクションに記載されている方法に従って、新 しいディスクを追加します。SCSI ディスクを作成するには、 sd で始まるターゲットデバイス名を指定してくださ い。 # virsh attach-disk G uest1 /var/lib/libvirt/im ages/FileNam e.im g sdb --cache none ゲスト仮想マシン内のドライバーのバージョンによっては、新しいディスクが実行中のゲスト仮想マシンですぐ には検出されない場合があります。『Red Hat Enterprise Linux ストレージ管理ガイド』 の手順に従ってく ださい。 10 .6. 乱数ジ ェネ レーター (RNG) デバイス virtio -rng は、RNG データをゲスト仮想マシンのオペレーティングシステムにフィードし、これにより、要求されるとゲ スト仮想マシンの新規エントロピーを提供する仮想 RNG ( 乱数ジェネレーター) デバイスです。 86 第 10 章 ゲス ト仮 想 マ シ ン デ バ イ ス の 設 定 RNG の使用は、キーボード、マウスおよびその他の入力がゲスト仮想マシンのエントロピーを十分に生成しない場合 に特に便利です。 virtio -rng デバイスは、Red Hat Enterprise Linux と Windo ws ゲスト仮想マシンの両方で使用 できます。Windo ws 要件のインストールについての説明は、注記 を参照してください。特筆されない限り、以下の説 明は、Red Hat Enterprise Linux と Windo ws ゲスト仮想マシンの両方に当てはまります。 virtio -rng が Linux ゲスト仮想マシンで有効にされると、chardev が / d e v / h w r n g の場所にあるゲスト仮想マシ ンに作成されます。次に、この chardev が開かれ、ホスト物理マシンからエントロピーを取得するために読み込まれま す。ゲスト仮想マシンのアプリケーションが virtio -rng デバイスの乱数度を透過的に使用することから利点を得られ るようにするには、/ d e v / h w r n g からの入力が、ゲスト仮想マシン内のカーネルエントロピープールに中継される必 要があります。これは、この場所にある情報が rgnd デーモン (rng-to o ls 内に格納される) と対で使用される場合に 実行できます。 この結合により、エントロピーがゲスト仮想マシンの / d e v / r a n d o m ファイルに経路指定されます。このプロセスは、 Red Hat Enterprise Linux 6 ゲスト仮想マシンでは手動で行なわれます。 Red Hat Enterprise Linux 6 ゲスト仮想マシンでは、以下のコマンドを実行して、この結合を行います。 # rngd -b -r /dev/hwrng -o /dev/random ここに示されるコマンドの説明については、m a n r n g d コマンドを実行してください。追加の例については、virtio -rng デバイスの設定に関する 手順10 .11「コマンドラインツールを使用した virtio -rng の実装」 を参照してください。 注記 Windo ws ゲスト仮想マシンでは、ドライバー vio rng がインストールされる必要があります。いったんインス トールされると、仮想 RNG デバイスは、Micro so ft によって提供される CNG (crypto next generatio n) API を使用して動作します。ドライバーがインストールされると、 virtrng デバイスは RNG プロバイダーの一覧 に表示されます。 手順1 0 . 1 1 コマ ンドラインツール を使用し た virt io -rn g の 実装 1. ゲスト仮想マシンをシャットダウンします。 2. ターミナルウィンドウで、v ir s h e d it d o m a in - n a m e コマンドを使用し、必要なゲスト仮想マシンの XML ファイルを開きます。 3. 以下を含めるように < d e v ic e s > 要素を編集します。 ... <devices> <rng m odel='virtio'> <rate period="2000" bytes="1234"/> <backend m odel='random '>/dev/random </backend> <source m ode='bind' service='1234'> <source m ode='connect' host='192.0.2.1' service='1234'> </backend> </rng> </devices> ... 87 仮 想 化 管 理 ガイ ド 第11章 QE M U-img および QE M U ゲストエージェント 本章では、 qemu-img パッケージを仮想ゲストマシンと共に使用する場合に役立つヒントを紹介します。QEMU トレー スイベントおよび引数についての情報が必要な場合には、以下にある README ファイルを参照してください: / u s r / s h a r e / d o c / q e m u - * / R E A D M E .s y s t e m t a p 11.1. qe mu- img の 使い方 q e m u - im g コマンドラインツールは、KVM で使用される各種ファイルシステムの編集や検証、およびフォーマットを行 う際に使用されます。q e m u - im g のオプションとその使い方を以下に示します。 Ch e ck ディスクイメージ filename の整合性チェックを実行します。 # qem u-im g check -f qcow2 --output=qcow2 -r all filenam e-im g.qcow2 注記 q c o w 2 と v d i の形式のみが整合性チェックに対応しています。 - r を使用すると、チェック中に発見された不整合の修復を試みますが、 - r le a k s と使用するとクラスターリークが 修復され、 - r a ll と使用するとすべての種類のエラーが修復されます。これには間違ったフィクスを選択したり、既 存の破損問題が隠れてしまうなどのリスクがあることに注意してください。 Co mmit q e m u - im g c o m m it コマンドを使って、指定ファイル ( filename ) に記録される変更をそのファイルのベースイメー ジにコミットします。オプションでファイルの形式タイプを指定できます ( fmt)。 # qem u-im g com m it [-f fm t ] [-t c a c h e ] filenam e Co n ve rt 認識しているイメージ形式を別のイメージ形式に変換する場合に c o n v e r t オプションを使用します。 コマンド形式: # qem u-im g convert [-c] [-p] [-f fm t ] [-t c a c h e ] [-O o u t p u t _ fm t ] [-o o p t io n s ] [-S s p a r s e _ s iz e ] filenam e output_filenam e - p パラメーターは、コマンドの進捗を表示し (オプションのため、すべてのコマンドに使用できる訳ではありません)、 S フラグは、ディスクイメージ内に含まれる スパースファイル の作成を可能にします。スパースファイルは実際上、ゼロ のみを含む (つまり何も含まない) 物理ブロックの場合を除き、標準ファイルのように機能します。オペレーティングシス テムがこのファイルを発見すると、いずれのディスク領域も使用していないものの、実際に存在し、実際のディスク領域 を占めるものとしてこのファイルを処理します。これは、ディスクが実際に存在する以上のディスク領域を使っている様 に表示されるため、ゲスト仮想マシンのディスクを作成する際にはとりわけ役に立ちます。たとえば、10 Gb のディスク イメージで -S を 50 Gb に設定する場合、実際に使用されているのは 10 Gb のみであるのにもかかわらず、10 Gb のディスク領域のサイズが 6 0 Gb のように表示されます。 88 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト o u t p u t _ fo r m a t 形式を使って、 file n a m e ディスクイメージを o u t p u t _ file n a m e ディスクイメージに変換しま す。 - c オプションを使うとディスクイメージをオプションで圧縮することができます。また、 - o オプションを使い - o e n c r y p t io n のように設定すると暗号化することができます。 - o パラメーターを付けるオプションは複数あり、選択 する形式によって異なります。 暗号化や圧縮に対応しているのは q c o w 2 形式のみになります。q c o w 2 の暗号化では安全な 128 ビットキーによる AES 形式が使用されます。q c o w 2 の圧縮は読み取り専用になります。このため、q c o w 2 形式から圧縮セクターを変 換する場合には、このセクターは圧縮されていないデータとして新しい形式に記述されます。 イメージ変換ではイメージを小さくすることができるため、q c o w や c o w などの拡大する可能性のある形式を使用する 場合にも便利です。空のセクターは検出されて、目的のイメージから削除されます。 Cre a t e サイズが s iz e 、形式が fo r m a t となる filename という新しいディスクイメージを作成します。 # qem u-im g create [-f fo r m a t ] [-o options ] filenam e [ s iz e ][ p r e a llo c a t io n ] - o b a c k in g _ file = file n a m e でベースイメージを指定すると、作成するイメージとベースファイルとの差異のみ が記録されることになります。c o m m it コマンドを使用しない限り、バッキングファイルは変更されません。この場合、 サイズの指定は必要ありません。 Preallo catio n は、qco w2 イメージの作成時にのみ使用可能なオプションです。使用可能な値は、- o p r e a llo c a t io n = o ff|m e t a |fu ll|fa llo c になります。事前割り当てのメタデータのあるイメージは、これがな いものよりもサイズが大きくなります。ただし、イメージサイズが大きくなると、パフォーマンスは向上します。 割り振りで fu ll を使用すると、大きいイメージでは時間がかかることに注意してください。割り振りで full を使用した いものの、時間に余裕がない場合は、fa llo c を使うと時間が節約できます。 In fo in fo パラメーターは、 filename ディスクイメージの情報を表示します。 in fo オプションの形式を以下に示します。 # qem u-im g info [-f form at ] filenam e このコマンドはディスク上で予約されているサイズを検出する場合によく使用されます。予約サイズは表示サイズとは異 なる場合があります。スナップショットがディスクイメージに格納されている場合は、それらも表示されます。このコマン ドは、どの程度の領域がブロックデバイス上の q c o w 2 イメージによって使用されているかを表示します。これ は、q e m u - im g を実行することによって行なわれます。使用中のイメージが q e m u - im g in fo コマンドと q e m u im g c h e c k コマンドの出力に一致するものであることを確認できます。「qemu-img の使い方」を参照してください。 # qem u-im g info /dev/vg-90.100-sluo/lv-90-100-sluo im age: /dev/vg-90.100-sluo/lv-90-100-sluo file form at: qcow2 virtual size: 20G (214748 36 48 0 bytes) disk size: 0 cluster_size: 6 5536 Ma p # q e m u - im g m a p [ - f fm t ] [ - - o u t p u t = o fm t ] file n a m e のコマンドを実行すると、イメージ 89 仮 想 化 管 理 ガイ ド filename のメタデータとそのバッキングファイルチェーンがダンプされます。特にこのコマンドは、指定されたファイル の全セクターの割り振り状態と、そのファイルをバッキングファイルチェーンに割り振る最上位のファイルをダンプしま す。たとえば、c.qco w2 → b.qco w2 → a.qco w2 というチェーンがあったとすると、a.qco w がオリジナルファイル、 b.qco w2 が a.qco w2 に加えた変更、c.qco w2 が b.qco w2 からの差分ファイルになります。このチェーンが作成 される際には、イメージファイルは適切なイメージデータと何がどのファイルに、かつファイルのどこにあるかという情報 とともに保存されます。この情報は、イメージのメタデータと呼ばれます。- f の形式オプションは、指定されたイメージ ファイルの形式です。raw、qco w2、vhdx および vmdk といった形式が使用されます。出力オプションには h u m a n と j s o n の 2 種類があります。 デフォルト設定は h u m a n です。これは人間にとって読みやすいものにするので、この形式は解析すべきではありませ ん。プログラムがこれの解析を試みると、悪意のあるゲストイメージに誤った方向に導かれる場合があります。 明確さと簡素化のために、デフォルトの h u m a n 形式は、ファイルの既知の非ゼロエリアのみをダンプします。ファイル の既知のゼロ部分と、チェーンで割り振られていない部分はすべて除外されます。このコマンドを実行すると、qemuimg の出力がデータ読み取り可能なファイルと、ファイルないのオフセットを特定します。出力は 4 コラムの表が表示 され、そのうちの最初の 3 つは 16 進数になります。 # qem u-im g m ap O ffset 0 0x100000 0x200000 0x3c00000 0x3fd0000 -f qcow2 --output=hum an /tm p/test.qcow2 Length M apped to File 0x20000 0x50000 /tm p/test.qcow2 0x8 0000 0x70000 /tm p/test.qcow2 0x1f0000 0xf0000 /tm p/test.qcow2 0x20000 0x2e0000 /tm p/test.qcow2 0x10000 0x300000 /tm p/test.qcow2 j s o n または JSON (JavaScript Object No tatio n) は人間が読み取ることが可能ですが、プログラミング言語であ ることから、解析用に設計されています。たとえば、"qemu-img map" の出力をパーサーで解析するには、- o u t p u t = j s o n というフラグを使用します。 # qem u-im g m ap -f qcow2 --output=json /tm p/test.qcow2 [{ "start": 0, "length": 131072, "depth": 0, "zero": false, "data": true, "offset": 3276 8 0}, { "start": 131072, "length": 917504, "depth": 0, "zero": true, "data": false}, JSON 形式の詳細情報については、qemu-img の man ページを参照してください。 Re b a s e イメージのバッキングファイルを変更します。 # qem u-im g rebase [-f fm t ] [-t cache ] [-p] [-u] -b backing_file [-F backing_fm t ] filenam e バッキングファイルが backing_file に変更され ( filename の形式がこの機能に対応している場合)、バッキングファ イルの形式は backing_fo rmat に変更されます。 注記 q c o w 2 形式のみがバッキングファイルの変更 (rebase) に対応します。 rebase の動作には、セーフ モードと ア ンセーフ モードの 2 種類があります。 デフォルトでは セーフ モ ード が使用され、実際の rebase 動作が行われます。新しいバッキングファイルは古いバッ キングファイルとは異なる可能性があるため、q e m u - im g r e b a s e コマンドではゲスト仮想マシンに表示される 90 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト filename のコンテンツは変更されないようにします。 backing_file と古いバッキングファイルの filename 間の異な る部分は、バッキングファイルに変更が加えられる前に filename にマージされます。 セーフモードはイメージの変換と同様、時間を要する動作になります。正しく動作させるには古いバッキングファイルが 必要になります。 q e m u - im g r e b a s e に -u オプションを渡すと ア ンセーフ モ ード が使用されます。このモードでは、 filename の バッキングファイル名と形式のみが変更され、ファイルのコンテンツに対するチェックは行われません。新しいバッキング ファイルが正しく指定されていることを必ず確認してください。指定を誤ると、ゲストに表示されるイメージのコンテンツ が破損することになります。 このモードはバッキングファイルの名前変更や移動を行う際に便利です。古いバッキングファイルへのアクセスを必要 としません。たとえば、バッキングファイルがすでに移動されているか、またはファイルの名前が変更されているイメージ の修正などに使用できます。 Re s iz e size サイズで作成された filename ディスクイメージであるかのようにディスクイメージのサイズ変更を行います。バー ジョンにかかわらず、サイズ変更が可能なのは raw 形式のイメージのみになります。Red Hat Enterprise Linux 6 .1 以降には q c o w 2 形式のイメージを拡大できる機能が追加されています (縮小は不可)。 filename ディスクイメージのサイズを size バイトに設定する場合は以下のようにします。 # qem u-im g resize filenam e size ディスクイメージの現在のサイズに対してサイズを増減させることもできます。ディスクイメージのサイズを大きくする場 合はバイト数の前に + を付け、小さくする場合はバイト数の前に - を付けます。単位の接尾辞を付けると、キロバイト (K)、メガバイト (M)、ギガバイト (G)、またはテラバイト (T) などの単位でイメージサイズを設定することができます。 # qem u-im g resize filenam e [+|-]size [K|M |G |T] 警告 このコマンドを使ってディスクのイメージを小さくする場合はその前に、仮想マシン自体のファイルシステムと パーティション設定のツールを使用して、割り当てられているファイルシステムとパーティションのサイズをそれ ぞれ小さくしておく 必要が あり ます 。先にこれを行わないとデータを喪失することになります。 このコマンドを使ってディスクのイメージを拡大した後に、仮想マシン自体のファイルシステムとパーティション 設定のツールを使用して、そのデバイス上で新しい領域を実際に使用し始める必要があります。 S na ps ho t イメージ ( filename ) の既存のスナップショット ( snapsho t) の一覧表示、適用、作成、削除などを行います。 # qem u-im g snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filenam e - l を使うと、指定したディスクイメージに関連付けられているスナップショットの全一覧が表示されます。適用のオプ ション - a を使うと、ディスクイメージ ( filename ) が以前に保存したスナップショット snapsho t の状態に戻ります。c を使うと、イメージ ( filename ) のスナップショット ( snapsho t) が作成されます。- d を使うと、指定したスナップ ショットが削除されます。 91 仮 想 化 管 理 ガイ ド 対応し て いる形式 q e mu -img は次のいずれかの形式にファイルを変換するよう設計されています。 raw raw ディスクイメージ形式 (デフォルト) です。最も高速となるファイルベースの形式です。ファイルシステム で未割り当てのブロックに対応している場合 (linux なら ext2 または ext3、Windo ws なら NTFS)、書き 込みが行われたセクターのみに領域が予約されます。イメージが使用する実際のサイズを取得する場合は q e m u - im g in fo を使用します。Unix/Linux の場合は ls - ls を使用します。raw イメージで最適な パフォーマンスを得ることができますが、利用できる機能は非常に基本的なものに限られます (スナップ ショットなどは不可)。 qcow2 QEMU イメージ形式です。最も用途が多様となる形式で、機能も最も充実しています。オプションの AES 暗号化、zlib ベースの圧縮、仮想マシンの複数のスナップショットに対するサポート、イメージを小さくする などのオプションを付ける場合に使用します。これらは未割り当てのブロックに対応していないファイルシス テムで役に立ちます (Windo ws 上の NTFS 以外のファイルシステム)。機能が充実している分、パフォー マンスは低下します。 ゲスト仮想マシンやホスト物理マシンでの実行に使用できるのは上記の形式のみになりますが、q e mu -img では、 以下の形式から r a w または q c o w 2 形式のいずれかに変換できるよう、これらの形式も認識し、これらに対応してい ます。通常、イメージの形式は自動的に検出されます。r a w または q c o w 2 形式への変換に加え、r a w または q c o w 2 から元の形式への逆変換も可能です。 bochs Bo chs のディスクイメージ形式です。 c lo o p Linux 圧縮ループ (Linux Co mpressed Lo o p) のイメージです。Kno ppix CD-ROM などのように圧縮 された CD-ROM イメージを直接再利用する場合にのみ役立ちます。 cow ユーザーモード Lunux コピーオンライト (User Mo de Linux Co py On Write) のイメージ形式で す。c o w 形式が含まれているのは、単に旧バージョンとの互換性を持たせるためです。これは Windo ws では動作しません。 dm g Mac のディスクイメージ形式です。 nbd ネットワークブロックデバイスです。 p a r a lle ls Parallels の仮想化ディスクイメージ形式です。 qcow 旧式の QEMU のイメージ形式です。これが含まれているのは、単に旧式のバージョンとの互換性を持たせ るためです。 vdi Oracle 仮想マシンの VirtualBo x (Oracle VM VirtualBo x) のハードディスクイメージ形式です。 92 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト vm dk VMware 互換のイメージ形式です (バージョン 1 および 2 では読み取り/書き込みサポート、バージョン 3 では読み取り専用サポート)。 vpc Windo ws 仮想 PC (Windo ws Virtual PC) のディスクイメージ形式です。v h d 、または Micro so ft の仮 想ハードディスクのイメージ形式とも呼ばれます。 v v fa t 仮想 VFAT のディスクイメージ形式です。 11.2. QEMU ゲス トエージ ェント QEMU ゲストエージェントは、ゲスト内で実行され、ホストマシンが libvirt を使用してゲストオペレーティングシステム に対してコマンドを実行できるようにします。ゲストオペレーティングシステムはその後、これらのコマンドに非同期的に 応答します。本章では、libvirt コマンドおよびゲストエージェントが利用可能なオプションについて説明します。 重要 信頼されるゲストによって実行される場合にのみ、ゲストエージェントは安全であることに注意してください。信 頼されていないゲストはゲストエージェントのプロトコルを悪意のある方法で無視したり、これを誤用したりす る可能性があります。ホスト上のサービス拒否攻撃を回避するためのビルトイン保護プログラムは存在します が、ホストは、操作が予想どおりに実行されるためにゲストの協力を必要とします。 Linux および Windo ws ゲスト上の QEMU ゲストエージェントのヘルプで、CPU のホットプラグおよびホットアンプ ラグがサポートされていることに注意してください。CPU はゲストの実行中に有効/無効にすることができるので、ホッ トプラグ機能を実装でき、かつアンプラグ機能を模倣することができます。詳細は、「仮想 CPU 数を設定する」 を参照 してください。 11.2.1. ゲス トエージ ェントの インス トールおよ び有効化 y u m in s t a ll q e m u - g u e s t - a g e n t コマンドでゲスト仮想マシンに qemu-guest-agent をインストールし、こ れをサービス (qemu-guest-agent.service) として起動時に毎回自動的に実行させます。 11.2.2. ゲス トエージ ェントとホス ト間の 通信設定 ホストマシンは、ホストとゲストマシン間の VirtIO シリアル接続でゲストエージェントと通信します。VirtIO シリアル チャンネルは、キャラクターデバイスドライバー (通常 Unix ソケット) 経由でホストに接続し、ゲストはこのシリアルチャ ンネルでリッスンします。以下の手順では、ゲストエージェントの使用に備えてホストおよびゲストマシンを設定する方 法を説明します。 注記 Windo ws ゲストに QEMU ゲストエージェントをセットアップする方法については、こちら を参照してくださ い。 手順1 1 . 1 ゲス ト エージ ェ ント と ホス ト 間の 通信設定 93 仮 想 化 管 理 ガイ ド 1. ゲス ト X M L を開きます QEMU ゲストエージェント設定でゲスト XML を開きます。ファイルを開くにはゲスト名が必要になります。認 識可能なゲストを一覧表示するには、ホスト物理マシン上でコマンド # v ir s h lis t を実行します。この例 では、ゲスト名は rhel6 になります。 # v ir s h e d it r h e l6 2. ゲス ト X M L フ ァ イル を編集し ます 以下の要素を XML ファイルに追加し、変更を保存します。 <channel type='unix'> <source m ode='bind' path='/var/lib/libvirt/qem u/rhel6 .agent'/> <target type='virtio' nam e='org.qem u.guest_agent.0'/> </channel> 図1 1 . 1 Q E M U ゲス ト エージ ェ ント 設定の ため の ゲス ト X M L の 編集 3. ゲス ト 内の Q E M U ゲス ト エージ ェ ント を起動し ます まだ実行していない場合は、y u m in s t a ll q e m u - g u e s t - a g e n t を使用してゲスト仮想マシン内にゲ ストエージェントをダウンロードし、これをインストールします。いったんインストールしたら、以下のようにサー ビスを開始します。 # s e r v ic e s t a r t q e m u - g u e s t - a g e n t これで設定されたキャラクターデバイスドライバー上で有効な libvirt コマンドを送信すると、ゲストと通信できます。 11.2.3. Q EMU ゲス トエージ ェントの 使用 QEMU ゲストのエージェントプロトコル (QEMU GA) パッケージである qemu-guest-agent は Red Hat Enterprise Linux 6 .5 以降で完全にサポートされています。ただし、isa-serial/virtio -serial トランスポートに関す る以下の制限があります。 qemu-guest-agent は、クライアントがチャンネルに接続しているかどうかを検出できません。 qemu-guest-agent がバックエンドとの接続を切断したかまたは再接続したかをクライアントは検出できません。 virtio -serial デバイスがリセットされ、 qemu-guest-agent がチャネルに接続されなくなった場合 (通常は再起 動またはホットプラグによって引き起こされる)、クライアントからのデータはドロップされます。 virtio -serial デバイスがリセットされてから qemu-guest-agent がチャネルに接続されると、 qemu-guestagent がまだ実行中かまたは接続されているかどうかにかかわらず、クライアントからのデータはキューに入れら れます (さらに使用可能なバッファーが消費されると、スロットリングされます)。 11.2.4 . libvirt によ る Q EMU ゲス トエージ ェントの 使用 QEMU ゲストエージェントをインストールすると、他のさまざまな libvirt コマンドをより強力にすることができます。ゲス トエージェントは以下の v ir s h コマンドを強化します。 v ir s h s h u t d o w n - - m o d e = a g e n t - このシャットダウン方法は v ir s h s h u t d o w n - - m o d e = a c p i よ りも信頼性があります。QEMU ゲストエージェントで使用される v ir s h s h u t d o w n は協力的なゲストをクリー 94 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト ンな状態でシャットダウンできるように保証されているためです。エージェントがない場合、libvirt は ACPI シャット ダウンイベントの挿入に依存しなければなりませんが、一部のゲストはそのイベントを無視するため、シャットダウン されません。 v ir s h r e b o o t の場合と同じ構文で使用できます。 v ir s h s n a p s h o t - c r e a t e - - q u ie s c e - スナップショットが作成される前に、ゲストがその I/O を安定し た状態にフラッシュできるようにします。これにより、fsck を実行したり、データベーストランザクションを部分的に 失うことなくスナップショットを使用することが可能になります。ゲストエージェントは、ゲストの協力を提供すること で、ディスクコンテンツの高レベルの安定性を実現します。 v ir s h s e t v c p u s - - g u e s t - ゲストに対して、CPU をオフラインにするように指示します。 v ir s h d o m p m s u s p e n d - ゲストのオペレーティングシステムの電力管理機能を使用して稼働中のゲストを正 常に一時停止します。 11.2.5. ゲス ト仮想マ シンディス クバ ックアップの 作成 libvirt は qemu-ga と通信し、ゲスト仮想マシンファイルシステムのスナップショットが内部で一貫しており、随時使 用可能であることを保証します。Red Hat Enterprise Linux 6 に改善が加えられたことにより、ファイルとアプリケー ションの両レベルの同期 (フラッシュ) が確実に実行されるようになりました。ゲストシステムの管理者はアプリケー ション固有のフリーズ/フリーズ解除フックスクリプトを作成し、インストールすることができます。ファイルシステムをフ リーズする前に、 qemu-ga は主なフックスクリプト ( qemu-ga パッケージ内に組み込まれている) を起動します。フ リーズプロセスは、すべての仮想マシンアプリケーションを一時的に非アクティブにします。 ファイルシステムがフリーズされる前に、以下のアクションが発生します。 ファイルシステムのアプリケーション/データベースは作業バッファーを仮想ディスクにフラッシュし、クライアント接 続の受け入れを停止します。 アプリケーションはそれらのデータファイルを一貫性のある状態にします。 メインフックスクリプトが返されます。 qemu-ga はファイルシステムをフリーズし、管理スタックはスナップショットを取得します。 スナップショットが確認されます。 ファイルシステムの機能が再開します。 フリーズ解除が逆の順序で生じます。 ゲストディスクのスナップショットを作成するには、s n a p s h o t - c r e a t e - a s コマンドを使用します。このコマンドに関 する詳細情報は、「現在のドメインのスナップショットの作成」 を参照してください。 注記 アプリケーション固有のフックスクリプトは、正常に実行されるために各種の SELinux パーミッションを必要と する場合があります。これは、データベースと対話するためにスクリプトをソケットに接続する必要がある場合と 同様です。通常、このような状況に備えて、ローカルの SELinux ポリシーを作成し、インストールしておく必要 があります。表11.1「QEMU ゲストエージェントのパッケージコンテンツ」 内の / e t c / q e m u g a / fs fr e e z e - h o o k .d / のラベルが付いた行にある r e s t o r e c o n - F v v R コマンドを実行すると、ファ イルシステムノードへのアクセスが設定なしで機能します。 qemu-guest-agent バイナリー RPM には以下のファイルが含まれます。 表1 1 . 1 Q E M U ゲス ト エージ ェ ント の パ ッ ケ ージ コンテンツ 95 仮 想 化 管 理 ガイ ド フ ァ イル 名 詳細 / e t c / r c .d / in it .d / q e m u - g a QEMU ゲストエージェント用のサービス制御スクリプト (開始/停止)。 QEMU ゲストエージェントが / e t c / r c .d / in it .d / q e m u - g a 制御スクリプトで 読み込まれる際の QEMU ゲストエージェントの設定 ファイル。設定内容はシェルスクリプトのコメントと共に ファイルに記載されます。 QEMU ゲストエージェントのバイナリーファイル。 フックスクリプトの ro o t ディレクトリー。 メインフックスクリプト。ここでの変更は必要ありません。 個別の、アプリケーション固有のフックスクリプトのディレ クトリー。ゲストのシステム管理者はこのディレクトリーに フックスクリプトを手動でコピーし、それらに適切なファイ ルモードビットが設定されていることを確認してから、こ のディレクトリー上で r e s t o r e c o n - F v v R を実行す る必要があります。 サンプルスクリプトのあるディレクトリー (例の参照目的 のみ)。ここに含まれるスクリプトは実行されません。 / e t c / s y s c o n fig / q e m u - g a / u s r / b in / q e m u - g a / u s r / lib e x e c / q e m u - g a / / u s r / lib e x e c / q e m u - g a / fs fr e e z e - h o o k / u s r / lib e x e c / q e m u - g a / fs fr e e z e h o o k .d / /usr/share/qem u-kvm /qem u-ga/ メインのフックスクリプトである / u s r / lib e x e c / q e m u - g a / fs fr e e z e - h o o k は、独自のメッセージを、アプリ ケーション固有スクリプトの標準出力およびエラーメッセージと共に / v a r / lo g / q e m u - g a / fs fr e e z e h o o k .lo g のログファイルに記録します。詳細情報は、wiki.qemu.o rg または libvirt.o rg の qemu-guest-agent wiki ページを参照してください。 11.3. Windows ゲス ト上での QEMU ゲス トエージ ェントの 実行 Red Hat Enterprise Linux のホストマシンは、Windo ws ゲスト内で QEMU ゲストエージェントを実行することで Windo ws ゲストにコマンドを発行できます。これがサポートされるのは、Red Hat Enterprise Linux 6 .5 以降を実 行しているホスト内の以下の Windo ws ゲストオペレーティングシステムです。 Windo ws XP Service Pack 3 (VSS は対象外) Windo ws Server 20 0 3 R2 - x8 6 および AMD6 4 (VSS は対象外) Windo ws Server 20 0 8 Windo ws Server 20 0 8 R2 Windo ws 7 - x8 6 および AMD6 4 Windo ws Server 20 12 Windo ws Server 20 12 R2 Windo ws 8 - x8 6 および AMD6 4 Windo ws 8 .1 - x8 6 および AMD6 4 96 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト 注記 Windo ws ゲスト仮想マシンは、Windo ws 用の QEMU ゲストエージェントである qemu-guest-agentwin を必要とします。このエージェントは、Red Hat Enterprise Linux 上で実行される Windo ws ゲスト仮 想マシンの VSS (Vo lume Shado w Co py Service) サポートに必要です。詳細は、こちら をご覧ください。 手順1 1 . 2 Win d o ws ゲス ト 上で Q E M U ゲス ト エージ ェ ント を設定す る Red Hat Enterprise Linux のホストマシン上で Windo ws ゲストを実行するには、以下のステップにしたがいます。 1. Re d Ha t E n t e rp ris e L in u x ホス ト マ シ ンの 準備 以下のパッケージが Red Hat Enterprise Linux ホスト物理マシン上でインストールされていることを確認 します。 / u s r / s h a r e / v ir t io - w in / に格納されている virtio -win Windo ws ゲストにドライバーをコピーするには、以下のコマンドを使用して q xl ドライバーの * .is o ファイ ルを作成します。 # m k is o fs - o / v a r / lib / lib v ir t / im a g e s / v ir t io w in .is o / u s r / s h a r e / v ir t io - w in / d r iv e r s 2. Win d o ws ゲス ト の 準備 ドライバーを更新するために、* .is o を Windo ws ゲストにマウントして virtio -serial ドライバーをゲストに インストールします。ゲストを起動してから、以下のように driver .iso ファイルをゲストにアタッチします (ここ では hdb というディスクを使用)。 # v ir s h a t t a c h - d is k g u e s t / v a r / lib / lib v ir t / im a g e s / v ir t io w in .is o h d b Windo ws の コント ロ ール パ ネ ル を使用してドライバーをインストールするには、以下のメニューに移動し ます。 virtio -win ドライバーのインストール: ハ ードウェ ア と サ ウンド > デバ イス マ ネ ージ ャー > virt io s e ria l d rive r を選択します。 3. Win d o ws ゲス ト X M L 設定フ ァ イル の 更新 Windo ws ゲストのゲスト XML ファイルは Red Hat Enterprise Linux のホストマシン上にあります。この ファイルにアクセスするには、Windo ws ゲスト名が必要になります。ホストマシンが認識可能なゲストを一覧 表示するには、ホストマシン上で # v ir s h lis t コマンドを使用します。この例では、ゲスト名は win7x8 6 になります。 # v ir s h e d it w in 7 x 8 6 コマンドを使って、以下の要素を XML ファイルに追加し、変更を保存します。 ソースのソケット名はホスト内で一意のものである必要があることに注意してください。この例で は、 win7x86.agent になります。 ... <channel type='unix'> <source m ode='bind' path='/var/lib/libvirt/qem u/win7x8 6 .agent'/> <target type='virtio' nam e='org.qem u.guest_agent.0'/> 97 仮 想 化 管 理 ガイ ド <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <channel type='spicevm c'> <target type='virtio' nam e='com .redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> ... 図1 1 . 2 Win d o ws ゲス ト の X M L を編集し て Q E M U ゲス ト エージ ェ ント を設定す る 4 . Win d o ws ゲス ト の 再起動 Windo ws ゲストを再起動して変更を適用します。 # v ir s h r e b o o t w in 7 x 8 6 5. Win d o ws ゲス ト での Q E M U ゲス ト エージ ェ ント の 準備 Windo ws ゲストでゲストエージェントを準備するには、以下を実行します。 a. 最新の virt io -win パ ッ ケ ージ をインス ト ール し ます 。 Red Hat Enterprise Linux ホスト物理マシンのターミナルウィンドウで以下のコマンドを実行し て、インストールするファイルを見つけます。以下に示されるファイルは、お使いのシステムで見つかる ファイルと同一とは限りませんが、最新の公式バージョンが示されます。 # r p m - q a |g r e p v ir t io - w in virtio-win- 1.6 .8 -5.el6 .noarch # r p m - iv v ir t io - w in - 1.6 .8 - 5 .e l6 .n o a r c h b. インス ト ール 完了の 確認 virtio -win パッケージのインストール完了後に / u s r / s h a r e / v ir t io - w in / g u e s t - a g e n t / フォルダーを確認すると、以下のように qemu-ga-x6 4 .msi または qemu-ga-x8 6 .msi というファ イルが見つかります。 # ls -l /usr/share/virtio-win/guest-agent/ total 1544 -rw-r--r--. 1 root root 8 56 06 4 O ct 23 04:58 qem u-ga-x6 4.m si -rw-r--r--. 1 root root 724992 O ct 23 04:58 qem u-ga-x8 6 .m si c. . ms i フ ァ イル の インス ト ール Windo ws ゲスト (例: win7x8 6 ) でファイルをダブルクリックして qemu-ga-x6 4 .msi または qemu-ga-x8 6 .msi をインストールします。インストール後は、システムマネージャー内の Windo ws ゲストに qemu-ga サービスとして表示されます。このマネージャーは、サービスステータスのモニ タリングにも使用できます。 98 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト 11.3.1. Window s ゲス ト上での Q EMU ゲス トエージ ェントにおけ る libvirt コマ ンド の 使用 QEMU ゲストエージェントは、Windo ws ゲストと以下の v ir s h コマンドが使用できます。 v ir s h s h u t d o w n - - m o d e = a g e n t - このシャットダウン方法は v ir s h s h u t d o w n - - m o d e = a c p i よ りも信頼性があります。QEMU ゲストエージェントで使用される v ir s h s h u t d o w n は協力的なゲストをクリー ンな状態でシャットダウンできるように保証されているためです。エージェントがない場合、libvirt は ACPI シャット ダウンイベントの挿入に依存しなければなりませんが、一部のゲストはそのイベントを無視するため、シャットダウン されません。 v ir s h r e b o o t の場合と同じ構文で使用できます。 v ir s h s n a p s h o t - c r e a t e - - q u ie s c e - スナップショットが作成される前に、ゲストがその I/O を安定し た状態にフラッシュできるようにします。これにより、fsck を実行したり、データベーストランザクションを部分的に 失うことなくスナップショットを使用することが可能になります。ゲストエージェントは、ゲストの協力を提供すること で、ディスクコンテンツの高レベルの安定性を実現します。 v ir s h d o m p m s u s p e n d - ゲストのオペレーティングシステムの電力管理機能を使用して稼働中のゲストを正 常に一時停止します。 11.4 . デバイス の リダイレクトに制限を設け る リダイレクトからの特定のデバイスをフィルター処理するには、フィルタープロパティーを - d e v ic e u s b - r e d ir に 渡します。フィルタープロパティーはフィルタールールで構成される文字列を取ります。ルールの形式は以下の通りで す。 < c la s s > :< v e n d o r > :< p r o d u c t > :< v e r s io n > :< a llo w > 特定フィールドのいずれの値も受け入れるようにするには、 - 1 の値を使用します。「|」をセパレーターとして使用する と同一コマンドラインで複数のルールを使用することができます。デバイスがフィルタールールに一致しない場合、リダ イレクトは許可されません。 例1 1 . 1 Win d o ws ゲス ト 仮想マ シ ンでの リダイレ ク ト 制限 1. Windo ws 7 ゲスト仮想マシンを用意します。 2. 次のコードの抜粋をゲスト仮想マシンの XML ファイルに追加します。 <redirdev bus='usb' type='spicevm c'> <alias nam e='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> 3. ゲスト仮想マシンを起動し、次のコマンドを実行して設定の変更を確認します。 # ps -ef | grep $ guest_nam e - d e v ic e u s b - r e d ir , c h a r d e v = c h a r r e d ir 0 , id = r e d ir 0 , / 99 仮 想 化 管 理 ガイ ド filt e r = 0 x 0 8 :0 x 12 3 4 :0 x B E E F :0 x 0 2 0 0 :1|- 1:- 1:- 1:- 1:0 , b u s = u s b .0 , p o r t = 3 4 . USB デバイスをホスト物理マシンに挿入し、virt-viewer を使ってゲスト仮想マシンに接続します。 5. メニュー内の US B デバ イス の 選択 をクリックします。「So me USB devices are blo cked by ho st po licy (ホストのポリシーによりブロックされているデバイスがあります)」というようなメッセージが生成さ れます。確認の O K をクリックし、続行します。 フィルターが適用されます。 6 . フィルターよるキャプチャーが正しく動作するよう USB デバイスの製造元と製品を確認し、次にホスト物理 マシンのドメイン XML に次の変更を加えて USBリダイレクトを許可します。 <redirfilter> <usbdev class='0x08 ' vendor='0x0951' product='0x16 25' version='2.0' allow='yes'/> <usbdev allow='no'/> </redirfilter> 7. ゲスト仮想マシンを再起動し、virt -vie we r を使ってゲスト仮想マシンに接続します。USB デバイスがト ラフィックをゲスト仮想マシンにリダイレクトするようになります。 11.5. 仮想 NIC に接続しているネ ットワ ークブリッジ ま たはホス ト物理マ シンを 動的に変更す る このセクションでは、ゲスト仮想マシンを稼働したままで安全性を確保しながら、そのゲスト仮想マシンの vNIC をある ブリッジから別のブリッジに移動する方法について説明します。 1. 次のような設定でゲスト仮想マシンを用意します。 <interface type='bridge'> <m ac address='52:54:00:4a:c9:5e'/> <source bridge='virbr0'/> <m odel type='virtio'/> </interface> 2. インターフェースの更新用に XML ファイルを準備します。 # c a t b r 1.x m l <interface type='bridge'> <m ac address='52:54:00:4a:c9:5e'/> <source bridge='virbr1'/> <m odel type='virtio'/> </interface> 3. ゲスト仮想マシンを起動し、ゲスト仮想マシンのネットワークが機能していることを確認してから、そのゲスト 仮想マシンの vnetX が指定するブリッジに接続されていることを確認します。 # brctl show bridge nam e virbr0 100 bridge id 8 000.5254007da9f2 S TP enabled yes interfaces virbr0-nic 第 11章 Q E M U - i m g および Q E M U ゲス トエージ ェ ン ト vnet0 virbr1 8 000.5254006 8 2996 yes virbr1-nic 4 . 次のコマンドを使って新しいインターフェースのパラメーターでゲスト仮想マシンのネットワークを更新します。 # v ir s h u p d a t e - d e v ic e t e s t 1 b r 1.x m l Device updated successfully 5. ゲスト仮想マシン上で s e r v ic e n e t w o r k r e s t a r t を実行します。ゲスト仮想マシンが virbr1 の新し い IP アドレスを取得します。ゲスト仮想マシンの virbr0 が新しいブリッジ (virbr1) に接続されていることを 確認します。 # brctl show bridge nam e virbr0 virbr1 bridge id 8 000.5254007da9f2 8 000.5254006 8 2996 S TP enabled yes yes interfaces virbr0-nic virbr1-nic vnet0 101 仮 想 化 管 理 ガイ ド 第12章 ストレージの概念 本章では、ストレージデバイスの記述と管理に使用される概念を紹介します。ストレージプールやボリュームなどの用 語はこれに続くセクションで説明します。 12.1. ス トレージ プール ストレージプール は、ゲスト仮想マシンにストレージをプロビジョニングするために libvirt によって管理されるファイ ル、ディレクトリー、またはストレージデバイスです。ストレージプールはローカルにすることも、ネットワーク経由で共有 することもできます。ストレージプールは、管理者 (ストレージ担当管理者であることが多い) がゲスト仮想マシンで使 用できるように取り分けた一定量のストレージのことです。ストレージプールは、ストレージ管理者またはシステム管理 者のいずれかによってストレージボリュームに分割され、これらのボリュームはブロックデバイスとしてゲスト仮想マシ ンに割り当てられます。つまり、ストレージボリュームとパーティションの関係は、ストレージプールとディスクの関係に 等しくなります。ストレージプールは仮想コンテナーであるものの、ストレージプールは、qemu-kvm によって許可され る最大サイズ、ホスト物理マシン上のディスクのサイズという 2 つの要素によって制限されます。ストレージプールは、 ホスト物理マシン上のディスクのサイズを超えることはできません。最大サイズは以下の通りです。 virtio -blk = 2^6 3 バイトまたは 8 エクサバイト (raw ファイルまたはディスクを使用) Ext4 = ~ 16 TB (4 KB ブロックサイズを使用) XFS = ~8 エクサバイト qco w2 とホストファイルシステムはそれぞれ独自のメタデータを維持し、非常に大きなイメージサイズを使用する 場合はスケーラビリティーの評価または調整を行う必要があります。raw ディスクを使用すると、スケーラビリティー や最大サイズに影響を与える可能性のある層の数が少なくなります。 libvirt では、ディレクトリーベースのストレージプール、/ v a r / lib / lib v ir t / im a g e s / ディレクトリーをデフォルト のストレージプールとして使用します。このデフォルトストレージプールは別のストレージプールに変更可能です。 ロ ーカ ル の ス ト レ ージ プール - ローカルのストレージプールは直接ホスト物理マシンサーバーに割り当てられ ます。ローカルのストレージプールには、ローカルのディレクトリー、直接割り当てられているディスク、物理パーティ ション、LVM ボリュームグループなどが含まれます。これらのストレージボリュームはゲスト仮想マシンのイメージを 格納しているか、または追加ストレージとしてゲスト仮想マシンに割り当てられます。ローカルのストレージプール は直接ホスト物理マシンサーバーに割り当てられるため、ゲスト仮想マシンの移行や大量のゲスト仮想マシンを必 要としない小規模の導入、テスト、および開発などを目的とする場合に便利です。ローカルのストレージプールはラ イブマイグレーションには対応していないため、多くの実稼働環境には適していません。 ネ ッ ト ワーク 接続の ( 共有) ス ト レ ージ プール - ネットワーク接続のストレージプールには、標準のプロトコル を使ってネットワーク経由で共有するストレージデバイスが含まれます。ホスト物理マシン間での仮想マシンの移行 を行なう際、virt-manager を使用する場合はネットワーク接続のストレージが必須になりますが、virsh を使用す る場合はオプションになります。ネットワーク接続のストレージプールは libvirt で管理します。ネットワーク接続の ストレージプールに対応するプロトコルには、以下が含まれます。 ファイバーチャンネルベースの LUN iSCSI NFS GFS2 SCSI RDMA プロトコル (SCSI RCP) - InfiniBand アダプターと 10 GbE iWARP アダプターで使用される ブロックエクスポートプロトコル 102 第 12 章 ス トレージ の 概 念 注記 マルチパスのストレージプールは完全にはサポートされていないため、作成したり、使用したりしないでくださ い。 12.2. ボリューム ストレージプールは、さらにストレージボリュームに分割されます。ストレージボリュームは、物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、および libvirt で処理される他のストレージタイプなどを抽象化し たものです。ストレージボリュームは、基礎となるハードウェアに関係なく、ローカルストレージデバイスとしてゲスト仮 想マシンに提示されます。 ボリュ ーム の 参照 特定のボリュームを参照する方法として、3 種類のアプローチが可能です。 ボリュ ーム と ス ト レ ージ プール の 名前 ボリュームが属しているストレージプールの識別子とボリューム名を使って参照します。 virsh コマンドライ ンの場合、 - - p o o l sto rage_po o l vo lume_name の形式になります。 例: guest_images プール内にある firstimage という名前のボリューム # virsh vol-info --pool guest_im ages firstim age Nam e: firstim age Type: block Capacity: 20.00 G B Allocation: 20.00 G B virsh # ホス ト 物理シ ス テム 上の ス ト レ ージ へ の 完全パ ス ファイルシステム上のボリュームへの完全パスを使って参照することもできます。この方法を採用する場合、 プールの識別子を含める必要はありません。 たとえば、ホスト物理マシンシステムに /images/seco ndimage.img として表示される seco ndimage.img という名前のボリュームの場合、このイメージは /images/seco ndimage.img と しても参照されます。 # virsh vol-info /im ages/secondim age.im g Nam e: secondim age.im g Type: file Capacity: 20.00 G B Allocation: 136 .00 kB 固有の ボリュ ーム キ ー 仮想化システムで初めてボリュームを作成すると、固有の識別子が生成され、割り当てられます。この固有 の識別子は ボリュームキー と呼ばれます。ボリュームキーの形式は使用するストレージによって異なりま す。 LVM などのブロックベースのストレージで使用する場合には、ボリュームキーは以下のような形式になりま す。 103 仮 想 化 管 理 ガイ ド c3pKz4-qPVc-Xf7M -7WNM -WJc8 -qS iz-m tvpG n ファイルベースのストレージで使用する場合には、ボリュームキーはそのボリュームストレージへの完全パス のコピーになる場合があります。 /im ages/secondim age.im g 例: Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-Lo ZuUr のボリュームキーを持つボリューム # virsh vol-info Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr Nam e: firstim age Type: block Capacity: 20.00 G B Allocation: 20.00 G B v ir s h は、ボリューム名、ボリュームパス、またはボリュームキーの間で変換するコマンドを提供します。 vo l-n a me ボリュームパスまたはボリュームキーが指定されると、ボリューム名を返します。 # virsh vol-nam e /dev/ guest_im ages / firstim age firstim age # virsh vol-nam e Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr vo l-p a t h ボリュームキーまたはストレージプールの識別子とボリューム名が指定されると、ボリュームパスを返しま す。 # virsh vol-path Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr /dev/ guest_im ages / firstim age # virsh vol-path --pool guest_im ages firstim age /dev/ guest_im ages / firstim age vo l-k e y コマ ンド ボリュームパスまたはストレージプールの識別子とボリューム名が指定されると、ボリュームキーを返しま す。 # virsh vol-key /dev/ guest_im ages / firstim age Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr # virsh vol-key --pool guest_im ages firstim age Wlvnf7-a4a3-Tlje-lJDa-9eak-PZBv-LoZuUr 104 第 13 章 ス トレージ プール 第13章 ストレージプール 本章では、さまざまなタイプのストレージプールを作成する方法について説明しています。 ストレージプール とは、管理 者 (ストレージ担当管理者の場合が多い) によって確保される一定量のストレージで、仮想マシンなどに使用されま す。ストレージプールは、ストレージ管理者またはシステム管理者のいずれかによってストレージボリュームに分割され ることが多く、ボリュームはブロックデバイスとしてゲスト仮想マシンに割り当てられます。 例1 3 . 1 NFS ス ト レ ージ プール NFS サーバー担当のストレージ管理者が、ゲスト仮想マシンのデータを格納するための共有を作成するとしましょ う。システム管理者は、ホスト物理マシン上のプールをこの共有の詳細で定義します (nfs.example.co m:/ p a t h / t o / s h a r e が / v m _ d a t a にマウントされる)。プールが起動されると、libvirt は、 指定ディレクトリーに共有をマウントしますが、これは、システム管理者がログインし、m o u n t n fs .e x a m p le .c o m :/ p a t h / t o / s h a r e / v m d a t a を実行したかのような動作になります。プールが自動起 動するように設定されている場合、libvirt は、 libvirt の起動時に指定ディレクトリー上に NFS 共有をマウントしま す。 プールが起動すると、NFS で共有しているファイルがボリュームとして報告され、ストレージボリュームのパスの問 い合わせが libvirt API を使って行なわれます。次に、このボリュームのパスは、ゲスト仮想マシンの XML 定義ファ イル内の、ゲスト仮想マシンのブロックデバイス用のソースストレージについて記述しているセクションにコピーされ ます。NFS では、libvirt API を使用するアプリケーションで、プールの制限サイズ (共有のストレージ最大容量) ま でプール内にボリュームを作成したり、そのボリュームを削除したりすることができます (NFS 共有内のファイル)。 すべてのプールタイプがボリュームの作成や削除に対応している訳ではありません。プールを停止すると起動操作 が無効になるような場合は、NFS 共有をアンマウントしてください。破棄操作で共有上にあるデータは変更されませ んが、その名前は変更されます。詳細については man virsh をご覧ください。 注記 ゲスト仮想マシンが正常に機能するためにストレージプールとボリュームが必要な訳ではありません。プールと ボリュームは、libvirt がストレージの一部をゲスト仮想マシンに使用できるようにする手段の一つです。ただし、 独自にストレージを管理し、プールやボリュームを定義せずにゲスト仮想マシンを適切に動作させる方法を取る 管理者もいます。プールを使用しないシステムでは、システム管理者は、各自が選択するツールを使ってゲスト 仮想マシンのストレージの可用性を確保する必要があります。たとえば、NFS 共有をホスト物理マシンの fstab に追加して、その共有が起動時にマウントされるようにします。 13.1. ディス クベース の ス トレージ プール このセクションでは、ゲスト仮想マシン用にディスクベースのストレージデバイスを作成する方法について説明します。 警告 ゲストには、ブロックデバイスまたはディスク全体への書き込みアクセスを付与しないようにします (例: / d e v / s d b )。パーティション (/ d e v / s d b 1 ) または LVM ボリュームなどを利用するようにします。 ゲストにブロックデバイス全体を渡した場合、ゲストはそれにパーティションを設定するか、またはその上に独 自の LVM グループを作成する可能性があります。この場合、ホスト物理マシンがこれらのパーティションや LVM グループを検出し、エラーの原因になります。 105 仮 想 化 管 理 ガイ ド 13.1.1. virs h でディス クベース の ス トレ ージ プールを作成す る 以下の手順では、v ir s h コマンドでディスクデバイスを使って新しいストレージプールを作成します。 警告 ディスクをストレージプール専用にすると、再フォーマットが行われ、ディスクデバイス上に現在格納されている すべてのデータが消去されます。以下の手順を開始する前に、ストレージデバイスをバックアップすることが強 く推奨されます。 1. ディス ク 上で G P T ディス ク ラベ ル を作成す る ディスクには、 GPT (GUID Partitio n Table) ディスクラベルによる再ラベル付けが必要になります。GPT ディスクラベルの使用により、各デバイス上に最大 128 個の大量のパーティションを作成することができま す。MS-DOS パーティションテーブルに比べ、GPT のパーティションテーブルはより多くのパーティションで パーティションデータを格納することができます。 # parted /dev/sdb G NU Parted 2.1 Using /dev/sdb Welcom e to G NU Parted! Type 'help' to view a list of com m ands. (parted) m klabel New disk label type? gpt (parted) quit Inform ation: You m ay need to update /etc/fstab. # 2. ス ト レ ージ プール の 設定フ ァ イル を作成す る 新規デバイスに必要となるストレージプール情報が含まれた一時 XML テキストファイルを作成します。 このファイルは、以下のような形式にし、また以下のフィールドを含める必要があります。 < n a me > g u e s t _ ima g e s _ d is k < / n a me > n a m e パラメーターでストレージプールの名前を指定します。この例では、 guest_images_disk という名前を使用しています。 < d e vice p a t h = ' / d e v/ s d b ' / > p a t h 属性を持つ d e v ic e パラメーターは、ストレージデバイスのデバイスパスを指定します。こ の例では、デバイス /dev/sdb を使用しています。 < t a rg e t > < p a t h > / d e v < / p a t h > < / t a rg e t > p a t h サブパラメーターを持つファイルシステム t a r g e t パラメーターは、ホスト物理ファイルシ ステム上の位置を判別して、このストレージプールで作成されたボリュームを追加します。 たとえば sdb1、 sdb2、 sdb3 などです。この例のように /dev/ を使用すると、このストレージ プールから作成したボリュームは /dev/sdb1、 /dev/sdb2、 /dev/sdb3 としてアクセスできる ことになります。 < fo rma t t yp e = ' g p t ' / > fo r m a t パラメーターは、パーティションテーブルのタイプを指定します。この例では、前述のス テップで作成した GPT ディスクラベルのタイプと一致するよう gpt を使用しています。 106 第 13 章 ス トレージ プール テキストエディターでストレージプールデバイス用の XML ファイルを作成します。 例1 3 . 2 ディス ク ベ ース の ス ト レ ージ デバ イス の ス ト レ ージ プール <pool type='disk'> <nam e> guest_im ages_disk </nam e> <source> <device path='/dev/sdb '/> <form at type='gpt '/> </source> <target> <path> /dev </path> </target> </pool> 3. デバ イス を割り 当て る 前述のステップで作成した XML 設定ファイルで v ir s h p o o l- d e fin e コマンドを使用しストレージプー ルの定義を追加します。 # virsh pool-define ~/guest_im ages_disk.xm l Pool guest_im ages_disk defined from /root/guest_im ages_disk.xm l # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_disk inactive no 4 . ス ト レ ージ プール を起動す る v ir s h p o o l- s t a r t コマンドを使用してストレージプールを起動します。v ir s h p o o l- lis t - - a ll コマンドを使用すると、プールが起動したかどうかを確認できます。 # virsh pool-start guest_im ages_disk Pool guest_im ages_disk started # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_disk active no 5. a u t o s t a rt をオ ンにす る ストレージプールの a u t o s t a r t をオンにします。auto start は、サービスが開始するとストレージプールも 起動するように lib v ir t d サービスを設定します。 # virsh pool-autostart guest_im ages_disk Pool guest_im ages_disk m arked as autostarted # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_disk active yes 107 仮 想 化 管 理 ガイ ド 6 . ス ト レ ージ プール の 設定を確認す る ストレージプールが正しく作成されたこと、サイズが正しく報告されたこと、および状態が r u n n in g として報 告されていることを確認します。 # virsh pool-info guest_im ages_disk Nam e: guest_im ages_disk UUID: 551a6 7c8 -5f2a-012c-38 44-df29b16 7431c S tate: running Capacity: 46 5.76 G B Allocation: 0.00 Available: 46 5.76 G B # ls -la /dev/sdb brw-rw----. 1 root disk 8 , 16 M ay 30 14:08 /dev/sdb # virsh vol-list guest_im ages_disk Nam e Path ----------------------------------------7. オ プシ ョ ン: 一時設定フ ァ イル を削除す る 必要がない場合は、一時的なストレージプール XML 設定ファイルを削除します。 # rm ~/ guest_im ages_disk .xm l これでディスクベースのストレージプールが使用できるようになります。 13.1.2. virs h を使ってス トレ ージ プールを削除す る 以下は、virsh を使ってストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止してから使用中 のリソースをすべて解放するのが最良の方法です。 # virsh pool-destroy guest_im ages_disk 2. ストレージプールの定義を削除します。 # virsh pool-undefine guest_im ages_disk 13.2. パ ーティションベース の ス トレージ プール このセクションでは、事前フォーマットされているブロックデバイス、つまりパーティションをストレージプールとして使用 する方法を説明しています。 以下の例では、ホスト物理マシンは ext4 でフォーマットされた 50 0 GB のままの単独パーティション (/ d e v / s d c 1 ) である 50 0 GB のハードドライブ (/ d e v / s d c ) を持っています。以下の手順を使用して、このハードドライブ用のスト レージプールをセットアップします。 13.2.1. virt- manag e r を使用してパ ーティションベース の ス トレ ージ プールを作成す る 以下の手順では、 ストレージデバイスのパーティションを使用して新規のストレージプールを作成していきます。 108 第 13 章 ス トレージ プール 手順1 3 . 1 virt -ma n a g e r を使用し て パ ーティシ ョ ンベ ース の ス ト レ ージ プール を作成す る 1. ス ト レ ージ プール の セッ ティング を開く a. v ir t - m a n a g e r グラフィカルインターフェースで、メインウィンドウからホスト物理マシンを選択しま す。 編集 メニューを開いて、 接続の詳細 を選択します。 図1 3 . 1 接続の 詳細 b. 接続の詳細 ウィンドウで ストレージ タブをクリックします。 図1 3 . 2 ス ト レ ージ タブ 2. 新規ス ト レ ージ プール を作成す る a. 新規の プール を追加し ます ( パ ート 1) + ボタン (プールの追加ボタン) を押します。 新規ストレージプールの追加 ウィザードが表示さ れます。 109 仮 想 化 管 理 ガイ ド ストレージプールの 名前 を選択します。 この例では、 guest_images_fs という名前を使用してい ます。 種類 を fs : P r e - F o r m a t t e d B lo c k D e v ic e に変更します。 図1 3 . 3 ス ト レ ージ プール の 名前と 種類 進む ボタンをクリックして次に進みます。 b. 新規の プール を追加し ます ( パ ート 2) ターゲットパス 、 フォーマット 、 ソースパス の各フィールドを変更します。 110 第 13 章 ス トレージ プール 図1 3 . 4 ス ト レ ージ プール の パ ス と フ ォ ーマ ッ ト ターゲッ ト パ ス ストレージプール用のソースデバイスのマウント先となる場所を ターゲットパス フィー ルドに入力します。 その場所がまだ存在しない場合は、 v ir t - m a n a g e r によりその ディレクトリーが作成されます。 フ ォ ーマ ッ ト フォーマット 一覧からフォーマットを選択します。 デバイスはこの選択したフォーマット でフォーマット化されます。 この例では、 ext4 ファイルシステムを使用しています。これは Red Hat Enterprise Linux のデフォルトのファイルシステムです。 ソ ース パ ス ソースパス フィールドにデバイスを入力します。 この例では、 /dev/sdc1 デバイスを使用しています。 詳細を確認して、完了 ボタンを押すと、ストレージプールが作成されます。 3. 新規ス ト レ ージ プール を確認す る 数秒後に、左側のストレージ一覧に新規ストレージプールが出現します。 期待通りのサイズが報告されてい ることを確認します。 この例では、 458.20 GB Free です。 状態 フィールドで新規ストレージが Active と 報告されていることを確認します。 ストレージプールを選択します。 自動起動 フィールドで、 起動時 のチェックボックスをクリックします。これで lib v ir t d サービスの起動時には常にストレージデバイスも起動されるようになります。 111 仮 想 化 管 理 ガイ ド 図1 3 . 5 ス ト レ ージ 一覧を確認す る これでストレージプールが作成されました。 接続の詳細 ウィンドウを閉じます。 13.2.2. virt- manag e r を使用してス トレ ージ プールを削除す る 以下のようにしてストレージプールを削除します。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止して使用中のリ ソースをすべて解放するのが最良の方法です。これを実行するには、停止するストレージプールを選択して、 ストレージウィンドウの下部にある赤い X アイコンをクリックします。 図1 3 . 6 停止ア イコン 2. ゴミ箱アイコンをクリックしてストレージプールを削除します。このアイコンが使用できるのは、ストレージプー ルが停止している場合のみです。 13.2.3. virs h を使用したパ ーティションベース の ス トレ ージ プールの 作成 このセクションでは、v ir s h コマンドを使用した、パーティションベースストレージプールの作成を説明しています。 警告 ディスク全体をストレージプールとして割り当てる場合は、 この手順を使用しないでください (例、/ d e v / s d b ) 。 ブロックデバイスやディスク全体への書き込みアクセスはゲストに与えないようにしてください。 この手順は パーティション (例、 / d e v / s d b 1 ) をストレージプールに割り当てる場合にのみ使用してください。 手順1 3 . 2 virs h を使用し て 事前フ ォ ーマ ッ ト 済みの ブ ロ ッ ク デバ イス の ス ト レ ージ プール を作成す る 112 第 13 章 ス トレージ プール 手順1 3 . 2 virs h を使用し て 事前フ ォ ーマ ッ ト 済みの ブ ロ ッ ク デバ イス の ス ト レ ージ プール を作成す る 1. ス ト レ ージ プール の 定義を作成し ます virsh p o o l- d e fin e - a s コマンドを使用して、 新規のストレージプールの定義を作成します。 事前フォー マット済みディスクをストレージプールとして定義するには、 入力を必要とするオプションが 3 つあります。 パ ーティシ ョ ン名 n a m e パラメーターでストレージプールの名前を指定します。 この例では、 guest_images_fs と いう名前を使用しています。 デバ イス d e v ic e パラメーターに p a t h 属性を持たせストレージデバイスのデバイスパスを指定します。 こ の例では、 /dev/sdc1 パーティションを使用しています。 マ ウント ポイント フォーマット済みのデバイスをマウントするローカルファイルシステム上の m o u n t p o in t です。 マウントポイントのディレクトリーが存在しない場合は、v ir s h コマンドによりそのディレクトリーが 作成されます。 この例では、 /guest_images ディレクトリーを使用しています。 # virsh pool-define-as guest_im ages_fs fs - - /dev/sdc1 - "/guest_im ages " Pool guest_im ages_fs defined これで、新規のプールとマウントポイントが作成されました。 2. 新規の プール を確認す る 現在のストレージプールを一覧表示させます # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_fs inactive no 3. マ ウント ポイント を作成す る v ir s h p o o l- b u ild コマンドを使用して、 事前フォーマット済みファイルシステムのストレージプール用の マウントポイントを作成します。 # virsh pool-build guest_im ages_fs Pool guest_im ages_fs built # ls -la / guest_im ages total 8 drwx------. 2 root root 4096 M ay 31 19:38 . dr-xr-xr-x. 25 root root 4096 M ay 31 19:38 .. # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_fs inactive no 113 仮 想 化 管 理 ガイ ド 4 . ス ト レ ージ プール を起動す る v ir s h p o o l- s t a r t コマンドを使用して、 ファイルシステムをマウントポイントにマウントし、 プールを使用 可能にします。 # virsh pool-start guest_im ages_fs Pool guest_im ages_fs started # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_fs active no 5. a u t o s t a rt をオ ンにす る デフォルトでは、v ir s h で定義されているストレージプールは、lib v ir t d が開始する度に自動的に開始す るようには設定されていません。v ir s h p o o l- a u t o s t a r t コマンドを使用して自動開始をオンにします。 そうすると、ストレージプールは lib v ir t d が開始する度に自動的に開始されます。 # virsh pool-autostart guest_im ages_fs Pool guest_im ages_fs m arked as autostarted # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_fs active yes 6 . ス ト レ ージ プール を確認す る ストレージプールが正しく作成されたこと、 期待通りのサイズが報告されていること、 状態が r u n n in g とし て報告されていることを確認します。 ファイルシステム上のマウントポイントに "lo st+fo und" ディレクトリー があるか確認します。 このディレクトリーがあればデバイスはマウントされていることになります。 # virsh pool-info guest_im ages_fs Nam e: guest_im ages_fs UUID: c746 6 8 6 9-e8 2a-a6 6 c-218 7-dc9d6 f08 77d0 S tate: running Persistent: yes Autostart: yes Capacity: 458 .39 G B Allocation: 197.91 M B Available: 458 .20 G B # m ount | grep /guest_im ages /dev/sdc1 on /guest_im ages type ext4 (rw) # ls -la /guest_im ages total 24 drwxr-xr-x. 3 root root 4096 M ay 31 19:47 . dr-xr-xr-x. 25 root root 4096 M ay 31 19:38 .. drwx------. 2 root root 16 38 4 M ay 31 14:18 lost+found 13.2.4 . virs h を使用してス トレ ージ プールを削除す る 114 第 13 章 ス トレージ プール 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止してから使用中 のリソースをすべて解放するのが最良の方法です。 # virsh pool-destroy guest_im ages_disk 2. また、 ストレージプールがあるディレクトリーを削除したい場合は、 次のコマンドを使用します。 # virsh pool-delete guest_im ages_disk 3. ストレージプールの定義を削除する # virsh pool-undefine guest_im ages_disk 13.3. ディレクトリーベース の ス トレージ プール このセクションでは、ホスト物理マシンのディレクトリーにゲスト仮想マシンを格納する方法について説明します。 ディレクトリーベースのストレージプールは、v ir t - m a n a g e r または v ir s h のコマンドラインツールで作成できま す。 13.3.1. virt- manag e r を使用したディレ クトリ ーベース の ス トレ ージ プール作成 1. ロ ーカ ル の ディレ ク ト リーを作成し ます a. オ プシ ョ ン: ス ト レ ージ プール 用に新規の ディレ ク ト リーを作成し ます ホスト物理マシン上にストレージプール用のディレクトリーを作成します。この例では、 /guest virtual machine_images という名前のディレクトリーを作成しています。 # m kdir /guest_im ages b. ディレ ク ト リーの 所有権を設定し ます ディレクトリーのユーザーとグループの所有権を変更します。ティレクトリーは ro o t ユーザーが所有 する必要があります。 # chown root:root /guest_im ages c. ディレ ク ト リーの ア ク セス 権を設定し ます ディレクトリーのファイルアクセス権を変更します。 # chm od 700 /guest_im ages d. 変更を確認し ます アクセス権が修正されていることを確認します。出力は正しく設定された空のディレクトリーを表示し ています。 # ls -la /guest_im ages total 8 drwx------. 2 root root 4096 M ay 28 13:57 . 115 仮 想 化 管 理 ガイ ド dr-xr-xr-x. 26 root root 4096 M ay 28 13:57 .. 2. S E L in u x の フ ァ イル コンテキ ス ト を設定し ます 。 SELinux の適切なコンテキストを新しいディレクトリーに設定します。プール名とディレクトリー名を一致させ る必要はありませんが、ゲスト仮想マシンをシャットダウンする際に libvirt ではコンテキストをデフォルト値に 戻さなければなりません。このデフォルト値はディレクトリーのコンテキストによって決定されます。したがって、 ディレクトリーに「virt_image_t」のラベルを明示的に付けておくと、ゲスト仮想マシンがシャットダウンした 際、そのイメージに「virt_image_t」のラベルが付けられるため、ホスト物理マシンで実行されている他のプ ロセスと区別できるようになります。 # sem anage fcontext -a -t virt_im age_t '/guest_im ages(/.*)?' # restorecon -R /guest_im ages 3. ス ト レ ージ プール 設定を開きます a. v ir t - m a n a g e r グラフィカルインターフェースで、メインウィンドウからホスト物理マシンを選択しま す。 編集 メニューを開き、接続の詳細 を選択します。 図1 3 . 7 接続の 詳細ウィンドウ b. 接続の詳細 ウィンドウの ストレージ タブをクリックします。 116 第 13 章 ス トレージ プール 図1 3 . 8 ス ト レ ージ タブ 4 . 新し いス ト レ ージ プール を作成し ます a. 新規の プール を追加し ます ( パ ート 1) 。 + ボタンを押します (プールの追加ボタン)。新規ストレージプールを追加 のウィザードが表示さ れます。 ストレージプールの 名前 を選択します。この例では guest_images という名前を使用していま す。種類 を d ir : ファイルシステムディレクトリー にします。 図1 3 . 9 ス ト レ ージ プール に名前を付け る 117 仮 想 化 管 理 ガイ ド 進む ボタンを押して先に進みます。 b. 新規の プール を追加し ます ( パ ート 2) 。 ターゲットパス フィールドを /guest_images などに変更します。 詳細を確認して、完了 ボタンを押すと、ストレージプールが作成されます。 5. 新し いス ト レ ージ プール を確認し ます 数秒後に、左側のストレージ一覧に新しいストレージプールが表示されます。予想通りのサイズが表示され ていることを確認します。この例では、 36.41 GB Free と表示されています。状態 フィールドに新しいスト レージが Active と表示されていることを確認します。 ストレージプールを選択します。自動起動 のフィールドで 起動時 のチェックボックスにチェックマークが付 いていることを確認します。チェックマークが付いていると、lib v ir t d サービスの起動時は常にストレージ プールも起動されます。 図1 3 . 1 0 ス ト レ ージ プール の 詳細を確認 これでストレージプールが作成されました。接続の詳細 ウィンドウを閉じます。 13.3.2. virt- manag e r を使用したス トレ ージ プールの 削除 この手順では、ストレージプールを削除する方法を説明します。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止して使用中のリ ソースをすべて解放するのが最良の方法です。これを実行するには、停止するストレージプールを選択して、 ストレージウィンドウの下部にある赤い X アイコンをクリックします。 118 第 13 章 ス トレージ プール 図1 3 . 1 1 停止ア イコン 2. ゴミ箱アイコンをクリックしてストレージプールを削除します。このアイコンが使用できるのは、ストレージプー ルが停止している場合のみです。 13.3.3. virs h を使用したディレ クトリ ーベース の ス トレ ージ プールの 作成 1. ス ト レ ージ プール の 定義を作成し ます 新規のストレージプールを定義するには、v ir s h p o o l- d e fin e - a s コマンドを使用します。ディレクトリー ベースのストレージプールの作成には 2 つのオプションが必要になります。 ストレージプールの 名前 この例では guest_images という名前を使用しています。以下の例のこれ以降の v ir s h コマンドはす べてこの名前を使用します。 ゲストイメージファイル格納用のファイルシステムディレクトリーへの パス (このディレクトリーが存在しな い場合は、v ir s h により作成されます) この例では /guest_images ディレクトリーを使用しています。 # virsh pool-define-as guest_im ages dir - - - - "/guest_im ages " Pool guest_im ages defined 2. ス ト レ ージ プール が 一覧表示され て いるこ と を確認し ます 。 ストレージプールが正しく作成されていること、また状態が in a c t iv e で表示されることを確認します。 # virsh pool-list --all Nam e S tate Autostart 119 仮 想 化 管 理 ガイ ド ----------------------------------------default active yes guest_im ages inactive no 3. ロ ーカ ル の ディレ ク ト リーを作成し ます 以下のように、v ir s h p o o l- b u ild コマンドを使用し、 guest_images ディレクトリー (例) にディレクト リーベースのストレージプールをビルドします。 # virsh pool-build guest_im ages Pool guest_im ages built # ls -la / guest_im ages total 8 drwx------. 2 root root 4096 M ay 30 02:44 . dr-xr-xr-x. 26 root root 4096 M ay 30 02:44 .. # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages inactive no 4 . ス ト レ ージ プール を起動し ます virsh コマンドの p o o l- s t a r t を使ってディレクトリーストレージプールを有効にします。これにより、プール のボリュームがゲストのディスクイメージとして使用されます。 # virsh pool-start guest_im ages Pool guest_im ages started # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages active no 5. a u t o s t a rt をオ ンにし ます ストレージプールに対して a u t o s t a r t をオンにします。Auto start は、サービスが開始する際にストレージ プールを開始するように lib v ir t d サービスを設定します。 # virsh pool-autostart guest_im ages Pool guest_im ages m arked as autostarted # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages active yes 6 . ス ト レ ージ プール 設定を確認し ます ストレージプールが正しく作成されたこと、サイズが正しく表示されていること、および状態が r u n n in g と表 示されていることなどを確認します。ゲスト仮想マシンが実行されていない場合でもプールにアクセスできる ようにしておきたい場合には、P e r s is t e n t に y e s が表示されていることを確認します。サービスの起動 時にプールを自動的に起動させる場合は、A u t o s t a r t に y e s が表示されていることを確認します。 120 第 13 章 ス トレージ プール # virsh pool-info guest_im ages Nam e: guest_im ages UUID: 77908 1bf-7a8 2-107b-28 74-a19a9c51d24c S tate: running Persistent: yes Autostart: yes Capacity: 49.22 G B Allocation: 12.8 0 G B Available: 36 .41 G B # ls -la /guest_im ages total 8 drwx------. 2 root root 4096 M ay 30 02:44 . dr-xr-xr-x. 26 root root 4096 M ay 30 02:44 .. # これでディレクトリーベースのストレージプールが利用できるようになりました。 13.3.4 . virs h を使用したス トレ ージ プールの 削除 以下は、virsh を使ってストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止してから使用中 のリソースをすべて解放するのが最良の方法です。 # virsh pool-destroy guest_im ages_disk 2. また、ストレージプールがあるディレクトリーを削除したい場合は、次のコマンドを使用します。 # virsh pool-delete guest_im ages_disk 3. ストレージプールの定義を削除します。 # virsh pool-undefine guest_im ages_disk 13.4 . LV M ベース の ス トレージ プール この章では、LVM ボリュームグループをストレージプールとして使用する方法について説明します。 LVM ベースのストレージグループでは、LVM の柔軟性を十分に利用することができます。 注記 現在、シンプロビジョニングは LVM ベースのストレージプールでは利用できません。 注記 LVM についての詳細は、『Red Hat Enterprise Linux ストレージ管理ガイド』 を参照してください。 121 仮 想 化 管 理 ガイ ド 警告 LVM ベースのストレージプールは全面的なディスクパーティションを必要とします。この手順を使用して新しい パーティションおよびデバイスをアクティブ化する場合、パーティションはフォーマットされ、すべてのデータは消 去されます。ホストの既存ボリュームグループ (VG) を使用する場合は、いずれのデータも消去されません。以 下の手順を開始する前に、ストレージデバイスのバックアップを取っておくことが推奨されます。 13.4 .1. virt- manag e r を使用した LVM ベース の ス トレ ージ プールの 作成 LVM ベースのストレージプールでは既存の LVM ボリュームグループを使用するか、新規の LVM ボリュームグルー プを空のパーティションに作成して使用することができます。 1. オ プシ ョ ン: L VM ボリュ ーム 用に新規の パ ーティシ ョ ンを作成し ます 以下のステップでは、新しいハードディスクドライブ上に新規のパーティション、および LVM ボリュームグルー プを作成する方法を説明します。 警告 以下の手順を実行すると、選択したストレージデバイスからすべてのデータが削除されます。 a. 新規パ ーティシ ョ ンを作成し ます fd is k コマンドを使用して、コマンドラインから新しいディスクパーティションを作成します。以下の例 では、ストレージデバイス / d e v / s d b 上のディスク全体を使用する新しいパーティションを作成して います。 # fdisk /dev/sdb Com m and (m for help): n を入力して、新規のパーティションを作成します。 b. p を入力してプライマリーパーティションを選択します。 Com m and action e extended p prim ary partition (1-4) c. 選択可能なパーティション番号を選択します。この例では、 1 が入力され、1 番目のパーティションが 選択されています。 Partition num ber (1-4): 1 d. E n t e r を押して、デフォルトの 1 番目のシリンダーを入力します。 First cylinder (1-400, default 1): e. パーティションのサイズを選択します。この例では、 E n t e r を押すことで、ディスク全域が割り当てら れます。 122 第 13 章 ス トレージ プール Last cylinder or +size or +sizeM or +sizeK (2-400, default 400): f. t を入力してパーティションのタイプを設定します。 Com m and (m for help): t g. 前のステップで作成したパーティションを選択します。この例では、パーティション番号は 1 です。 Partition num ber (1-4): 1 h. Linux LVM パーティションの 8 e を入力します。 Hex code (type L to list codes): 8 e i. 変更をディスクに書き込んで終了します。 Com m and (m for help): w Com m and (m for help): q j. 新規の L VM ボリュ ーム ガイドを作成し ます v g c r e a t e コマンドで新しい LVMボリュームグループを作成します。この例で は、 guest_images_lvm という名前のボリュームグループを作成しています。 # vgcreate guest_im ages_lvm /dev/sdb1 Physical volum e "/dev/vdb1" successfully created Volum e group "guest_im ages_lvm " successfully created これで新規の LVM ボリュームグループ guest_images_lvm が LVM ベースのストレージプールに使用で きるようになりました。 2. ス ト レ ージ プール の 設定を開きます a. v ir t - m a n a g e r グラフィカルインターフェースで、メインウィンドウからホストを選択します。 編集 メニューを開いて、接続の詳細 を選択します。 図1 3 . 1 2 接続の 詳細 b. ストレージ タブをクリックします。 123 仮 想 化 管 理 ガイ ド 図1 3 . 1 3 ス ト レ ージ タブ 3. 新し いス ト レ ージ プール を作成し ます a. ウィザ ードを開始し ます + ボタン (プールの追加ボタン) を押します。新規ストレージプールの追加 ウィザードが表示さ れます。 ストレージプール用に 名前 を選択します。この例では、 guest_images_lvm を使用しています。 種類 を lo g ic a l: L V M ボリュームグループ に変更します。 124 第 13 章 ス トレージ プール 図1 3 . 1 4 L VM ス ト レ ージ プール の 追加 進む ボタンを押して先に進みます。 b. 新規プール を追加し ます ( パ ート 2 ) ターゲットパス フィールドを変更します。この例では、 /guest_images を使用しています。 次に、ターゲットパス フィールドと ソースパス フィールドに入力してから、プールを構築 の チェックボックスにチェックマークを付けます。 ターゲットパス フィールドを使用して、既存の LVM ボリュームグループか、または新規ボ リュームグループの名前の いずれ か を選択します。デフォルト形式 は、/ d e v / sto rage_po o l_name になります。 この例では、 /dev/guest_images_lvm という名前の新しいボリュームグループを使用してい ます。 既存の LVM ボリュームグループが ターゲットパス で使用されている場合は、ソースパス フィールドはオプションになります。 新規の LVM ボリュームグループの場合には、ストレージデバイスの場所を ソースパス フィー ルドに入力します。この例では、空のパーティション /dev/sdc を使用しています。 プールを構築 のチェックボックスにチェックマークを付けて、v ir t - m a n a g e r に新規の LVM ボリュームグループを作成するよう指示します。既存のボリュームグループを使用する場合 は、プールを構築 のチェックボックスは選択しないでください。 この例では、空のパーティションを使用して新規のボリュームグループを作成しているた め、プールを構築 のチェックボックスを選択しておく必要があります。 図1 3 . 1 5 ターゲッ ト と ソ ース の 追加 125 仮 想 化 管 理 ガイ ド 詳細を確認して 完了 ボタンを押すと、LVM ボリュームグループがフォーマットされ、ストレージプー ルが作成されます。 c. フ ォ ーマ ッ ト す るデバ イス を確認し ます 警告メッセージが表示されます。 図1 3 . 1 6 警告メッ セージ はい ボタンを押すと、ストレージデバイス上のすべてのデータが消去され、ストレージプールが作成 されます。 4 . 新規の ス ト レ ージ プール を確認し ます 数秒後に新しいストレージプールが左側の一覧に表示されます。詳細が予想通りであることを確認します。こ の例では、 465.76 GB Free です。また、状態 フィールドで新規ストレージプールが Active と報告されてい ることを確認します。 通常は、自動起動 のチェックボックスにチェックマークを付けて有効にし、libvirtd でストレージプールが自 動的に起動されるようにしておくと便利です。 126 第 13 章 ス トレージ プール 図1 3 . 1 7 L VM ス ト レ ージ プール の 詳細確認 これで作業は完了です。ホストの詳細ダイアログを閉じます。 13.4 .2. virt- manag e r を使用したス トレ ージ プールの 削除 以下の手順は、ストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止して使用中のリ ソースをすべて解放するのが最良の方法です。これを実行するには、停止するストレージプールを選択して、 ストレージウィンドウの下部にある赤い X アイコンをクリックします。 図1 3 . 1 8 停止ア イコン 2. ゴミ箱アイコンをクリックして、ストレージプールを削除します。このアイコンが使用できるのは、ストレージプー ルが停止している場合のみです。 13.4 .3. virs h を使用した LVM ベース の ス トレ ージ プールの 作成 このセクションでは、v ir s h コマンドを使用して LVM ベースのストレージプールを作成する場合に必要な手順につい て簡単に説明します。ここでは、単一ドライブ (/ d e v / s d c ) からの g u e s t _ ima g e s _ lvm という名前のプールの 例を使用しています。これは、説明用の例なので、実際の設定では適切な値に置き換えてください。 手順1 3 . 3 virs h を使用し た L VM ベ ース の ス ト レ ージ プール の 作成 1. プール名 g u e s t _ ima g e s _ lvm を定義します。 127 仮 想 化 管 理 ガイ ド # virsh pool-define-as guest_im ages_lvm logical - - /dev/sdc libvirt_lvm \ /dev/ libvirt_lvm Pool guest_im ages_lvm defined 2. 指定した名前に応じてプールを構築します。既存のボリュームグループをすでに使用している場合は、このス テップを飛ばします。 # virsh pool-build guest_im ages_lvm Pool guest_im ages_lvm built 3. 新規のプールを初期化します。 # virsh pool-start guest_im ages_lvm Pool guest_im ages_lvm started 4 . v g s コマンドを使用して、ボリュームグループ情報を表示します。 # vgs VG libvirt_lvm #PV #LV #S N Attr VS ize VFree 1 0 0 wz--n- 46 5.76 g 46 5.76 g 5. プールが自動的に起動するよう設定します。 # virsh pool-autostart guest_im ages_lvm Pool guest_im ages_lvm m arked as autostarted 6 . v ir s h コマンドを使用して、利用可能なプールを一覧表示します。 # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes guest_im ages_lvm active yes 7. 以下の一連のコマンドで、このプール内に 3 つのボリュームが作成されます (vo lu me 1 、vo lu me 2 、vo lu me 3 )。 # virsh vol-create-as guest_im ages_lvm volum e1 8 G Vol volum e1 created # virsh vol-create-as guest_im ages_lvm volum e2 8 G Vol volum e2 created # virsh vol-create-as guest_im ages_lvm volum e3 8 G Vol volum e3 created 8 . v ir s h コマンドを使用して、このプール内の利用可能なボリュームを一覧表示します。 # virsh vol-list guest_im ages_lvm Nam e Path ----------------------------------------- 128 第 13 章 ス トレージ プール volum e1 volum e2 volum e3 /dev/libvirt_lvm /volum e1 /dev/libvirt_lvm /volum e2 /dev/libvirt_lvm /volum e3 9. 以下の 2 つのコマンド (lv s c a n と lv s ) を使用して、新たに作成されたボリュームに関する詳細情報を表 示します。 # lvscan ACTIVE ACTIVE ACTIVE # lvs LV Convert volum e1 volum e2 volum e3 '/dev/libvirt_lvm /volum e1' [8 .00 G iB] inherit '/dev/libvirt_lvm /volum e2' [8 .00 G iB] inherit '/dev/libvirt_lvm /volum e3' [8 .00 G iB] inherit VG libvirt_lvm libvirt_lvm libvirt_lvm Attr -wi-a-wi-a-wi-a- LS ize Pool O rigin Data% M ove Log Copy% 8 .00g 8 .00g 8 .00g 13.4 .4 . virs h を使用したス トレ ージ プールの 削除 以下では、virsh を使ってストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲストとの問題を避けるには、ストレージプールを停止してから使用中のリソース をすべて解放するのが最良の方法です。 # virsh pool-destroy guest_im ages_disk 2. また、ストレージプールがあるディレクトリーを削除したい場合は、次のコマンドを使用します。 # virsh pool-delete guest_im ages_disk 3. ストレージプールの定義を削除します。 # virsh pool-undefine guest_im ages_disk 13.5. iSCSI ベース の ス トレージ プール このセクションでは、iSCSI ベースのデバイスを使用してゲスト仮想マシンを格納する方法を説明します。 iSCSI (Internet Small Co mputer System Interface) とは、ストレージデバイスを共有するためのネットワークプ ロトコルです。iSCSI では、IP 層全体で SCSI の指示を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。 13.5.1. ソフトウ ェア iS CS I タ ーゲットの 設定 ソフトウェア支援の iSCSI ターゲットを作成できるツールは、 scsi-target-utils パッケージで提供されます。 手順1 3 . 4 iS CS I ターゲッ ト を作成し ます 1. 必要なパ ッ ケ ージ をインス ト ール し ます scsi-target-utils パッケージおよび依存するすべてのパッケージをインストールします。 129 仮 想 化 管 理 ガイ ド # yum install scsi-target-utils 2. t g t d サ ービ ス を起動し ます t g t d サービスは、ホスト物理マシンの SCSI ターゲットを提供し、ホスト物理マシンのターゲットに対して iSCSI プロトコルを使用します。t g t d サービスを起動してから、c h k c o n fig コマンドで再起動すると、その サービスを永続化することができます。 # service tgtd start # chkconfig tgtd on 3. オ プシ ョ ン: L VM ボリュ ーム を作成し ます LVM ボリュームは、iSCSI のバッキングイメージに役に立ちます。LVM のスナップショットやサイズ変更は、ゲ スト仮想マシンにとって便利な機能です。この例では、iSCSI でゲスト仮想マシンをホストするために RAID5 アレイ上の virtsto re という名前の新規ボリュームグループ上に virtimage1 という名前の LVM イメージを 作成しています。 a. RAID ア レ イを作成す る ソフトウェア RAID5 アレイの作成については 『Red Hat Enterprise Linux 導入ガイド』 を参照し てください。 b. L VM ボリュ ーム グ ル ープを作成す る v g c r e a t e コマンドを使用して virtsto re という名前のボリュームグループを作成します。 # vgcreate virtstore /dev/m d1 c. L VM 論理ボリュ ーム を作成す る lv c r e a t e コマンドを使用して、 virtimage1 という名前の論理ボリュームグループを 20 GB のサ イズで virtsto re ボリュームグループ上に作成します。 # lvcreate --size 20G -n virtim age1 virtstore これで、新規論理ボリュームの virtimage1 を iSCSI に使用する準備が整いました。 4 . オ プシ ョ ン: フ ァ イル ベ ース の イメージ を作成し ます ファイルベースのストレージはテスト用としては十分ですが、実稼働環境や I/O アクティビティーが活発な環 境には推奨できません。このオプションの手順では、iSCSI ターゲット用に virtimage2.img という名前のファ イルベースイメージを作成します。 a. イメージ 用の 新規の ディレ ク ト リーを作成す る イメージを格納するための新規ディレクトリーを作成します。このディレクトリーには適切な SELinux コンテキストを設定する必要があります。 # m kdir -p /var/lib/tgtd/ virtualization b. イメージ フ ァ イル を作成す る 130 第 13 章 ス トレージ プール virtimage2.img という名前のイメージを 10 GB のサイズで作成します。 # dd if=/dev/zero of=/var/lib/tgtd/ virtualization / virtim age2.im g bs=1M seek=10000 count=0 c. S E L in u x フ ァ イル コンテキ ス ト を設定す る 新規のイメージとディレクトリーに適切な SELinux コンテキストを設定します。 # restorecon -R /var/lib/tgtd これで、新規のファイルベースのイメージ virtimage2.img を iSCSI に使用する準備が整いました。 5. ターゲッ ト を作成し ます ターゲットは、/ e t c / t g t / t a r g e t s .c o n f ファイルに XML エントリーを追加することで作成できま す。t a r g e t 属性には IQN (iSCSI Qualified Name) が必要になります。IQN は以下の形式になります。 iqn.yyyy - m m .reversed dom ain nam e :optional identifier text ここで、 yyyy-mm は、デバイスが起動された年と月を示します (例: 2010-05)。 reversed do main name は、ホスト物理マシンの逆になったドメイン名 (たとえば、IQN の server1.example.co m の場合は co m.example.server1) です。 o ptio nal identifier text は、テキストの文字列になります。空白は入れません。管理者がデバイスや ハードウェアの特定を行なう場合に便利です。 この例では、オプションの手順で server1.example.co m 上に作成した 2 種類のイメージ用に iSCSI ター ゲットを作成し、オプションの識別子 trial を設定しています。以下の行を / e t c / t g t / t a r g e t s .c o n f ファイルに追加します。 <target iqn.2010-05.com .exam ple.server1:iscsirhel6 guest > backing-store /dev/ virtstore / virtim age1 #LUN 1 backing-store /var/lib/tgtd/ virtualization / virtim age2.im g write-cache off </target> #LUN 2 ドライバータイプが iSCSI に設定されるよう、/ e t c / t g t / t a r g e t s .c o n f ファイルに d e fa u lt d r iv e r is c s i の行が含まれていることを確認してください。ドライバーはデフォルトで iSCSI を使用しま す。 重要 この例では、アクセス制御を持たないグローバルにアクセス可能なターゲットを作成します。安全なア クセスの実装に関しては、scsi-target-utils を参照してください。 6 . t g t d サ ービ ス を再起動し ます 131 仮 想 化 管 理 ガイ ド t g t d サービスを再起動して、設定の変更を再読み込みします。 # service tgtd restart 7. ip t a b le s の 設定を行います ip t a b le s を使用して iSCSI アクセス用にポート 326 0 を開きます。 # iptables -I INPUT -p tcp -m tcp --dport 326 0 -j ACCEPT # service iptables save # service iptables restart 8 . 新規の ターゲッ ト を確認し ます t g t - a d m in - - s h o w コマンドを使用して、新規ターゲットを表示させ、セットアップが正しく行なわれてい ることを確認します。 # tgt-adm in --show Target 1: iqn.2010-05.com .exam ple.server1:iscsirhel6 guest S ystem inform ation: Driver: iscsi S tate: ready I_T nexus inform ation: LUN inform ation: LUN: 0 Type: controller S CS I ID: IET 00010000 S CS I S N: beaf10 S ize: 0 M B O nline: Yes Rem ovable m edia: No Backing store type: rdwr Backing store path: None LUN: 1 Type: disk S CS I ID: IET 00010001 S CS I S N: beaf11 S ize: 20000 M B O nline: Yes Rem ovable m edia: No Backing store type: rdwr Backing store path: /dev/ virtstore / virtim age1 LUN: 2 Type: disk S CS I ID: IET 00010002 S CS I S N: beaf12 S ize: 10000 M B O nline: Yes Rem ovable m edia: No Backing store type: rdwr Backing store path: /var/lib/tgtd/ virtualization / virtim age2.im g Account inform ation: ACL inform ation: ALL 132 第 13 章 ス トレージ プール 警告 ACL 一覧はすべて (all) にセットされています。これにより、ローカルネットワーク上のすべてのシス テムがこのデバイスにアクセス可能になります。実稼働環境には、ホスト物理マシンのアクセス ACL を設定することが推奨されています。 9. オ プシ ョ ン: 検出テス ト 新規の iSCSI デバイスが検出可能かどうかを検証します。 # iscsiadm --m ode discovery --type sendtargets --portal server1.exam ple.com 127.0.0.1:326 0,1 iqn.2010-05.com .exam ple.server1:iscsirhel6 guest 10 . オ プシ ョ ン: デバ イス 接続テス ト 新規デバイス ( iqn.2010-05.co m.example.server1:iscsirhel6guest) を接続して、デバイスの接続が 可能かどうかを検証します。 # iscsiadm -d2 -m node --login scsiadm : M ax file lim its 1024 1024 Logging in to [iface: default, target: iqn.201005.com .exam ple.server1:iscsirhel6 guest, portal: 10.0.0.1,326 0] Login to [iface: default, target: iqn.201005.com .exam ple.server1:iscsirhel6 guest, portal: 10.0.0.1,326 0] successful. デバイスを切り離します。 # iscsiadm -d2 -m node --logout scsiadm : M ax file lim its 1024 1024 Logging out of session [sid: 2, target: iqn.201005.com .exam ple.server1:iscsirhel6 guest, portal: 10.0.0.1,326 0 Logout of [sid: 2, target: iqn.2010-05.com .exam ple.server1:iscsirhel6 guest, portal: 10.0.0.1,326 0] successful. これで、iSCSI デバイスを仮想化に使用する準備が整いました。 13.5.2. virt- manag e r に iS CS I タ ーゲットを追加す る 以下の手順は、v ir t - m a n a g e r で iSCSI ターゲットを持つストレージプールを作成する方法を説明しています。 手順1 3 . 5 iS CS I デバ イス を virt -ma n a g e r に追加す る 1. ホス ト 物理マ シ ンの ス ト レ ージ タブ を開きます 接続の詳細 ウィンドウ内の ストレージ タブを開きます。 a. v ir t - m a n a g e r を開きます b. メイン v ir t - m a n a g e r ウィンドウからホスト物理マシンを選択します。編集 メニューをクリックし て、接続の詳細 を選択します。 133 仮 想 化 管 理 ガイ ド 図1 3 . 1 9 接続の 詳細 c. ストレージ タブをクリックします。 図1 3 . 2 0 ス ト レ ージ メニュ ー 2. 新規の プール を追加し ます ( パ ート 1 ) + ボタン (プールの追加ボタン) を押します。新規ストレージプールの追加 ウィザードが表示されます。 134 第 13 章 ス トレージ プール 図1 3 . 2 1 is cs i ス ト レ ージ プール の 名前と 種類を追加 ストレージプールの名前を選択して、種類を iscsi に変更し、進む を押して先に進みます。 3. 新規の プール を追加し ます ( パ ート 2 ) このメニューのフィールドに記載する情報として、「iSCSI ベースのストレージプール」 および ステップ 5 で使 用した情報が必要になります。 a. iSCSI ソースおよびターゲットを入力します。フォーマットはゲスト仮想マシンが処理するた め、フォーマット オプションは選択できません。さらに、ターゲットパス を編集することは推奨 されていません。デフォルトのターゲットパスの値 / d e v / d is k / b y - p a t h / は、ドライブパスをそ のディレクトリーに追加します。ターゲットパスは、移行に関してすべてのホスト物理マシン上で同一 である必要があります。 b. iSCSI ターゲットのホスト名、または IP アドレスを入力します。この例で は、h o s t 1.e x a m p le .c o m を使用します。 c. ソースパス フィールドには、iSCSI ターゲット IQN を入力します。「iSCSI ベースのストレージプー ル」 の ステップ 5 を参照すると、これは / e t c / t g t / t a r g e t s .c o n f file に追加した情報で あることが分かります。この例では、iq n .2 0 10 0 5 .c o m .e x a m p le .s e r v e r 1:is c s ir h e l6 g u e s t を使用しています。 d. IQ N チェックボックスにチェックを入れて、イニシエーターの IQN を入力します。この例で は、iq n .2 0 10 - 0 5 .c o m .e x a m p le .s e r v e r 1:is c s ir h e l6 g u e s t を使用しています。 e. 完了 をクリックすると、新規のストレージプールが作成されます。 135 仮 想 化 管 理 ガイ ド 図1 3 . 2 2 is cs i ス ト レ ージ プール の 作成 13.5.3. virt- manag e r を使用したス トレ ージ プールの 削除 以下の手順は、ストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止して使用中のリ ソースをすべて解放するのが最良の方法です。これを実行するには、停止するストレージプールを選択して、 ストレージウィンドウの下部にある赤い X アイコンをクリックします。 136 第 13 章 ス トレージ プール 図1 3 . 2 3 停止ア イコン 2. ゴミ箱アイコンをクリックしてストレージプールを削除します。このアイコンが使用できるのは、ストレージプー ルが停止している場合のみです。 13.5.4 . virs h を使用した iS CS I ベース の ス トレ ージ プールの 作成 1. p o o l-d e fin e -a s を使用し て コマ ンドラインか ら プール を定義し ます ストレージプールの定義は、v ir s h コマンドラインツールで作成できます。v ir s h を使ったストレージプール 作成は、複数のストレージプールをスクリプトで作成しているシステム管理者にとって便利です。 v ir s h p o o l- d e fin e - a s コマンドにはパラメーターがいくつかあり、以下の形式で使用します。 virsh pool-define-as n a m e t y p e s o u r c e - h o s t s o u r c e - p a t h s o u r c e - d e v s o u r c e - n a m e target 以下でパラメーターについて説明します。 t yp e iscsi などの、特定のタイプでプールを定義します。 n a me ストレージプールの名前を指定し、固有の名前にしてください。 s o u rce -h o s t と s o u rce -p a t h ホスト名と iSCSI IQN です。 s o u rce -d e v と s o u rce -n a me 137 仮 想 化 管 理 ガイ ド iSCSI ベースのプールにはこれらのパラメーターは必要ありません、 - 文字を使ってこのフィール ドは空白にします。 t a rg e t ホスト物理マシン上に iSCSI デバイスをマウントする場所を定義します。 以下の例では、以前のステップと同じ iSCSI ベースのストレージプールを作成しています。 # virsh pool-define-as --nam e scsirhel6 guest --type iscsi \ --source-host server1.exam ple.com \ --source-dev iqn.2010-05.com .exam ple.server1:iscsirhel6 guest --target /dev/disk/by-path Pool iscsirhel6 guest defined 2. ス ト レ ージ プール が 一覧表示され て いるこ と を確認し ます ストレージプールオブジェクトが正しく作成されたことや、状態が in a c t iv e として報告されることを確認し ます。 # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes iscsirhel6 guest inactive no 3. ス ト レ ージ プール を起動し ます これには virsh コマンド p o o l- s t a r t を使用します。p o o l- s t a r t はディレクトリーストレージプールを有 効にして、ボリュームとゲスト仮想マシン用に使用できるようにします。 # virsh pool-start guest_im ages_disk Pool guest_im ages_disk started # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes iscsirhel6 guest active no 4 . a u t o s t a rt をオ ンにし ます ストレージプールの a u t o s t a r t をオンにします。 Auto start により、lib v ir t d サービスの起動時にスト レージプールも起動するよう設定されます。 # virsh pool-autostart iscsirhel6 guest Pool iscsirhel6 guest m arked as autostarted iscsirhel6guest プールに auto start が設定されていることを確認します。 # virsh pool-list --all Nam e S tate Autostart ----------------------------------------default active yes iscsirhel6 guest active yes 138 第 13 章 ス トレージ プール 5. ス ト レ ージ プール の 設定を確認し ます ストレージプールが正しく作成されたことや、サイズが正しく報告されていること、および状態が r u n n in g と して報告されていることを確認します。 # virsh pool-info iscsirhel6 guest Nam e: iscsirhel6 guest UUID: afcc536 7-6 770-e151-bcb3-8 47bc36 c5e28 S tate: running Persistent: unknown Autostart: yes Capacity: 100.31 G B Allocation: 0.00 Available: 100.31 G B これで iSCSI ベースのストレージプールが使用できるようになりました。 13.5.5. virs h を使用したス トレ ージ プールの 削除 以下は、virsh を使ってストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲスト仮想マシンとの問題を避けるには、ストレージプールを停止してから使用中 のリソースをすべて解放するのが最良の方法です。 # virsh pool-destroy guest_im ages_disk 2. ストレージプールの定義を削除します。 # virsh pool-undefine guest_im ages_disk 13.6. NFS ベース の ス トレージ プール 以下の手順は、v ir t - m a n a g e r で NFS マウントポイントを持つストレージプールを作成する方法を説明しています。 13.6.1. virt- manag e r を使用した NFS ベース ス トレ ージ プールの 作成 1. ホス ト 物理マ シ ンの ス ト レ ージ タブ を開きます 接続の詳細 ウィンドウ内の ストレージ タブを開きます。 a. v ir t - m a n a g e r を開きます b. メイン v ir t - m a n a g e r ウィンドウからホスト物理マシンを選択します。編集 メニューをクリックし て、接続の詳細 を選択します。 139 仮 想 化 管 理 ガイ ド 図1 3 . 2 4 接続の 詳細 c. ストレージタブをクリックします。 図1 3 . 2 5 ス ト レ ージ タブ 2. 新規の プール を作成し ます ( パ ート 1 ) + ボタン (プールの追加ボタン) を押します。新規ストレージプールの追加 ウィザードが表示されます。 140 第 13 章 ス トレージ プール 図1 3 . 2 6 NFS の 名前と 種類を追加 ストレージプールの名前を選択して、進む を押して先に進みます。 3. 新規の プール を作成し ます ( パ ート 2 ) デバイスのターゲットパス、ホスト名、および NFS 共有パスを入力します。フォーマット オプションを N F S または a u t o (タイプの検出) に設定します。ソースパスは移行に関連するすべてのホスト物理マシン上で同 一でなければなりません。 NFS サーバーのホスト名または IP アドレスを入力します。この例では、s e r v e r 1.e x a m p le .c o m を使用 しています。 NFS パスを入力します。この例では、/ n fs t r ia l を使用しています。 141 仮 想 化 管 理 ガイ ド 図1 3 . 2 7 NFS ス ト レ ージ プール の 作成 完了 を押すと、新規のストレージプールが作成されます。 13.6.2. virt- manag e r を使用したス トレ ージ プールの 削除 以下の手順は、ストレージプールを削除する方法を説明しています。 1. 同じプールを使用する他のゲストとの問題を避けるため、ストレージプールを停止して使用中のリソースをす べて解放するのが最適です。停止するストレージプールを選択して、ストレージウィンドウの下部にある赤い X アイコンをクリックします。 142 第 13 章 ス トレージ プール 図1 3 . 2 8 停止ア イコン 2. ゴミ箱アイコンをクリックしてストレージプールを削除します。このアイコンが使用できるのは、ストレージプー ルが停止している場合のみです。 13.7. Gluste rFS ス トレージ プール このセクションでは、GlusterFS ベースのストレージプールを有効にする方法について記載しています。Red Hat Enterprise Linux 6 .5 には、GlusterFS を使った仮想マシン作成のネイティブサポートがあります。GlusterFS は FUSE を使用するユーザー領域のファイルシステムです。これがゲスト仮想マシンで有効にされると、KVM ホスト物理 マシンは 1 つ以上の GlusterFS ストレージボリュームからゲスト仮想マシンのイメージを起動し、GlusterFS スト レージボリュームのイメージをゲスト仮想マシンのデータディスクとして使用できます。 注記 詳細は、『Red Hat ストレージ管理ガイド』 を参照してください。 13.7.1. virs h を使用した Glus te rFS ス トレ ージ プールの 作成 このセクションでは、Gluster サーバーとアクティブな Gluster ボリュームを準備する方法について説明します。 手順1 3 . 6 G lu s t e r サ ーバ ーと ア ク ティブ な G lu s t e r ボリュ ーム の 準備 1. 次のコマンドを使って、状態を一覧表示し、Gluster サーバーの IP アドレスを取得します。 # gluster volum e status S tatus of volum e: gluster-vol1 143 仮 想 化 管 理 ガイ ド G luster process Port O nline Pid ----------------------------------------------------------------------------Brick 222.111.222.111:/gluster-vol1 49155 Y 18 6 34 Task S tatus of Volum e gluster-vol1 ----------------------------------------------------------------------------There are no active volum e tasks 2. まだこれを実行していない場合は、 glusterfs-fuse をインストールしてから virt_use_fusefs を有効にしま す。次に、以下のコマンドを実行して、Gluster サーバーに接続する 1 つのホストを用意します。 # setsebool virt_use_fusefs on # getsebool virt_use_fusefs virt_use_fusefs --> on 3. p o o l t y p e を g lu s t e r に指定し、Gluster ストレージプール (以下の例では glusterfs-po o l.xml) を 設定するために新しい XML ファイルを作成し、以下のデータを追加します。 <pool type='gluster'> <nam e>glusterfs-pool</nam e> <source> <host nam e='111.222.111.222'/> <dir path='/'/> <nam e>gluster-vol1</nam e> </source> </pool> 図1 3 . 2 9 G lu s t e rFS X M L フ ァ イル の 内容 4 . 次のコマンドを使って、Gluster プールを定義し、これを開始します。 # virsh pool-define glusterfs-pool.xm l Pool gluster-pool defined from glusterfs-pool.xm l # virsh pool-list --all Nam e S tate Autostart ----------------------------------------gluster-pool inactive no # virsh pool-start gluster-pool Pool gluster-pool started # virsh pool-list --all Nam e S tate Autostart ----------------------------------------gluster-pool active no # virsh vol-list gluster-pool 144 第 13 章 ス トレージ プール Nam e Path ----------------------------------------qcow2.im g gluster://111.222.111.222/gluster-vol1/qcow2.im g raw.im g gluster://111.222.111.222/gluster-vol1/raw.im g 13.7.2. virs h を使用した Glus te rFS ス トレ ージ プールの 削除 このセクションでは、virsh を使ってストレージプールを削除する方法について詳しく説明します。 手順1 3 . 7 G lu s t e rFS ス ト レ ージ プール の 削除 1. 次のコマンドを使って、ストレージプールの状態を非アクティブに設定します。 # virsh pool-destroy gluster-pool Pool gluster-pool destroyed 2. 次のコマンドを使って、プールが非アクティブの状態であることを確認します。 # virsh pool-list --all Nam e S tate Autostart ----------------------------------------gluster-pool inactive no 3. 次のコマンドを使って GlusterFS ストレージプールの定義を解除します。 # virsh pool-undefine gluster-pool Pool gluster-pool has been undefined 4 . 次のコマンドを使ってプールの定義が解除されていることを確認します。 # virsh pool-list --all Nam e S tate Autostart ----------------------------------------- 13.8 . SCSI デバイス で NPIV 仮想アダプター (vHBA ) を使用す る NPIV (N_Po rt ID Virtualizatio n) とは、単一の物理的なファイバーチャンネルホストバスアダプター (HBA) の共有 を可能にするソフトウェア技術です。 これにより複数のゲストが複数の物理ホストから同一のストレージを見ることが可能になり、ストレージの移行パスが 容易になります。このため、適切なストレージパスが指定されていれば、移行でストレージを作成したりコピーしたりす る必要がありません。 仮想化では、 仮想ホストバスアダプター ( vHBA) が仮想マシンの LUN を制御します。各 vHBA は、独自の WWNN (Wo rld Wide No de Name) と WWPN (Wo rld Wide Po rt Name) で識別されます。ストレージへのパスは、 WWNN と WWPN の値で決定されます。 このセクションでは、仮想マシン上で vHBA を設定する方法について説明します。Red Hat Enterprise Linux 6 で は、ホストの再起動後における vHBA 設定維持をサポートしていません。ホストの再起動後は、vHBA 関連の設定を 確認してください。 13.8.1. vHBA の 作成 145 仮 想 化 管 理 ガイ ド 手順1 3 . 8 vHB A の 作成 1. ホス ト シ ス テム 上で HB A を見つけ る ホストシステム上で HBA を見つけるには、ホストシステム上の SCSI デバイスを調べて、v p o r t 機能のある s c s i_ h o s t を探します。 以下のコマンドを実行して s c s i_ h o s t リストを表示します。 # virsh nodedev-list --cap scsi_host scsi_host0 scsi_host1 scsi_host2 scsi_host3 scsi_host4 各 s c s i_ h o s t で以下のコマンドを実行し、デバイス XML で < c a p a b ilit y t y p e = 'v p o r t _ o p s '> の行を調べます。これは、v p o r t 機能のある s c s i_ h o s t を示します。 # virsh nodedev-dum pxm l scsi_hostN 2. HB A の 詳細を確認す る v ir s h n o d e d e v - d u m p x m l H B A _ d e v ic e コマンドを使って HBA の詳細をチェックします。 v ir s h n o d e d e v - d u m p x m l コマンドからの XML 出力では、< n a m e > 、< w w n n > 、および < w w p n > の フィールドが一覧表示されます。これらは vHBA の作成に使用されます。< m a x _ v p o r t s > の値は、サポー トされる vHBA の最大数を示します。 # virsh nodedev-dum pxm l scsi_host3 <device> <nam e>scsi_host3</nam e> <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>20000000c98 48 140</wwnn> <wwpn>10000000c98 48 140</wwpn> <fabric_wwn>2002000573de9a8 1</fabric_wwn> </capability> <capability type='vport_ops'> <m ax_vports>127</m ax_vports> <vports>0</vports> </capability> </capability> </device> この例では、< m a x _ v p o r t s > 値は HBA 設定で使用できる 127 の仮想ポートがあることを示していま す。< v p o r t s > 値は、現在使用中の仮想ポートの数を示します。これらの値は、vHBA 作成後に更新されま す。 3. vHB A ホス ト デバ イス の 作成 vHBA ホスト用に以下のような XML ファイルを作成します (この例では、ファイル名 vhba_ho st3.xml)。 146 第 13 章 ス トレージ プール # cat vhba_host3.xm l <device> <parent>scsi_host3</parent> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device> < p a r e n t > フィールドでは、この vHBA デバイスに関連付ける HBA デバイスを指定します。< d e v ic e > タ グ内の詳細は、ホスト用の vHBA デバイスを作成するために次のステップで使用します。n o d e d e v XML 形 式についての詳細は、http://libvirt.o rg/fo rmatno de.html を参照してください。 4 . vHB A ホス ト デバ イス 上で新規 vHB A を作成す る vhba_ho st3 上で vHBA を作成するには、v ir s h n o d e d e v - c r e a t e コマンドを使用します。 # virsh nodedev-create vhba_host3.xm l Node device scsi_host5 created from vhba_host3.xm l 5. vHB A の 確認 新規 vHBA (s c s i_ h o s t 5 ) の詳細を v ir s h n o d e d e v - d u m p x m l コマンドで確認します。 # virsh nodedev-dum pxm l scsi_host5 <device> <nam e>scsi_host5</nam e> <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:00/host5</path> <parent>scsi_host3</parent> <capability type='scsi_host'> <host>5</host> <capability type='fc_host'> <wwnn>5001a4a93526 d0a1</wwnn> <wwpn>5001a4ace3ee047d</wwpn> <fabric_wwn>2002000573de9a8 1</fabric_wwn> </capability> </capability> </device> 13.8.2. vHBA を使用してス トレ ージ プールを作成す る vHBA 設定を保持するには、vHBA に基づく libvirt ストレージプールを定義することが推奨されます。 ストレージプールの使用には、以下の 2 つの利点があります。 libvirt コードにより、virsh コマンド出力で LUN のパスを容易に特定できます。 仮想マシンの移行には、ターゲットマシン上に同じ vHBA 名を持つストレージプールを定義し、起動することのみ が必要になります。これを実行するには、vHBA LUN、libvirt ストレージプールおよびボリューム名を仮想マシンの XML 設定で指定する必要があります。この例については、「仮想マシンが vHBA LUN を使用するよう設定する」 を参照してください。 1. S CS I ス ト レ ージ プール の 作成 147 仮 想 化 管 理 ガイ ド vHBA 設定を作成するには、まず以下の形式を使用して vHBA に基づく libvirt 's c s i' ストレージプール の XML ファイルを作成します。 注記 ストレージプール設定では、ホスト名に 手順13.8 「vHBA の作成」 で作成した vHBA を使用し、 vHBA 名 scsi_ho stN を ho stN に修正してください。ここの例では vHBA の名前は scsi_ho st5 となり、これは Red Hat Enterprise Linux 6 libvirt ストレージプールでは < a d a p t e r n a m e = 'h o s t 5 '/ > と指定されます。 < p a t h > の値には、ご使用のシステム上の / d e v / d is k / b y - { p a t h |id |u u id |la b e l} のいずれかな ど、安定した場所を使用することが推奨されます。 < p a t h > と < t a r g e t > 内の要素についての詳細 は、http://libvirt.o rg/fo rmatsto rage.html を参照してください。 以下の例では、's c s i' ストレージプールの名前は vhbapo o l_ho st3.xml となっています。 <pool type='scsi'> <nam e>vhbapool_host3</nam e> <uuid>e9392370-2917-56 5e-6 92b-d057f46 512d6 </uuid> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> <adapter nam e='host5'/> </source> <target> <path>/dev/disk/by-path</path> <perm issions> <m ode>0700</m ode> <owner>0</owner> <group>0</group> </perm issions> </target> </pool> 2. プール の 定義 ストレージプール (この例では vhbapo o l_ho st3 という名前) を定義するには、v ir s h p o o l- d e fin e コ マンドを使用します。 # virsh pool-define vhbapool_host3.xm l Pool vhbapool_host3 defined from vhbapool_host3.xm l 3. プール の 起動 以下のコマンドでストレージプールを起動します。 # virsh pool-start vhbapool_host3 Pool vhbapool_host3 started 4 . a u t o s t a rt の 有効化 148 第 13 章 ス トレージ プール 最後に、この後のホストの起動で仮想マシンで使用される vHBA が自動的に定義されるようにするために、 ストレージプールの auto start 機能を設定します (この例では、プールの名前は vhbapo o l_ho st3 です)。 # virsh pool-autostart vhbapool_host3 13.8.3. 仮想マ シンが vHBA LUN を使用す る よ う設定す る vHBA のストレージプールを作成したら、vHBA LUN を仮想マシンの設定に追加します。 1. 利用可能な L UN を探す まず、v ir s h v o l- lis t コマンドを使用して、vHBA 上で利用可能な LUN を一覧表示します。 # virsh vol-list vhbapool_host3 Nam e Path ----------------------------------------------------------------------------unit:0:4:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006 016 8 446 02198 lun-0 unit:0:5:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006 016 0446 02198 lun-0 表示された LUN 名の一覧は、仮想マシン設定内でディスクボリュームとして使用できます。 2. vHB A L UN を仮想マ シ ンに追加す る 仮想マシンの XML で以下を指定して、vHBA LUN を仮想マシンに追加します。 < d is k > パラメーターでデバイスタイプを lu n または d is k に指定します。 さらに、ソースデバイスを < s o u r c e > パラメーターで指定します。これは、/ d e v / s d a N とする か、/ d e v / d is k / b y - p a t h |b y - id |b y - u u id |b y - la b e l 内の udev が生成したシンボリックリン クとすることができます。v ir s h v o l- lis t p o o l コマンドを実行するとこれが見つかります。 以下に例を示します。 <disk type='block' device='lun'> <driver nam e='qem u' type='raw'/> <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b8 5ad1d7lun-0'/> <target dev='sda' bus='scsi'/> </disk> 13.8.4 . vHBA ス トレ ージ プールの 破棄 vHBA ストレージプールは、v ir s h p o o l- d e s t r o y コマンドで破棄することができます。 # virsh pool-destroy vhbapool_host3 以下のコマンドで vHBA を削除します。 # virsh nodedev-destroy scsi_host5 149 仮 想 化 管 理 ガイ ド プールと vHBA が破棄されたことを確認するには、以下のコマンドを実行します。 # virsh nodedev-list --cap scsi_host s c s i_ h o s t 5 はリストに表示されなくなります。 150 第 14 章 ボリ ュ ーム 第14 章 ボリューム 14 .1. ボリューム の 作成 このセクションでは、ブロックベースのストレージプール内にディスクボリュームを作成する方法について説明します。 以下の例では、v ir s h v o l- c r e a t e - a s コマンドを使って guest_images_disk ストレージプール内に GB 単 位の特定サイズのストレージボリュームを作成します。このコマンドは必要とされるボリュームごとに繰り返し使用する 必要があり、ここでは例として 3 つのボリュームを作成します。 # virsh vol-create-as guest_im ages_disk volum e1 8 G Vol volum e1 created # virsh vol-create-as guest_im ages_disk volum e2 8 G Vol volum e2 created # virsh vol-create-as guest_im ages_disk volum e3 8 G Vol volum e3 created # virsh vol-list guest_im ages_disk Nam e Path ----------------------------------------volum e1 /dev/sdb1 volum e2 /dev/sdb2 volum e3 /dev/sdb3 # p a r t e d - s / d e v / s d b p r in t M odel: ATA S T3500418 AS (scsi) Disk /dev/sdb: 500G B S ector size (logical/physical): 512B/512B Partition Table: gpt Num ber S tart End S ize 2 17.4kB 8 590M B 8 590M B 3 8 590M B 17.2G B 8 590M B 1 21.5G B 30.1G B 8 590M B File system Nam e prim ary prim ary prim ary Flags 14 .2. ボリューム の クローン作成 新しいボリュームは、クローン元となるボリュームと同じストレージプール内のストレージから割り当てられま す。v ir s h v o l- c lo n e には、- - p o o l の引数を設定します。この引数でクローン元となるボリュームを含むスト レージプール名を指示します。コマンドの残りの部分では、クローン元となるボリューム (vo lume3) とクローン作成さ れる新しいボリューム (clo ne1) の名前を指定します。v ir s h v o l- lis t コマンドを使って、ストレージプール (guest_images_disk) 内に現在あるボリュームの一覧を表示します。 # virsh vol-clone --pool guest_im ages_disk volum e3 clone1 Vol clone1 cloned from volum e3 # v ir s h v o l- lis t g u e s t _ im a g e s _ d is k Nam e Path ----------------------------------------volum e1 /dev/sdb1 volum e2 /dev/sdb2 volum e3 /dev/sdb3 151 仮 想 化 管 理 ガイ ド clone1 /dev/sdb4 # p a r t e d - s / d e v / s d b p r in t M odel: ATA S T3500418 AS (scsi) Disk /dev/sdb: 500G B S ector size (logical/physical): 512B/512B Partition Table: m sdos Num ber 1 2 3 4 S tart 4211M B 12.8 G B 21.4G B 30.0G B End S ize File system 12.8 G B 8 595M B prim ary 21.4G B 8 595M B prim ary 30.0G B 8 595M B prim ary 38 .6 G B 8 595M B prim ary Nam e Flags 14 .3. ゲス トにス トレージ デバイス を追加す る このセクションでは、ゲストにストレージデバイスを追加する方法を説明します。必要なストレージのみを追加すること ができます。 14 .3.1. ゲス トにファイルベース の ス トレ ージ を追加す る ファイルベースのストレージは、ホスト物理マシンのファイルシステム上に格納されるファイルの集合であり、ゲストに 対して仮想化されたハードドライブとして動作します。ファイルベースのストレージを追加するには、次の手順を実行し ます。 手順1 4 . 1 フ ァ イル ベ ース の ス ト レ ージ を追加す る 1. ストレージファイルを作成するか、または既存のファイルを使用します (IMG ファイルなど)。以下のコマンドは どちらもゲスト用の追加ストレージとして使用できる 4 GB のファイルを作成します。 ファイルベースのストレージイメージには、事前割り当てのファイルを使用することを推奨します。以下のよ うに d d コマンドを使って事前割り当てのファイルを作成します。 # dd if=/dev/zero of=/var/lib/libvirt/im ages/FileNam e.im g bs=1M count=4096 または、事前割り当てファイルの代わりにスパースファイルを作成することもできます。スパースファイルの 方が作成にかかる時間が短く、テストなどに適しています。ただし、データの整合性やパフォーマンス関連 の問題があるため、実稼働環境には推奨できません。 # dd if=/dev/zero of=/var/lib/libvirt/im ages/FileNam e.im g bs=1M seek=4096 count=0 2. 新しいファイルに <disk> 要素を記述して追加のストレージを作成します。この例では、このファイル名は N e w S t o r a g e .x m l になります。 < d is k > 要素は、ディスクのソースと仮想ブロックデバイスのデバイス名を記述します。デバイス名はゲスト内 のすべてのデバイスに対して固有の名前にしてください。このデバイス名によってゲストが仮想ブロックデバ イスを検索するバスが特定されます。以下の例では、F ile N a m e .im g という名前のファイルベースのスト レージコンテナーがソースとなる virtio ブロックデバイスを定義しています。 <disk type='file' device='disk'> <driver nam e='qem u' type='raw' cache='none'/> <source file='/var/lib/libvirt/im ages/FileNam e.im g'/> 152 第 14 章 ボリ ュ ーム <target dev='vdb'/> </disk> デバイス名は、IDE や SCSI ディスクを指定する「hd」や「sd」から始まる名前にすることもできます。設定ファ イルには < a d d r e s s > サブ要素を含め、バス上の新しいデバイスの位置を指定することもできます。virtio ブロックデバイスの場合に、これは PCI アドレスになるはずです。< a d d r e s s > サブ要素を省略すると、 livbirt により次に使用できる PCI スロットの検索および割り当てが行なわれます。 3. 以下のように CD-ROM を割り当てます。 <disk type='file' device='cdrom '> <driver nam e='qem u' type='raw' cache='none'/> <source file='/var/lib/libvirt/im ages/FileNam e.im g'/> <readonly/> <target dev='hdc'/> </disk > 4 . N e w S t o r a g e .x m l に定義されているデバイスをゲスト (G u e s t 1 ) に追加します。 # virsh attach-device --config G uest1 ~/NewS torage.xm l 注記 この変更は、ゲストが破棄され、再起動した後にしか反映されません。また、永続デバイスを追加でき るのは永続ドメインに対してのみになります。永続ドメインとは、その設定が v ir s h d e fin e コマ ンドを使って保存されているドメインのことです。 ゲストが実行中で、そのゲストが破棄されるまでの間に新しいデバイスを一時的に追加したい場合は - c o n fig オプションを省略します。 # virsh attach-device G uest1 ~/NewS torage.xm l 注記 v ir s h コマンドでは a t t a c h - d is k コマンドを使用することができます。このコマンドでは、より簡単 な構文で限定された数のパラメーターを設定でき、XML ファイルを作成する必要がありません。以下 に示すように、a t t a c h - d is k コマンドは前述の a t t a c h - d e v ic e コマンドと同じように使用され ます。 # virsh attach-disk G uest1 /var/lib/libvirt/im ages/FileNam e.im g vdb -cache none v ir s h a t t a c h - d is k コマンドも - - c o n fig オプションを受け入れることに注意してください。 5. ゲストマシンを開始します (まだ稼働していない場合): # virsh start G uest1 153 仮 想 化 管 理 ガイ ド 注記 以下のステップは Linux ゲストに固有なステップです。他のオペレーティングシステムでは、異なる方 法で新規のストレージデバイスを処理します。他のシステムについては、そのオペレーティングシステ ムのドキュメントを参照してください。 6. ディス ク ドライブ の パ ーティシ ョ ン設定 ここでゲストには / d e v / v d b というハードディスクデバイスが設定されています。必要であれば、このディス クドライブにパーティションを設定し、パーティションをフォーマットします。追加したデバイスが表示されない場 合、それはゲストのオペレーティングシステムにディスクのホットプラグに関する問題が発生していることを示 します。 a. 新規デバイスに対して fd is k を開始します。 # fdisk /dev/vdb Com m and (m for help): b. 新規パーティション作成の n を入力します。 c. 次のように出力されます。 Com m and action e extended p prim ary partition (1-4) プライマリパーティションを作成するために p を入力します。 d. 使用できるパーティション番号を選択します。この例では、 1 が入力され、1 番目のパーティションが 選択されています。 Partition num ber (1-4): 1 e. E n t e r を押して、デフォルトとなる 1 番目のシリンダーを選択します。 First cylinder (1-400, default 1): f. パーティションのサイズを選択します。この例では、E n t e r を押して、ディスク全体が割り当てられて います。 Last cylinder or +size or +sizeM or +sizeK (2-400, default 400): g. t を入力して、パーティションタイプを設定します。 Com m and (m for help): t h. 前のステップで作成したパーティションを選択します。この例では、パーティション番号が 1 のパー ティションを選択しています。この例で作成されたパーティションは 1 つのみのため、fdisk によって 自動的にパーティション 1 が選択されています。 154 第 14 章 ボリ ュ ーム Partition num ber (1-4): 1 i. Linux パーティションの 8 3 を入力します。 Hex code (type L to list codes): 8 3 j. w を入力して、変更を書き込み、終了します。 Com m and (m for help): w k. e x t 3 ファイルシステムで新しいパーティションをフォーマットします。 # m ke2fs -j /dev/vdb1 7. マウントディレクトリーを作成して、ゲスト上にディスクをマウントします。この例では、ディレクトリーは myfiles にあります。 # m kdir /m yfiles # m ount /dev/vdb1 /m yfiles これで、ゲストは仮想化されたファイルベースの追加ストレージデバイスを持つことになります。ただし、このス トレージはゲストの / e t c / fs t a b ファイルで定義されない限り、再起動後にも永続化するようにマウントさ れない点に注意してください。 /dev/vdb1 /m yfiles ext3 defaults 0 0 14 .3.2. ゲス トにハ ード ド ライブ と他の ブ ロックデバ イス を追加す る システム管理者は、ゲスト用にストレージ領域を拡張したり、システムデータをユーザーデータから分離したりするため に追加のハードドライブを使用します。 手順1 4 . 2 ゲス ト に物理ブ ロ ッ ク デバ イス を追加す る 1. この手順は、ホスト物理マシン上のハードドライブをゲストに追加する方法を説明しています。これは、CDROM、DVD、およびフロッピーデバイスを含むすべてての物理ブロックデバイスに適用されます。 ホスト物理マシンにハードディスクデバイスを物理的に接続します。ドライブにデフォルトでアクセスできない場 合、ホスト物理マシンを設定します。 2. 次のいずれかを行ないます。 a. 新しいファイル内に d is k 要素を記述して追加のストレージを作成します。この例では、このファイル 名は N e w S t o r a g e .x m l です。次の例は、ホスト物理マシンのパーティション / d e v / s r 0 : 用の デバイスベースの追加ストレージコンテナーが含まれる設定ファイルのセクションになります。 <disk type='block' device='disk'> <driver nam e='qem u' type='raw' cache='none'/> <source dev='/dev/sr0'/> <target dev='vdc' bus='virtio'/> </disk> b. 直前のセクションの指示に従って、デバイスをゲスト仮想マシンにアタッチします。または、以下のよう に v ir s h a t t a c h - d is k コマンドを使用することもできます。 155 仮 想 化 管 理 ガイ ド # virsh attach-disk G uest1 /dev/sr0 vdc 次のオプションが利用できます。 以下のように、v ir s h a t t a c h - d is k コマンドも - - c o n fig 、 - - t y p e 、および - - m o d e オ プションを受け入れます。 # v ir s h a t t a c h - d is k G u e s t 1 / d e v / s r 0 v d c - - c o n fig - - t y p e c d r o m - - m o d e r e a d o n ly また、デバイスがハードドライブの場合には、 - - t y p e は - - t y p e d is k も受け入れます。 3. これで、ゲスト仮想マシンは、Linux では / d e v / v d c など (ゲスト仮想マシンの OS の選択によって異な る)、Windo ws では D : ドライブ という名前の新しいハードディスクデバイスを持つことになり、ゲスト仮 想マシンのオペレーティングシステムに適した標準的な手順に従ってゲスト仮想マシンからディスクを初期化 できるようになります。例については、手順14 .1「ファイルベースのストレージを追加する」 および ステップ 6 を参照してください。 警告 ホスト物理マシンでは、ファイルシステムを特定するために、fs t a b ファイルや、in it r d ファイルまま たはカーネルコマンドラインなどでファイルシステムのラベルを使用しないようにしてください。ゲスト 仮想マシンなど特権を持たないユーザーがパーティションや LVM ボリューム全体への書き込みアク セス権を持つ場合、ファイルシステムのラベルを使用するとセキュリティー上のリスクが発生します。ゲ スト仮想マシンが、ホスト物理マシンに属するファイルシステムのラベルを、自らのブロックデバイスス トレージに書き込む可能性があるためです。これにより、ホスト物理マシンの再起動時に、ホスト物理 マシンがこのゲスト仮想マシンのディスクをシステムディスクとして誤って使用してしまう可能性があ り、ホスト物理マシンシステムが危険にさらされる可能性があります。 fs t a b ファイルや、in it r d ファイルまたはカーネルコマンドラインなどでデバイスを特定するにはそ の UUID を使用した方がよいでしょう。ただし、特定のファイルシステムでは UUID の使用が完全に 安全である訳ではありませんが、UUID を使用した場合には同様のセキュリティー上のリスクは確実 に低くなります。 重要 ゲスト仮想マシンはディスク全域、またはブロックデバイス全域 (例: / d e v / s d b ) に書き込みアクセ スを持つべきではありません。ブロックデバイス全域にアクセスを持つゲスト仮想マシンはボリュームラ ベルを修正できる場合があり、これがホスト物理マシンシステムの攻撃に使用される可能性がありま す。パーティション (例: / d e v / s d b 1 ) または LVM ボリュームを使用して、この問題を回避してくださ い。 missing step dynamic adding paragraph 14 .4 . ボリューム の 消去と削除 156 第 14 章 ボリ ュ ーム このセクションでは、v ir s h v o l- d e le t e コマンドを使って、ブロックベースのストレージプールからディスクボ リュームを削除する方法を説明します。この例では、ボリュームは vo lume 1 で、ストレージプールは guest_images です。 # virsh vol-delete --pool guest_im ages volum e1 Vol volum e1 deleted 157 仮 想 化 管 理 ガイ ド 第15章 virsh を使用したゲスト仮想マシンの管理 v ir s h は、ゲスト仮想マシンとハイパーバイザーの管理に使用するコマンドラインインターフェースです。v ir s h コマ ンドラインツールは、lib v ir t 管理 API をベースにして構築されており、q e m u - k v m コマンドやグラフィカルな v ir t - m a n a g e r アプリケーションの代替として機能します。v ir s h コマンドは、通常のユーザーには読み取り専用 モードで使用されますが、ro o t アクセス権を持つユーザーは完全な管理機能を使用できます。v ir s h コマンドは、仮 想化管理のスクリプトを作成する際に最適です。 15.1. 一般的なコマ ンド このセクションに記載するコマンドは、いずれかのドメインに固有のものではないため、一般的なコマンドになります。 15.1.1. he lp $ v ir s h h e lp [ c o m m a n d |g r o u p ] help コマンドはオプションと共に、またはオプションなしで使用できます。 オプションなしで使用すると、すべてのコマンドが各行に 1 つずつ一覧表示されます。オプションと共に使用される場 合は、一覧はカテゴリーにグループ化され、各グループのキーワードが表示されます。 特定のオプションに該当するコマンドのみを表示するには、そのグループのキーワードをオプションとして指定する必要 があります。以下のようになります。 $ v ir s h h e lp p o o l S torage 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 XM L file pool-define-as define a pool from a set of args pool-define define (but don't start) a pool from an XM L file pool-delete delete a pool pool-destroy destroy (stop) a pool pool-dum pxm l pool inform ation in XM L pool-edit edit XM L configuration for a storage pool pool-info storage pool inform ation pool-list list pools pool-nam e convert a pool UUID to pool nam e pool-refresh refresh a pool pool-start start a (previously defined) inactive pool pool-undefine undefine an inactive pool pool-uuid convert a pool nam e to pool UUID この同じコマンドをコマンドオプションと共に使用すると、その特定のコマンドオプションについての help 情報が表示 されます。以下のようになります。 $ v ir s h h e lp v o l- p a t h NAM E vol-path - returns the volum e path for a given volum e nam e or key S YNO PS IS vol-path <vol> [--pool <string>] 158 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 O PTIO NS [--vol] <string> volum e nam e or key --pool <string> pool nam e or uuid 15.1.2. quit と e xit quit コマンドと exit コマンドはターミナルを閉じます。以下のようになります。 $ v ir s h e x it $ v ir s h q u it 15.1.3. ve rs ion versio n コマンドは現在の libvirt バージョンを表示し、ビルドについての情報を表示します。以下のようになります。 $ v ir s h v e r s io n Com piled against library: libvirt 1.1.1 Using library: libvirt 1.1.1 Using API: Q EM U 1.1.1 Running hypervisor: Q EM U 1.5.3 15.1.4 . 引数の 表示 v ir s h e c h o [ - - s h e ll][ - - x m l][ a r g ] は、指定した引数を表示します。表示される各引数はスペースで区 切られます。- - s h e ll オプションを使用すると、出力は必要に応じて単一引用符で囲まれるため、シェルコマンドで再 利用するのに適しています。- - x m l オプションを使用すると、出力は XML ファイルでの使用に適したものになりま す。たとえば、v ir s h e c h o - - s h e ll "h e llo w o r ld " コマンドの出力は、'h e llo w o r ld ' となります。 15.1.5. conne ct ハイパーバイザーセッションに接続します。シェルが最初に起動する際、このコマンドは URI パラメーターが - c コマン ドによって要求されると自動的に実行されます。URI は、ハイパーバイザーに接続する方法を指定します。最もよく使用 される URI は以下になります。 x e n :/ / / - ローカルの Xen ハイパーバイザーに接続します。 q e m u :/ / / s y s t e m - QEMU および KVM ドメインを監視するデーモンに ro o t としてローカルに接続します。 x e n :/ / / s e s s io n - ユーザーの QEMU および KVM ドメインのセットにユーザーとしてローカル接続します。 lx c :/ / / - ローカルの Linux コンテナーに接続します。 他の値については libvert の web サイト (http://libvirt.o rg/uri.html) を参照してください。 コマンドは以下のように実行できます。 $ v ir s h c o n n e c t { n a m e |U R I} ここでの { n a m e } は、マシン名 (ホスト名) またはハイパーバイザーの URL (v ir s h u r i コマンドの出力) です。読 み取り専用の接続を開始するには、上記のコマンドに - - r e a d o n ly を追加します。URI についての詳細は、リモート URI を参照してください。URI が不明な場合は、v ir s h u r i コマンドを実行すると、表示されます。 159 仮 想 化 管 理 ガイ ド $ v ir s h u r i qem u:///session 15.1.6. 基本的な情報の 表示 以下のコマンドは、基本情報を表示するために使用できます。 $ h o s t n a m e - ハイパーバイザーのホスト名を表示します。 $ s y s in fo - ハイパーバイザーのシステム情報の XML 表現 (ある場合) を表示します。 15.1.7. NMI の 挿入 $ v ir s h in j e c t - n m i [ d o m a in ] は NMI (マスクが不可能な割り込み) メッセージをゲスト仮想マシンに挿入 します。これは、修復不能なハードウェアエラーなどの迅速な応答時間が重要となる場合に使用されます。このコマン ドを実行するには、以下のようにします。 $ virsh inject-nm i guest-1 15.2. virsh を使ったデバイス の 割り当てと更新 ストレージデバイスの割り当てについての詳細は、「ゲストにファイルベースのストレージを追加する」を参照してくださ い。 手順1 5 . 1 ゲス ト 仮想マ シ ンが 使用す る US B デバ イス の ホッ ト プラグ 以下の手順は、USB デバイスをゲスト仮想マシンにアタッチする方法について説明しています。これは、ゲスト仮想マ シンの実行中にホットプラグ手順として実行することも、ゲストの停止中に実行することもできます。エミュレートするデ バイスは、ホスト物理マシンに割り当てられている必要があります。 1. 以下のコマンドを使って、割り当てる USB デバイスを特定します。 # lsusb -v idVendor idProduct 0x17ef Lenovo 0x48 0f Integrated Webcam [R5U8 77] 2. XML ファイルを作成し、そのファイルに論理名 (例: u s b _ d e v ic e .x m l ) を指定します。ベンダーと製品 ID は、検索時に表示されたものと全く同じものをコピーするようにしてください。 <hostdev m ode='subsystem ' type='usb' m anaged='yes'> <source> <vendor id='0x17ef'/> <product id='0x48 0f'/> </source> </hostdev> ... 図1 5 . 1 US B デバ イス X M L ス ニペ ッ ト 160 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 3. 以下のコマンドを使って、デバイスを割り当てます。 # virsh attach-device rhel6 - - file u s b _ d e v ic e .x m l> - - c o n fig この例では、[rhel6 ] はゲスト仮想マシンの名前で、[usb_device.xml] は直前のステップで作成したファイ ルです。次回の起動時に変更を有効にする場合は、- - c o n fig オプションを使用します。変更を永続化させ る場合は、- - p e r s is t e n t オプションを使用します。変更を現在のドメインで有効にする場合は、- c u r r e n t オプションを使用します。詳細情報は、Virsh の man ページを参照してください。 4 . デバイスを切り離す場合 (ホットアンプラグ) は、以下のコマンドを実行します。 # virsh detach-device rhel6 - - file u s b _ d e v ic e .x m l> この例の [rhel6 ] はゲスト仮想マシンの名前で、[usb_device.xml] は直前のステップで割り当てたファイル です。 15.3. インターフェース デバイス の 割り当て v ir s h a t t a c h - in t e r fa c e d o m a in t y p e s o u r c e コマンドは以下のオプションを取ります。 - - liv e - 実行中のドメインから値を取得します - - c o n fig - 次回起動時に使用される値を取得します - - c u r r e n t - ドメインの現在の状態に基づいて値を取得します - - p e r s is t e n t - オフラインのドメインについては - - c o n fig のように動作し、実行中のドメインについては - liv e のように動作します。 - - t a r g e t - ゲスト仮想マシン内のターゲットデバイスを指定します。 - - m a c - ネットワークインターフェースの MAC アドレスを指定するには、これを使用します。 - - s c r ip t - デフォルトのスクリプトファイルの代わりにブリッジを処理するスクリプトファイルへのパスを指定す るには、これを使用します。 - - m o d e l - モデルのタイプを指定するには、これを使用します。 - - in b o u n d - インターフェースの受信帯域幅を制御します。使用できる値は、a v e r a g e 、p e a k 、および b u r s t です。 - - o u t b o u n d - インターフェースの送信帯域幅を制御します。使用できる値は、a v e r a g e 、p e a k 、および b u r s t です。 type は、物理ネットワークデバイスを指定する場合は n e t w o r k か、デバイスへのブリッジを指定する場合は b r id g e のいずれかにすることができます。 so urce はデバイスのソースです。割り当てられたデバイスを除去するに は、v ir s h d e t a c h - d e v ic e を使用します。 15.4 . CDROM メ ディアの 変更 CDROM のメディアを別のソースまたはフォーマットに変更します。 # c h a n g e - m e d ia d o m a in p a t h s o u r c e - - e j e c t - - in s e r t - - u p d a t e - - c u r r e n t - liv e - - c o n fig - - fo r c e - - p a t h - ディスクデバイスの完全修飾パスまたはターゲットを含む文字列です 161 仮 想 化 管 理 ガイ ド - - s o u r c e - メディアのソースを含む文字列です - - e j e c t - メディアを取り出します - - in s e r t - メディアを挿入します - - u p d a t e - メディアを更新します - - c u r r e n t - ハイパーバイザードライバーの実装によって、- - liv e と - - c o n fig のいずれかまたはその両方 にすることができます。 - - liv e - 実行中のドメインの動作中の設定を変更します - - c o n fig - 永続的な設定を変更します。次回起動時に反映されます - - fo r c e - メディアの変更を強制します 15.5. ドメ インコマ ンド これらのコマンドのほとんどは指定されたドメインを直接操作するため、ドメイン名が必要になります。ドメインは、短整 数 (sho rt integer)(0 ,1,2...)、名前、または完全な UUID で指定される場合があります。 15.5.1. 起動時に自動的に起動す る よ うにド メインを設定 $ v ir s h a u t o s t a r t [ - - d is a b le ] d o m a in は、起動時に指定されたドメインを自動的に起動します。- d is a b le オプションを使用すると、auto start が無効になります。 # v ir s h a u t o s t a r t r h e l6 上記の例では、rhel6 ゲスト仮想マシンは、ホスト物理マシンの起動時に自動的に起動します。 # v ir s h a u t o s t a r t r h e l6 - - d is a b le 上記の例では、auto start 機能は無効にされているため、ゲスト仮想マシンは、ホスト物理マシンの起動時にも自動 的に起動しません。 15.5.2. ゲス ト仮想マ シンの シリ アルコンソールの 接続 $ v ir s h c o n s o le < d o m a in > [ - - d e v n a m e < s t r in g > ] [ - - fo r c e ] [ - - s a fe ] コマンドは、ゲスト 仮想マシンの仮想シリアルコンソールを接続します。オプションの --devname <string> パラメーターは、ゲスト仮想 マシンに設定された代替コンソールのデバイスエイリアス、シリアルまたはパラレルデバイスを参照します。このパラ メーターが省略されると、プライマリーコンソールが開かれます。- - fo r c e オプションは、コンソールの接続を強制する か、または disco nnect と一緒に使用される場合は、接続を切断します。- - s a fe オプションを使用すると、安全なコ ンソール処理がサポートされている場合のみゲストの接続を許可します。 $ virsh console virtual_m achine --safe 15.5.3. XML ファイルによ る ド メインの 定義 d e fin e < F IL E > コマンドは XML ファイルのドメインを定義します。この場合、ドメイン定義は登録されますが、起動 しません。ドメインがすでに実行されている場合は、変更は次回の起動時に有効になります。 15.5.4 . ド メインの 説明またはタ イトルの 編集およ び表示 162 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 v ir s h d e s c [ d o m a in - n a m e ] [ [ - - liv e ] [ - - c o n fig ] | [ - - c u r r e n t ]] [ - - t it le ] [ - e d it ] [ - - n e w - d e s c N e w d e s c r ip t io n o r t it le m e s s a g e ] コマンドは、ドメインの説明およびタイト ルを表示するか、変更するために使用されますが、ドメインの設定をするものではありません。これらの値は、ドメインの 識別を容易にする任意のテキストデータを保存するためのユーザーフィールドです。libvirt は強制しませんが、タイトル は短くすることが望まれます。 - - liv e または - - c o n fig のオプションは、このコマンドがドメインの稼働中の定義または永続的な定義で機能する かどうかを選択します。- - liv e と - - c o n fig の両方が指定されると、- - c o n fig オプションが最初に実行され、そ の場合、コマンドに入力されたものが新規設定となり、現行設定および永続的設定の両方にこれが適用されます。- c u r r e n t オプションは、現行設定を変更するか取得しますが、永続化はされません。 - - liv e 、- - c o n fig 、または - - c u r r e n t のいずれも指定されていない場合は、- - c u r r e n t オプションが使用されます。- - e d it オプション は、現在の説明またはタイトルのコンテンツのあるエディターが開かれた後に、コンテンツが保存されることを指定しま す。- - t it le オプションを使用すると、ドメインのタイトルフィールドのみを表示または修正し、説明は含まれません。さ らに、- - e d it または - - n e w - d e s c のいずれも指定されない場合は、説明が表示されますが、これを変更すること はできません。 たとえば、コマンド $ v ir s h d e s c t e s t v m - - c u r r e n t - - t it le Te s t V M - 4 F - - n e w - d e s c G u e s t V M o n fo u r t h flo o r は、ゲスト仮想マシンのタイトルを testvm から TestVM-4F に変更し、説明も Guest VM o n fo urth flo o r に変更します。 15.5.5. デバ イス ブ ロック統計の 表示 このコマンドは、実行中のドメインのブロック統計を表示します。ドメイン名とデバイス名の両方が必要になります (v ir s h d o m b lk lis t を使用してデバイスを一覧表示)。この場合、ブロックデバイスは一意のターゲット名 (<target dev='name'/>) またはソースファイル (< so urce file ='name'/>) です。すべてのフィールドを表示でき ないハイパーバイザーもあることに注意してください。出力が最も読みやすい形式で表示されるようにするには、以下に 示すように - - h u m a n オプションを使用します。 # virsh dom blklist rhel6 Target S ource -----------------------------------------------vda /VirtualM achines/rhel6 .im g hdc # virsh dom blkstat --hum an rhel6 vda Device: vda num ber of read operations: 1746 70 num ber of bytes read: 3219440128 num ber of write operations: 238 97 num ber of bytes written: 16 48 496 6 4 num ber of flush operations: 11577 total duration of reads (ns): 1005410244506 total duration of writes (ns): 108 5306 6 8 6 457 total duration of flushes (ns): 3406 45193294 15.5.6. ネ ットワーク統計の 取得 d o m n e t s t a t [ d o m a in ][ in t e r fa c e - d e v ic e ] コマンドは、所定ドメインで実行中の指定されたデバイスにつ いてのネットワークインターフェース統計を表示します。 # dom ifstat rhel6 eth0 15.5.7. ド メインの 仮想インタ ーフェース の リ ンク状態の 変更 163 仮 想 化 管 理 ガイ ド このコマンドは、指定されたインターフェースをアクティベート/非アクティベートに設定することができます。d o m ifs e t lin k [ d o m a in ][ in t e r fa c e - d e v ic e ][ s t a t e ]{ - - c o n fig } は、指定されたドメインの指定インター フェースの状態を変更します。ドメインの永続的な設定の変更のみが必要な場合は、- - c o n fig オプションを使用す る必要があることに注意してください。また、互換性維持のために - - p e r s is t e n t は - - c o n fig のエイリアスにな ります。「interface device」はインターフェースのターゲット名または MAC アドレスにすることができます。 # d o m if- s e t lin k r h e l6 e t h 0 u p 15.5.8. ド メインの 仮想インタ ーフェース の リ ンク状態の 一覧表示 このコマンドを使用すると、所定のドメイン上の指定されたインターフェースの状態をクエリできます。ドメインの永続的 な設定の変更のみが必要な場合は、- - c o n fig オプションを使用する必要があります。また、互換性維持のために - p e r s is t e n t は - - c o n fig のエイリアスになります。「interface device」はインターフェースのターゲット名また は MAC アドレスにすることができます。 # d o m if- g e t lin k r h e l6 e t h 0 u p 15.5.9. ネ ットワークインタ ーフェース 帯域幅パ ラメータ ーの 設定 d o m ift u n e は、ゲスト仮想マシンのネットワークインターフェース帯域幅パラメーターを設定します。以下の形式を使 用してください。 #v ir s h d o m ift u n e d o m a in in t e r fa c e - d e v ic e [ [ - - c o n fig ] [ - - liv e ] | [ - c u r r e n t ]] [ - - in b o u n d a v e r a g e , p e a k , b u r s t ] [ - - o u t b o u n d a v e r a g e , p e a k , b u r s t ] 必要なパラメーターはゲスト仮想マシンのドメイン名およびインターフェースデバイスのみであり、- - c o n fig 、- liv e 、および - - c u r r e n t は、「スケジュールパラメーターの設定」の場合と同様に機能します。制限が設定されな い場合、現在のネットワークインターフェースの設定を照会します。それ以外の場合は、以下のフラグで制限を変更し てください。 <interface-device> これは必須であり、ドメインのネットワークインターフェースの帯域幅パラメーターを設定する か、または照会します。in t e r fa c e - d e v ic e は、インターフェースのターゲット名 (<target dev=’name’/>)、 または MAC アドレスにすることができます。 - - in b o u n d または - - o u t b o u n d のいずれも指定されていない場合、このコマンドは帯域幅の設定を照会する か、または表示します。それ以外の場合は、受信または送信帯域幅を設定します。average、peak、burst は a t t a c h - in t e r fa c e コマンドの場合と同様になります。「インターフェースデバイスの割り当て」を参照してくだ さい。 15.5.10 . 実行中ド メインの メモ リ ー統計の 取得 このコマンドは、使用しているハイパーバイザーによって異なる結果を返す場合があります。 d o m m e m s t a t [ d o m a in ] [ - - p e r io d ( s e c ) ][ [ - - c o n fig ][ - - liv e ]|[ - - c u r r e n t ]] は、実行中の ドメインのメモリー統計を表示します。- - p e r io d オプションを使用する場合は、秒単位の時間を指定する必要があり ます。このオプションを 0 より大きな値に設定すると、バルーンドライバーから後続の d o m e m s t a t コマンドで表示さ れる追加の統計を返すことができるようになります。- - p e r io d オプションを 0 に設定すると、バルーンドライバーの 収集は停止されますが、バルーンドライバーの統計は消去されません。さらにバルーンドライバーの収集期間を設定す るために- - liv e 、- - c o n fig 、または - - c u r r e n t オプションを使用する場合、必ず - - p e r io d オプションを設定 する必要があります。- - liv e オプションが指定されている場合、実行中のゲストの収集期間のみが影響を受けま す。- - c o n fig オプションが使用されている場合は、永続的なゲストの次回の起動に影響を与えます。- - c u r r e n t オプションが使用されている場合、現行ゲストの状態が影響を受けます。 164 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 - - liv e および - - c o n fig の両方のオプションを使用できますが、- - c u r r e n t は排他的になります。フラグが指 定されていない場合、ゲストの状態によって動作は異なります。 #v ir s h d o m e m s t a t r h e l6 - - c u r r e n t 15.5.11. ブ ロックデバ イス の エラーの 表示 このコマンドは、I/O エラーのためにドメインが一時停止になっていることを報告する d o m s t a t e の後に使用するこ とが最も適しています。d o m b lk e r r o r d o m a in コマンドは所定ドメインのエラー状態にあるすべてのブロックデバ イスを表示し、デバイスが報告しているエラーメッセージを表示します。 # v ir s h d o m b lk e r r o r r h e l6 15.5.12. ブ ロックデバ イス 容量の 表示 以下の場合、ブロックデバイスは固有なターゲット名 (<target dev='name'/>) またはソースファイル (< so urce file ='name'/>) になります。一覧を取得するには、d o m b lk lis t を実行できます。この d o m b lk in fo には do main 名が必要です。 # v ir s h d o m b lk in fo r h e l6 15.5.13. ド メインに関連付け ら れ たブ ロックデバ イス の 表示 d o m b lk lis t d o m a in - - in a c t iv e - - d e t a ils は、指定されたドメインに関連付けられたすべてのブロックデ バイスの表を表示します。 - - in a c t iv e が指定されている場合、結果には、次回起動時に使用されるデバイスが表示され、実行中ドメインに よって使用されている現在実行中のデバイスは表示されません。- - d e t a ils が指定されている場合、ディスクタイプ およびデバイス値は表に組み込まれます。この表に表示される情報は、d o m b lk in fo および s n a p s h o t - c r e a t e と共に使用することができます。 #d o m b lk lis t r h e l6 - - d e t a ils 15.5.14 . ド メインに関連付け ら れ た仮想インタ ーフェース の 表示 d o m iflis t コマンドを実行すると、指定されたドメインに関連付けられているすべての仮想インターフェースの情報を 表示する表が作成されます。d o m iflis t には、 do main 名が必要で、- - in a c t iv e オプションを取ることができま す。 - - in a c t iv e が指定される場合は、結果には、次回起動時に使用されるデバイスが表示され、実行中ドメインによっ て使用されている現在実行中のデバイスは表示されません。 仮想インターフェースの MAC アドレス (d e t a c h - in t e r fa c e または d o m if- s e t lin k など) が必要なコマンド は、このコマンドで表示される出力を受け入れます。 15.5.15. blockcommit を使用したバ ッキ ング チェーンの 短縮化 このセクションでは、v ir s h b lo c k c o m m it を使用してバッキングチェーンを短縮する方法について説明します。 バッキングチェーンの背景情報については、「ライブブロックコピーによるディスクイメージの管理」を参照してください。 b lo c k c o m m it は、チェーンの一部にあるデータをバッキングファイルにコピーし、コミットされた部分をバイパスする ためにチェーンの残りの部分をピボットします。たとえば、以下が現在の状態であるとします。 165 仮 想 化 管 理 ガイ ド b a s e ← s n a p 1 ← s n a p 2 ← a c t iv e . b lo c k c o m m it を使用して、snap2 のコンテンツを snap1 に移行します。これにより、チェーンから snap2 を削除 でき、より迅速にバックアップを作成することができます。 手順1 5 . 2 virs h b lo ck co mmit 次のコマンドを実行します。 # v ir s h b lo c k c o m m it $ d o m $ d is k - b a s e s n a p 1 - t o p s n a p 2 - w a it - v e r b o s e snap2 のコンテンツが snap1 に移行します。以下のようになります。 b a s e ← s n a p 1 ← a c t iv e 。Snap2 は無効になり、削除することができません。 警告 b lo c k c o m m it は、 - b a s e オプションに依存するすべてのファイル を破損させます ( - t o p オプションに 依存するファイルを除く。これらは base を指しているため)。これを防ぐには、複数のゲストが共有するファ イルへの変更をコミットしないでください。 - v e r b o s e オプションを使用すると、進捗状況が画面に出力さ れます。 15.5.16. blockpull を使用したバ ッキ ング チェーンの 短縮化 b lo c k p u ll は、以下のように応用して使用することができます。 イメージにそのバッキングイメージチェーンのデータを設定することにより、イメージをフラット化します。これにより、 イメージファイルはバッキングイメージやこれに類するものに依存しなくてすむような自己完結型のファイルになりま す。 使用前: base.img ← Active 使用後: ゲストによる base.img の使用がなくなり、Active にすべてのデータが含まれます。 バッキングイメージチェーンの一部をフラット化します。この部分はスナップショットをトップレベルのイメージにフ ラット化するために使用でき、以下のようになります。 使用前: base ← sn1 ←sn2 ← active 使用後: base.img ← active。active には sn1 および sn2 からの全データが含まれ、ゲストは sn1 も sn2 も使用しません。 ディスクのイメージをホスト上の新規ファイルシステムに移動します。これにより、ゲストの実行中にイメージファイル を移動できます。以下のようになります。 使用前 (元のイメージファイル): / fs 1/ b a s e .v m .im g 使用後: / fs 2 / a c t iv e .v m .q c o w 2 が新規ファイルシステムで、/ fs 1/ b a s e .v m .im g は使用されませ ん。 ポストコピー型ストレージ移行のライブマイグレーションで役立ちます。ディスクイメージは、ライブマイグレーション の完了後にソースホストから移行先ホストにコピーされます。 つまり、以下のようになります。過去:/ s o u r c e - h o s t / b a s e .v m .im g 今後:/ d e s t in a t io n h o s t / a c t iv e .v m .q c o w 2 。/ s o u r c e - h o s t / b a s e .v m .im g は使用されなくなります。 166 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 手順1 5 . 3 b lo ck p u ll を使用し たバ ッ キ ング チェ ーンの 短縮化 1. b lo c k p u ll を実行する前に以下のコマンドを実行すると便利です。 # v ir s h s n a p s h o t - c r e a t e - a s $ d o m $ n a m e - d is k - o n ly 2. チェーンが b a s e ← s n a p 1 ← s n a p 2 ← a c t iv e となっている場合、以下を実行します。 # v ir s h b lo c k p u ll $ d o m $ d is k s n a p 1 このコマンドは、データを snap2 から active にプルしてから base ← snap1 ← active の状態にすること により、'snap1' を active のバッキングファイルにします。 3. b lo c k p u ll が完了すると、チェーン内の追加イメージを作成したスナップショットの lib virt 追跡は役に立 たなくなります。以下のコマンドを使って、古くなったスナップショットの追跡を削除します。 # v ir s h s n a p s h o t - d e le t e $ d o m $ n a m e - m e t a d a t a b lo c k p u ll のその他の応用は、以下のように実行できます。 単一イメージをフラット化し、これにそのバッキングイメージチェーンのデータを設定する: # v ir s h b lo c k p u ll e x a m p le - d o m a in v d a - w a it バッキングイメージチェーンの一部をフラット化する: # v ir s h b lo c k p u ll e x a m p le - d o m a in v d a b a s e / p a t h / t o / b a s e .im g - w a it ディスクイメージをホスト上の新規ファイルシステムに移動する: # v ir s h s n a p s h o t - c r e a t e e x a m p le d o m a in - x m lfile / p a t h / t o / n e w .x m l - d is k - o n ly 、およびその後の # v ir s h b lo c k p u ll e x a m p le - d o m a in v d a - w a it ポストコピー型ストレージ移行のライブマイグレーションを使用する方法: 移行先で以下を実行: # q e m u - im g c r e a t e - f q c o w 2 - o b a c k in g _ file = / s o u r c e - h o s t / v m .im g / d e s t in a t io n - h o s t / v m .q c o w 2 ソースで以下を実行: # v ir s h m ig r a t e e x a m p le - d o m a in 移行先で以下を実行: # v ir s h b lo c k p u ll e x a m p le - d o m a in v d a - w a it 15.5.17. blockre s iz e を使用したド メインパ ス の サイズ変更 b lo c k r e s iz e を使用して、ドメインの実行中にドメインのブロックデバイスのサイズを変更することができます。この 際、固有のターゲット名 (< t a r g e t d e v = "n a m e "/ > ) またはソースファイル (< s o u r c e file = "n a m e "/ > ) にも 対応するブロックデバイスの絶対パスを使用します。これは、ドメインに割り当てられているディスクデバイスのいずれ かに適用できます (コマンド d o m b lk lis t を使用して、所定ドメインに関連付けられたすべてのブロックデバイスの 簡単な情報を表示する表を出力できます)。 167 仮 想 化 管 理 ガイ ド 注記 ライブのイメージサイズの変更により、イメージのサイズは常に変更されますが、この変更はゲストによって即時 に反映されない場合があります。最新のカーネルでは、virtio -blk デバイスのサイズは自動的に更新されます (旧式のカーネルではゲストの再起動が必要です)。SCSI では、コマンド e c h o > / s y s / c la s s / s c s i_ d e v ic e / 0 :0 :0 :0 / d e v ic e / r e s c a n を使って、ゲスト内の再スキャンを手動でト リガーすることが求められます。さらに IDE の場合、ゲストが新たなサイズを反映する前にゲストを再起動して おく必要があります。 以下のコマンドを実行します: b lo c k r e s iz e [ d o m a in ] [ p a t h s iz e ] ここで、 ドメインは、サイズを変更するドメインのファイルの固有のターゲット名またはソースファイルです。 サフィックスがない場合、パスサイズはデフォルトで KiB (10 24 バイトブロック単位) になる単位付き整数で す。バイトについては、「B」のサフィックスを使用する必要があります。 15.5.18. ライブ ブ ロックコピーによ る ディス クイメージ の 管理 注記 ライブブロックコピーは、Red Hat Enterprise Linux で提供される KVM のバージョンでサポートされる機能 です。ライブブロックコピーは、Red Hat Virtualizatio n で提供される KVM のバージョンで利用できます。こ の機能がサポートされるには、KVM のこのバージョンが物理ホストマシン上で実行されている必要がります。 詳細は、Red Hat の担当者にお問い合わせください。 ライブブロックコピーにより、ゲストの実行中に、使用中のゲストディスクイメージを移行先イメージにコピーでき、ゲスト ディスクイメージを移行先ゲストイメージに切り替えることができます。ライブマイグレーションではメモリーおよびレジス トリー状態のホストを移動する間、ゲストは共有ストレージに保持されます。ライブブロックコピーでは、ゲストの実行中 に、ゲストのコンテンツ全体を別のホストにオンザフライで移動できます。また、ライブブロックコピーは、永続的な共有 ストレージを必要とすることなく、ライブマイグレーションに使用することもできます。この方法では、ディスクイメージは移 行後に移行先ホストにコピーされますが、ゲストの実行中にこれが行なわれます。 ライブブロックコピーは、以下のように適用する場合にとくに便利です。 ローカルストレージから集中管理できる場所にゲストイメージを移動する メンテナンスが必要な場合に、パフォーマンスを低下させることなく、ゲストを別の場所に転送する イメージをスピードと効率を維持した状態でゲストイメージを管理する ゲストをシャットダウンせずにイメージのフォーマット変換を実行する 例1 5 . 1 ライブ ブ ロ ッ ク コピ ーの 使用例 以下の例は、ライブブロックコピーの実行時にどのようになるかを示しています。この例では、ソースと移行先の間 で共有されるバッキングファイルがあります。さらに、ソースにのみ 2 つのオーバーレイ (sn1 および sn2) があり、 これらはコピーする必要があります。 1. 開始時のバッキングファイルチェーンは以下のようになります。 base ← sn1 ← sn2 コンポーネントは以下のようになります。 168 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 base - 元のディスクイメージ sn1 - base ディスクイメージから取られた最初のスナップショット sn2 - 最新のスナップショット active - ディスクのコピー 2. イメージのコピーが sn2 の上に新規イメージとして作成されると、結果は以下のようになります。 b a s e ← s n 1 ← s n 2 ← a c t iv e 3. この時点で、読み取りアクセス権はすべて正しい順序にあり、自動的に設定されます。書き込みアクセス 権が適切に設定されていることを確認するために、ミラーメカニズムがすべての書き込みを sn2 と active の両方にリダイレクトし、sn2 と active がいつでも同じ内容を読み込めるようにします (また、この ミラーメカニズムが、ライブブロックコピーとイメージストリーミングの間の本質的な違いになります)。 4 . すべてのディスククラスターにループするバックグラウンドタスクが実行されます。それぞれのクラスターに ついては、以下のケースおよびアクションが考えられます。 クラスターは active ですでに割り当てられており、とくに実行すべきことはない。 b d r v _ is _ a llo c a t e d ( ) を使用し、バッキングファイルチェーンをフォローする。クラスターが (共有 される) base から読み込まれる場合、とくに実行すべきことはない。 b d r v _ is _ a llo c a t e d ( ) のバリアントが実行可能でない場合、イメージをリベースし、コピーが必 要かどうかを決定するために、読み込みデータをベースの書き込みデータと比較する。 上記以外のすべてのケースでは、クラスターを a c t iv e にコピーする 5. コピーが完了したら、active のバッキングファイルが base に切り替わります (リベースと同様)。 一連のスナップショット後にバッキングチェーンの長さを短縮するには、以下のコマンドが役立ちます: b lo c k c o m m it および b lo c k p u ll 。詳細は、「blo ckco mmit を使用したバッキングチェーンの短縮化」を参照して ください。 15.5.19. グ ラフィカル表示へ の 接続用の URI の 表示 v ir s h d o m d is p la y コマンドを実行すると、URI が出力されます。これを使用して、VNC、SPICE、または RDP 経 由でドメインのグラフィカル表示に接続します。- - in c lu d e - p a s s w o r d オプションを使用すると、SPICE チャンネル のパスワードが URI に組み込まれます。 15.5.20 . ド メイン検索コマ ンド 以下のコマンドは、所定ドメインについての異なる情報を表示します。 v ir s h d o m h o s t n a m e d o m a in は、指定されるドメインのホスト名を表示します (ハイパーバイザーがこれを 公開できる場合)。 v ir s h d o m in fo d o m a in は、指定されるドメインについての情報を表示します。 v ir s h d o m u id d o m a in |ID は、所定のドメイン名または ID を UUID に変換します。 v ir s h d o m id d o m a in |ID は、所定のドメイン名または UUID を ID に変換します。 v ir s h d o m j o b a b o r t d o m a in は、指定されるドメイン上で現在実行されているジョブを中止します。 v ir s h d o m j o b in fo d o m a in は、移行の統計情報を含め、指定されるドメイン上で実行されているジョブに ついての情報を表示します。 169 仮 想 化 管 理 ガイ ド v ir s h d o m n a m e ドメイン ID |U U ID は、所定のドメイン ID または UUID をドメイン名に変換します。 v ir s h d o m s t a t e d o m a in は、所定ドメインの状態を表示します。- - r e a s o n オプションを使用すると、表示 された状態についての理由も表示されます。 v ir s h d o m c o n t r o l d o m a in は、ドメインを制御するために使用された VMM へのインターフェースの状態 を表示します。「OK」ではない、または「Erro r」の状態の場合、制御インターフェースが表示される状態に入ってか ら経過した秒数も出力されます。 例1 5 . 2 統計的フ ィードバ ッ ク の 例 ドメインについての情報を取得するために、以下のコマンドを実行します。 # virsh dom jobinfo rhel6 Job type: Unbounded Tim e elapsed: 16 03 ms Data processed: 47.004 M iB Data rem aining: 6 58 .6 33 M iB Data total: 1.125 G iB M em ory processed: 47.004 M iB M em ory rem aining: 6 58 .6 33 M iB M em ory total: 1.125 G iB Constant pages: 11438 2 Norm al pages: 12005 Norm al data: 46 .8 95 M iB Expected downtim e: 0 ms Com pression cache: 6 4.000 M iB Com pressed data: 0.000 B Com pressed pages: 0 Com pression cache m isses: 12005 Com pression overflows: 0 15.5.21. Q EMU 引数の ド メイン XML へ の 変換 v ir s h d o m x m l- fr o m - n a t iv e は、libvirt のドメイン XML を使用して QEMU 引数の既存のセットをゲストの 記述に変換する方法を提供します。libvirt のドメイン XML はその後 libvirt で使用できます。ただし、このコマンドは、 既存の QEMU ゲストがコマンドラインから以前に起動されている場合に、これらのゲストを libvirt で管理できるよう に変換する目的でのみ使用されることになっている点に注意してください。ここに説明されている方法は、新しいゲスト をゼロから作成するために使用しないでください。新しいゲストは virsh または virt-manager のいずれかを使って作 成する必要があります。追加情報については、こちらをご覧ください。 以下の引数ファイルを持つ QEMU ゲストがあるとします。 $ cat dem o.args LC_ALL=C PATH=/bin HO M E=/hom e/test US ER=test LO G NAM E=test /usr/bin/qem u -S -M pc -m 214 -sm p 1 -nographic -m onitor pty -no-acpi boot c -hda /dev/HostVG /Q EM UG uest1 -net none -serial none -parallel none -usb これをドメイン XML に変換してゲストが libvirt で管理できるようにするには、以下を実行します。 $ v ir s h d o m x m l- fr o m - n a t iv e q e m u - a r g v d e m o .a r g s 170 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 このコマンドは、上記の引数ファイルを以下のドメイン XML ファイルに変換します。 <dom ain type='qem u'> <uuid>00000000-0000-0000-0000-000000000000</uuid> <m em ory>219136 </m em ory> <currentM em ory>219136 </currentM em ory> <vcpu>1</vcpu> <os> <type arch='i6 8 6 ' m achine='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> <em ulator>/usr/bin/qem u</em ulator> <disk type='block' device='disk'> <source dev='/dev/HostVG /Q EM UG uest1'/> <target dev='hda' bus='ide'/> </disk> </devices> </dom ain> 15.5.22. ド メインの コアの ダンプファイルの 作成 ドメインのコアを含むダンプファイルを解析するために、そのダンプファイルを作成することが必要になる場合がありま す (とくにトラブルシューティングの場合)。この場合、v ir s h d u m p d o m a in c o r e file p a t h - - b y p a s s c a c h e - - liv e |- - c r a s h |- - r e s e t - - v e r b o s e - - m e m o r y - o n ly により、 co refilepath で指定さ れるファイルにドメインコアがダンプされます。ハイパーバイザーによっては、このアクションを制限している場合があり、 この場合ユーザーは co refilepath パラメーターで指定されるファイルとパスに対して適切なアクセス権があることを 手動で確認することが必要になる場合があります。このコマンドは、他のパススルーデバイスと共に SR-IOV デバイス でサポートされます。以下オプションがサポートされており、かつ次のような効果があります。 - - b y p a s s - c a c h e : 保存されるファイルには、ファイルシステムのキャッシュが含まれません。このオプションを選 択すると、ダンプ操作の速度が遅くなる可能性があることに注意してください。 - - liv e : ドメインが実行を継続する際にファイルを保存し、ドメインが一時停止/停止することはありません。 - - c r a s h : ダンプファイルが保存される間に、ドメインを一時停止の状態のままにするのではなく、クラッシュした 状態に置きます。 - - r e s e t : ダンプファイルが正常に保存されると、ドメインがリセットされます。 - - v e r b o s e : ダンププロセスの進捗が表示されます。 - - m e m o r y - o n ly : ダンプファイルに保存される情報はドメインのメモリーと CPU 共通レジスターファイルのみに なります。 プロセス全体は d o m j o b in fo コマンドを使用して監視でき、d o m j o b a b o r t コマンドを使用してキャンセルできる ことに注意してください。 15.5.23. 仮想マ シンの XML ダンプの 作成 (設定ファイル) 171 仮 想 化 管 理 ガイ ド v ir s h を使用してゲスト仮想マシンの XML 設定ファイルを出力します。 # virsh dum pxm l { g u e s t - id , g u e s t n a m e o r u u id } このコマンドはゲスト仮想マシンの XML 設定ファイルを標準出力 (s t d o u t ) に対して出力します。この出力をファイ ルにパイプすることで、データを保存することができます。この出力を guest.xml というファイルにパイプする例を以下 に示します。 # virsh dum pxm l G uestID > guest.xm l このファイル g u e s t .x m l はゲスト仮想マシンを再作成することができます (「ゲスト仮想マシンの設定ファイルの編 集」を参照)。この XML 設定ファイルを編集することで、追加のデバイスを設定したり、追加のゲスト仮想マシンを配備 したりすることができます。 v ir s h d u m p x m l 出力の一例 # virsh dum pxm l guest1-rhel6 -6 4 <dom ain type='kvm '> <nam e>guest1-rhel6 -6 4</nam e> <uuid>b8 d738 8 a-bbf2-db3a-e96 2-b97ca6 e514bd</uuid> <m em ory>2097152</m em ory> <currentM em ory>2097152</currentM em ory> <vcpu>2</vcpu> <os> <type arch='x8 6 _6 4' m achine='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> <em ulator>/usr/libexec/qem u-kvm </em ulator> <disk type='file' device='disk'> <driver nam e='qem u' type='raw' cache='none' io='threads'/> <source file='/hom e/guest-im ages/guest1-rhel6 -6 4.im g'/> <target dev='vda' bus='virtio'/> <shareable/< <address type='pci' dom ain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <interface type='bridge'> <m ac address='52:54:00:b9:35:a9'/> <source bridge='br0'/> <m odel type='virtio'/> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> 172 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='m ouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes'/> <sound m odel='ich6 '> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <m odel type='cirrus' vram ='9216 ' heads='1'/> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <m em balloon m odel='virtio'> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x06 ' function='0x0'/> </m em balloon> </devices> </dom ain> <shareable/> のフラグが設定されている点に注意してください。ドメイン間でのデバイスの共有が予想されているこ とを示しています (ハイパーバイザーおよび OS がこれに対応していると仮定)。つまり、このデバイスに対してはキャッ シュ機能は非アクティブ化されます。 15.5.24 . 設定ファイルでの ゲス ト仮想マ シンの 作成 ゲスト仮想マシンは XML 設定ファイルから作成することができます。以前に作成されたゲスト仮想マシンから既存の XML をコピーするか、または d u m p x m l オプションを使用することができます (「仮想マシンの XML ダンプの作成 (設定ファイル)」を参照)。ゲスト仮想マシンを v ir s h を使って XML ファイルから作成するには、以下を実行します。 # virsh create configuration_file.xm l 15.6. ゲス ト仮想マ シンの 設定ファイルの 編集 d u m p x m l オプション (「仮想マシンの XML ダンプの作成 (設定ファイル)」を参照) を使用する代わりに、ゲスト仮想 マシンは実行中またはオフライン中のいずれかに編集することができます。v ir s h e d it コマンドはこの機能を提供 します。たとえば r h e l6 という名前のゲスト仮想マシンを編集するには、以下を実行します。 # virsh edit r h e l6 このコマンドを実行するとテキストエディターが開きます。デフォルトのテキストエディターは $ E D ITO R シェルパラメー ターになります (デフォルトで v i に設定)。 15.6.1. 多機能 PCI デバ イス を KVM ゲス ト仮想マ シンに追加す る このセクションでは多機能 PCI デバイスを KVM ゲスト仮想マシンに追加する方法について説明します。 1. v ir s h e d it [ g u e s t n a m e ] コマンドを実行して、ゲスト仮想マシンの XML 設定ファイルを編集します。 2. address type タグ内の fu n c t io n = '0 x 0 ' に m u lt ifu n c t io n = 'o n ' のエントリーを追加します。 これでゲスト仮想マシンが多機能 PCI デバイスを使用できるようになります。 <disk type='file' device='disk'> <driver nam e='qem u' type='raw' cache='none'/> <source file='/var/lib/libvirt/im ages/rhel6 2-1.im g'/> 173 仮 想 化 管 理 ガイ ド <target dev='vda' bus='virtio'/> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x05' function='0x0' m ultifunction='on'/ </disk> 2 種類の機能を備えた PCI デバイスの場合、XML 設定ファイルを修正して、2 番目のデバイスに 1 番目の デバイスと同じスロット番号と、fu n c t io n = '0 x 0 ' などの異なる機能番号を持たせます。 例: <disk type='file' device='disk'> <driver nam e='qem u' type='raw' cache='none'/> <source file='/var/lib/libvirt/im ages/rhel6 2-1.im g'/> <target dev='vda' bus='virtio'/> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x05' function='0x0' m ultifunction='on'/> </disk> <disk type='file' device='disk'> <driver nam e='qem u' type='raw' cache='none'/> <source file='/var/lib/libvirt/im ages/rhel6 2-2.im g'/> <target dev='vdb' bus='virtio'/> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </disk> 3. KVM ゲスト仮想マシンで ls p c i を実行すると次のような出力になります。 $ lspci 00:05.0 S CS I storage controller: Red Hat, Inc Virtio block device 00:05.1 S CS I storage controller: Red Hat, Inc Virtio block device 15.6.2. 後に再起動す る ため に実行中の ド メインを停止す る v ir s h m a n a g e d s a v e d o m a in - - b y p a s s - c a c h e - - r u n n in g | - - p a u s e d | - - v e r b o s e は、後 に同じ状態から再起動できるように実行中のドメインを保存し、破棄 (停止) します。v ir s h s t a r t コマンドを併用す ると、ドメインはこの保存したポイントから自動的に起動します。- - b y p a s s - c a c h e オプションを併用すると、保存に より、ファイルシステムのキャッシュは回避されます。このオプションは保存プロセスのスピードを低下させることに注意 してください。 - - v e r b o s e : ダンププロセスの進捗が表示されます。 通常の状態では、管理保護は、保存の実行時にドメインが置かれている状態に応じて実行中 (running) の状態また は一時停止 (paused) の状態のいずれかを決定します。ただし、実行中の状態のままにすべきであると指定する場合 は - - r u n n in g オプションを使用するか、または一時停止の状態のままにすべきであると指定する場合は - p a u s e d オプションを使用することで、これを上書きすることができます。 管理保存の状態を削除するには、v ir s h m a n a g e d s a v e - r e m o v e コマンドを使用します。このコマンドは、ドメイン の次回の起動時に完全なブートを実行するように強制します。 管理保存プロセス全体は d o m j o b in fo コマンドを使用して監視することも、d o m j o b a b o r t コマンドを使用して キャンセルすることもできることに注意してください。 15.6.3. 指定さ れ たド メインについての CPU 統計の 表示 174 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 v ir s h c p u - s t a t s d o m a in - - t o t a l s t a r t c o u n t コマンドは指定されたドメインについての CPU 統計 情報を提供します。デフォルトで、このコマンドは合計と共に、すべての CPU についての統計を表示します。- - t o t a l オプションは、合計の統計情報のみを表示します。 15.6.4 . ス クリ ーンショットの 保存 v ir s h s c r e e n s h o t コマンドは、現在のドメインコンソールのスクリーンショットを取り、これをファイルに保存しま す。ただし、ハイパーバイザーが 1 つのドメインについて複数のディスプレイをサポートしている場合、- - s c r e e n を使 用し、さらにスクリーン ID を指定してキャプチャーするスクリーンを指定します。複数のグラフィックカードがある場合 で、ヘッドがそれらのデバイスの前に列挙される場合、スクリーン ID 5 は 2 番目のカードの 2 番目のヘッドに対応し ます。 15.6.5. キ ース トロークの 組み合わ せの 指定さ れ たド メインへ の 送信 v ir s h s e n d - k e y d o m a in - - c o d e s e t - - h o ld t im e キーコード コマンドを使い、指定されたドメインに 対してシーケンスを キーコード として送信できます。 それぞれの キーコードは、対応するコードセットからの数値またはシンボリック名のいずれかにすることができます。複 数の キーコードが指定される場合、それらすべてはゲスト仮想マシンに同時に送信されるため、順不同に受信される 可能性があります。一意のキーコードを必要とする場合には、s e n d - k e y コマンドを複数回送信する必要があります。 # v ir s h s e n d - k e y r h e l6 - - h o ld t im e 10 0 0 0 x f - - h o ld t im e が指定されると、それぞれのキーストロークは指定された時間 (ミリ秒単位) 保持されます。- c o d e s e t を使用してコードセットを指定できます。デフォルトは Linux ですが、以下のオプションが許可されていま す。 lin u x - このオプションを選択すると、シンボリック名が対応する Linux キーの定数マクロ名に一致し、数値は Linux の汎用入力イベントサブシステムによって提供されるものになります。 x t - これは、XT キーボードコントローラーによって定義される値です。シンボリック名は一切指定されません。 a t s e t 1 - 数値は AT キーボードコントローラー、set1 (XT と互換性のあるセット) で定義されるものです。 atset1 からの拡張キーコードは XT コードセットの拡張キーコードと異なる場合があります。シンボリック名は一 切指定されません。 a t s e t 2 - 数値は AT キーコントローラー、set 2 によって定義されるものです。シンボリック名は一切指定されま せん。 a t s e t 3 - 数値は AT キーコントローラー、set 3 (PS/2 と互換性あり) で定義されるものです。シンボリック名は 一切指定されません。 o s _ x - 数値は OS-X キーボード入力サブシステムで定義されるものです。シンボリック名は対応する OS-X キー 定数マクロ名に一致します。 x t _ k b d - 数値は Linux KBD デバイスで定義されるものです。それらは元の XT コードセットの種類ですが、拡 張キーコードの異なるエンコードを持つ場合が多くあります。シンボリック名は一切指定されません。 w in 3 2 - 数値は Win32 キーボード入力サブシステムで定義されるものです。シンボリック名は対応する Win32 キー定数マクロ名に一致します。 u s b - 数値は、キーボード入力の USB HID 仕様によって定義されるものです。シンボリック名は一切指定されま せん。 r fb - 数値は、raw キーコードを送信するために RFB 拡張によって定義されるものです。それらは XT コードセッ トの種類ですが、拡張キーコードには、高ビットの第 1 バイトではなく、低ビットの第 2 バイトセットがあります。シン ボリック名は一切指定されません。 175 仮 想 化 管 理 ガイ ド 15.6.6. プロセス の シグ ナ ル名を仮想プロセス に送信 v ir s h s e n d - p r o c e s s - s ig n a l d o m a in - ID P ID s ig n a m e コマンドを使用すると、指定されたシグナル (名前で識別) が、そのドメイン ID で実行中のドメイン内にある指定された仮想プロセス (プロセス ID または PID で 識別) に送信されます。この方法では、整数のシグナル定数またはシンボリックシグナル名を送信することができます。 # v ir s h s e n d - p r o c e s s - s ig n a l r h e l6 18 7 k ill 利用可能なシグナルおよびその使い方に関する全一覧は、virsh(1) および signal(7) の man ページを参照してくだ さい。 15.6.7. VNC ディス プレ イの IP アド レ ス とポート番号の 表示 v ir s h v n c d is p la y は、指定されたドメインについての VNC ディスプレイの IP アドレスとポート番号を出力しま す。情報を使用できない場合、終了コード 1 が表示されます。 # virsh vncdisplay rhel6 127.0.0.1:0 15.7. NUMA ノードの 管理 このセクションでは、NUMA コードの管理に必要なコマンドを扱います。 15.7.1. ノード 情報の 表示 n o d e in fo コマンドは、モデル番号、CPU の数量、CPU のタイプ、および物理メモリーのサイズを含むノードについて の基本情報を表示します。この出力は、v ir N o d e In fo の構造に相当します。とくに「CPU so cket(s)」フィールドは NUMA セルごとの CPU ソケット数を示しています。 $ v ir s h n o d e in fo CPU m odel: x8 6 _6 4 CPU(s): 4 CPU frequency: 1199 M Hz CPU socket(s): 1 Core(s) per socket: 2 Thread(s) per core: 2 NUM A cell(s): 1 M em ory size: 3715908 KiB 15.7.2. NUMA パ ラメータ ーの 設定 v ir s h n u m a t u n e は、指定されたドメインの NUMA パラメーターの設定または取得のいずれかを実行できます。ド メイン XML ファイル内で、これらのパラメーターは < n u m a t u n e > 要素内にネスト化されます。フラグを使用すること なく、現在の設定のみが表示されます。n u m a t u n e d o m a in コマンドには指定されたドメインが必要であり、以下の オプション引数を取ります。 - - m o d e - モードは s t r ic t 、in t e r le a v e 、または p r e fe r r e d のいずれかに設定できます。ドメインが s t r ic t モードで起動されたのではない限り、実行中のドメインが稼働中の場合、それらのモードを変更すること はできません。 - - n o d e s e t - ドメインを実行するためにホスト物理マシンによって使用される NUMA ノードの一覧が含まれま す。この一覧にはノードが含まれますが、それぞれはコンマで区切られ、ノード範囲にはダッシュ - が、ノードの除外 にはキャレット ^ が使用されます。 176 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 各インスタンスごとに使用できるのは以下の 3 つのフラグのいずれか 1 つのみです。 - - c o n fig は、永続的なゲスト仮想マシンの次回の起動で実施されます。 - - liv e は、実行中のゲスト仮想マシンのスケジューラー情報を設定します。 - - c u r r e n t は、ゲスト仮想マシンの現在の状態に作用します。 15.7.3. NUMA セルの 空き メモ リ ー容量の 表示 v ir s h fr e e c e ll は、指定された NUMA セル内のマシンで利用可能なメモリー容量を表示します。このコマンド は、指定されるオプションに応じて、マシンで利用可能なメモリーについての 3 つの異なる表示のいずれかを提供しま す。オプションが使用されない場合、マシンの空きメモリーの合計容量が表示されます。- - a ll オプションを使用する と、各セル内の空きメモリー量とマシンの空きメモリーの合計容量が表示されます。数値の引数またはセル番号と共に - - c e lln o オプションを使用すると、指定されたセルの空きメモリーが表示されます。 15.7.4 . CPU 一覧の 表示 n o d e c p u m a p コマンドは、オンラインであるかどうかにかかわらず、ノードが使用できる CPU の数を表示します。さら に、現在オンラインの CPU の数を一覧表示します。 $ v ir s h n o d e c p u m a p CPUs present: 4 CPUs online: 1 CPU m ap: y 15.7.5. CPU 統計の 表示 n o d e c p u s t a t s コマンドは、CPU が指定されている場合に、指定される CPU についての統計情報を表示します。 CPU が指定されていない場合、ノードの CPU 状態を表示します。パーセントが指定されている場合、1 秒間隔で記 録されたそれぞれの種類の CPU 統計のパーセンテージが表示されます。 以下の例では CPU が指定されていません。 $ v ir s h n o d e c p u s t a t s user: 1056 44226 0000000 system : 4016 7528 0000000 idle: 75496 1338 0000000 iowait: 94593570000000 以下の例は、CPU 番号 2 の統計的パーセンテージを示しています。 $ v ir s h n o d e c p u s t a t s 2 - - p e r c e n t usage: 2.0% user: 1.0% system : 1.0% idle: 98 .0% iowait: 0.0% 再起動中のゲスト仮想マシンの動作は、ゲスト仮想マシンの設定ファイルの o n _ r e b o o t 要素を変更することによ り、制御することができます。 15.7.6. ホス ト物理マ シンの 一時停止 177 仮 想 化 管 理 ガイ ド n o d e s u s p e n d コマンドは、ホスト物理マシンを S3 (suspend-to -RAM)、S4 (suspend-to -disk)、または Hybrid-Suspend と同様のシステム全体のスリープ状態に置き、リアルタイムクロックをセットアップして設定期間の 経過後にノードを起動します。- - t a r g e t オプションは、 m e m 、 d is k 、または h y b r id のいずれかに設定できます。 これらのオプションは、一時停止するメモリー、ディスク、またはこの 2 つの組み合わせを指定します。- - d u r a t io n を設定すると、設定された期間の経過後にホスト物理マシンが起動するよう指示します。時間の単位は秒単位になり ます。6 0 秒以上に設定することが推奨されます。 $ v ir s h n o d e s u s p e n d d is k 6 0 15.7.7. ノード メモ リ ーパ ラメータ ーの 設定 n o d e - m e m o r y - t u n e [ s h m - p a g e s - t o - s c a n ] [ s h m - s le e p - m ilis e c s ] [ s h m - m e r g e a c r o s s - n o d e s ] コマンドは、ノードメモリーパラメーターを表示し、これを設定することを可能にします。このコマンド で設定できる 3 つのパラメーターがあります。 s h m - p a g e s - t o - s c a n - 共有メモリーサービスが休止する前にスキャンするページの数を設定します。 s h m - s le e p - m ilis e c s - 共有メモリーサービスが次回のスキャンの前に休止するミリ秒数を設定します。 s h m - m e r g e - a c r o s s - n o d e s - 異なる NUMA ノードからページをマージできるかどうかを指定します。許可さ れる値は 0 と 1 です。 0 に設定される場合、マージできるページは同じ NUMA ノードのメモリー領域に物理的に 存在するページのみです。 1 に設定されると、すべての NUMA ノードからのページをマージできます。デフォルト設 定は 1 です。 15.7.8. ホス トノード 上の デバ イス の 作成 v ir s h n o d e d e v - c r e a t e file コマンドを使用すると、ホストノード上にデバイスを作成し、それをゲスト仮想 マシンに割り当てることができます。lib virt は通常、使用できるホストノードを自動的に検出しますが、このコマンドは lib virt が検出しなかったホストハードウェアの登録を可能にします。この file には、ノードデバイスのトップレベルに ついての < d e v ic e > 記述の XML が含まれる必要があります。 このデバイスを停止するには、n o d e d e v - d e s t r o y d e v ic e コマンドを使用します。 15.7.9. ノード デバ イス の 切り離し v ir s h n o d e d e v - d e t a c h は no dedev をホストから切り離し、これが < h o s t d e v > パススルー経由でゲストに よって安全に使用できるようにします。このアクションは n o d e d e v - r e a t t a c h コマンドを使ってリバースできます が、管理サービスについては自動的にリバースが実行されます。さらに、このコマンドは n o d e d e v - d e t t a c h を受け 入れます。 異なるドライバーは、デバイスが別のダミーデバイスにバインドされることを想定することに注意してください。- d r iv e r オプションを使用すると、希望するバックエンドドライバーを指定することができます。 15.7.10 . デバ イス を設定の 検索 v ir s h n o d e d e v - d u m p x m l [ d e v ic e ] コマンドは、所定のノード < d e v ic e > の XML 設定ファイルをダンプし ます。この XML 設定には、デバイス名やどのバスがデバイスを所有しているか、ベンダー、および製品 ID などの情報 が含まれています。引数 device はデバイス名か、WWNN | WWPN 形式 (HBA のみ) の WWN ペアのいずれかに することができます。 15.7.11. ノード 上デバ イス の 一覧表示 v ir s h n o d e d e v - lis t c a p - - t r e e コマンドは、lib virt が認識するノード上の利用可能なすべてのデバイス を一覧表示します。 cap は一覧を機能タイプでフィルターするためそれぞれをコンマで区切って使用しますが、- t r e e と一緒に使用することはできません。- - t r e e オプションを使用すると、出力は以下に示すようなツリー構造に 178 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 なります。 # virsh nodedev-list --tree com puter | ++++++++| | net_lo_00_00_00_00_00_00 net_m acvtap0_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 (これは部分的なスクリーンです) 15.7.12. ノード の リ セットの トリ ガー n o d e d e v - r e s e t n o d e d e v コマンドは、指定された no dedev のデバイスのリセットをトリガーします。このコマン ドは、ゲスト仮想マシンのパススルーとホスト物理マシン間でノードデバイスを転送する前に実行すると便利で す。 libvirt は必要に応じてこのアクションを暗黙的に実行しますが、このコマンドは必要な場合に明示的なリセットを 許可します。 15.8 . ゲス ト仮想マ シンの 起動、 一時停止、 再開、 保存および復元 15.8.1. 定義さ れ たド メインの 起動 v ir s h s t a r t d o m a in - - c o n s o le - - p a u s e d - - a u t o d e s t r o y - - b y p a s s - c a c h e - - fo r c e b o o t - - p a s s - fd s コマンドは、定義済みであるものの、最後に管理保存の状態になってから、または新規に起動 されてから停止している停止状態のドメインを起動します。コマンドは以下のオプションを取ります。 - - c o n s o le - コンソールに割り当てられているドメインを起動します。 - - p a u s e d - ドライバーによってサポートされている場合、ドメインを起動してから一時停止の状態に置きます。 - - a u t o d e s t r o y - ゲスト仮想マシンは、virsh セッションが閉じるか、または libvirt の接続が閉じる場合に自 動的に破棄されます。そうでない場合は、終了します。 - - b y p a s s - c a c h e - ドメインが管理保存の状態の場合に使用されます。これが使用される場合、ゲスト仮想マ シンが復元され、システムのキャッシュが回避されます。これにより、復元プロセスのスピードが低下することに注 意してください。 - - fo r c e - b o o t - 管理保存のオプションを破棄し、新規の起動を生じさせます。 - - p a s s - fd s - 追加オプションの引数のコンマ区切りの一覧で、ゲスト仮想マシンに渡されます。 15.8.2. ゲス ト仮想マ シンの 一時停止 v ir s h を使ってゲスト仮想マシンを一時停止します。 # virsh suspend { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } 179 仮 想 化 管 理 ガイ ド ゲスト仮想マシンがサスペンドの状態にある場合、システム RAM を消費しますが、プロセッサーのリソースは消費し ません。ディスクとネットワークの I/O は、ゲスト仮想マシンのサスペンド中には発生しません。この操作は即時に行な われるもので、ゲスト仮想マシンは r e s u m e (「ゲスト仮想マシンの再開」) オプションで再起動できます。 15.8.3. 実行中の ド メインの 一時停止 v ir s h d o m p m s u s p e n d d o m a in - - d u r a t io n - - t a r g e t コマンドは、実行中のドメインを取り、そのドメ インが 3 つの状態 (S3、S4 、またはこれら 2 つのハイブリッド) のいずれかに置かれるように一時停止します。 # v ir s h d o m p m s u s p e n d r h e l6 - - d u r a t io n 10 0 - - t a r g e t m e m このコマンドは、以下のオプションを取ります。 - - d u r a t io n - 状態変更の期間 (秒単位) を設定します。 - - t a r g e t - m e m ( s u s p e n d t o R A M ( S 3 ) ) d is k ( s u s p e n d t o d is k ( S 4 ) ) 、または h y b r id ( h y b r id s u s p e n d ) のいずれかにできます。 15.8.4 . pms us pe nd 状態の ド メインを起動 このコマンドは、設定した期間の有効期限が過ぎるのを待機するのではなく、pmsuspend 状態のゲストに対してウェ イクアップアラートを挿入します。この操作は、ドメインが実行されている場合は失敗しません。 # d o m p m w a k e u p r h e l6 このコマンドには、 rhel6 のようなドメイン名を必要とします。 15.8.5. ド メインの 定義解除 このコマンドは、ドメインの定義を解除します。これは実行中のドメインで機能しますが、ドメインを停止することなく実行 中のドメインを一時的なドメインに変換します。ドメインが停止中の場合、ドメイン設定は削除されます。 v ir s h u n d e fin e d o m a in - - m a n a g e d - s a v e - - s n a p s h o t s - m e t a d a t a - - s t o r a g e - - r e m o v e a ll- s t o r a g e - - w ip e - s t o r a g e コマンドは以下のオプションを取ることができます。 - - m a n a g e d - s a v e - このオプションは、管理保護状態のドメインの定義が解除されると、その関連付けられた 管理保護状態のイメージも削除されることを保証します。このオプションを使用せずに、管理保護状態のドメインの 定義解除を試みると失敗します。 - - s n a p s h o t s - m e t a d a t a - このオプションは、停止中ドメインの定義解除を実行する際に、スナップショット (s n a p s h o t - lis t で表示) も定義削除されることを保証します。スナップショットのメタデータが含まれている、 停止中のドメインの定義解除を試みると、失敗することに注意してください。ドメインがアクティブな場合にこのオプ ションが使用されと、無視されます。 - - s t o r a g e - このオプションでは、定義解除されるドメインと共に削除されるボリュームターゲット名またはスト レージボリュームのソースパスのコンマ区切りの一覧が必要になります。このアクションにより、ストレージボリュー ムは削除される前に定義解除されます。これは停止中のドメインでのみ実行できることに注意してください。また、こ れは libvirt が管理するストレージボリュームでのみ機能することにも注意してください。 - - r e m o v e - a ll- s t o r a g e - ドメインの定義解除に加え、すべての関連付けられたストレージボリュームが削 除されます。 - - w ip e - s t o r a g e - ストレージボリュームの削除に加え、コンテンツが完全消去されます。 15.8.6. ゲス ト仮想マ シンの 再開 180 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 v ir s h を r e s u m e オプションと併用して、サスペンド中のゲスト仮想マシンを復元します。 # virsh resum e { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } この操作は即時に行なわれるもので、ゲスト仮想マシンのパラメーターは s u s p e n d および r e s u m e 操作のために 保管されます。 15.8.7. ゲス ト仮想マ シンの 保存 v ir s h コマンドを使用して、ゲスト仮想マシンの現在の状態をファイルに保存します。 # v ir s h s a v e { d o m a in - n a m e |d o m a in - id |d o m a in - u u id } s t a t e - file - - b y p a s s c a c h e - - x m l - - r u n n in g - - p a u s e d - - v e r b o s e これにより、指定したゲスト仮想マシンが停止し、データがファイルに保存されます。これにはゲスト仮想マシンで使用 しているメモリーの容量に応じて少々の時間がかかります。ゲスト仮想マシンの状態を復元するには、r e s t o r e オプ ションを使用します (「ゲスト仮想マシンの復元」)。保存は一時停止に似ていますが、ゲスト仮想マシンを一時停止に するだけでなく、ゲスト仮想マシンの現在の状態を保存します。 v ir s h s a v e コマンドは、以下のオプションを取ります。 - - b y p a s s - c a c h e - 復元により、ファイルシステムのキャッシュが回避されますが、このフラグを使用すると、復 元操作が遅くなることに注意してください。 - - x m l - このオプションは、XML ファイル名と共に使用する必要があります。このオプションは通常省略されます が、復元されるゲスト仮想マシンに代替 XML ファイルを指定するために使用できます。この際、変更はドメイン XML のホスト固有の部分にのみ加えられます。たとえば、これはゲストの保存後に取られるディスクのスナップ ショットによって生じる、基礎となるストレージのファイル名の違いを説明するために使用できます。 - - r u n n in g - ドメインを実行状態で起動するために保存イメージに記録された状態をオーバーライドします。 - - p a u s e d - ドメインを一時停止の状態で起動するために、保存イメージに記録された状態をオーバーライドしま す。 - - v e r b o s e - 保存の進捗を表示します。 ゲスト仮想マシンを XML ファイルから直接復元する必要がある場合、v ir s h r e s t o r e コマンドがこれを行いま す。d o m j o b in fo でプロセスを監視したり、d o m j o b a b o r t でプロセスをキャンセルしたりすることができます。 15.8.8. ゲス トの 復元に使用さ れ る ド メイン XML ファイルの 更新 v ir s h s a v e - im a g e - d e fin e file x m l - - r u n n in g | - - p a u s e d コマンドは、後で v ir s h r e s t o r e コ マンドの実行時に指定ファイルが使用される際のドメイン XML ファイルを更新します。 xml 引数は、代替 XML を含む XML ファイル名である必要があります。この場合、ホスト物理マシンのドメイン XML に固有の部分にのみ変更が加え られます。たとえば、これはゲストの保存後に作成されるディスクのスナップショットによって生じる、基礎となるスト レージのファイル名の違いを説明するために使用できます。保存イメージは、ドメインが実行中または一時停止の状態 に復元されるかどうかを記録します。- - r u n n in g または - - p a u s e d のオプションを使用すると、使用される状態が 決定されます。 15.8.9. ド メイン XML ファイルの 抽出 s a v e - im a g e - d u m p x m l file - - s e c u r it y - in fo コマンドは、保存状態のファイル (v ir s h s a v e コマンド で使用される) が参照された際に有効であったドメイン XML ファイルを抽出します。- - s e c u r it y - in fo オプション を使用すると、セキュリティーの機密情報がファイルに含まれるようになります。 15.8.10 . ド メイン XML 設定ファイルの 編集 181 仮 想 化 管 理 ガイ ド 15.8.10 . ド メイン XML 設定ファイルの 編集 s a v e - im a g e - e d it file - - r u n n in g - - p a u s e d コマンドは、v ir s h s a v e コマンドによって作成された 保存済みの file と関連付けられた XML 設定ファイルを編集します。 保存イメージはドメインが - - r u n n in g または - - p a u s e d 状態に復元されるかどうかを記録します。これらのオプ ションを使用しないと、状態はファイル自体で決定されます。- - r u n n in g または - - p a u s e d を選択することによ り、v ir s h r e s t o r e が使用するはずの状態を上書きすることができます。 15.8.11. ゲス ト仮想マ シンの 復元 v ir s h を使用して、v ir s h s a v e コマンドを使用して以前に保存したゲスト仮想マシン (「ゲスト仮想マシンの保 存」) を復元します。 # virsh restore state-file これにより、保存していたゲスト仮想マシンが再起動します。これには少々時間がかかる可能性があります。ゲスト仮 想マシンの名前と UUID は保管されていますが、新規の ID が割り当てられます。 v ir s h r e s t o r e s t a t e - file コマンドは以下のオプションを取ることができます。 - - b y p a s s - c a c h e - 復元により、ファイルシステムのキャッシュが回避されますが、このフラグを使用すると、復 元操作が遅くなることに注意してください。 - - x m l - このオプションは、XML ファイル名と共に使用する必要があります。このオプションは通常省略されます が、復元されるゲスト仮想マシンに代替 XML ファイルを指定するために使用できます。この際、変更はドメイン XML のホスト固有の部分にのみ加えられます。たとえば、これはゲストの保存後に取られるディスクのスナップ ショットによって生じる、基礎となるストレージのファイル名の違いを説明するために使用できます。 - - r u n n in g - ドメインを実行状態で起動するために保存イメージに記録された状態をオーバーライドします。 - - p a u s e d - ドメインを一時停止の状態で起動するために、保存イメージに記録された状態をオーバーライドしま す。 15.9. ゲス ト仮想マ シンの シャットダウン、 再起動および強制終了 15.9.1. ゲス ト仮想マ シンの シャ ットダウ ン v ir s h s h u t d o w n コマンドを使用してゲスト仮想マシンをシャットダウンします。 # virsh shutdown { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } [ - - m o d e m e t h o d ] ゲスト仮想マシンの設定ファイルにある o n _ s h u t d o w n パラメーターを変更して、再起動中のゲスト仮想マシンの動 作を制御することができます。 15.9.2. Re d Hat Ente rpris e Linux 7 ホス ト上の Re d Hat Ente rpris e Linux 6 ゲ ス トの シャ ットダウ ン 最小限のインストール ( M in im a l in s t a lla t io n ) オプションを指定して Red Hat Enterprise Linux 6 ゲスト仮想マシンをインストールしても、 acpid パッケージはインストールされません。このパッケージは s y s t e m d に 引き継がれたので Red Hat Enterprise Linux 7 では不要です。ただし、Red Hat Enterprise Linux 7 ホスト上で 実行される Red Hat Enterprise Linux 6 ゲスト仮想マシンにはこれが依然として必要になります。 182 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 acpid パッケージがないと、v ir s h s h u t d o w n コマンドを実行しても Red Hat Enterprise Linux 6 ゲスト仮想 マシンがシャットダウンしません。v ir s h s h u t d o w n コマンドはゲスト仮想マシンを正しくシャットダウンするように設 計されています。 v ir s h s h u t d o w n を使用する方がシステム管理上、安全かつ簡単な方法となります。v ir s h s h u t d o w n コマン ドで正しくシャットダウンできないと、システム管理者は手動でゲスト仮想マシンにログインするか、または C t r l -A lt -D e l のキー組み合わせを各ゲスト仮想マシンに送信しなければならなくなります。 注記 他の仮想化オペレーティングシステムもこの問題の影響を受ける場合があります。v ir s h s h u t d o w n コマ ンドが正しく動作するには、ゲスト仮想マシンのオペレーティングシステムが ACPI シャットダウン要求を処理で きるよう設定されている必要があります。ACPI シャットダウン要求を受け取らせるには、多くのオペレーティング システムにゲスト仮想マシンのオペレーティングシステムでの追加設定が必要になります。 手順1 5 . 4 Re d Ha t E n t e rp ris e L in u x 6 ゲス ト の 回避策 1. a cp id パ ッ ケ ージ をインス ト ール し ます a c p id サービスによって ACPI 要求のリッスンと処理が行われます。 ゲスト仮想マシンにログインし、ゲスト仮想マシンに acpid パッケージをインストールします。 # yum install acpid 2. a cp id サ ービ ス を有効にし ます a c p id サービスがゲスト仮想マシンのブートシーケンスで起動され、サービスを開始するよう設定します。 # system ctl enable acpid # service acpid start 3. ゲス ト ドメイン xml を準備し ます 。 以下の要素を組み込むようにドメイン XML ファイルを編集します。virtio シリアルポートを o r g .q e m u .g u e s t _ a g e n t .0 に置き換え、 $guestname の代わりにゲストの名前を使用します。 <channel type='unix'> <source m ode='bind' path='/var/lib/libvirt/qem u/{$ guestnam e}.agent'/> <target type='virtio' nam e='org.qem u.guest_agent.0'/> </channel> 図1 5 . 2 ゲス ト X M L の 置き換え 4 . Q E M U ゲス ト エージ ェ ント をインス ト ール し ます 。 183 仮 想 化 管 理 ガイ ド QEMU ゲストエージェント (QEMU-GA) をインストールし、11章QEMU-img および QEMU ゲストエージェ ントで指示されるようにサービスを起動します。Windo ws ゲストを実行している場合、この章ではこれに関す る方法も記載されています。 5. ゲス ト をシ ャッ ト ダウンし ます 。 a. 以下のコマンドを実行します。 # v ir s h lis t - - a ll - this com m and lists all of the known dom ains Id Nam e S tate ---------------------------------rhel6 running b. ゲスト仮想マシンをシャットダウンします。 # v ir s h s h u t d o w n r h e l6 Dom ain rhel6 is being shutdown c. ゲスト仮想マシンがシャットダウンするまで数秒間待機します。 # v ir s h lis t - - a ll Id Nam e S tate ---------------------------------. rhel6 shut off d. 編集した XML ファイルを使用して、 rhel6 という名前のドメインを起動します。 # v ir s h s t a r t r h e l6 e. rhel6 ゲスト仮想マシンで acpi をシャットダウンします。 # v ir s h s h u t d o w n - - m o d e a c p i r h e l6 f. すべてのドメインを再度一覧表示します。 rhel6 が一覧にまだ表示されますが、電源が切れているこ とが示されるはずです。 # v ir s h lis t - - a ll Id Nam e S tate ---------------------------------rhel6 shut off g. 編集した XML ファイルを使用して、 rhel6 という名前のドメインを起動します。 # v ir s h s t a r t r h e l6 h. rhel6 ゲスト仮想マシンのゲストエージェントをシャットダウンします。 # v ir s h s h u t d o w n - - m o d e a g e n t r h e l6 i. ドメインを一覧表示します。 rhel6 がまだリストにあり、shut o ff 状態になっています。 184 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 # v ir s h lis t - - a ll Id Nam e S tate ---------------------------------rhel6 shut off ゲスト仮想マシンは、連続するシャットダウンにおいて、上記の回避策を使用せずに v ir s h s h u t d o w n コマンドを 使ってシャットダウンします。 上記の方法以外にも、 libvirt-guest サービスを停止してゲストを自動的にシャットダウンできます。この方法について の詳細は、「libvirt-guests 設定の設定内容の操作」を参照してください。 15.9.3. libvirt- g ue s ts 設定の 設定内容の 操作 libvirt-guests サービスには、ゲストが適切にシャットダウンされていることを保証するために設定できるパラメーター 設定が含まれます。これは libvirt インストールの一部をなすパッケージであり、デフォルトでインストールされます。こ のサービスは、ホストがシャットダウンされる際にゲストをディスクに自動的に保存し、ホストの再起動時にシャットダウ ン前の状態にゲストを復元します。デフォルトでは、この設定はゲストを一時停止するように設定されます。ゲストの電 源を切る必要がある場合、 libvirt-guests 設定ファイルのパラメーターのいずれかを変更する必要があります。 手順1 5 . 5 ゲス ト を正し くシ ャッ ト ダウンできるよう lib virt -g u e s t s サ ービ ス パ ラメーターを変更す る ここで説明される手順により、ホスト物理マシンが停止しているか、電源がオフになっているか、または再起動が必要 な場合に、ゲスト仮想マシンを正しくシャットダウンすることができます。 1. 設定フ ァ イル を開きます 。 設定ファイルは / e t c / s y s c o n fig / lib v ir t - g u e s t s にあります。ファイルを編集し、コメントマーク (#) を削除し、 O N _ S H U TD O W N = s u s p e n d を O N _ S H U TD O W N = s h u t d o w n に変更します。変更は必ず保存し てください。 $ vi /etc/sysconfig/libvirt-guests # URIs to check for running guests # exam ple: 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 m arked as autostart will still be autom atically started by # libvirtd #O N_BO O T=start # Num ber of seconds to wait between each guest start. S et to 0 to allow 185 仮 想 化 管 理 ガイ ド # parallel startup. #S TART_DELAY=0 # action taken on host shutdown # - suspend all running guests are suspended using virsh m anagedsave # - 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 tim e to shutdown. When setting # O N_S HUTDO WN=shutdown, you m ust also set S HUTDO WN_TIM EO UT to a # value suitable for your guests. O N_S HUTDO WN=shutdown # If set to non-zero, shutdown will suspend guests concurrently. Num ber of # guests on shutdown at any tim e will not exceed num ber set in this variable. #PARALLEL_S HUTDO WN=0 # Num ber of seconds we're willing to wait for a guest to shut down. If parallel # shutdown is enabled, this tim eout applies as a tim eout for shutting down all # guests on a single URI defined in the variable URIS . If this is 0, then there # is no tim e out (use with caution, as guests m ight not respond to a shutdown # request). The default value is 300 seconds (5 m inutes). #S HUTDO WN_TIM EO UT=300 # If non-zero, try to bypass the file system cache when saving and # restoring guests, even though this m ay give slower operation for # som e file system s. #BYPAS S _CACHE=0 U R IS - 実行中のゲストの指定された接続をチェックします。 D e fa u lt 設定は、明示的な URI が設 定されていない場合に virsh と同じように機能します。さらに、URI は / e t c / lib v ir t / lib v ir t .c o n f から明示的に設定できます。 libvirt 設定ファイルのデフォルト設 定を使用する場合、プロービングは使用されないことに注意してください。 O N _ B O O T - ホストの起動時にゲストに対して実行される、またはゲスト上で実行されるアクションを 指定します。 s t a r t オプションは、auto start の設定にかかわらず、シャットダウンの前に実行され ているすべてのゲストを起動します。 ig n o r e オプションは、起動時に正式に実行されているゲストを 起動しませんが、auto start というマークが付けられたゲストは libvirtd によって自動的に起動され ます。 S TA R T_ D E L A Y - ゲストが起動する間の遅延期間を設定します。この期間は秒単位で設定されま す。遅延がないようにし、かつすべてのゲストを同時に起動させるには時間設定の 0 を使用します。 O N _ S H U TD O W N - ホストがシャットダウンする際に取られるアクションを指定します。設定できるオプ ションには、以下が含まれます。v ir s h m a n a g e d s a v e を使用して実行中のすべてのゲストを一 時停止する s u s p e n d と、実行中のすべてのゲストをシャットダウンする s h u t d o w n で す。s h u t d o w n オプションの場合、注意して使用するのは最良の策です。それは、停止した状態のゲ ストか、またはシャットダウン要求を無視するゲストと、シャットダウンにより長い時間がかかっているだ けのゲストとを区別する方法がないためです。 O N _ S H U TD O W N = s h u t d o w n を設定する際に は、 S H U TD O W N _ TIM E O U T をゲストに適した値に設定する必要もあります。 P A R A L L E L _ S H U TD O W N 任意に行なわれるシャットダウン時のゲストの数がこの変数で設定される 数を超えず、ゲストが同時に中断されることを定めます。0 に設定される場合、ゲストは同時にシャット ダウンしません。 186 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 ゲストがシャットダウンするのを待機する秒数です。 S H U TD O W N _ TIM E O U T が有効な場合、このタイ ムアウトが、変数 URIS で定義される単一 URI 上のすべてのゲストをシャットダウンするタイムアウト として適用されます。 S H U TD O W N _ TIM E O U T が 0 に設定される場合、タイムアウトはありません (ゲ ストがシャットダウン要求に応答しない可能性があるため注意して使用してください)。デフォルトの値 は 30 0 秒 (5 分) です。 B YP A S S _ C A C H E には、無効にするためには 0 、有効にするには 1 と 2 つの値を使用することがで きます。有効にされている場合、ゲストが復元するとファイルシステムのキャッシュをバイパスします。こ の設定はパフォーマンスに影響を与え、一部のファイルシステムの操作の速度を低下させる可能性が あることに注意してください。 2. lib virt -g u e s t s サ ービ ス を開始し ます 。 サービスをまだ開始していない場合は、 libvirt-guests サービスを開始します。サービスの再起動により、実 行中のすべてのドメインがシャットダウンする可能性があるので実行しないでください。 15.9.4 . ゲス ト仮想マ シンの 再起動 ゲスト仮想マシンを再起動するには、v ir s h r e b o o t コマンドを使用します。再起動が実行されると、プロンプトが 返されます。ゲスト仮想マシンが戻るまで、時間のずれがある場合があります。 #virsh reboot { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } [ - - m o d e m e t h o d ] ゲスト仮想マシンの再起動の動作は、同マシンの設定ファイルの < o n _ r e b o o t > 要素を変更することで制御するこ とができます。詳細情報は、「イベント設定」 を参照してください。 デフォルトでは、ハイパーバイザーが適切なシャットダウン方法を選択します。別の方法を指定する場合、- - m o d e オ プションで、in it c t l 、a c p i 、a g e n t 、および s ig n a l を含むコンマ区切りの一覧を指定できます。ドライバーが各 モードを試行する順序は、このコマンドで指定された順序とは無関係になります。順序付けを厳密に制御するには、1 度に 1 つのモードを使用してコマンドを繰り返します。 15.9.5. ゲス ト仮想マ シンの 強制終了 ゲスト仮想マシンを v ir s h d e s t r o y コマンドで停止するには、以下のようにします。 # virsh destroy { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } [ - - g r a c e fu l] このコマンドでは、正常なシャットダウンで行なわれる終了プロセスを経ずに、指定されるゲスト仮想マシンをただちに シャットダウンして停止させます。v ir s h d e s t r o y を使用すると、ゲスト仮想マシンのファイルシステムが破損する 可能性があります。d e s t r o y オプションは、ゲスト仮想マシンが反応しない場合のみに使用してください。正しい シャットダウンを開始する必要がある場合は、v ir s h d e s t r o y - - g r a c e fu l コマンドを使用します。 15.9.6. 仮想マ シンの リ セット v ir s h r e s e t d o m a in は、ゲストをシャットダウンすることなく、ただちにドメインをリセットします。リセットは、マシ ンの電源リセットボタンをエミュレートします。ここですべてのゲストハードウェアは RST 行を認識し、内部の状態を再 初期化します。ゲスト仮想マシンの OS をシャットダウンしない場合、データが失われるリスクが発生します。 15.10 . ゲス ト仮想マ シン情報の 取り込み 15.10 .1. ゲス ト仮想マ シンの ド メイン ID の 取得 ゲスト仮想マシンのドメイン ID を取得するには、以下のようにします。 187 仮 想 化 管 理 ガイ ド # virsh dom id { d o m a in - n a m e o r d o m a in - u u id } 15.10 .2. ゲス ト仮想マ シンの ド メイン名の 取得 ゲスト仮想マシンのドメイン名を取得するには、以下のようにします。 # virsh dom nam e { d o m a in - id o r d o m a in - u u id } 15.10 .3. ゲス ト仮想マ シンの UUID の 取得 ゲスト仮想マシンの UUID (Universally Unique Identifier) を取得するには、以下のようにします。 # virsh dom uuid {dom ain-id or dom ain-nam e} v ir s h d o m u u id 出力の一例: # virsh dom uuid r5b2-m yS Q L01 4a4c59a7-ee3f-c78 1-96 e4-28 8 f28 6 2f011 15.10 .4 . ゲス ト仮想マ シン情報の 表示 ゲスト仮想マシンのドメイン ID、ドメイン名、または UUID との併用で v ir s h を使用すると、指定したゲスト仮想マシ ンの情報を表示することができます。 # virsh dom info { d o m a in - id , d o m a in - n a m e o r d o m a in - u u id } 以下に v ir s h d o m in fo 出力の一例を示します。 # virsh dom info Id: Nam e: UUID: O S Type: S tate: CPU(s): CPU tim e: M ax m em ory: Used m em ory: Persistent: Autostart: S ecurity m odel: S ecurity DO I: S ecurity label: vr-rhel6 u1-x8 6 _6 4-kvm 9 vr-rhel6 u1-x8 6 _6 4-kvm a03093a1-5da6 -a2a2-3baf-a8 45db2f10b9 hvm running 1 21.6 s 2097152 kB 1025000 kB yes disable selinux 0 system _u:system _r:svirt_t:s0:c6 12,c921 (perm issive) 15.11. ス トレージ プールコマ ンド 以下のコマンドはストレージプールを操作します。 libvirt を使用して、ストレージボリュームを仮想マシン内のデバイス として表示するために使用されるファイル、raw パーティション、およびドメイン固有の形式を含む、さまざまなストレー ジソリューションを管理できます。この機能についての詳細は、libvirt.o rg を参照してください。ストレージプールのコ マンドの多くは、ドメインに使用されるコマンドに似ています。 188 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 15.11.1. ス トレ ージ プール XML の 検索 fin d - s t o r a g e - p o o l- s o u r c e s t y p e s r c S p e c コマンドは、確認できる所定の type のすべてのストレージ プールを記述した XML を表示します。 srcSpec が指定される場合、プールのクエリーをさらに制限する XML を含む ファイルになります。 fin d - s t o r a g e - p o o l- s o u r c e s - a s t y p e h o s t p o r t in it ia t o r は、確認できる所定の type のすべ てのストレージプールを記述した XML を表示します。 ho st、 po rt、または initiato rが指定される場合、それらはクエ リーが実行される場所を制御します。 p o o l- in fo p o o l- o r - u u id コマンドは、指定されたストレージプールオブジェクトについての基本的な情報を一 覧表示します。このコマンドには、ストレージプールの名前または UUID が必要になります。この情報を取得するに は、p o o l- lis t を使用します。 p o o l- lis t - - in a c t iv e - - a ll - - p e r s is t e n t - - t r a n s ie n t - - a u t o s t a r t - - n o a u t o s t a r t - - d e t a ils < t y p e > コマンドは、 libvirt が認識するすべてのストレージプールオブジェクトを一覧 表示します。デフォルトでは、アクティブなプールのみが一覧表示されますが、- - in a c t iv e オプションを使用すると、 アクティブではないプールのみが一覧表示され、- - a ll オプションを使用すると、すべてのストレージプールが一覧表 示されます。 上記のオプションのほかにも、一覧表示の内容をフィルターする複数のフィルターフラグのセットがあります。- p e r s is t e n t は、一覧を永続プールに限定し、- - t r a n s ie n t は一覧を一時的なプールに限定します。また、- a u t o s t a r t は一覧を自動起動のプールに限定し、最後に - - n o - a u t o s t a r t は一覧を自動起動が無効にされ たストレージプールに限定します。 type を必要とするすべてのストレージプールコマンドの場合、プールのタイプはコンマで区切る必要があります。有効 なプールのタイプには、d ir 、fs 、n e t fs 、lo g ic a l 、d is k 、is c s i 、s c s i 、m p a t h 、r b d 、および s h e e p d o g が含 まれます。 - - d e t a ils オプションは、 virsh に対し、プールの永続性や容量に関連した情報を追加で表示します (ある場合)。 注記 このコマンドが古いサーバーについて使用される場合、競合を継承する一連の API 呼び出しの使用が強制さ れます。これにより、一覧が収集されている間に複数の呼び出し間の状態が変更される場合、プールは一覧 表示されなくなるか、または複数回表示される可能性があります。ただし、新しいサーバーの場合は、この問題 は発生しません。 p o o l- r e fr e s h p o o l- o r - u u id は、プールに含まれるボリュームの一覧表示を最新の状態にします。 15.11.2. ス トレ ージ プールの 作成、 定義、 およ び開始 1 5 .1 1 .2 .1 . ス ト レ ージ プール の 構築 p o o l- b u ild p o o l- o r - u u id - - o v e r w r it e - - n o - o v e r w r it e コマンドは、指定された プール名または UUID のプールを構築します。- - o v e r w r it e および - - n o - o v e r w r it e のオプションは、タイプがファイルシステ ムの場合にのみ使用できます。いずれのオプションも指定されない場合、プールはファイルシステムタイプのプールに なり、結果としてビルドによりディレクトリーのみが作成されます。 - - n o - o v e r w r it e が指定されない場合、コマンドはファイルシステムがすでにターゲットデバイスに存在するかどう かを判別するためにプローブし、存在する場合にはエラーを返します。存在しない場合にはターゲットデバイスをフォー マットするために m k fs を使用します。- - o v e r w r it e が指定される場合、m k fs コマンドが実行され、ターゲットデ バイス上のすべての既存データが上書きされます。 1 5 .1 1 .2 .2 . XM L フ ァ イル か ら の ス ト レ ージ プール の 作成および定義 189 仮 想 化 管 理 ガイ ド p o o l- c r e a t e file は、関連付けられた XML ファイルからストレージプールを作成し、これを起動します。 p o o l- d e fin e file は、XML ファイルからストレージプールオブジェクトを作成しますが、これを起動することはあ りません。 1 5 .1 1 .2 .3 . ra w パ ラメータ ーか ら の ス ト レ ージ プール の 作成および開始 p o o l- c r e a t e - a s n a m e - - p r in t - x m l t y p e s o u r c e - h o s t s o u r c e - p a t h s o u r c e - d e v s o u r c e - n a m e < t a r g e t > - - s o u r c e - fo r m a t < fo r m a t > コマンドは、指定される raw パラメーターから プールオブジェクトの名前を作成し、これを開始します。 - - p r in t - x m l が指定される場合、プールを作成せずに、ストレージプールオブジェクトの XML が出力されます。指 定されない場合、プールには、プールの構築のためにタイプが必要になります。 type を必要とするすべてのストレージ プールコマンドでは、プールのタイプはコンマで区切る必要があります。有効なプールのタイプに は、d ir 、fs 、n e t fs 、lo g ic a l 、d is k 、is c s i 、s c s i 、m p a t h 、r b d 、および s h e e p d o g が含まれます。 p o o l- d e fin e - a s n a m e - - p r in t - x m l t y p e s o u r c e - h o s t s o u r c e - p a t h s o u r c e - d e v s o u r c e - n a m e < t a r g e t > - - s o u r c e - fo r m a t < fo r m a t > コマンドは、指定される raw パラメーターから プールオブジェクト名を作成しますが、これを開始しません。 - - p r in t - x m l が指定される場合、プールを定義せずに、プールオブジェクトの XML が出力されます。指定されな い場合、プールには指定されたタイプが必要になります。 type を必要とするすべてのストレージプールコマンドでは、 プールのタイプはコンマで区切る必要があります。有効なプールのタイプに は、d ir 、fs 、n e t fs 、lo g ic a l 、d is k 、is c s i 、s c s i 、m p a t h 、r b d 、および s h e e p d o g が含まれます。 p o o l- s t a r t p o o l- o r - u u id は、以前に定義されているものの、アクティブでない指定されたストレージプール を開始します。 1 5 .1 1 .2 .4 . ス ト レ ージ の 自動起動 p o o l- a u t o s t a r t p o o l- o r - u u id - - d is a b le コマンドは、起動時のストレージの自動起動を有効または無 効にします。このコマンドには、プール名または UUID が必要です。p o o l- a u t o s t a r t コマンドを無効にするには、- d is a b le オプションを使用します。 15.11.3. ス トレ ージ プールの 停止およ び削除 p o o l- d e s t r o y p o o l- o r - u u id はストレージプールを停止します。いったん停止すると、 libvirt はプールを管理 しなくなりますが、プールに含まれる raw データは変更されず、後で p o o l- c r e a t e コマンドを使って復旧されます。 p o o l- d e le t e p o o l- o r - u u id は、指定されたストレージプールで使用されたリソースを破棄します。この操作は 修復不能で、元に戻せないことを留意するのは重要です。ただし、プール構成はこのコマンドの実行後も存在し、新規 ストレージボリュームの作成を受け入れることができます。 p o o l- u n d e fin e p o o l- o r - u u id コマンドは、アクティブでないプールの設定を定義解除します。 15.11.4 . プール用の XML ダンプファイルの 作成 p o o l- d u m p x m l - - in a c t iv e p o o l- o r - u u id コマンドは、指定されたストレージプールオブジェクトについて の XML 情報を返します。- - in a c t iv e を使用すると、現在のプール設定とは対照的に、プールの次回の開始時に 使用される設定がダンプされます。 15.11.5. ス トレ ージ プールの 設定ファイルの 編集 p o o l- e d it p o o l- o r - u u id は、編集用に指定されたストレージプールの XML 設定ファイルを開きます。 この方法は、適用前にエラーのチェックを行うため、XML 設定ファイルの編集用に使用できる唯一の方法になります。 190 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 15.11.6. ス トレ ージ プールの 変換 p o o l- n a m e u u id コマンドは、指定された UUID をプール名に変換します。 p o o l- u u id p o o l コマンドは、指定されたプールの UUID を返します。 15.12. ス トレージ ボリューム コマ ンド このセクションでは、ストレージボリュームを作成し、削除し、管理するためのすべてのコマンドについて説明します。 いったんストレージプールを作成すると、ストレージプール名または UUID が必要になるため、この時点でこれを実行 するのが最善と言えるでしょう。ストレージプールについての詳細は、13章ストレージプール を参照してください。スト レージボリュームについての詳細は、14 章ボリューム を参照してください。 15.12.1. ス トレ ージ ボリ ューム の 作成 v o l- c r e a t e - fr o m p o o l- o r - u u id file - - in p u t p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y o r - p a t h は、別のストレージボリュームをコンテンツのテンプレートとして使用してストレージボリュームを作成しま す。このコマンドには、ボリュームの作成先となるストレージプールの名前または UUID である po o l-o r-uuid が必要 となります。 file オプションは、ボリューム定義が含まれる XML ファイルとパスを指定します。- - in p u t p o o l p o o l- o r - u u id オプションは、ソースボリュームが入るストレージプールの名前または UUID を指定します。 vo l-name-o r-key-o rpath 引数は、ソースボリュームの名前またはキー、あるいはパスを指定します。いくつかの例については、「ボリューム の作成」 を参照してください。 v o l- c r e a t e - a s コマンドは、一連の引数からボリュームを作成します。 po o l-o r-uuid 引数には、ボリュームの作 成に使用するストレージプールの名前または UUID が含まれます。 v o l- c r e a t e - a s p o o l- o r - u u id n a m e c a p a c it y - - a llo c a t io n < s iz e > - - fo r m a t < s t r in g > - - b a c k in g - v o l < v o l- n a m e - o r - k e y - o r - p a t h > - - b a c k in g - v o l- fo r m a t < s t r in g > name は新規ボリュームの名前です。 capacity は作成されるボリュームのサイズであり、サフィックスがない場合はデ フォルトでバイトになる単位付き整数で指定されます。- - a llo c a t io n < s iz e > は、ボリュームに割り当てられる初 期サイズであり、これもデフォルトでバイトになる単位付き整数で指定されます。- - fo r m a t < s t r in g > は、コンマ 区切りの許容される形式の文字列からなるボリュームファイル形式を指定するためにファイルベースのストレージプー ルで使用されます。許容される形式には、r a w 、b o c h s 、q c o w 、q c o w 2 、v m d k が含まれ、- - b a c k in g - v o l v o l- n a m e - o r - k e y - o r - p a t h は、既存ボリュームのスナップショットを取る場合に使用されるソースのバッキン グボリュームです。- - b a c k in g - v o l- fo r m a t s t r in g は、コンマで区切られる形式の文字列であるスナップ ショットのバッキングボリュームの形式です。許可される値には、r a w 、b o c h s 、q c o w 、q c o w 2 、v m d k 、および h o s t _ d e v ic e が含まれます。ただし、これらはファイルベースのストレージプールの場合のみ使用されることが意 図されています。 1 5 .1 2 .1 .1 . XM L フ ァ イル か ら の ス ト レ ージ ボリューム の 作成 v o l- c r e a t e p o o l- o r - u u id file は、保存済みXML ファイルからストレージボリュームを作成します。このコ マンドにも、ボリュームの作成先になるストレージプールの名前または UUID である po o l-o r-uuid が必要になりま す。 file 引数には、ボリューム定義の XML ファイルと共にパスが含まれます。XML ファイルを作成する簡単な方法 は、v o l- d u m p x m l コマンドを使用して事前に存在するボリュームの定義を取得し、それを修正した後、v o lc r e a t e を実行して保存します。 virsh vol-dum pxm l --pool storagepool1 appvolum e1 > newvolum e.xm l virsh edit newvolum e.xm l virsh vol-create differentstoragepool newvolum e.xm l 191 仮 想 化 管 理 ガイ ド 以下のようなオプションも使用できます。 - - in a c t iv e オプションは、アクティブではないゲスト仮想マシン (つまり、定義済みであるものの、現在アクティ ブではないゲスト仮想マシン) を一覧表示します。 - - a ll オプションは、すべてのゲスト仮想マシンを一覧表示します。 1 5 .1 2 .1 .2 . ス ト レ ージ ボリューム の ク ロ ーン作成 v o l- c lo n e - - p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y - o r - p a t h n a m e コマンドは、既存のスト レージボリュームをクローン作成します。v o l- c r e a t e - fr o m を使用することもできますが、ストレージボリュームの クローン作成には推奨されません。- - p o o l p o o l- o r - u u id オプションは、ボリュームの作成に使用されるストレー ジプールの名前または UUID です。 vo l-name-o r-key-o r-path 引数は、ソースボリュームの名前またはキー、あるい はパスです。 name 引数は、新規ボリューム名前を参照します。 15.12.2. ス トレ ージ ボリ ューム の 削除 v o l- d e le t e - - p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y - o r - p a t h コマンドは、指定したボリュームを 削除します。このコマンドには、ボリュームに使用するストレージプールの名前または UUID である特定の - - p o o l p o o l- o r - u u id が必要です。 v o l- n a m e - o r - k e y - o r - p a t h オプションでは、削除するボリュームの名前または キー、あるいはパスを指定します。 v o l- w ip e - - p o o l p o o l- o r - u u id - - a lg o r it h m a lg o r it h m v o l- n a m e - o r - k e y - o r - p a t h コ マンドはボリュームを消去し、ボリューム上にあったデータをそれ以降の読み取りアクセスができないようにします。この コマンドには、ボリュームに使用するストレージプールの名前または UUID である - - p o o l p o o l- o r - u u id が必 要です。 vo l-name-o r-key-o r-path には、完全に消去するボリュームの名前またはキー、あるいはパスを含めます。 (ストレージボリュームの各セクターに「0 」の値が書き込まれる) デフォルトの代わりに、異なる消去アルゴリズムを選 択することも可能であることに注意してください。消去アルゴリズムを指定するには、- - a lg o r it h m オプションにサ ポートされている以下のいずれかの アルゴリズム タイプを使用します。 z e r o - 1-pass all zero es n n s a - 4 -pass NNSA Po licy Letter NAP-14 .1-C (XVI-8 ) fo r sanitizing remo vable and no nremo vable hard disks: rando m x2, 0 x0 0 , verify. d o d - 4 -pass Do D 5220 .22-M sectio n 8 -30 6 pro cedure fo r sanitizing remo vable and no nremo vable rigid disks: rando m, 0 x0 0 , 0 xff, verify. b s i - 9-pass metho d reco mmended by the German Center o f Security in Info rmatio n Techno lo gies (http://www.bsi.bund.de): 0 xff, 0 xfe, 0 xfd, 0 xfb, 0 xf7, 0 xef, 0 xdf, 0 xbf, 0 x7f. g u t m a n n - The cano nical 35-pass sequence described in Gutmann’s paper. s c h n e ie r - 7-pass metho d described by Bruce Schneier in "Applied Crypto graphy" (1996 ): 0 x0 0 , 0 xff, rando m x5. p fit z n e r 7 - Ro y Pfitzner’s 7-rando m-pass metho d: rando m x7 p fit z n e r 3 3 - Ro y Pfitzner’s 33-rando m-pass metho d: rando m x33. r a n d o m - 1-pass pattern: rando m. 注記 ホストにインストールされるscrub バイナリーのバージョンは利用可能なアルゴリズムを制限します。 192 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 15.12.3. ス トレ ージ ボリ ューム 情報の XML ファイルへ の ダンプ v o l- d u m p x m l - - p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y - o r - p a t h コマンドは、ボリューム情報を、 指定されたファイルへの XML ダンプとして取得します。 このコマンドには、ボリュームに使用される名前または UUID である - - p o o l p o o l- o r - u u id が必要です。 vo lname-o r-key-o r-path は、結果として作成される XML ファイルを置くボリュームの名前、キーまたはパスです。 15.12.4 . ボリ ューム 情報の 一覧表示 v o l- in fo - - p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y - o r - p a t h コマンドは、所定のストレージボリュー ム - - p o o l についての基本情報を一覧表示します。ここで、 po o l-o r-uuid はボリュームに使用するストレージプー ルの名前または UUID です。 vo l-name-o r-key-o r-path は、返す情報の対象となるボリュームの名前またはキー、 あるいはボリュームになります。 v o l- lis t - - p o o l p o o l- o r - u u id - - d e t a ils は、指定されたストレージプールにすべてのボリュームを一覧 表示します。このコマンドには、ストレージボリュームの名前または UUID である - - p o o l p o o l- o r - u u id が必要 になります。- - d e t a ils オプションは、 virsh に対し、ボリュームタイプおよび容量に関する情報を追加で表示するよう 指示します (ある場合)。 15.12.5. ス トレ ージ ボリ ューム 情報の 取得 v o l- p o o l - - u u id v o l- k e y - o r - p a t h コマンドは、所定のボリュームのプール名または UUID を返します。デ フォルトでは、プール名は返されます。- - u u id オプションが指定される場合、プールの UUID が代わりに返されま す。このコマンドには、要求される情報を返す際に使用されるボリュームのキーまたはパスである vo l-key-o r-path が 必要になります。 v o l- p a t h - - p o o l p o o l- o r - u u id v o l- n a m e - o r - k e y コマンドは、所定のボリュームのパスを返します。 このコマンドには、ボリュームに使用されるストレージプールの名前または UUID である - - p o o l p o o l- o r - u u id が必要です。さらに、パスが要求される際に使用されるボリュームの名前またはキーである vo l-name-o r-key が必 要です。 v o l- n a m e v o l- k e y - o r - p a t h コマンドは、所定のボリュームの名前を返します。ここで、 vo l-key-o r-path は名 前を返すのに使用されるボリュームのキーまたはパスです。 v o l- k e y - - p o o l p o o l- o r - u u id v o l- n a m e - o r - p a t h コマンドは、所定のボリュームのボリュームキーを 返します。ここで、 - - p o o l p o o l- o r - u u id はボリュームに使用されるストレージプールの名前または UUID であ り、 vo l-name-o r-path はボリュームキーを返すのに使用されるボリュームの名前またはパスです。 15.12.6. ス トレ ージ ボリ ューム の アップロード およ びダウ ンロード このセクションでは、ストレージボリュームに情報をアップロードする方法およびストレージボリュームから情報をダウン ロードする方法について説明します。 1 5 .1 2 .6 .1 . コンテンツの ス ト レ ージ ボリューム へ の アッ プロ ード v o l- u p lo a d - - p o o l p o o l- o r - u u id - - o ffs e t b y t e s - - le n g t h b y t e s v o l- n a m e - o r - k e y o r - p a t h lo c a l- file コマンドは、指定された lo cal-file のコンテンツをストレージボリュームにアップロードしま す。このコマンドには、ボリュームに使用される名前または UUID である - - p o o l p o o l- o r - u u id が必要です。さ らに、完全消去するボリュームの名前またはキー、あるいはパスである vo l-name-o r-key-o r-path も必要です。- o ffs e t オプションは、データの書き込みを開始するストレージボリューム内の位置を指します。- - le n g t h le n g t h は、アップロードされるデータ量の上限を決定します。 lo cal-file が指定された - - le n g t h の値よりも大き い場合はエラーが発生します。 1 5 .1 2 .6 .2 . ス ト レ ージ ボリューム か ら の コンテンツの ダウ ンロ ード 193 仮 想 化 管 理 ガイ ド v o l- d o w n lo a d - - p o o l p o o l- o r - u u id - - o ffs e t b y t e s - le n g t h b y t e s v o l- n a m e - o r k e y - o r - p a t h lo c a l- file コマンドは、ストレージボリュームから lo cal-file のコンテンツをダウンロードします。 このコマンドには、ボリュームに使用されるストレージプールの名前または UUID である - - p o o l p o o l- o r - u u id が必要です。さらに、完全消去するボリュームの名前またはパスである vo l-name-o r-key-o r-path が必要です。- o ffs e t オプションを使用すると、データの読み込みを開始するストレージボリューム内の位置が決定されます。- le n g t h le n g t h は、ダウンロードされるデータの量の上限を決定します。 15.12.7. ス トレ ージ ボリ ューム の サイズ変更 v o l- r e s iz e - - p o o l p o o l- o r - u u id v o l- n a m e - o r - p a t h p o o l- o r - u u id c a p a c it y - a llo c a t e - - d e lt a - - s h r in k コマンドは、所定のボリュームの容量 (バイト単位) のサイズ変更を行います。こ のコマンドには、ボリュームに使用されるストレージプールの名前または UUID である - - p o o l p o o l- o r - u u id が 必要です。さらに、このコマンドには、サイズ変更するボリュームの名前またはキー、あるいはパスである vo l-name-o rkey-o r-path が必要です。 - - a llo c a t e オプションが指定されていないと、新たな容量はスパースファイルを作成します。通常、容量は新規の サイズになりますが、- - d e lt a がある場合、既存のサイズに追加されます。- - s h r in k オプションがないと、ボリュー ムを縮小する試みは失敗します。 - - s h r in k オプションが指定されていなければ、容量は負の値にならず、負の符号は不要であることに注意してくだ さい。 capacity は、接尾辞がない場合、デフォルトがバイトになる単位付き整数です。またこのコマンドは、アクティブな ゲストが使用していないストレージボリュームの場合にのみ安全であることにも注意してください。ライブのサイズ変更 については、「blo ckresize を使用したドメインパスのサイズ変更」 を参照してください。 15.13. ゲス ト仮想マ シン別の 情報の 表示 15.13.1. ゲス ト仮想マ シンの 表示 v ir s h を使ってゲスト仮想マシンの一覧と、それらの現在の状態を表示するには、以下を実行します。 # virsh list 以下のようなオプションも使用できます。 - - in a c t iv e オプション: アクティブではないゲスト仮想マシン (つまり、定義されているものの、現在アクティブ ではないゲスト仮想マシン) を一覧表示します。 - - a ll オプション: すべてのゲスト仮想マシンを一覧表示します。たとえば、以下のようになります。 # virsh list --all Id Nam e S tate ---------------------------------0 Dom ain-0 running 1 Dom ain202 paused 2 Dom ain010 inactive 3 Dom ain96 00 crashed このコマンドで確認できる状態は 7 種類あります。 Running - r u n n in g 状態は、CPU 上で現在稼働中のゲスト仮想マシンを示します。 Idle - id le 状態は、 ドメインが休止中のため、稼働していないか、または稼働できないことを示します。ドメイ ンが IO を待機しているため (従来の待機状態)、または作業がないためにスリープに入ったことが原因となり ます。 194 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 Paused - p a u s e d 状態は、一時停止中のドメインを一覧表示します。これは、管理者が v ir t - m a n a g e r 、 または v ir s h s u s p e n d で p a u s e ボタンを使用した場合に発生します。これは、ゲスト仮想マシンが一時 停止になっている場合にはメモリーと他のリソースを消費しますが、スケジュールとハイパーバイザーからの CPU リソースの場合は無効になります。 Shutdo wn - s h u t d o w n 状態は、シャットダウンプロセスにあるゲスト仮想マシンの状態です。ゲスト仮想マ シンには、シャットダウン信号が送られて、その稼働を正常に停止するプロセスに入ります。これはすべてのゲ スト仮想マシンのオペレーティングシステムでは機能しないかもしれません。一部のオペレーティングシステム はこれらの信号に反応しません。 Shut o ff - s h u t o ff 状態は、ドメインが稼働していないことを示します。これは、ドメインが完全にシャットダ ウンするか、または開始していないことが原因です。 Crashed - c r a s h e d 状態は、ドメインがクラッシュしており、さらにゲスト仮想マシンがクラッシュ時に再起動 しないように設定をされている場合にのみ発生します。 Dying - d y in g 状態は、停止のプロセスに入っています。ドメインが完全にシャットダウンしていないか、または クラッシュした状態です。 - - m a n a g e d - s a v e このフラグだけではドメインをフィルターしませんが、管理保存の状態が有効になったドメイ ンを一覧表示します。ドメインを別個に一覧表示するには、- - in a c t iv e フラグも使用する必要があります。 - - n a m e は、指定されたドメイン名で、一覧に出力されます。- - u u id が指定される場合、ドメインの UUID が代 わりに出力されます。フラグの - - t a b le を使用すると、テーブルスタイルの出力が使用されるよう指定されます。 これらの 3 つのコマンドは相互に排他的です。 - - t it le このコマンドは - - t a b le 出力と共に使用する必要があります。- - t it le により、追加の列が短いド メインの説明 (タイトル) と共にテーブルに作成されます。 - - p e r s is t e n t は、永続的なドメインを一覧に含めます。- - t r a n s ie n t オプションを使用します。 - - w it h - m a n a g e d - s a v e は、管理保存と共に設定されたドメインを一覧表示します。管理保存なしでコマンド を一覧表示するには、コマンド - - w it h o u t - m a n a g e d - s a v e を使用します。 - - s t a t e - r u n n in g は、実行中のドメインに対してフィルターをかけます。一時停止のドメインについては - s t a t e - p a u s e d 、オフにされているドメインについては - - s t a t e - s h u t o ff が使用されます。- - s t a t e o t h e r は、すべての状態を fallback として一覧表示します。 - - a u t o s t a r t : このオプションは、自動起動のドメインを一覧表示します。この機能を無効にしてドメインを一覧 表示するには、- - n o - a u t o s t a r t オプションを使用します。 - - w it h - s n a p s h o t は、スナップショットイメージを一覧表示できるドメインを一覧表示します。スナップショットな しでドメインをフィルター処理するには、- - w it h o u t - s n a p s h o t オプションを使用します。 $ virsh list --title --nam e Id 0 2 Nam e Dom ain-0 rhelvm S tate running paused Title M ailserver1 v ir s h v c p u in fo の出力例については、「仮想 CPU 情報を表示する」を参照してください。 15.13.2. 仮想 CPU 情報を表示す る v ir s h を使ってゲスト仮想マシンから仮想 CPU 情報を表示するには、以下を実行します。 # virsh vcpuinfo {dom ain-id, dom ain-nam e or dom ain-uuid} 195 仮 想 化 管 理 ガイ ド v ir s h v c p u in fo 出力の一例: # virsh vcpuinfo rhel6 VCPU: 0 CPU: 2 S tate: running CPU tim e: 7152.4s CPU Affinity: yyyy VCPU: CPU: S tate: CPU tim e: CPU Affinity: 1 2 running 108 8 9.1s yyyy 15.13.3. 仮想 CPU の 親和性を設定す る 仮想 CPU の物理 CPU との親和性を設定するには、例15.3「vCPU をホスト物理マシンの CPU にピン設定する」を 参照してください。 例1 5 . 3 vCP U をホス ト 物理マ シ ンの CP U にピ ン設定す る v ir s h v c p u p in は、仮想 CPU を物理 CPU に割り当てます。 # virsh vcpupin rhel6 VCPU: CPU Affinity ---------------------------------0: 0-3 1: 0-3 v c p u p in コマンドは、以下のオプションを取ります。 - - v c p u には vcpu 番号が必要です。 [ - - c p u lis t ] > s t r in g < は、設定するホスト物理マシンの CPU 番号を一覧表示するか、またはオプショ ンのクエリーを省略します。 - - c o n fig は次回の起動に影響を与えます。 - - liv e は稼働中のドメインに影響を与えます。 - - c u r r e n t は現在のドメインに影響を与えます。 15.13.4 . ド メインの 仮想 CPU 数についての 情報の 表示 v ir s h v c p u c o u n t には、 do main 名またはドメイン ID が必要です。例を示します。 # virsh vcpucount rhel6 m axim um config m axim um live current config current live 196 2 2 2 2 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 v c p u c o u n t コマンドは、以下のオプションを取ります。 - - m a x im u m は、利用可能な vCPU の最大数を表示します。 - - a c t iv e は、現在アクティブな vCPU の数を表示します。 - - liv e は、稼働中のドメインからの値を表示します。 - - c o n fig は、ゲスト仮想マシンの次回の起動で設定される値を表示します。 - - c u r r e n t は、現在のドメイン状態に準じた値を表示します。 - - g u e s t は、ゲスト側から見たカウントを表示します。 15.13.5. 仮想 CPU の 親和性を設定す る 物理 CPU と仮想 CPU の親和性を設定するには、以下のようにします。 # virsh vcpupin d o m a in - id v c p u c p u lis t d o m a in - id パラメーターは、ゲスト仮想マシンの ID 番号または名前です。 v c p u パラメーターはゲスト仮想マシンに割り当てられた仮想化 CPU の数を示します。v c p u パラメーターを指定す る必要があります。 c p u lis t パラメーターは物理 CPU の識別子番号をコンマで区切った一覧です。c p u lis t パラメーターで VCPU を実行する物理 CPU を指定します。 - - c o n fig などの追加のパラメーターは次回の起動に影響を与えますが、- - liv e は稼働中のドメインに、 - c u r r e n t は現在のドメインに影響を与えます。 15.13.6. 仮想 CPU 数を設定す る デフォルトで、仮想 CPU (vCPU) 数はアクティブなゲストドメイン上でのみ変更できます。アクティブでないゲストドメイ ンの設定を変更するには、- - c o n fig フラグを使用します。v ir s h コマンドを使って、ゲスト仮想マシンに割り当てら れる CPU の数を変更します。 # v ir s h s e t v c p u s { d o m a in - n a m e , d o m a in - id o r d o m a in - u u id } c o u n t [ [ - c o n fig ] [ - - liv e ] | [ - - c u r r e n t ] [ - - g u e s t ] 以下のパラメーターを v ir s h s e t v c p u s コマンドに設定することができます。 { d o m a in - n a m e , d o m a in - id o r d o m a in - u u id } - 仮想マシンを指定します。 - - c o u n t - 設定する仮想 CPU の数を指定します。 重要 - - c o u n t 値は、ゲスト仮想マシンの作成時にゲスト仮想マシンに割り当てられた CPU の数を超えるこ とはできません。 - - m a x im u m - 次回の起動時に仮想 CPU の上限値を設定します。 - - c o n fig - 設定変更は次回の起動時に有効になります。 197 仮 想 化 管 理 ガイ ド - - liv e - 設定変更は、稼働中のゲスト仮想マシンで有効になります。 - - c u r r e n t - 設定変更は、現在のゲスト仮想マシンで有効になります。 - - g u e s t - 設定変更は、ゲスト仮想マシンの CPU の状態を変更します。 - - g u e s t で行なわれた設定は、ゲス トの再起動時にリセットされます。 注記 multi-queue, を使用して vCPU のパフォーマンスを強化する方法についての詳細は、『Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイド』を参照してください。 例1 5 . 4 vCP U の ホッ ト プラグ と ホッ ト ア ンプラグ vCPU をホットプラグするには、以下のコマンドを実行します。 v ir s h s e t v c p u s g u e s t V M 1 2 - - liv e 上記の例では、 - - liv e フラグが示すように guestVM1 の実行中に guestVM1 の vCPU 数は 2 つ増加しま す。 同様に、同じ稼働中のゲストから 1 つの vCPU をホットアンプラグするには、以下を実行します。 v ir s h s e t v c p u s g u e s t V M 1 1 - - liv e 値は、ホスト、ハイパーバイザー、またはゲストドメインの元の記述による制限によって制限される可能性がありま す。Xen の場合、ドメインが準仮想化されている場合は稼働中のドメインの仮想 CPU のみを調整できます。 - - c o n fig フラグが指定されている場合、変更はゲスト仮想マシンの保存された XML 設定に対して行なわれ、 ゲストドメインの次回起動時にのみ有効になります。 - - liv e が指定されている場合、ゲスト仮想マシンのドメインはアクティブであるはずであり、変更はただちに有効 になります。このフラグにより、vCPU のホットプラグが可能になります。- - c o n fig フラグと - - liv e フラグの両 方は、ハイパーバイザーにサポートされている場合、一緒に指定することができます。 - - c u r r e n t が指定されている場合、フラグは、現在のアクティブなゲスト仮想マシンの状態に影響を与えます。フ ラグが指定されていない場合、- - liv e フラグがデフォルトで使用されます。アクティブなゲスト仮想マシンがない 場合にフラグなしでこのコマンドを実行すると、失敗します。場合によっては、ハイパーバイザーは - - c o n fig の使 用も想定します。さらにハイパーバイザーは、変更を永続的にするために XML 設定を調整するかどうかを決定しま す。 - - m a x im u m フラグは、ドメインの次回起動時にホットプラグできる仮想 CPU の最大数を制御できます。そのた め、このフラグは - - c o n fig フラグとのみ使用する必要があり、- - liv e フラグと一緒に使用することはできませ ん。 15.13.7. メモ リ ー割り当てを設定す る v ir s h を使ってゲスト仮想マシンのメモリー割り当てを変更するには、以下を実行します。 # virsh setm em {dom ain-id or dom ain-nam e} count # v ir s h s e t m e m vr-rhel6 u1-x8 6 _6 4-kvm --kilobytes 1025000 198 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 c o u n t はキロバイトで指定する必要があります。新規のカウント値はゲスト仮想マシンの作成時に指定した数を超過 することはできません。6 4 MB 未満の値は、ほとんどのゲスト仮想マシンのオペレーティングシステムでは機能しない 可能性があります。それ以上の値が最大メモリー数値である場合は、アクティブなゲスト仮想マシンに影響しません。 新規の値が利用可能なメモリーを下回る場合、縮小されてゲスト仮想マシンがクラッシュする原因になるかもしれませ ん。 このコマンドには、以下のフラグが使用されます。 [--do main] <string> ドメイン名、id または uuid [--size] <number> 新たに設定するメモリーサイズ、単位付き整数で指定 (デフォルトは KiB) 有効なメモリーの単位には以下が含まれます。 バイト、 b または b y t e s キロバイト、 K B (10 3 または 1,0 0 0 バイトのブロック) キビバイト、 k または K iB (210 または 10 24 バイトのブロック) メガバイト、 M B (10 6 または 1,0 0 0 ,0 0 0 バイトのブロック) メビバイト、 M または M iB (220 または 1,0 4 8 ,576 バイトのブロック) ギガバイト、 G B (10 9 または 1,0 0 0 ,0 0 0 ,0 0 0 バイトのブロック) ギビバイト、 G または G iB (230 または 1,0 73,74 1,8 24 バイトのブロック) テラバイト、 TB (10 12 または 1,0 0 0 ,0 0 0 ,0 0 0 ,0 0 0 バイトのブロック) テビバイト、 T または TiB (240 または 1,0 99,511,6 27,776 バイトのブロック) libvirt によって値はすべて直近のキビバイトに切り上げられ、ハイパーバイザーで対応できる単位までさらに切り 上げられる場合があることに注意してください。また、ハイパーバイザーの中には、4 0 0 0 KiB (または 4 0 0 0 x 210 または 4 ,0 96 ,0 0 0 バイト) などの最小値を強制するものがあります。この値の単位は m e m o r y u n it と いうオプションの属性で確定されます。この属性では、測定単位のキビバイト (KiB) にデフォルト設定されます (210 または 10 24 バイトブロック単位)。 --co nfig 次回起動時に有効になります。 --live 実行中のドメインのメモリーを制御します。 --current 現在のドメイン上のメモリーを制御します。 15.13.8. ド メインの メモ リ ー割り当ての 変更 v ir s h s e t m a x m e m d o m a in サイズ - - c o n fig - - liv e - - c u r r e n t は、以下のようにゲスト仮想マシ ンの最大メモリー割り当ての設定を許可します。 v ir s h s e t m a x m e m r h e l6 10 2 4 - - c u r r e n t 最大メモリーに指定できるサイズは、サポートされる接尾辞が指定されない限り、キビバイト単位でデフォルト設定され る単位付き整数になります。以下のオプションがこのコマンドと共に使用できます。 - - c o n fig - 次回起動時に有効になります。 199 仮 想 化 管 理 ガイ ド - - liv e - すべてのハイパーバイザーがメモリーの上限のライブ変更を許可する訳ではないため、ハイパーバイ ザーがこのアクションをサポートする場合に、実行中のドメインのメモリーを制御します。 - - c u r r e n t - 現在のドメイン上のメモリーを制御します。 15.13.9. ゲス ト仮想マ シンの ブ ロックデバ イス 情報の 表示 v ir s h d o m b lk s t a t を使用して、実行中のゲスト仮想マシンについてブロックデバイスの統計を表示できます。 # virsh dom blkstat G uestNam e block-device 15.13.10 . ゲス ト仮想マ シンの ネ ットワークデバ イス 情報の 表示 v ir s h d o m ifs t a t を使用して、実行中のゲスト仮想マシンについてネットワークインターフェースの統計を表示で きます。 # virsh dom ifstat G uestNam e interface-device 15.14 . 仮想ネ ットワ ークを管理す る このセクションでは、v ir s h コマンドで仮想ネットワークを管理する方法について説明します。仮想ネットワークの一覧 を表示するには、 以下のようにします。 # virsh net-list このコマンドを実行すると以下のような出力を生成します。 # virsh net-list Nam e S tate Autostart ----------------------------------------default active yes vnet1 active yes vnet2 active yes 特定の仮想ネットワークのネットワーク情報を表示するには、以下のようにします。 # virsh net-dum pxm l NetworkNam e 指定した仮想ネットワークに関する情報が XML 形式で表示されます。 # virsh net-dum pxm l vnet1 <network> <nam e>vnet1</nam e> <uuid>98 36 1b46 -158 1-acb7-16 43-8 5a4126 26 e70</uuid> <forward dev='eth0'/> <bridge nam e='vnet0' stp='on' forwardDelay='0' /> <ip address='192.16 8 .100.1' netm ask='255.255.255.0'> <dhcp> <range start='192.16 8 .100.128 ' end='192.16 8 .100.254' /> </dhcp> </ip> </network> 200 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 仮想ネットワークの管理に使用される他の v ir s h コマンドを以下に示します。 v ir s h n e t - a u t o s t a r t n e t w o r k - n a m e 始します。 — netwo rk-name で指定されたネットワークを自動的に開 v ir s h n e t - c r e a t e X M L file — 既存の XML ファイルを使って新規ネットワークを生成し、 開始します。 v ir s h n e t - d e fin e X M L file 成します。 — 既存の XML ファイルから新規のネットワークデバイスを開始せずに生 v ir s h n e t - d e s t r o y n e t w o r k - n a m e v ir s h n e t - n a m e n e t w o r k U U ID v ir s h n e t - u u id n e t w o r k - n a m e — netwo rk-name で指定されたネットワークを破棄します。 — 指定した netwo rkUUID をネットワーク名に変換します。 — 指定した netwo rk-name をネットワーク UUID に変換します。 v ir s h n e t - s t a r t n a m e O fIn a c t iv e N e t w o r k — 停止中のネットワークを開始します。 v ir s h n e t - u n d e fin e n a m e O fIn a c t iv e N e t w o r k — 停止中のネットワークの定義を削除します。 15.15. virsh を使用したゲス ト仮想マ シンの 移行 virsh を使用した移行についての詳細は、「virsh を使用した KVM のライブマイグレーション」のセクションをご覧くだ さい (「virsh を使用した KVM のライブマイグレーション」)。 15.15.1. インタ ーフェース コマ ンド 以下のコマンドはホストインターフェースを操作するので、ゲスト仮想マシンから実行することはできません。これらのコ マンドは、ホスト物理マシンのターミナルから実行する必要があります。 警告 マシンの Netwo rkManager サービスが無効にされており、 netwo rk サービスが代わりに使用されている 場合は、このセクションに記載のコマンドのみがサポートされます。 これらのホストインターフェースは、ドメインの < in t e r fa c e > 要素内の名前 (system-created bridge interface など) で使用されることがよくありますが、ホストインターフェースを特定のゲスト設定 XML に関連付けるという要件 はありません。ホストインターフェースのコマンドの多くはドメインに使用されるものに類似しており、インターフェースの 命名は、その名前を使用するか、またはその MAC アドレスを使用するかのいずれかになります。ただし、ifa c e オプ ションでの MAC アドレスの使用は、アドレスが固有な場合にのみ機能します (インターフェースとブリッジが同じ MAC アドレスを共有することはよくありますが、この場合、MAC アドレスを使用すると、曖昧さが原因でエラーが生じ るため、代わりに名前を使用する必要があります)。 1 5 .1 5 .1 .1 . XM L フ ァ イル によるホス ト 物理マ シ ンインタ ーフ ェース の 定義と 開始 v ir s h ifa c e - d e fin e file コマンドは、XML ファイルからホストインターフェースを定義します。このコマンドは インターフェースのみを定義し、これを開始することはありません。 v ir s h ifa c e - d e fin e ifa c e .x m l すでに定義されたインターフェースを開始するには、ifa c e - s t a r t in t e r fa c e を実行します。ここで、 interface はインターフェース名です。 201 仮 想 化 管 理 ガイ ド 1 5 .1 5 .1 .2 . ホス ト インタ ーフ ェース 用 XM L 設定フ ァ イル の 編集 コマンド ifa c e - e d it in t e r fa c e は、ホストインターフェースの XML 設定ファイルを編集します。これは、XML 設定ファイルを編集するための 唯一 推奨される方法です (これらのファイルについては、21章ドメイン XML の操作 を参照してください)。 1 5 .1 5 .1 .3 . アク ティ ブ なホス ト インタ ーフ ェース の 一覧表示 ifa c e - lis t - - in a c t iv e - - a ll は、アクティブなホストインターフェースの一覧を表示します。- - a ll が指定 されている場合、この一覧には、定義されているものの、アクティブではないインターフェースが含まれます。- in a c t iv e が指定される場合、アクティブではないインターフェースのみが一覧表示されます。 1 5 .1 5 .1 .4 . M A C アドレ ス の インタ ーフ ェース 名へ の 変換 ifa c e - n a m e in t e r fa c e コマンドは、MAC アドレスがホストのインターフェース間で固有な場合に、ホストイン ターフェースの MAC をインターフェース名に変換します。このコマンドには、インターフェースの MAC アドレスである interface が必要になります。 ifa c e - m a c in t e r fa c e コマンドは、この場合 interface がインターフェース名になりますが、ホストのインター フェース名を MAC アドレスに変換します。 1 5 .1 5 .1 .5 . 特定ホス ト 物理マ シ ンの インタ ーフ ェース の 停止 v ir s h ifa c e - d e s t r o y in t e r fa c e コマンドは、ホストの実行中の if- d o w n と同じ、所定のホストインター フェースを破棄 (停止) します。このコマンドは、インターフェースがアクティブに使用されることを停止し、ただちに有効 になります。 インターフェースの定義解除を行うには、インターフェース名を使用して ifa c e - u n d e fin e in t e r fa c e コマンドを 使用します。 1 5 .1 5 .1 .6 . ホス ト 設定フ ァ イル の 表示 v ir s h ifa c e - d u m p x m l in t e r fa c e - - in a c t iv e は、標準出力 (stdo ut) への XML ダンプとしてホスト のインターフェースを表示します。- - in a c t iv e オプションを指定すると、出力には次回の起動時に使用されるイン ターフェースの永続状態が反映されます。 1 5 .1 5 .1 .7 . ブ リッ ジ デバ イス の 作成 ifa c e - b r id g e は、ブリッジデバイスが指定するブリッジを作成し、既存のネットワークデバイスインターフェースを新 規のブリッジに割り当てます。新規のブリッジは、STP が有効な状態、かつ遅延 0 の状態でただちに機能を開始しま す。 # v ir s h ifa c e - b r id g e in t e r fa c e b r id g e - - n o - s t p d e la y - - n o - s t a r t これらの設定は、--no -stp、--no -start、および遅延の秒数を表す整数を使って変更できることに注意してください。イ ンターフェースのすべての IP アドレス設定は、新規のブリッジデバイスに移行します。ブリッジを破棄する方法につい ての詳細は、「ブリッジデバイスの破棄」を参照してください。 1 5 .1 5 .1 .8 . ブ リッ ジ デバ イス の 破棄 ifa c e - u n b r id g e b r id g e - - n o - s t a r t コマンドは、 bridge という名前の指定されたブリッジデバイスを破棄 し、その基礎となるインターフェースを通常に使用状態に戻し、ブリッジデバイスから基礎となるデバイスにすべての IP アドレス設定を移行します。- - n o - s t a r t オプションを使用しなければ、この基礎となるインターフェースは再起動し ますが、再起動することが通常推奨されていることに注意してください。ブリッジ作成のコマンドについては、「ブリッジ デバイスの作成」を参照してください。 202 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 1 5 .1 5 .1 .9 . インタ ーフ ェース ス ナ ッ プシ ョッ ト の 操作 ifa c e - b e g in コマンドは、現在のホストインターフェースの設定のスナップショットを作成し、それは後にコミット (ifa c e - c o m m it を使用) されるか、または復元 (ifa c e - r o llb a c k を使用) されます。スナップショットがすでに 存在する場合、このコマンドは直前のスナップショットがコミットされるか、または復元されない限り失敗します。外部の 変更が libvirt API 外のホストインターフェースに対して、スナップショットの作成時からその後のコミットまたはロール バックの間までに行なわれる場合、未定義の動作が生じます。 最後に ifa c e - b e g in を実行してから行なわれたすべての変更を機能しているものとして宣言するため に、ifa c e - c o m m it コマンドを使用し、次にロールバックポイントを削除します。ifa c e - b e g in でインターフェース のスナップショットが起動されていない場合、このコマンドは失敗します。 ifa c e - r o llb a c k を使用して、ifa c e - b e g in コマンドが実行された最終時を記録した状態に、すべてのホストイ ンターフェース設定を戻します。ifa c e - b e g in コマンドがそれまでに実行されていなかった場合、ifa c e r o llb a c k は失敗します。ホスト物理マシンの再起動は、暗黙的なロールバックポイントとしても機能する点に注意し てください。 15.15.2. ス ナ ップショットの 管理 以降のセクションでは、ドメインスナップショットを操作するために実行できるアクションについて説明します。 スナップ ショット は、指定された時点のドメインのディスク、メモリー、およびデバイスの状態を取得し、今後の使用に備えて保存 します。スナップショットには、OS イメージの「クリーンな」コピーを保存することから、破壊的な操作となりかねない操 作を実行する前のドメインの状態を保存することに至るまで数多くの使用方法があります。スナップショットは固有の名 前で識別されます。スナップショットのプロパティーを表すために使用される XML 形式のドキュメントについて は、libvirt web サイト を参照してください。 1 5 .1 5 .2 .1 . ス ナ ッ プシ ョッ ト の 作成 v ir s h s n a p s h o t c r e a t e コマンドは、ドメインの XML ファイルで指定されたプロパティーでドメインのスナップ ショットを作成します (<name> および <descriptio n> 要素、ならびに <disks>)。 スナップショットを作成するには、以下を実行します。 # s n a p s h o t - c r e a t e < d o m a in > < x m lfile > [ - - r e d e fin e ] [ - - c u r r e n t ] [ - - n o m e t a d a t a ] [ - - r e u s e - e x t e r n a l] ドメイン名、ID、または UID を、ドメイン要件として使用することができます。XML 要件は、<name>、<descriptio n> および <disks> 要素を含んでいる文字列です。 注記 ライブスナップショットは Red Hat Enterprise Linux ではサポートされません。ライブスナップショットに使用 するための v ir s h s n a p s h o t c r e a t e コマンドと使用可能な追加のオプションがあり、これらは libvirt では表示されますが、Red Hat Enterprise Linux 6 ではサポートされていません。 Red Hat Enterprise Linux で利用できるオプションには、以下のものがあります。 - - r e d e fin e は、s n a p s h o t - d u m p x m l で生成されるすべての XML 要素が有効な場合、以下を実行できる ように指定します。あるマシンから別のマシンにスナップショットの階層を移行する、途中でなくなり、後に同じ名前 および UUID で再作成される一時的なドメイン用に階層を再作成する、またはスナップショットのメタデータに若干 の変更を加える (例: スナップショットに組み込まれるドメイン XML のホスト固有の部分など)。このフラグが指定 されると、x m lfile 引数は必須となり、ドメインの現在のスナップショットは、- - c u r r e n t フラグも指定されない 限り変更されることがありません。 203 仮 想 化 管 理 ガイ ド - - n o - m e t a d a t a はスナップショットを作成しますが、すべてのメタデータはただちに破棄されます (つまり、 libvirt はスナップショットを現在の状態で処理せず、- - r e d e fin e が後に使用されて libvirt にメタデータについ て再度指示しない限り、スナップショットには戻りません)。 - - r e u s e - e x t e r n a l を使用する場合は、使用する外部の既存 XML スナップショットの場所を指定します。こ のスナップショットがまだない場合は、既存ファイルのコンテンツを失くさないように、コマンドはスナップショットの 取得に失敗します。 1 5 .1 5 .2 .2 . 現在の ドメインの ス ナ ッ プシ ョッ ト の 作成 v ir s h s n a p s h o t - c r e a t e - a s d o m a in コマンドは、ドメインのスナップショットを、ドメイン XML ファイルで指 定されたプロパティーを使って作成します ( (<name> 要素と <descriptio n> 要素など)。これらの値が XML 文字 列に含まれない場合、 libvirt が値を選択します。スナップショットを作成するには、以下を実行します。 # v ir s h s n a p s h o t - c r e a t e - a s d o m a in { [ - - p r in t - x m l] | [ - - n o - m e t a d a t a ] [ - r e u s e - e x t e r n a l]} [ n a m e ] [ d e s c r ip t io n ] [ - - d is k s p e c ] d is k s p e c ] 他のオプションは次の通りです。 - - p r in t - x m l は、実際にスナップショットを作成するのではなく、出力として s n a p s h o t - c r e a t e の適切な XML を作成します。 - - d is k s p e c オプションは、- - d is k - o n ly および外部チェックポイントが外部ファイルを作成する方法を制御 するために使用できます。このオプションは、ドメイン XML の <disk> 要素に基づいて複数回使用される可能性 があります。それぞれの <diskspec> は以下の形式で表されます。disk[ , s n a p s h o t = t y p e ] [ , d r iv e r = t y p e ][ , file = n a m e ] リテラルコンマを disk または file = n a m e に組み込むには、2 番目のコ ンマでそれをエスケープします。リテラルの - - d is k s p e c は、<do main>, <name>, and <descriptio n> の 3 つすべてが表示されない限り、それぞれのディスク仕様の前に置かれる必要があります。たとえば、diskspec が v d a , s n a p s h o t = e x t e r n a l, file = / p a t h / t o , , n e w の場合、以下の XML が生成されます。 <disk nam e=’vda’ snapshot=’external’> <source file=’/path/to,new’/> </disk> - - r e u s e - e x t e r n a l は、既存のファイルを移行先として再利用し (つまりこのファイルは上書きされます)、外部 のスナップショットを作成します。この移行先が存在しない場合は、既存ファイルのコンテンツが失われないように するために、スナップショットの要求は拒否されます。 - - n o - m e t a d a t a はスナップショットデータを作成しますが、すべてのメタデータはただちに破棄されます (つま り、 libvirt は、snapsho t-create が後に使用され、libvirt に対してメタデータについて再び指示がなされない限 り、スナップショットを現状の状態で処理せず、スナップショットには戻りません)。このフラグには - - p r in t - x m l との互換性はありません。 1 5 .1 5 .2 .3 . 現在の ドメインの ス ナ ッ プシ ョッ ト の 取得 このコマンドは、現在使用されているスナップショットのクエリーを行うために使用されます。これを使用するには、以下 を実行します。 # v ir s h s n a p s h o t - c u r r e n t d o m a in { [ - - n a m e ] | [ - - s e c u r it y - in fo ] | [ s n a p s h o t n a m e ]} s n a p s h o t n a m e が使用されていない場合、ドメインの現在のスナップショットのスナップショット XML (ある場合) は出力として表示されます。- - n a m e が指定されている場合、完全な XML ではなく、現在のスナップショット名のみ が出力として送信されます。- - s e c u r it y - in fo が指定される場合、セキュリティー上の機密情報が XML に組み 204 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 込まれます。s n a p s h o t n a m e を使用する場合、 libvirt は、ドメインに戻さずに、既存の指定されたスナップショット を現在のスナップショットにする要求を生成します。 1 5 .1 5 .2 .4 . s na p s ho t-e d it-d o m a in このコマンドは、現在使用されているスナップショットを編集するために使用されます。これを使用するには、以下を実 行します。 #v ir s h s n a p s h o t - e d it d o m a in [ s n a p s h o t n a m e ] [ - - c u r r e n t ] { [ - - r e n a m e ] [ - c lo n e ]} s n a p s h o t n a m e と - - c u r r e n t の両方が指定される場合、編集されたスナップショットを現在のスナップショット にするように強制します。s n a p s h o t n a m e が省略されている場合、現在のスナップショットを編集するために - c u r r e n t を指定する必要があります。 これは、以下のコマンドシーケンスと同等ですが、エラーチェック機能が一部含まれます。 # virsh snapshot-dum pxm l dom nam e > snapshot.xm l # vi snapshot.xm l [note - this can be any editor] # virsh snapshot-create dom snapshot.xm l --redefine [--current] - - r e n a m e が指定されている場合、結果として生じる編集済みのファイルは異なるファイル名で保存されます。- c lo n e が指定される場合、スナップショット名の変更により、スナップショットのメタデータのクローンが作成されま す。いずれも指定されていない場合、編集によりスナップショット名が変更されることはありません。単一の qco w2 ファイル内の内部スナップショットなど、一部のスナップショットのコンテンツは元のスナップショットのファイル名からア クセス可能であるため、スナップショット名の変更は注意して行う必要があります。 1 5 .1 5 .2 .5 . s na p s ho t-info -d o m a in s n a p s h o t - in fo - d o m a in は、スナップショットについての情報を表示します。これを使用するには、以下を実行し ます。 # s n a p s h o t - in fo d o m a in { s n a p s h o t | - - c u r r e n t } 指定された s n a p s h o t についての基本的な情報を出力するか、- - c u r r e n t で現在のスナップショットを出力しま す。 1 5 .1 5 .2 .6 . s na p s ho t-lis t-d o m a in 所定ドメインの利用可能なスナップショットすべてを一覧表示します。デフォルトでは、スナップショット名、作成時およ びドメインの状態の列が表示されます。これを使用するには、以下を実行します。 #v ir s h s n a p s h o t - lis t d o m a in [ { - - p a r e n t | - - r o o t s | - - t r e e } ] [ { [ - - fr o m ] s n a p s h o t | - - c u r r e n t } [ - - d e s c e n d a n t s ]] [ - - m e t a d a t a ] [ - - n o - m e t a d a t a ] [ - le a v e s ] [ - - n o - le a v e s ] [ - - in a c t iv e ] [ - - a c t iv e ] [ - - in t e r n a l] [ - - e x t e r n a l] 他のオプションは次の通りです。 - - p a r e n t は、各スナップショットの親の名前を指定する出力テーブルに列を追加します。このオプションは、- r o o t s または - - t r e e と共に使用することはできません。 - - r o o t s は、親のないスナップショットのみを表示するために一覧をフィルターします。このオプションは、- p a r e n t または - - t r e e と共に使用することはできません。 205 仮 想 化 管 理 ガイ ド - - t r e e は、出力をツリー形式で表示し、スナップショット名のみを一覧表示します。これらの 3 つのオプションは 相互に排他的です。このオプションは、- - r o o t s または - - p a r e n t と共に使用することはできません。 - - fr o m は、所定スナップショットの子であるスナップショットの一覧をフィルターします。または、- - c u r r e n t が 指定される場合、一覧を現在のスナップショットで開始させるようにします。一覧が分離してか、または - p a r e n t と共に使用される場合、- - d e s c e n d a n t s も表示されない限り、直接の子に限定されます。- - t r e e と共に使用される場合、- - d e s c e n d a n t s の使用が暗黙的に示されます。このオプションには、- - r o o t s との 互換性がありません。- - t r e e オプションも存在しない限り、- - fr o m の開始点または - - c u r r e n t はこの一 覧に含まれません。 - - le a v e s が指定されると、一覧は子のないスナップショットのみにフィルターされます。同様に、- - n o le a v e s が指定されると、一覧は子を持つスナップショットのみにフィルターされます。(いずれのオプションも省略 すると、フィルターは実行されず、両方を指定すると、サーバーがフラグを認識するかどうかによって、同じ一覧が生 成されるか、またはエラーが出されます)。フィルターオプションには - - t r e e との互換性がありません。 - - m e t a d a t a が指定されると、一覧が libvirt メタデータに関連するスナップショットのみにフィルターされるた め、永続的なドメインの定義解除が回避されるか、または一覧が一時的なドメインの破棄によって失われます。同 様に、- - n o - m e t a d a t a が指定される場合、一覧は libvirt メタデータのなしに存在するスナップショットのみに フィルターされます。 - - in a c t iv e が指定されると、一覧は、ドメインの停止時に取られたスナップショットにフィルターされます。- a c t iv e が指定される場合、一覧は、ドメインの実行時に取られたスナップショットにフィルターされ、このスナップ ショットには、実行中の状態に戻るためのメモリー状態が含まれます。- - d is k - o n ly が指定される場合、一覧は ドメインの実行中に取られたスナップショットにフィルターされますが、このスナップショットにはディスク状態のみが 含まれます。 - - in t e r n a l が指定されると、一覧は、既存のディスクイメージの内部ストレージを使用するスナップショットに フィルターされます。--external が指定される場合、一覧はディスクイメージの外部ファイルまたはメモリー状態を 使用するスナップショットにフィルターされます。 1 5 .1 5 .2 .7 . s na p s ho t-d um p xm l d o m a in s na p s ho t v ir s h s n a p s h o t - d u m p x m l d o m a in s n a p s h o t は、snapsho t という名前のドメインのスナップショットの スナップショット XML を出力します。これを使用するには、以下を実行します。 # v ir s h s n a p s h o t - d u m p x m l d o m a in s n a p s h o t [ - - s e c u r it y - in fo ] また、- - s e c u r it y - in fo オプションには、セキュリティー上の機密情報も含まれます。現在のスナップショットの XML に簡単にアクセスするには、s n a p s h o t - c u r r e n t を使用します。 1 5 .1 5 .2 .8 . s na p s ho t-p a re nt d o m a in 所定スナップショット、または - - c u r r e n t を使って現在のスナップショットの親スナップショット (ある場合) の名前 を出力します。これを使用するには、以下を実行します。 #v ir s h s n a p s h o t - p a r e n t d o m a in { s n a p s h o t | - - c u r r e n t } 1 5 .1 5 .2 .9 . s na p s ho t-re v e rt d o m a in 所定ドメインを、s n a p s h o t で指定されるスナップショットか、または - - c u r r e n t により現在のスナップショットに戻 します。 206 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 警告 これは破壊的なアクションであることに注意してください。最後にスナップショットが取られてから加えられたド メインへの変更は失われます。さらに、s n a p s h o t - r e v e r t の完了後のドメインの状態が元のスナップ ショットが取られた時点のドメインの状態であることにも注意してください。 スナップショットを元に戻すには、以下を実行します。 # s n a p s h o t - r e v e r t d o m a in { s n a p s h o t | - - c u r r e n t } [ { - - r u n n in g | - - p a u s e d } ] [ - - fo r c e ] 通常、スナップショットに戻すと、ドメインはスナップショットが取られた時点の状態に置かれます。ただし、例外として、 ゲスト仮想マシンの状態が設定されていないディスクのスナップショットは、ドメインをアクティブでない状態にします。- r u n n in g または - - p a u s e d フラグは、追加の状態変更を実行します (アクティブでないドメインの起動、または実 行中のドメインの一時停止など)。一時的なドメインはアクティブではないため、一時的なドメインのディスクスナップ ショットに戻る場合に、これらのフラグのいずれかを使用する必要があります。 s n a p s h o t r e v e r t で - - fo r c e の使用が必要になる追加のリスクの伴う場合として 2 つのケースがあります。 1 つは、設定を戻すために必要な詳細なドメイン情報がスナップショットにない場合です。この場合、libvirt は現在の 設定がスナップショットの作成時に使用された設定に一致することを証明できないため、- - fo r c e を指定することに より、 libvirt に対し、スナップショットには現在の設定との互換性がある (さらに、互換性がない場合はドメインの実行 が失敗する可能性がある) ことを保証します。もう 1 つのケースは、実行中のドメインをアクティブな状態に戻す場合 で、この場合、既存の VNC または Spice 接続を中断するなどの障害が暗示されるため、既存のハイパーバイザーを 再利用するのではなく、新規のハイパーバイザーを作成する必要があります。この状態は、互換性がない可能性のある 設定を使用するアクティブなスナップショットや、- - s t a r t または - - p a u s e フラグで組み合わされたアクティブでな いスナップショットについて発生します。 1 5 .1 5 .2 .1 0 . s na p s ho t-d e le te d o m a in s n a p s h o t - d e le t e d o m a in は指定されたドメインのスナップショットを削除します。これを実行するには、以下を 実行します。 # v ir s h s n a p s h o t - d e le t e d o m a in { s n a p s h o t | - - c u r r e n t } [ - - m e t a d a t a ] [ { - c h ild r e n | - - c h ild r e n - o n ly } ] このコマンドは、s n a p s h o t という名前のドメインのスナップショットを削除するか、または - - c u r r e n t で現在のス ナップショットを削除します。このスナップショットに子のスナップショットがある場合、このスナップショットの変更は子 にマージされます。オプションの - - c h ild r e n が使用される場合、このスナップショットとこのスナップショットのす べての子が削除されます。- - c h ild r e n - o n ly が使用される場合、このスナップショットの子が削除され、このス ナップショットは元の状態のままにされます。これらの 2 つのフラグは相互に排他的です。 - - m e t a d a t a が使用されると、 libvirt で維持されるスナップショットのメタデータが削除され、一方でスナップショッ トのコンテンツは外部ツールがアクセスできるように元の状態にされます。そうしないと、スナップショットの削除によ り、その時点からのデータのコンテンツも削除されてしまいます。 15.16. ゲス ト仮想マ シンの CPU モ デルの 設定 15.16.1. はじめ に それぞれのハイパーバイザーには、ゲスト仮想マシンにデフォルトで表示する CPU 情報に関して独自のポリシーがあ ります。ゲスト仮想マシンで使用できる CPU ホストの物理マシン機能をハイパーバイザー側で決めるものもあれば、 QEMU/KVM ではゲスト仮想マシンには q e m u 3 2 または q e m u 6 4 という汎用モデルを表示します。こうしたハイ 207 仮 想 化 管 理 ガイ ド パーバイザーでは、より高度なフィルター機能を備え、すべての物理 CPU をいくつかのグループに分類して、ゲスト仮 想マシンに対して表示するベースライン CPU モデルを各グループに 1 つずつ用意します。これにより、同じグループ に分類される物理 CPU が使用される場合、ホスト物理マシン間でのゲスト仮想マシンの安全な移行が可能になりま す。libvirt では一般的にはポリシー自体の強制はせず、より高い層で適したポリシーを指定するというメカニズムを提 供します。CPU のモデル情報を取得し、ゲスト仮想マシンに適した CPU モデルを定義する方法を理解することは、ホ スト物理マシン間でゲスト仮想マシンを正常に移行する上で非常に重要となります。ハイパーバイザーは認識できる機 能しかエミュレートできないため、そのハイパーバイザーのリリース後に作成された機能についてはエミュレートできま せん。 15.16.2. ホス ト物理マ シン CPU モ デルに関す る 認識 v ir s h c a p a b ilit ie s コマンドは、ハイパーバイザーの接続とホスト物理マシンの能力を記述する XML ドキュメ ントを表示します。表示される XML スキーマは、ホスト物理マシンの CPU モデルの情報を提供するように拡張されて います。CPU モデルの記述において大きな挑戦となるものの1 つは、すべてのアーキテクチャーがそれぞれの機能の 公開に対して異なるアプローチを取っていることです。x8 6 では、最新の CPU 機能は、CPUID インストラクションを 介して公開されます。基本的に、これはそれぞれのビットが特殊な意味を持つ 32ビットの整数のセットに要約されま す。AMD と Intel については、これらのビットに関する共通の意味で一致しています。その他のハイパーバイザーは、 CPUID マスクの概念をそれらのゲスト仮想マシンの設定形式に直接公開します。しかし、QEMU/KVM は、単なる x8 6 アーキテクチャーよりも多くをサポートするため、CPUID は、規準となる設定形式としては適切でないことは明ら かです。QEMU は、最終的に CPU モデルの名前文字列と名前付きのフラグのセットを組み合わせるスキームを使用 することになりました。x8 6 では、CPU モデルはベースライン CPUID マスクにマップして、フラグはそのマスク内で ビットをオンとオフに切り替えるために使用できます。libvirt では、これに追従することが決定されており、モデル名と フラグの組み合わせを使用します。 既知の CPU モデルすべてを一覧表示するデータベースを取得することは実際的ではありません。そのため、libvirt は ベースライン CPU モデル名の小規模な一覧を維持します。この一覧は、実際のホスト物理マシン CPU と共に最大数 の CPUID 部分を共有するものを選択して、残りの部分は名前付きの機能として一覧表示します。libvirt は、ベース ライン CPU に含まれる機能は表示しないことに注意してください。これは、一見すると欠陥のように見えますが、この セクションで説明されるように、この情報について知る必要はありません。 15.16.3. ホス ト物理マ シンの プールに適合す る 互換性の ある CPU モ デルの 決定 1 つのホスト物理マシンが持つ CPU 機能を認識することができるようになったら、次のステップは、そのゲスト仮想マ シンに公開するにはどの CPU 機能が最適であるかを決定することです。ゲスト仮想マシンが別のホスト物理マシンに 決して移行する必要がないことが判明している場合は、そのホスト物理マシンの CPU モデルは修正なしでストレート に通過できます。一部の仮想化データセンターには、すべてのサーバーが 10 0 % 同一の CPU を保持していることを 保証する設定セットが含まれる場合があります。そのような場合も、ホスト物理マシンの CPU モデルは修正なしでスト レートに通過できます。しかし、さらに一般的なケースでは、ホスト物理マシン間に CPU のバリエーションが存在する ものです。このような混合の CPU 環境では、妥協できる共通の CPU を決定する必要があります。これは単純な手順 ではないため、libvirt はこのタスクに適格な API を提供します。libvirt が、それぞれホスト物理マシン用の CPU モデ ルを記述している XML 文書の一覧を受け取ると、libvirt は内部でこれらを CPUID マスクに変換し、それらの接点を 算出して、CPUID マスクの結果を XML CPU 記述に変換し直します。 以下は、v ir s h c a p a b ilit ie s が実行される際に、libvirt が基本ワークステーションの機能として報告する内容 についての例です。 <capabilities> <host> <cpu> <arch>i6 8 6 </arch> <m odel>pentium 3</m odel> <topology sockets='1' cores='2' threads='1'/> <feature nam e='lahf_lm '/> 208 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature <feature </cpu> </host> </capabilities> nam e='lm '/> nam e='xtpr'/> nam e='cx16 '/> nam e='ssse3'/> nam e='tm 2'/> nam e='est'/> nam e='vm x'/> nam e='ds_cpl'/> nam e='m onitor'/> nam e='pni'/> nam e='pbe'/> nam e='tm '/> nam e='ht'/> nam e='ss'/> nam e='sse2'/> nam e='acpi'/> nam e='ds'/> nam e='clflush'/> nam e='apic'/> 図1 5 . 3 ホス ト 物理マ シ ンの CP U モ デル 情報の プル ここで、同じ v ir s h c a p a b ilit ie s コマンドを使い、これをランダムなサーバーと比較します。 <capabilities> <host> <cpu> <arch>x8 6 _6 4</arch> <m odel>phenom </m odel> <topology sockets='2' cores='4' threads='1'/> <feature nam e='osvw'/> <feature nam e='3dnowprefetch'/> <feature nam e='m isalignsse'/> <feature nam e='sse4a'/> <feature nam e='abm '/> <feature nam e='cr8 legacy'/> <feature nam e='extapic'/> <feature nam e='cm p_legacy'/> <feature nam e='lahf_lm '/> <feature nam e='rdtscp'/> <feature nam e='pdpe1gb'/> <feature nam e='popcnt'/> <feature nam e='cx16 '/> <feature nam e='ht'/> <feature nam e='vm e'/> </cpu> ...snip... 図1 5 . 4 ランダム サ ーバ ーか ら CP U 記述を生成す る 209 仮 想 化 管 理 ガイ ド この CPU 記述に直前のワークステーションの CPU 記述との互換性があるかを判別するには、v ir s h c p u c o m p a r e コマンドを使用します。 この削減したコンテンツは、v ir s h - c a p s - w o r k s t a t io n - c p u - o n ly .x m l という名前のファイル内に格納され て、このファイルに v ir s h c p u - c o m p a r e コマンドを実行することができます。 # virsh cpu-com pare virsh-caps-workstation-cpu-only.xm l Host physical m achine CPU is a superset of CPU described in virsh-caps-workstationcpu-only.xm l 以上の出力で見えるように、サーバー CPU 内のいくつかの機能がクライアント CPU 内で欠如しているため、 libvirt は、CPU が厳密には互換性を持たないことを正しく報告しています。クライアントとサーバー間で移行を可能にするに は、XML ファイルを開いていくつかの機能をコメントアウトする必要があります。どの機能を削除するかを決定するに は、両方のマシンの CPU 情報が含まれる b o t h - c p u s .x m l で v ir s h c p u - b a s e lin e コマンドを実行しま す。 # v ir s h c p u - b a s e lin e b o t h - c p u s .x m l を実行すると、次のような結果になります。 <cpu m atch='exact'> <m odel>pentium 3</m odel> <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' <feature policy='require' </cpu> nam e='lahf_lm '/> nam e='lm '/> nam e='cx16 '/> nam e='m onitor'/> nam e='pni'/> nam e='ht'/> nam e='sse2'/> nam e='clflush'/> nam e='apic'/> 図1 5 . 5 複合 CP U ベ ース ライン この複合ファイルは、共通の要素を示します。共通でない要素はすべてコメントアウトされます。 15.17. ゲス ト仮想マ シンの CPU モ デルの 設定 単純なデフォルトではゲスト仮想マシンの CPU 設定は、XML が表示するホスト物理マシンの機能と同じ基本的な XML 表現を受け入れます。つまり c p u - b a s e lin e virsh コマンドからの XML は、<do main> 要素の下で、トップ レベルにあるゲスト仮想マシンの XML に直接コピーすることができます。以前の XML スニペットには、ゲスト仮想マ シンの XML 内での CPU の記述の際に利用できるいくつかの追加の属性があります。これらはほとんど無視できま すが、ここでそれらの属性の機能について簡単に説明します。トップレベルの <cpu> 要素には m a t c h という属性が ありますが、以下の値を持つ可能性があります。 match='minimum' - ホスト物理マシン CPU には、少なくともゲスト仮想マシン XML 内に記述されている CPU 機能がなければなりません。ホスト物理マシンにゲスト仮想マシンの設定範囲を超える追加の機能がある場合は、 それらはゲスト仮想マシンに対しても表示されます。 match='exact' - ホスト物理マシン CPU には、少なくともゲスト仮想マシン XML 内に記述されている CPU 機 能がなければなりません。ホスト物理マシンにゲスト仮想マシンの設定範囲を超える追加の機能がある場合は、そ れらはゲスト仮想マシンには非表示となり隠されます。 match='strict' - ホスト物理マシン CPU には、ゲスト仮想マシン XML 内に記述してあるものと全く同じ CPU 機 能がなければなりません。 210 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 次の強化では、 <feature> の各要素に「po licy」属性を追加で持たせ、 以下のような値を設定することができます。 po licy='fo rce' - ホスト物理マシンが持たない機能の場合でもゲスト仮想マシンに対してその機能を表示しま す。これは通常、ソフトウェアエミュレーションの場合にのみ役立ちます。 po licy='require' - ホスト物理マシンが持たない機能の場合でも、ゲスト仮想マシンに対してその機能を表示し、 その後に失敗します。これは適切なデフォルトと言えます。 po licy='o ptio nal' - サポートされる機能の場合、その機能をゲスト仮想マシンに表示します。 po licy='disable' - ホスト物理マシンが持つ機能の場合、その機能はゲスト仮想マシンには非表示となり隠され ます。 po licy='fo rbid' - ホスト物理マシンが持つ機能の場合、失敗してゲスト仮想マシンの開始が拒否されます。 'fo rbid' ポリシーは、CPUID マスク内にない機能の場合でも、不正な動作をしているアプリケーションがその機能の 使用を試みており、この機能を持つホスト物理マシン上でゲスト仮想マシンを間違って実行することを避けたい状況で の特定のシナリオに対応します。'o ptio nal' ポリシーは、移行に関して特殊な動作をします。ゲスト仮想マシンが最初 に開始される際にそのフラグは 'o ptio nal' ですが、ゲスト仮想マシンのライブマイグレーションの実行時には、このポ リシーは 'require' に変わります。この理由は移行を通じて機能を消滅させることができないからです。 15.18 . ゲス ト仮想マ シンの リソース の 管理 virs h は、ゲスト仮想マシンごとにリソースのグループ化および割り当てを行うことを許可します。これは、 libvirt daemo n によって管理されます。 libvirt daemo n は cgro ups を作成し、ゲスト仮想マシンの代わりにそれらを管 理します。システム管理者が行なわなければならない唯一のタスクは、指定された仮想マシンに対して tunable (調 整可能パラメーター) を照会するか、または設定するかのいずれかになります。以下の調整可能パラメーターを使用で きます。 m e m o r y - メモリーコントローラーは RAM と swap 使用量の制限を設定することを許可し、グループ内のすべて のプロセスの累積的な使用の照会を許可します。 c p u s e t - CPU セットコントローラーは、グループ内のプロセスを CPU セットにバインドし、CPU 間の移行を制御 します。 c p u a c c t - CPU アカウンティングコントローラーは、プロセスのグループの CPU の使用量についての情報を提 供します。 c p u - CPU スケジューラーコントローラーは、グループ内のプロセスの優先付けを制御します。これは n ic e レベ ルの特権を付与することに似ています。 d e v ic e s - デバイスコントローラーは、キャラクターおよびブロックデバイス上のアクセス制御リストを付与します。 fr e e z e r - フリーザーコントローラーは、グループ内のプロセスの実行を一時停止し、再開します。これは、グルー プ全体に対する S IG S TO P と同様です。 n e t _ c ls - ネットワーククラスコントローラーは、プロセスを t c ネットワーククラスに関連付けることにより、ネット ワークの利用を管理します。 グループ階層の作成時に、cgro up では、マウントポイントとディレクトリーのセットアップは管理者によって完全に決 定され、これはいくつかのマウントポイントを / e t c / fs t a b に追加するだけの場合よりも複雑になります。ディレクト リー階層をセットアップし、その中にプロセスを配置する方法を判別することが必要です。これは、以下の virsh コマン ドを使用して実行できます。 s c h e d in fo - 「スケジュールパラメーターの設定」 で説明されています。 b lk d e v io t u n e - 「ディスク I/O スロットリング」 で説明されています。 b lk io t u n e - 「ブロック I/O パラメーターの表示または設定」 で説明されています。 211 仮 想 化 管 理 ガイ ド d o m ift u n e - 「ネットワークインターフェース帯域幅パラメーターの設定」 で説明されています。 m e m t u n e - 「メモリーのチューニングを設定する」 で説明されています。 15.19. ス ケジ ュールパ ラメ ーターの 設定 s c h e d in fo は、スケジューラーパラメーターをゲスト仮想マシンに渡すことを許可します。以下のコマンド形式を使用 する必要があります。 #v ir s h s c h e d in fo d o m a in - - s e t - - w e ig h t - - c a p - - c u r r e n t - - c o n fig - - liv e それぞれのパラメーターを以下に説明します。 d o m a in - これはゲスト仮想マシンのドメインです。 - - s e t - ここに置かれる文字列は、呼び出されるコントローラーまたはアクションです。必要な場合は、追加のパラ メーターまたは値も追加してください。 - - c u r r e n t - - - s e t と共に使用される場合、現在のスケジューラー情報として指定された s e t 文字列を使用 します。- - s e t なしに使用される場合、現在のスケジューラー情報が表示されます。 - - c o n fig - - - - s e t と共に使用される場合、次回の起動時に指定された s e t 文字列が使用されます。- s e t なしに使用される場合、設定ファイルに保存されるスケジューラー情報が表示されます。 - - liv e - - - s e t と共に使用される場合、現在実行中のゲスト仮想マシン上の指定された s e t 文字列が使用 されます。- - s e t なしに使用される場合、実行中の仮想マシンで現在使用されている設定が表示されます。 スケジューラーは、以下のパラメーターにいずれかで設定できます。 c p u _ s h a r e s 、 v c p u _ p e r io d および vcpu_quota。 例1 5 . 5 s ch e d in fo s h o w 以下の例は、シェルのゲスト仮想マシンのスケジュール情報を表示します。 # virsh schedinfo shell S cheduler : posix cpu_shares : 1024 vcpu_period : 100000 vcpu_quota : -1 例1 5 . 6 s ch e d in fo s e t この例では、cpu_shares は 20 4 6 に変更されています。これは現在の状態に影響を与えますが、設定ファイル には影響がありません。 # virsh schedinfo --set cpu_shares=2046 shell S cheduler : posix cpu_shares : 2046 vcpu_period : 100000 vcpu_quota : -1 15.20 . ディス ク I/ O ス ロットリング 212 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 v ir s h b lk d e v io t u n e は、指定されたゲスト仮想マシンのディスク I/O スロットリングを設定します。これにより、 ゲスト仮想マシンが共有リソースを過剰に使用し、他のゲスト仮想マシンのパフォーマンスに影響が及ぶことが避けら れます。以下の形式を使用する必要があります。 # v ir s h b lk d e v io t u n e < d o m a in > < d e v ic e > [ [ - - c o n fig ] [ - - liv e ] | [ - - c u r r e n t ]] [ [ t o t a l- b y t e s - s e c ] | [ r e a d - b y t e s - s e c ] [ w r it e - b y t e s - s e c ]] [ [ t o t a l- io p s s e c ] [ r e a d - io p s - s e c ] [ w r it e - io p s - s e c ]] 必要なパラメーターはゲスト仮想マシンのドメイン名のみです。ドメイン名を一覧表示するには、d o m b lk lis t コマンド を実行します。- - c o n fig 、- - liv e 、および - - c u r r e n t オプションは、「スケジュールパラメーターの設定」の場合 と同様に機能します。制限が設定されない場合、現在の I/O 制限の設定を照会します。それ以外の場合は、以下のフ ラグで制限を変更します。 - - t o t a l- b y t e s - s e c - 秒あたりのバイト単位の合計スループット制限を指定します。 - - r e a d - b y t e s - s e c - 秒あたりのバイト単位の読み込みスループット制限を指定します。 - - w r it e - b y t e s - s e c - 秒あたりのバイト単位の書き込みスループット制限を指定します。 - - t o t a l- io p s - s e c - 秒あたりの合計 I/O 操作回数を指定します。 - - r e a d - io p s - s e c - 秒あたりの読み込み I/O 操作回数を指定します。 - - w r it e - io p s - s e c - 秒あたりの書き込み I/O 操作回数を指定します。 詳細については、virsh の man ページの blkdevio tune セクションを参照してください。ドメイン XML 例について は、図21.23「デバイス - ハードドライブ、フロッピーディスク、CDROM」を参照してください。 15.21. ブロック I/ O パ ラメ ーターの 表示ま たは設定 b lk io t u n e は、指定されたゲスト仮想マシンの I/O パラメーターを設定するか、または表示します。以下の形式を使 用する必要があります。 # v ir s h b lk io t u n e d o m a in [ - - w e ig h t w e ig h t ] [ - - d e v ic e - w e ig h t s d e v ic e w e ig h t s ] [ [ - - c o n fig ] [ - - liv e ] | [ - - c u r r e n t ]] このコマンドについての詳細は、『仮想化のチューニングと最適化ガイド』 を参照してください。 15.22. メ モ リーの チューニング を設定す る v ir s h m e m t u n e v ir t u a l_ m a c h in e - - p a r a m e t e r s iz e は、『仮想化のチューニングと最適化ガイド』 で扱われています。 15.23. 仮想ネ ットワ ークコマ ンド 以下のコマンドは複数の仮想ネットワークを操作します。 libvirt には、ドメインによって使用され、実際のネットワークデ バイスにリンクされる仮想ネットワークを定義する機能があります。この機能についての詳細は、libvirt の web サイト にあるドキュメントを参照してください。仮想ネットワークについてのコマンドの多くは、ドメインに使用されるコマンドと似 ていますが、仮想ネットワークに名前を付ける方法は、その名前または UUID のいずれかを使用する方法になります。 15.23.1. 仮想ネ ットワークの 自動起動 このコマンドは、ゲスト仮想マシンの起動時に自動的に開始される仮想ネットワークを設定します。このコマンドを実行 するには、以下を実行します。 213 仮 想 化 管 理 ガイ ド # v ir s h n e t - a u t o s t a r t n e t w o r k [ - - d is a b le ] このコマンドは、auto start コマンドを無効にする - - d is a b le オプションを受け入れます。 15.23.2. XML ファイルによ る 仮想ネ ットワークの 作成 このコマンドは、XML ファイルから仮想ネットワークを作成します。 libvirt によって使用される XML ネットワーク形式 の説明については、libvirt の web サイト を参照してください。このコマンドで、 file は XML ファイルのパスになりま す。XML ファイルから仮想ネットワークを作成するには、以下を実行します。 # v ir s h n e t - c r e a t e file 15.23.3. XML ファイルによ る 仮想ネ ットワークの 定義 このコマンドは、XML ファイルから仮想ネットワークを定義します。ネットワークが定義されますが、インスタンス化は行 なわれません。仮想ネットワークを定義するには、以下を実行します。 # n e t - d e fin e file 15.23.4 . 仮想ネ ットワークの 停止 このコマンドは、所定の仮想ネットワークを、その名前または UUID 別に破棄します。これはすぐに有効になります。指 定されたネットワークを停止するには、 netwo rk が必要になります。 # net-destroy network 15.23.5. ダンプファイルの 作成 このコマンドは、指定された仮想ネットワークの標準出力に対する XML ダンプとして、仮想ネットワーク情報を出力し ます。- - in a c t iv e が指定されている場合、物理機能は、関連付けられた仮想機能に拡張されません。ダンプファイ ルを作成するには、以下を実行します。 # v ir s h n e t - d u m p x m l n e t w o r k [ - - in a c t iv e ] 15.23.6. 仮想ネ ットワークの XML 設定ファイルの 編集 以下のコマンドは、ネットワークの XML 設定ファイルを編集します。これは以下と同等になります。 #v ir s h n e t - d u m p x m l - - in a c t iv e n e t w o r k > n e t w o r k .x m l vi network.xm l (or m ake changes with your other text editor) virsh net-define network.xm l 一部エラーチェックを実行する点を除きます。使用されるエディターは $VISUAL または $EDITOR 環境変数を使用し て指定でき、デフォルトは "vi" になります。ネットワークを編集するには、以下を実行します。 #v ir s h n e t - e d it n e t w o r k 15.23.7. 仮想ネ ットワークについての 情報の 取得 214 第 15 章 v i r s h を 使 用 し たゲス ト仮 想 マ シ ン の 管 理 このコマンドは、 netwo rk オブジェクトについての基本情報を返します。ネットワーク情報を得るには、以下を実行しま す。 # v ir s h n e t - in fo n e t w o r k 15.23.8. 仮想ネ ットワークについての 情報の 一覧表示 アクティブなネットワークの一覧を返します。- - a ll が指定されている場合、これには、定義済みであるもののアクティ ブではないネットワークも含まれます。- - in a c t iv e が指定される場合、アクティブではないネットワークのみが一覧 表示されます。さらに、返されたネットワークのフィルターは、永続的なネットワークを一覧表示するには - p e r s is t e n t を、一時的なネットワークを一覧表示するには - - t r a n s ie n t を、自動起動が有効なネットワークを 一覧表示するには - - a u t o s t a r t を使用し、さらに、自動起動が無効なネットワークを一覧表示するには - - n o a u t o s t a r t を使用して実行できます。 注意: 古いサーバーと通信する際、このコマンドには、固有の競合のある一連の API を使用することが強制されます。 ここで、プールはリストされないか、または一覧の収集中に呼び出し間の状態が変更される場合は複数回出現する可 能性があります。サーバーがこの問題を持つことがないように確認してください。 仮想ネットワークを一覧表示するには、以下を実行します。 # n e t - lis t [ - - in a c t iv e | - - a ll ] [ - - p e r s is t e n t ] [ < - - t r a n s ie n t > ] [ - autostart] [<--no-autostart>] 15.23.9. ネ ットワーク UUID か ら ネ ットワーク名へ の 変換 このコマンドは、ネットワーク UUID をネットワーク名に変換します。これを実行するには、以下を実行します。 # v ir s h n e t - n a m e n e t w o r k - U U ID 15.23.10 . 停止状態の (定義済み)ネ ットワークの 起動 このコマンドは、(以前に定義された) 非アクティブなネットワークを開始します。これを実行するには、以下を実行しま す。 # v ir s h n e t - s t a r t n e t w o r k 15.23.11. 停止状態の ネ ットワークの 設定の 定義解除 このコマンドは、非アクティブなネットワークの設定を定義解除します。これを実行するには、以下を実行します。 # n e t - u n d e fin e n e t w o r k 15.23.12. ネ ットワーク名か ら ネ ットワーク UUID へ の 変換 このコマンドは、ネットワーク名をネットワーク UUID に変換します。これを実行するには、以下を実行します。 # v ir s h n e t - u u id n e t w o r k - n a m e 15.23.13. 既存の ネ ットワーク定義ファイルの 更新 215 仮 想 化 管 理 ガイ ド このコマンドは、既存のネットワーク定義の所定のセクションを更新します。この更新にはネットワークの破棄および再 起動を必要とせず、ただちに有効になります。このコマンドは、"add-first"、"add-last"、"add" (add-last と同意)、 "delete"、または "mo dify" のいずれかになります。セクションは、""bridge"、"do main"、"ip"、"ip-dhcp-ho st"、"ipdhcp-range"、"fo rward"、"fo rward-interface"、"fo rward-pf"、"po rtgro up"、"dns-ho st"、"dns-txt"、または "dns-srv" のいずれかとなり、それぞれのセクション名は変更される要素につながる xml 要素階層の連結によって付 けられます。たとえば、"ip-dhcp-ho st" はネットワークの < ip > 要素内の < d h c p > 要素内に含まれる < h o s t > 要素を変更します。xml は変更されるタイプの詳細な XML 要素のテキスト (例: "<ho st mac="0 0 :11:22:33:4 4 :55’ ip=’192.0 .2.1’/>") または詳細な xml 要素を含むファイルの名前のいずれかにな ります。不明瞭な部分があれば、指定されるテキストの最初の文字を参照して解消されます。最初の文字が "<" の場 合は xml テキストであり、最初の文字が ">" ではない場合、それは使用される xml テキストが含まれるファイルの名 前になります。--parent-index オプションは、要求された要素が含まれるいくつかの親要素のいずれかを指定するた めに使用されます (0 ベース)。たとえば、dhcp < h o s t > 要素は、ネットワーク内の複数の < ip > 要素のいずれかに 含まれる可能性があります。parent-index が指定されない場合、「最も適した」< ip > 要素が選択されますが (通常 は < d h c p > 要素を含む唯一の要素)、 - - p a r e n t -index が指定される場合、< ip > の特定の例が修正されます。 - liv e が指定される場合、実行中のネットワークが影響を受けます。 - - c o n fig が指定される場合は、永続的なネッ トワークの次の起動が影響を受けます。 - - c u r r e n t が指定される場合、現在のネットワークの状態が影響を受け ます。 - - liv e と - - c o n fig フラグの両方を指定することができますが、--current は排他的です。フラグを指定しな いことは、 - - c u r r e n t を指定することと同じになります。 設定ファイルを更新するには、以下を実行します。 # v ir s h n e t - u p d a t e n e t w o r k c o m m a n d s e c t io n x m l [ - - p a r e n t - in d e x in d e x ] [ [ - liv e ] [ - - c o n fig ] | [ - - c u r r e n t ]] 216 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 第16章 仮想マシンマネージャー (virt -manager) を使ってゲストを管 理する このセクションでは、仮想マシンマネージャー (v ir t - m a n a g e r ) のウィンドウ、ダイアログボックス、GUI コントロール などについて説明していきます。 v ir t - m a n a g e r は、ホストシステムおよびリモートのホストシステム上のハイパーバイザー群やゲスト群をグラフィカ ルに表示させることができます。v ir t - m a n a g e r では次のような仮想化管理に関する作業を行うことができます。 ゲストの定義と作成 メモリーの割り当て 仮想 CPU の割り当て 動作性能の監視 ゲストの保存、復元、一時停止と開始、シャットダウンと起動 テキストコンソールとグラフィカルコンソールへのリンク ライブマイグレーションとオフラインマイグレーション 16.1. virt- manag e r を起動す る v ir t - m a n a g e r セッションを開始するには、 ア プリケ ーシ ョ ン メニューを開き シ ス テム ツール メニュー、 仮想マ シ ンマ ネ ージ ャー (v ir t - m a n a g e r ) の順で選択します。 v ir t - m a n a g e r のメインウィンドウが開きます。 図1 6 . 1 v ir t - m a n a g e r を起動す る または、以下のコマンドで示すように ssh を使ってリモートで v ir t - m a n a g e r を起動することもできます。 ssh -X host's address [rem otehost]# virt-m anager 217 仮 想 化 管 理 ガイ ド s s h を使った仮想マシンとホストの管理については、「SSH によるリモート管理」で詳しく説明しています。 16.2. 仮想マ シンマ ネ ージ ャーの メ インウィンドウ このメインウィンドウには、実行中のゲストとゲストに使用sれるリソースがすべて表示されます。ゲスト名をダブルクリッ クしてゲストの選択を行います。 図1 6 . 2 仮想マ シ ンマ ネ ージ ャーの メインウィンドウ 16.3. 仮想ハ ードウェアの 詳細ウィンドウ 仮想ハードウェアの詳細ウィンドウには、ゲストに設定されている仮想ハードウェアに関する情報が表示されます。仮想 ハードウェアのリソースの追加、削除、編集はこのウィンドウで行うことができます。ツールバー内にあるアイコンをクリッ クすると、仮想ハードウェアの詳細ウィンドウが表示されます。 218 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 3 仮想ハ ードウェ ア の 詳細ア イコン 上記に示すアイコンをクリックすると、仮想ハードウェアの詳細ウィンドウが表示されます。 219 仮 想 化 管 理 ガイ ド 図1 6 . 4 仮想ハ ードウェ ア の 詳細ウィンドウ 16.3.1. US B デバ イス をゲス ト仮想マ シンに割り当てる 注記 USB デバイスをゲスト仮想マシンに割り当てるためには、まずそれをホスト物理マシンにアタッチし、デバイス が機能することを確認する必要があります。ゲストが実行中の場合、シャットダウンしてからこれを実行する必 要があります。 手順1 6 . 1 Virt -M a n a g e r を使用し た US B デバ イス の 割り 当て 1. ゲスト仮想マシンの「仮想マシンの詳細」スクリーンを開きます。 2. ハードウェアを追加 をクリックします。 220 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 5 ハ ードウェ ア を追加ボタン 3. 新規の 仮想ハ ードウェ ア の 追加 ( Ad d n e w virt u a l h a rd wa re ) ポップアップから US B ホス ト デ バ イス ( US B Ho s t D e vice ) を選択し、一覧から割り当てるデバイスを選択して 完了 をクリックします。 221 仮 想 化 管 理 ガイ ド 図1 6 . 6 US B デバ イス の 追加 4 . ゲスト仮想マシンで USB デバイスを使用するには、まずゲスト仮想マシンを起動します。 16.4 . 仮想マ シンの グ ラフィカルコンソール このウィンドウには、ゲストのグラフィカルコンソールが表示されます。グラフィカルなフレームバッファーのエクスポート には複数の異なるプロトコルを使用することができます。 v ir t - m a n a g e r で対応しているのは VNC と S P ICE に なります。認証を求めるよう仮想マシンを設定している場合は、ディスプレイが表示される前に仮想マシンのグラフィカ ルコンソールによってパスワードの入力が求められます。 222 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 7 グ ラフ ィカ ル の コンソ ール ウィンドウ 注記 多くのセキュリティ専門家の間では VNC は安全ではないと考えられていますが、Red Hat Enterprise Linux での仮想化に VNC を使用する際の安全性を確保する変更がいくつか加えられています。ゲストマシン がリッスンするのはローカルホストのループバックアドレスのみになります (12 7 .0 .0 .1 )。 これにより、VNC 経由による仮想マシンおよび virt-manager にアクセスできるのはホスト上でシェルの特権を有するゲストの みになります。 virt-manager が他のパブリックネットワークインターフェースをリッスンするよう設定し、別の方 法を設定することもできますが推奨していません。 トラフィックを暗号化する SSH 経由でトンネル化をすることでリモートからの管理が可能になります。SSH で のトンネル化を行なわずに VNC へのリモートアクセスを設定することはできますが、安全上の理由から推奨 していません。遠隔からゲストの管理を行なう場合は、6 章ゲストのリモート管理 の説明にしたがってください。 TLS を使用すると、ゲストとホストのシステム管理にエンタープライズレベルの安全性を得ることができます。 223 仮 想 化 管 理 ガイ ド ローカルデスクトップでは、キーの組み合わせがゲストマシンに送信されないようにすることができます (Ctrl+Alt+F1 など)。キ ーを送信 のメニューオプションを使用するとキーの組み合わせを送信することができます。ゲストマシンの ウィンドウから、キ ーを送信 メニューをクリックして、送信するキーの組み合わせを選択します。また、このメニューでは スクリーンの出力をキャプチャすることもできます。 Red Hat Enterprise Linux では VNC の代替として SPICE が使用できます。 16.5. リモ ート接続を追加す る v ir t - m a n a g e r を使ってリモートシステムへの接続を設定する方法を説明します。 1. 新しい接続を作成するには、ファイル メニューを開き、接続を追加... メニューアイテムを選択します。 2. 接続を追加 のウィザードが表示されます。ハイパーバイザーを選択します。Red Hat Enterprise Linux 6 システムの場合は Q E M U / K V M を選択します。ローカルシステムの場合はローカルを選択するか、いずれか のリモート接続オプションを選択して 接続 をクリックします。 この例では、SSH 経由のリモートトンネルを使 用しています。 デフォルトのインストールで正常に動作する設定です。リモート接続の設定方法については、 6 章ゲストのリモート管理 を参照してください。 図1 6 . 8 接続の 追加 3. 選択したホストの ro o t パスワード入力が求めらるので入力を行います。 これでリモートホストが接続され、 v ir t - m a n a g e r のメインウィンドウに表示されるようになりました。 224 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 9 virt -ma n a g e r の メインウィンドウに表示され たリモ ート ホス ト 16.6. ゲス トの 詳細を表示す る 仮想マシンモニターを使用すると、システム上の仮想マシンの動作情報を表示させることができます。 仮想システムの詳細を表示するには、以下を実行します。 1. 仮想マシンマネージャーのメインウィンドウで表示させたい仮想マシンを強調表示します。 図1 6 . 1 0 表示す る仮想マ シ ンを選択す る 2. 仮想マシンマネージャーの 編集 メニューから 仮想マシンの詳細 を選択します。 225 仮 想 化 管 理 ガイ ド 図1 6 . 1 1 仮想マ シ ンの 詳細を表示す る 仮想マシンの詳細ウィンドウを開くとコンソールが表示される場合があります。コンソールが表示される場合に は、表示 をクリックしてから 詳細 を選択します。 デフォルトでは概要を示すウィンドウが開きます。このウィン ドウに戻るには、左側のナビゲーションペインで 概要 ( O v e r v ie w ) を選択します。 概要 ( O v e r v ie w ) のビューには、 そのゲストの構成情報の要約が表示されます。 226 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 1 2 ゲス ト 詳細の 概要を表示 3. 左側のナビゲーションペインから パフォーマンス ( P e r fo r m a n c e ) を選択します。 パフォーマンス ( P e r fo r m a n c e ) のビューでは、CPU やメモリー使用率などゲストのパフォーマンスに 関する要約が表示されます。 227 仮 想 化 管 理 ガイ ド 図1 6 . 1 3 ゲス ト の パ フ ォ ーマ ンス の 詳細を表示す る 4 . 左側のナビゲーションペインから プロセッサー ( P r o c e s s o r ) を選択します。プロセッサー ( P r o c e s s o r ) のビューでは、現在のプロセッサーの割り当てを表示させたり、変更を行ったりすることが できます。 228 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 1 4 プロ セッ サ ーの 割り 当て パ ネ ル 5. 左側のナビゲーションペインから メモリー ( M e m o r y ) を選択します。 メモリー ( M e m o r y ) のビュー では、 現在のメモリーの割り当てを表示させたり、変更を行ったりすることができます。 229 仮 想 化 管 理 ガイ ド 図1 6 . 1 5 メモ リーの 割り 当て を表示す る 6 . ナビゲーションペインには、その仮想マシンに接続されている各仮想ディスクが表示されます。仮想ディスクの 修正や削除を行う場合はその仮想ディスクをクリックします。 230 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 1 6 ディス ク の 構成を表示す る 7. ナビゲーションペインには、その仮想マシンに接続されている各仮想ネットワークインターフェースが表示され ます。仮想ネットワークインターフェースの修正や削除を行う場合はその仮想ネットワークインターフェースをク リックします。 231 仮 想 化 管 理 ガイ ド 図1 6 . 1 7 ネ ッ ト ワーク の 構成を表示す る 16.7. パ フォーマ ンス の 監視 パフォーマンスの監視設定は、 v ir t - m a n a g e r の設定ウィンドウで修正することができます。 パフォーマンスの監視を設定する 1. 編集 メニューから 設定 を選択します。 図1 6 . 1 8 ゲス ト の 設定を修正す る 設定 ウィンドウが表示されます。 2. 統計 のタブで、更新の間隔を秒単位で指定するか、または統計監視オプションを有効にします。 232 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 1 9 パ フ ォ ーマ ンス の 監視を設定す る 16.8 . ゲス トの CPU 使用率を表示す る システム上の全ゲストの CPU 使用率を表示するには、以下を実行します。 1. 表示 メニューから グラフ を選択し、ゲストの C P U 使用率 ( G u e s t C P U U s a g e ) のチェックボッ クスに印を付けます。 233 仮 想 化 管 理 ガイ ド 図1 6 . 2 0 ゲス ト の CP U 使用率の 統計値グ ラフ 化を有効にす る 2. 仮想マシンマネージャーがシステム上の全仮想マシンの CPU 使用率のグラフを表示するようになります。 図1 6 . 2 1 ゲス ト の CP U 使用率の グ ラフ 16.9. ホス トの CPU 使用率を表示す る システム上の全ホストの CPU 使用率を表示するには、以下を実行します。 1. 表示 メニューから グラフ を選択し、ホストの C P U 使用率 ( h o s t C P U U s a g e ) のチェックボック スに印を付けます。 234 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 2 2 ホス ト の CP U 使用率の 統計値グ ラフ 化を有効にす る 2. 仮想マシンマネージャーがシステム上のホストの CPU 使用率のグラフを表示するようになります。 図1 6 . 2 3 ホス ト の CP U 使用率の グ ラフ 16.10 . ディス ク I/ O を表示す る システム上の全仮想マシンのディスク I/O を表示するには、以下を実行します。 1. ディスク I/O の統計値収集の設定が有効になっているか確認します。編集 メニューから 設定 を選択しま す。統計 タブをクリックします。 2. ディスク I/ O のチェックボックスに印を付けます。 235 仮 想 化 管 理 ガイ ド 図1 6 . 2 4 ディス ク I/ O を有効にす る 3. ディスク I/O の表示を有効にするには、 表示 メニューから グラフ 、 ディスク I/ O のチェックボックスの 順で選択して印を付けます。 236 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 2 5 ディス ク I/ O を選択す る 4 . 仮想マシンマネージャーがシステム上の全仮想マシンのディスク I/O のグラフを表示するようになります。 図1 6 . 2 6 ディス ク I/ O を表示す る 16.11. ネ ットワ ーク I/ O を表示す る システム上の全仮想マシンのネットワーク I/O を表示するには、以下を実行します。 1. ネットワーク I/O の統計値収集の設定が有効になっているか確認します。編集 メニューから 設定 を選択し ます。統計 タブをクリックします。 2. ネットワーク I/ O のチェックボックスに印を付けます。 237 仮 想 化 管 理 ガイ ド 図1 6 . 2 7 ネ ッ ト ワーク I/ O を有効にす る 3. ネットワーク I/O の統計値を表示するには、表示 メニューから グラフ 、ネットワーク I/ O のチェック ボックスの順で選択して印を付けます。 238 第 16 章 仮 想 マ シ ン マ ネ ージ ャ ー ( v i r t - m a n a g e r ) を 使 っ て ゲス トを 管 理 す る 図1 6 . 2 8 ネ ッ ト ワーク I/ O を選択す る 4 . 仮想マシンマネージャーがシステム上の全仮想マシンのネットワーク I/O のグラフを表示するようになりま す。 239 仮 想 化 管 理 ガイ ド 図1 6 . 2 9 ネ ッ ト ワーク I/ O を表示す る 240 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る 第17章 オフラインツールでゲスト仮想マシンのディスクにアクセスする 17.1. はじめ に Red Hat Enterprise Linux 6 には、ホスト物理マシンのディスクや他のディスクイメージへのアクセス、編集、作成な どを行うことができるツールが複数同梱されています。こうしたツールでは次のような使い方ができます。 ホスト物理マシンのディスクにあるファイルを表示したり、これにファイルをダウンロードしたりします。 ホスト物理マシンのディスクでファイルを編集したり、アップロードしたりします。 ホスト物理マシンの設定を読み込んだり、書き込みを行ったりします。 Windo ws ホスト物理マシンの Windo ws Registry を読み込んだり、書き込みを行ったりします。 ファイル、ディレクトリー、ファイルシステム、パーティション、論理ボリュームその他を含んでいる新規のディスクイ メージの準備を行います。 起動に失敗したホスト物理マシン、起動設定に変更を必要とするホスト物理マシンなどのレスキューと修復を行い ます。 ホスト物理マシンのディスク使用量を監視します。 その企業のセキュリティー標準に準拠しているかどうかなど、ホスト物理マシンのコンプライアンスを監査します。 テンプレートからクローンを作成し、テンプレートの修正を行うことにより、複数のホスト物理マシンの導入を行いま す。 CD、DVD ISO、およびフロッピーディスクのイメージの読み込みを行います。 警告 実行中の仮想マシンに接続しているホスト物理マシンまたはディスクイメージに書き込みを行う場合は、これら のツールを 絶対に使用し ないでください 。また、こうしたディスクイメージは書き込みモードでは開かないよう にしてください。これは、ゲスト仮想マシンのディスクが破損する原因となります。ツールはこれが実行されない ようにしますが、万全ではありません。ゲスト仮想マシンが実行中の可能性が少しでもある場合にはツールを使 用しないか、または最低でもツールの使用は 常に読み取り 専用モ ード で行うことを強くお勧めします。 17.2. 用語について ここでは本章で使用されている用語について説明します。 lib g u e s t fs ( G UE S T File S ys t e m L IB ra ry) は基礎となる C ライブラリーです。ディスクイメージを開く、 ファイルの読み込みや書き込みを行う場合などに基本的な機能を提供します。この API に対して C プログラムを 直接記述することができますが、かなり低いレベルになります。 g u e s t fis h ( G UE S T File s ys t e m In t e ra ct ive S He ll) はインテラクティブなシェルです。コマンドライン またはシェルスクリプトで使用することができます。libguestfs API のすべての機能を公開します。 libguestfs の上に各種の virt ツールがビルドされています。コマンドラインから単一の作業を行うことができる ツールになります。ツールには virt -d f 、virt -re s cu e 、virt -re s iz e 、virt -e d it などがあります。 241 仮 想 化 管 理 ガイ ド h ive x と Au g e a s は、それぞれ Windo ws Registry と Linux 設定ファイルを編集するためのライブラリーにな ります。これらは libguestfs とは別のライブラリーですが、libguestfs の値の多くはこれらのツールの組み合わ せで構成されます。 g u e s t mo u n t は、libguestfs と FUSE をつなぐインターフェースになります。主にホスト物理マシン上のディス クイメージからファイルシステムをマウントするために使用されます。この機能は必須ではありませんが、便利な機 能になります。 17.3. インス トール libguestfs、guestfish、libguestfs ツール、guestmo unt、および Windo ws ゲスト仮想マシン向けサポートをイン ストールするには、RHEL V2WIN チャンネルをサブスクライブします。Red Hat Web サイトに行き、次のコマンドを実 行します。 # yum install libguestfs guestfish libguestfs-tools libguestfs-m ount libguestfswinsupport 言語バインディングなどの libguestfs 関連のパッケージをすべてインストールする場合は、次のコマンドを実行しま す。 # yum install '*guestf*' 17.4 . g ue stfish の シェル g u e s t fis h はインテラクティブなシェルで、コマンドラインまたはシェルスクリプトからゲスト仮想マシンのファイルシ ステムにアクセスするために使用することができます。libguestfs API の機能はすべてシェルで利用することができま す。 仮想マシンのディスクイメージを表示または編集する場合は、まず次のコマンドを実行します。以下のパスは必要なディ スクイメージのパスに置き換えてください。 guestfish --ro -a /path/to/disk/im age --ro は、ディスクイメージを読み取り専用で開くという意味です。このモードは書き込みのアクセスを許可しないため、 常に安全なモードになります。ゲスト仮想マシンが実行中ではないことが 確実にわ か っ て いる 場合か、またはライブ ゲスト仮想マシンにディスクイメージが接続されていない場合以外は、このオプションは省略しないでください。ライブゲ スト仮想マシンの編集には lib g u e s t v ir t u a l m a c h in e fs は使用できません。無理に編集を行おうとすると ディスクが確実に破損し、元に戻せなくなります。 / p a t h / t o / d is k / ima g e は、そのディスクへのパスになります。ファイル、ホスト物理マシンの論理ボリューム (/dev/VG/LV など)、ホスト物理マシンのデバイス (/dev/cdro m)、または SAN LUN (/dev/sdf3) のいずれかに なります。 注記 libguestfs と guestfish には ro o t の権限は必要ありません。アクセスしているディスクイメージの読み込み や書き込みに ro o t を必要とする場合にのみ ro o t での実行が必要になります。 guestfish をインタラクティブに起動すると、次のようなプロンプトが表示されます。 guestfish --ro -a /path/to/disk/im age 242 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る Welcom e to guestfish, the libguestfs filesystem interactive shell for editing virtual m achine filesystem s. Type: 'help' for help on com m ands 'm an' to read the m anual 'quit' to quit the shell ><fs> プロンプトに応じて ru n と入力してライブラリーを開始し、ディスクイメージを接続します。これを初めて行う場合には 30 秒ほど時間がかかる場合がありますが、それ以降からの起動は大幅に速くなります。 注記 libguestfs は KVM (使用可能な場合) などハードウェアの仮想化加速機能を使ってこのプロセスを高速化 します。 ru n コマンドを入力すると、次のセクションで説明されているような他のコマンドを使用できるようになります。 17.4 .1. g ue s tfis h でファイルシス テム を表示す る 1 7 .4 .1 .1 . 手作業で一覧表示す る lis t - file s y s t e m s コマンドを使って libguestfs によって検出されるファイルシステムを一覧表示します。以下の 出力では Red Hat Enterprise Linux 4 のディスクイメージを表示しています。 ><fs> run ><fs> list-filesystem s /dev/vda1: ext3 /dev/VolG roup00/LogVol00: ext3 /dev/VolG roup00/LogVol01: swap 以下の出力では Windo ws のディスクイメージを表示しています。 ><fs> run ><fs> list-filesystem s /dev/vda1: ntfs /dev/vda2: ntfs 他にも便利なコマンドとして lis t - d e v ic e s 、lis t - p a r t it io n s 、lv s 、p v s 、v fs - t y p e 、および file などが あります。以下の出力のように h e lp コマ ンド を入力すると、各コマンドの詳細と help を得ることができます。 ><fs> help vfs-type NAM E vfs-type - get the Linux VFS type corresponding to a m ounted device S YNO PS IS vfs-type device DES CRIPTIO N This com m and gets the filesystem type corresponding to the filesystem on 243 仮 想 化 管 理 ガイ ド "device". For m ost filesystem s, the result is the nam e of the Linux VFS m odule which would be used to m ount this filesystem if you m ounted it without specifying the filesystem type. For exam ple a string such as "ext3" or "ntfs". ファイルシステムの実際の内容を表示する場合はまずマウントする必要があります。この例では、前述の出力にある Windo ws パーティションの 1 つを使用しています (/ d e v / v d a 2 )。このパーティションは C:\ ドライブに対応するも のとして認識されています。 ><fs> m ount-ro ><fs> ll / total 18 34753 drwxrwxrwx 1 drwxr-xr-x 21 lrwxrwxrwx 2 drwxrwxrwx 1 drwxrwxrwx 1 drwxrwxrwx 1 /dev/vda2 / root root root root root root root root root root root root 4096 4096 60 4096 4096 16 38 4 Nov Nov Jul Nov S ep S ep 1 16 14 15 19 19 11:40 21:45 2009 18 :00 10:34 10:34 . .. Docum ents and S ettings Program Files Users Windows ファイルやディレクトリーを表示してダウンロードする場合は、ls 、ll 、c a t 、m o r e 、d o w n lo a d 、t a r - o u t などの guestfish コマンドを使用することができます。 注記 このシェルには現在の作業ディレクトリーという概念がありません。普通のシェルとは異なり、たとえば c d な どのコマンドを使ったディレクトリー間の移動ができません。パスはすべてスラッシュ (/ ) を先頭に付けた完全 修飾パスにしなければなりません。T a b キーを使用してパスを補完することができます。 guestfish シェルを終了するには、e x it と入力するか、または C t r l+d を押します。 1 7 .4 .1 .2 . g ue s tfis h による検出の 使用 手作業でファイルシステムを表示させ、マウントする代わりに、guestfish 自体にイメージを検出させて、そのファイルシ ステムをゲスト仮想マシンでのマウントと同様にマウントさせます。これを実行するには、コマンドラインに -i オプション を追加します。 guestfish --ro -a /path/to/disk/im age -i Welcom e to guestfish, the libguestfs filesystem interactive shell for editing virtual m achine filesystem s. Type: 'help' for help on com m ands 'm an' to read the m anual 'quit' to quit the shell O perating system : Red Hat Enterprise Linux AS release 4 (Nahant Update 8 ) /dev/VolG roup00/LogVol00 m ounted on / /dev/vda1 m ounted on /boot ><fs> ll / total 210 244 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る drwxr-xr-x. 24 root root 4096 drwxr-xr-x 21 root root 4096 drwxr-xr-x. 2 root root 4096 drwxr-xr-x. 4 root root 1024 drwxr-xr-x. 4 root root 4096 drwxr-xr-x. 8 6 root root 1228 8 [etc] O ct 28 09:09 . Nov 17 15:10 .. O ct 27 22:37 bin O ct 27 21:52 boot O ct 27 21:21 dev O ct 28 09:09 etc guestfish に検出とマウントを行わせるには libguestfs バックエンドを起動させる必要があるため、- i オプションを 使用する場合は r u n コマンドは必要ありません。- i オプションは一般的な Linux や Windo ws のゲスト仮想マシン の多くで正常に動作します。 1 7 .4 .1 .3 . ゲス ト 仮想マ シ ンの 名前でゲス ト 仮想マ シ ンにアク セス す る libvirt が認識できる名前を指定すると、コマンドラインからゲスト仮想マシンにアクセスすることができます (つま り、v ir s h lis t - - a ll で表示される名前)。ゲスト仮想マシンの名前でそのゲスト仮想マシンにアクセスするには - d オプションを使用します。- i オプションは付けても付けなくても構いません。 guestfish --ro -d G uestNam e -i 17.4 .2. g ue s tfis h を使ってファイルを編集す る ファイルの変更、ディレクトリーの作成、またはゲスト仮想マシンへの他の変更を加えるなどの場合には、このセクショ ンの先頭にある「ゲスト仮想マシンをシャットダウンしてください (yo ur guest virtual machine must be shut do wn)」という警告にまず注意してください。guestfish で実行中のディスクに編集や変更を加えたりすると、ディス ク の 破損を招きます 。本セクションでは、/ b o o t / g r u b / g r u b .c o n f ファイルの編集例を示します。ゲスト仮想マシ ンを確実にシャットダウンしたら、以下のようなコマンドを使って - - r o フラグを省略し、書き込み権限を取得します。 guestfish -d RHEL3 -i Welcom e to guestfish, the libguestfs filesystem interactive shell for editing virtual m achine filesystem s. Type: 'help' for help on com m ands 'm an' to read the m anual 'quit' to quit the shell O perating system : Red Hat Enterprise Linux AS release 3 (Taroon Update 9) /dev/vda2 m ounted on / /dev/vda1 m ounted on /boot ><fs> edit /boot/grub/grub.conf ファイルを編集するコマンドには e d it 、v i 、および e m a c s などがあります。ファイルやディレクトリーを作成するコマン ドには w r it e 、m k d ir 、u p lo a d 、および t a r - in など多数あります。 17.4 .3. g ue s tfis h を使ったその 他の 動作 ファイルシステムのフォーマット化、パーティションの作成、LVM 論理ボリュームの作成およびサイズ変更などその他多 くの動作が m k fs 、p a r t - a d d 、lv r e s iz e 、lv c r e a t e 、v g c r e a t e 、p v c r e a t e などのコマンドを使って行うこ とができます。 17.4 .4 . g ue s tfis h を使ってシェルス クリ プトを作成す る 245 仮 想 化 管 理 ガイ ド インタラクティブな guestfish の使い方に慣れたら、必要に応じてシェルスクリプトを作成すると便利です。以下に新 しい MOTD (その日のメッセージ) をゲストに追加する簡単なシェルスクリプトを示します。 #!/bin/bash set -e guestnam e="$ 1" guestfish -d "$ guestnam e" -i <<'EO F' write /etc/m otd "Welcom e to Acm e Incorporated." chm od 06 44 /etc/m otd EO F 17.4 .5. Aug e as と libg ue s tfs を使ってス クリ プトを作成す る libguestfs と Augeas を組み合わせると、Linux ゲスト仮想マシンの設定を操作するスクリプトを作成する場合に便 利です。たとえば、以下のスクリプトでは Augeas を使ってゲスト仮想マシンのキーボード設定を解析し、レイアウトを 出力します。以下の例は Red Hat Enterprise Linux で実行するゲスト仮想マシンでのみ機能することに注意してく ださい。 #!/bin/bash set -e guestnam e="$ 1" guestfish -d "$ 1" -i --ro <<'EO F' aug-init / 0 aug-get /files/etc/sysconfig/keyboard/LAYO UT EO F Augeas は設定ファイルの修正に使用することもできます。キーボードのレイアウトを 変更 できるよう上記のスクリプ トを修正することができます。 #!/bin/bash set -e guestnam e="$ 1" guestfish -d "$ 1" -i <<'EO F' aug-init / 0 aug-set /files/etc/sysconfig/keyboard/LAYO UT '"gb"' aug-save EO F この 2 つのスクリプトでは異なる点が 3 カ所あります。 1. 2 番目のスクリプトには - - r o オプションがありません。ゲスト仮想マシンに書き込み権限を与えるためで す。 2. a u g - g e t コマンドが a u g - s e t コマンドに変わっています。値を新たに読み取りに行くのではなく、それを修 正するためです。新しい値は "g b " になります (引用符を含む)。 3. Augeas によって変更をディスクに書き込むよう a u g - s a v e コマンドが使用されています。 246 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る 注記 Augeas の詳細については、Web サイト http://augeas.net をご覧ください。 guestfish では本ガイドでは取り上げきれないほどの多くのことができます。たとえば、ディスクイメージをゼロから作 成することができます。 guestfish -N fs または、ディスクイメージからディレクトリー全体をコピーします。 ><fs> copy-out /hom e /tm p/hom e 詳細については guestfish(1) の man ページをご覧ください。 17.5. その 他の コマ ンド このセクションでは、ゲスト仮想マシンのディスクイメージの表示や編集を行う際に guestfish を使うよりシンプルな ツールについて説明します。 v ir t - c a t は guestfish の d o w n lo a d コマンドと同じです。単一ファイルをダウンロードしてゲスト仮想マシン に表示します。たとえば、以下のようになります。 # virt-cat RHEL3 /etc/ntp.conf | grep ^server server 127.127.1.0 # local clock v ir t - e d it は guestfish の e d it コマンドに似ています。ゲスト仮想マシン内の単一ファイルをインタラクティ ブに編集するために使用できます。たとえば、起動しない Linux ベースのゲスト仮想マシンの g r u b .c o n f ファイ ルを編集しなければならないとします。 # virt-edit LinuxG uest /boot/grub/grub.conf v ir t - e d it には、 単一ファイルに一方的に直接の変更を加えることができる別モードもあります。この非インタラ クティブなモードで編集を行う場合は -e オプションを使用します。たとえば、このコマンドでは Linux ゲスト仮想マ シンの ro o t パスワードをパスワードなしに変更します。 # virt-edit LinuxG uest /etc/passwd -e 's/^root:.*?:/root::/' v ir t - ls は guestfish の ls 、ll 、fin d の各コマンドと同様です。単一のディレクトリーまたは複数のディレクト リーを (再帰的に) 一覧表示するために使用されます。たとえば、以下のコマンドでは Linux ゲスト仮想マシンの /ho me の下にあるファイルとディレクトリーを再帰的に一覧表示します。 # virt-ls -R LinuxG uest /hom e/ | less 17.6. virt- re scue : レス キューシェル 17.6.1. はじめ に 247 仮 想 化 管 理 ガイ ド このセクションでは、仮想マシンのレスキュー CD のようなものと捉えることができる v ir t - r e s c u e について説明 します。レスキューシェルでゲスト仮想マシンを起動するため、エラー修正などのメンテナンスを行ってゲスト仮想マシ ンを修復することができます。 virt-rescue と guestfish には機能的に重複している部分があります。両者の使い方の違いを区別しておくことは大 切です。virt-rescue は、普通の Linux ファイルシステムツールを使ってインタラクティブに特別な変更を行う場合に使 用します。特に問題が発生したゲスト仮想マシンを修復する場合などに適しています。virt-rescue をスクリプト化する ことはできません。 対照的に、guestfish は型通りのコマンド一式 (libguestfs API) を使って、スクリプト化によって構造化した変更を 行う場合に便利です。また、guestfish はインタラクティブに使用することもできます。 17.6.2. virt- re s cue を実行す る ゲスト仮想マシンで v ir t - r e s c u e を使用する前に、そのゲスト仮想マシンが実行されていないことを確認してくだ さい。ゲスト仮想マシンが実行しているとディスクを破損させることになります。ゲスト仮想マシンがライブでないことを 確認してから、以下を入力します。 virt-rescue G uestNam e (上記の GuestName には libvirt が認識できるゲスト名を入力します) または、 virt-rescue /path/to/disk/im age (上記のパスは任意のファイル、論理ボリューム、LUN などいずれでも構いません) ゲスト仮想マシンのディスクが含ま れます。 virt-rescue によってレスキュー仮想マシンが起動するため、その出力スクロールが表示されます。最終的には、以下 が表示されます。 Welcom e to virt-rescue, the libguestfs rescue shell. Note: The contents of / are the rescue appliance. You have to m ount the guest virtual m achine's partitions under /sysroot before you can exam ine them . bash: cannot set term inal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ><rescue> シェルプロンプトはここでは普通のバッシュシェルになるため、使用できる Red Hat Enterprise Linux コマンド数が 少なくなります。たとえば、以下を入力できます。 ><rescue> fdisk -l /dev/vda 上記のコマンドによってディスクパーティションが一覧表示されます。ファイルシステムをマウントする場合 は、/ s y s r o o t の下にマウントすることをお勧めします。この空ディレクトリーは、レスキューマシン内にあるユーザーに よって何がマウントされても構わないディレクトリーになります。/ の下にあるファイル群はレスキュー仮想マシン自体 のファイルになるため注意してください。 ><rescue> m ount /dev/vda1 /sysroot/ EXT4-fs (vda1): m ounted filesystem with ordered data m ode. O pts: (null) ><rescue> ls -l /sysroot/grub/ total 324 -rw-r--r--. 1 root root 6 3 S ep 16 18 :14 device.m ap 248 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る -rw-r--r--. -rw-r--r--. -rw-r--r--. -rw-------. [...] 1 1 1 1 root root root root root root root root 13200 12512 11744 1503 S ep S ep S ep O ct 16 16 16 15 18 :14 18 :14 18 :14 11:19 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 grub.conf ゲスト仮想マシンの修復が完了したら、e x it を入力するか、または C t r l+d でシェルを終了します。 v ir t - r e s c u e にはコマンドラインのオプションが多数あります。最もよく使用されるオプションを示します。 --ro : ゲスト仮想マシン上で読み取り専用モードで動作します。変更は保存されません。ゲスト仮想マシンを実験 的に使用してみる場合にこのモードを使用します。シェルを終了すると、変更はすべて破棄されます。 --n e t wo rk : レスキューシェルからのネットワークアクセスを可能にします。RPM や他のファイルをゲスト仮想マ シンにダウンロードする場合など必要に応じて使用します。 17.7. virt- df: ディス クの 使用量を監視す る 17.7.1. はじめ に ここでは、ディスクイメージやゲスト仮想マシンのファイルシステム使用量を表示する v ir t - d f について説明します。 Linux d f コマンドに似ていますが、これは仮想マシン用になります。 17.7.2. virt- df を実行す る ディスクイメージ内にあるすべてのファイルシステムの使用量を表示する場合は、以下を入力します。 # virt-df /dev/vg_guests/RHEL6 Filesystem 1K-blocks RHEL6 :/dev/sda1 10108 6 RHEL6 :/dev/VolG roup00/LogVol00 71278 6 4 Used Available Use% 10233 8 56 34 11% 2272744 4493036 32% (/ d e v / v g _ g u e s t s / R H E L 6 は Red Hat Enterprise Linux 6 ゲスト仮想マシンのディスクイメージになります。 上記の例では、パスはこのディスクイメージがあるホスト物理マシンの論理ボリュームになります。) v ir t - d f を単体で使用して全ゲスト仮想マシンの情報を一覧表示させることもできます (つまり libvirt が認識でき る全ゲスト仮想マシン)。v ir t - d f コマンドは、- h (読みやすい形式) や - i (ブロックの代わりに ino de を表示) など のような標準 d f と同じオプションのいくつかを認識します。 v ir t - d f は Windo ws ゲスト仮想マシンでも動作します。 # virt-df -h Filesystem S ize Used Available Use% F14x6 4:/dev/sda1 48 4.2M 6 6 .3M 392.9M 14% F14x6 4:/dev/vg_f14x6 4/lv_root 7.4G 3.0G 4.4G 41% RHEL6 brewx6 4:/dev/sda1 48 4.2M 52.6 M 406 .6 M 11% RHEL6 brewx6 4:/dev/vg_rhel6 brewx6 4/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 % 249 仮 想 化 管 理 ガイ ド 注記 v ir t - d f が必要とするのは読み取り専用のアクセス権のみですので、ライブのゲスト仮想マシン上でこれを 安全に使用することができます。ただし、上記の数値は、ゲスト仮想マシン内で d f コマンドを実行した場合の 数値とは全く同一になると期待することはできません。ディスク上にあるものは、ライブゲスト仮想マシンの状態 との同期に若干のずれがあります。しかし、分析や監視を行なう上で問題となるほどの違いではないでしょう。 virt-df は、統計値をモニタリングツールやデータベースなどに統合する目的で設計されています。これにより、システム 管理者はディスク使用量の傾向に関するレポートを生成し、ゲスト仮想マシンがディスク領域を使いきってしまいそうな 場合には警報を発することができるようになります。これには、- - c s v オプションを使ってマシンが読み取り可能なコ ンマで区切った値 (CSV - Co mma-Separated-Values) の出力を生成する必要があります。CSV 出力はほとんど のデータベース、表計算ソフトウェア、その他各種ツール、およびプログラミング言語などで認識することができます。 生の CSV を以下に示します。 # virt-df --csv WindowsG uest Virtual M achine,Filesystem ,1K-blocks,Used,Available,Use% Win7x32,/dev/sda1,102396 ,24712,776 8 4,24.1% Win7x32,/dev/sda2,208 6 6 940,778 6 6 52,1308 028 8 ,37.3% 傾向についての情報を生成したり、警報を発するための出力の処理方法などについての詳細は次の URL をご覧くだ さい ( http://virt-to o ls.o rg/learning/advanced-virt-df/)。 17.8 . virt- re siz e : オフラインの ゲス ト仮想マ シンの サイズを変更す る 17.8.1. はじめ に このセクションでは、ゲスト仮想マシンのサイズを拡張したり縮小したりするツール v ir t - r e s iz e について説明しま す。このツールはオフラインの (シャットダウンされている) ゲスト仮想マシンの場合にのみ動作します。ゲスト仮想マシ ンのイメージをコピーしてオリジナルのディスクイメージはそのまま残します。これは、オリジナルのイメージをバックアッ プとして使用できるため、理想的なツールとなりますが、ディスク領域の 2 倍の容量が必要になります。 17.8.2. ディス クイメージ の 拡張 このセクションでは、ディスクイメージの簡単な拡張方法について説明します。 1. サイズ変更するディスクイメージの場所を確認します。libvirt ゲスト仮想マシンなら v ir s h d u m p x m l G u e s t N a m e コマンドを使用できます。 2. ゲスト仮想マシンをどのように拡張するか決定します。以下の出力にあるように、ゲスト仮想マシンのディスク で v ir t - d f - h と v ir t - lis t - p a r t it io n s - lh を実行します。 # virt-df -h /dev/vg_guests/RHEL6 Filesystem S ize RHEL6 :/dev/sda1 98 .7M RHEL6 :/dev/VolG roup00/LogVol00 6 .8 G Used 10.0M 2.2G # virt-list-partitions -lh /dev/vg_guests/RHEL6 /dev/sda1 ext3 101.9M /dev/sda2 pv 7.9G ここでは、以下を実行する方法を示します。 250 Available Use% 8 3.6 M 11% 4.3G 32% 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る 1 番目の (bo o t) パーティションを約 10 0 MB から 50 0 MB に拡大します。 ディスクの合計サイズを 8 GB から 16 GB に拡大します。 2 番目のパーティションを拡大して残りの領域すべてを埋めます。 / d e v / V o lG r o u p 0 0 / L o g V o l0 0 を拡大して 2 番目のパーティションの新領域を埋めます。 1. ゲスト仮想マシンがシャットダウンしていることを確認します。 2. バックアップとしてのオリジナルディスクの名前を変更します。名前の変更方法については、オリジナルディス クのホスト物理マシンのストレージ環境によって異なります。ファイルとして格納されている場合は m v コマン ドを使用します。論理ボリュームの場合は (例で示すように) lv r e n a m e を使用します。 # lvrenam e /dev/vg_guests/RHEL6 /dev/vg_guests/RHEL6 .backup 3. 新規ディスクを作成します。この例では、合計ディスクサイズを 16 GB に拡大することが要件になっています。 ここでは論理ボリュームを使用しているので、以下のコマンドが使用されます。 # lvcreate -L 16 G -n RHEL6 /dev/vg_guests Logical volum e "RHEL6 " created 4 . 上記の要件をコマンドで表すと以下のようになります。 # virt-resize \ /dev/vg_guests/RHEL6 .backup /dev/vg_guests/RHEL6 \ --resize /dev/sda1=500M \ --expand /dev/sda2 \ --LV-expand /dev/VolG roup00/LogVol00 1 番目と 2 番目の引数は入力ディスクと出力ディスクになります。- - r e s iz e / d e v / s d a 1= 5 0 0 M は 1 番目のパーティションを 50 0 MB にサイズ変更します。- - e x p a n d / d e v / s d a 2 は 2 番目のパーティショ ンを拡大し、残りの領域すべてを埋めます。- - L V - e x p a n d / d e v / V o lG r o u p 0 0 / L o g V o l0 0 はゲスト 仮想マシンの論理ボリュームを拡張し、2 番目のパーティションの追加領域を埋めます。 v ir t - r e s iz e では、その出力で何が行われているかを表示します。 S um m ary of changes: /dev/sda1: partition will be resized from 101.9M to 500.0M /dev/sda1: content will be expanded using the 'resize2fs' m ethod /dev/sda2: partition will be resized from 7.9G to 15.5G /dev/sda2: content will be expanded using the 'pvresize' m ethod /dev/VolG roup00/LogVol00: LV will be expanded to m axim um size /dev/VolG roup00/LogVol00: content will be expanded using the 'resize2fs' m ethod Copying /dev/sda1 ... [#####################################################] Copying /dev/sda2 ... [#####################################################] Expanding /dev/sda1 using the 'resize2fs' m ethod Expanding /dev/sda2 using the 'pvresize' m ethod Expanding /dev/VolG roup00/LogVol00 using the 'resize2fs' m ethod 5. 仮想マシンを起動してみます。正しく起動したら (全体を十分に確認した後)、バックアップのディスクを削除し ます。起動に失敗してしまう場合は、仮想マシンをシャットダウンして新しいディスクを削除し、バックアップの ディスク名を元の名前に戻します。 251 仮 想 化 管 理 ガイ ド 6 . 変更後のサイズを表示するには、v ir t - d f または v ir t - lis t - p a r t it io n s のいずれかまたは両方を 使用します。 # virt-df -h /dev/vg_pin/RHEL6 Filesystem S ize RHEL6 :/dev/sda1 48 4.4M RHEL6 :/dev/VolG roup00/LogVol00 14.3G Used 10.8 M 2.2G Available Use% 448 .6 M 3% 11.4G 16 % ゲスト仮想マシンのサイズ変更機能は精密とは言えないため、v ir t - r e s iz e が失敗する場合は virt-resize(1) の man ページにある数多くのヒントを参考にしてください。旧バージョンの Red Hat Enterprise Linux ゲスト仮想マ シンなどの場合には、GRUB に関するヒントにとくに注目する必要があるかもしれません。 17.9. virt- inspe ctor: ゲス ト仮想マ シンを検査す る 17.9.1. はじめ に v ir t - in s p e c t o r は、ディスクイメージに含まれているオペレーティングシステムを判別するためにディスクイメージ の検査を行うツールです。 注記 Red Hat Enterprise Linux 6 .2 には 2 種類の virt-inspecto r が同梱されています。1 つ目は v ir t in s p e c t o r で、これは元のプログラムであり Red Hat Enteprise Linux 6 .0 に同梱されていますが、アッ プストリームでは廃止予定になっています。2 つ目は v ir t - in s p e c t o r 2 はアップストリームの新しい v ir t - in s p e c t o r プログラムと同じものです。 17.9.2. インス トール virt-inspecto r とその関連ドキュメントをインストールするには次のコマンドを入力します。 # yum install libguestfs-tools libguestfs-devel Windo ws のゲスト仮想マシンを処理する場合は、 libguestfs-winsuppo rt もインストールする必要があります。詳 細は、「インストール」 を参照してください。XML の出力例や出力用の Relax-NG スキーマなどに関するドキュメント は / u s r / s h a r e / d o c / lib g u e s t fs - d e v e l- * / にインストールされます (「*」は libguestfs のバージョン番号 に置き換わります)。 17.9.3. virt- ins pe ctor を実行す る v ir t - in s p e c t o r は、以下の例のようにどのディスクイメージや libvirt ゲスト仮想マシンに対しても実行すること ができます。 virt-inspector --xm l disk.im g > report.xm l または、次のように実行することもできます。 virt-inspector --xm l G uestNam e > report.xm l 結果として XML レポート (r e p o r t .x m l ) が生成されます。以下のように、通常は <o peratingsystem> 要素を 1 つだけ持つトップレベルの <o peratingsytems> 要素が XML ファイルの主要なコンポーネントになります。 252 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る <operatingsystem s> <operatingsystem > <!-- the type of operating system and Linux distribution --> <nam e>linux</nam e> <distro>rhel</distro> <!-- the nam e, version and architecture --> <product_nam e>Red Hat Enterprise Linux S erver release 6 .4 </product_nam e> <m ajor_version>6 </m ajor_version> <m inor_version>4</m inor_version> <package_form at>rpm </package_form at> <package_m anagem ent>yum </package_m anagem ent> <root>/dev/VolG roup/lv_root</root> <!-- how the filesystem s would be m ounted when live --> <m ountpoints> <m ountpoint dev="/dev/VolG roup/lv_root">/</m ountpoint> <m ountpoint dev="/dev/sda1">/boot</m ountpoint> <m ountpoint dev="/dev/VolG roup/lv_swap">swap</m ountpoint> </m ountpoints> < !-- filesystem s--> <filesystem dev="/dev/VolG roup/lv_root"> <label></label> <uuid>b24d916 1-56 13-4ab8 -8 6 49-f27a8 a8 06 8 d3</uuid> <type>ext4</type> <content>linux-root</content> <spec>/dev/m apper/VolG roup-lv_root</spec> </filesystem > <filesystem dev="/dev/VolG roup/lv_swap"> <type>swap</type> <spec>/dev/m apper/VolG roup-lv_swap</spec> </filesystem > <!-- packages installed --> <applications> <application> <nam e>firefox</nam e> <version>3.5.5</version> <release>1.fc12</release> </application> </applications> </operatingsystem > </operatingsystem s> このようなレポートの処理は W3C 標準 XPath クエリーで行うのが最適です。Red Hat Enterprise Linux 6 には 単純なインスタンスに使用できるコマンドラインプログラム (x p a t h ) が同梱されています。ただし、長期にわたって高 度な使い方をする場合は、使い慣れているプログラミング言語と共に XPath ライブラリーを使用することを考慮してく ださい。 たとえば、次のような XPath クエリーを使ってすべてのファイルシステムデバイスを一覧表示できます。 virt-inspector --xm l G uestNam e | xpath //filesystem /@ dev Found 3 nodes: -- NO DE -dev="/dev/sda1" 253 仮 想 化 管 理 ガイ ド -- NO DE -dev="/dev/vg_f12x6 4/lv_root" -- NO DE -dev="/dev/vg_f12x6 4/lv_swap" または、インストールしているすべてのアプリケーション名を一覧表示するには次のように入力します。 virt-inspector --xm l G uestNam e | xpath //application/nam e [...long list...] 17.10 . virt- win- re g : Windows レジ ス トリーを読み込み、 編集す る 17.10 .1. はじめ に v ir t - w in - r e g は、Windo ws ゲスト仮想マシンのレジストリーを操作するツールです。これは、レジストリーのキー を読み込むために使用することができます。また、レジストリーに変更を加えるために使用することもできます。ただし、 ライブのゲスト仮想マシンまたは実行中のゲスト仮想マシンに対しては 絶対に 使用しないでください。ディスクの破 損を招きます。 17.10 .2. インス トール v ir t - w in - r e g を使用する場合は、以下を実行する必要があります。 # yum install libguestfs-tools libguestfs-winsupport 17.10 .3. virt- w in- re g の 使い方 レジストリのキーを読み込む場合は、ゲスト仮想マシン (またはそのディスクイメージ) の名前とレジストリキーの名前を 指定します。レジストリキー名は一重引用符で囲んでください。 # virt-win-reg WindowsG uest \ 'HKEY_LO CAL_M ACHINE\S oftware\M icrosoft\Windows\CurrentVersion\Uninstall' \ | less 出力は、Windo ws の .R E G ファイルで使用される標準のテキストベース形式になります。 注記 この形式は文字列に対して移植性のあるエンコード方式を適切に定義しないため、文字列に Hex-quo ting が使用されます。.R E G ファイルをあるマシンから別のマシンに移す場合にその再現性を確保できるのはこの 方法だけです。 v ir t - w in - r e g の出力を次の簡単な Perl スクリプトにパイプすると Hex-quo ting された文字列を出力さ せることができるようになります。 perl -M Encode -pe's?hex\((\d+)\):(\S +)? $ t=$ 1;$ _=$ 2;s,\,,,g;"str($ t):\"".decode(utf16 le=>pack("H*",$ _))."\""?eg' 254 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る オフラインのゲスト仮想マシンの Windo ws レジストリーへの変更をマージするには、まず .R E G ファイルを用意する 必要があります。これを実行する方法に関する数多くの詳細なドキュメントについては、こちら をご覧いただけま す。.R E G ファイルの準備が整ったら、以下を入力します。 # virt-win-reg --m erge WindowsG uest input.reg これにより、ゲスト仮想マシンのレジストリーが更新されます。 17.11. プログ ラミング 言語で A PI を使用す る libguestfs の API は、Red Hat Enterprise Linux 6 .2 において、C、C++、Perl、Pytho n、Java、Ruby、および OCaml 言語で直接使用することができます。 C と C++ のバインディングをインストールするには、以下のコマンドを入力します。 # yum install libguestfs-devel Perl バインディングをインストールする場合 # yum install 'perl(S ys::G uestfs)' Pytho n バインディングをインストールする場合 # yum install python-libguestfs Java バインディングをインストールする場合 # yum install libguestfs-java libguestfs-java-devel libguestfs-javadoc Ruby バインディングをインストールする場合 # yum install ruby-libguestfs OCaml バインディングをインストールする場合 # yum install ocam l-libguestfs ocam l-libguestfs-devel 各言語のバインディングは基本的には同じですが、構造上の若干の変更があります。以下に A C ステートメント示しま す。 guestfs_launch (g); Perl では、以下のように表されます。 $ g->launch () または、OCaml では以下のように表されます。 g#launch () 本セクションでは C の API のみを詳しく説明します。 255 仮 想 化 管 理 ガイ ド C と C++ のバインディングでは、エラーのチェックは手作業で行う必要があります。他のバインディングでは、エラーは 例外に変換されます。以下の例に示す追加のエラーチェックは他の言語では必要ありませんが、例外を拾うために コードを追加したいと思われるかもしれません。libguestfs API のアーキテクチャーに関する注意点を以下に示しま す。 libguestfs API は同期となります。各呼び出しは完了するまでブロックを行います。非同期に呼び出しを行いたい 場合はスレッドを作成する必要があります。 libguestfs API はスレッドセーフではありません。1 スレッドにつき 1 ハンドルしか使用できません。複数のスレッド で 1 つのハンドルを共有したい場合は、2 つのスレッドが 1 つのハンドルで同時にコマンドを実行できないよう独 自の相互排除を実装してください。 同じディスクイメージ上で複数のハンドルを開かないようにしてください。ハンドルがすべて読み取り専用の場合は 許容されますが、推奨はされていません。 他に何かがディスクイメージを使用している可能性がある場合は書き込みのディスクイメージ (ライブの仮想マシン など) は追加しないでください。これを行うとディスクの破損を招きます。 現在使用中のディスクイメージで読み取り専用のハンドルを開くことは可能ですが (ライブの仮想マシンなど)、予 測できない結果を招いたり、整合性を失う場合があります。とくにディスクイメージを読み込んでいる最中に大量の 書き込みがあった場合にこのような結果になる可能性があります。 17.11.1. C プログ ラム で API と通信す る C プログラムは <guestfs.h> ヘッダーファイルを組み込み、ハンドルを作成するところから開始します。 #include <stdio.h> #include <stdlib.h> #include <guestfs.h> int m ain (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_S UCCES S ); } このプログラムをファイル (t e s t .c ) に保存します。このプログラムをコンパイルしてから次の 2 つのコマンドで実行 します。 gcc -Wall test.c -o test -lguestfs ./test 256 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る この時点では何も出力されないはずです。このセクションの残りの部分では、新規のディスクイメージの作成やパー ティション設定、ext4 ファイルシステムでのフォーマット、そのファイルシステム内でのファイルの作成などを行うために このプログラムを拡張する方法を示します。ディスクイメージ名は d is k .im g になり、現在のディレクトリー内に作成さ れます。 プログラムの概要を以下に示します。 ハンドルを作成します。 ディスクをハンドルに追加します。 libguestfs バックエンドを起動します。 パーティション、ファイルシステムおよびファイル群を作成します。 ハンドルを閉じて終了します。 修正したプログラムを示します。 #include #include #include #include #include #include <stdio.h> <stdlib.h> <string.h> <fcntl.h> <unistd.h> <guestfs.h> int m ain (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-form at sparse disk im age, 512 M B in size. */ int fd = open ("disk.im g", O _CREAT|O _WRO NLY|O _TRUNC|O _NO CTTY, 06 6 6 ); if (fd == -1) { perror ("disk.im g"); exit (EXIT_FAILURE); } if (ftruncate (fd, 512 * 1024 * 1024) == -1) { perror ("disk.im g: truncate"); exit (EXIT_FAILURE); } if (close (fd) == -1) { perror ("disk.im g: close"); exit (EXIT_FAILURE); } /* S et the trace flag so that we can see each libguestfs call. */ guestfs_set_trace (g, 1); /* S et the autosync flag so that the disk will be synchronized * autom atically when the libguestfs handle is closed. 257 仮 想 化 管 理 ガイ ド */ guestfs_set_autosync (g, 1); /* Add the disk im age to libguestfs. */ if (guestfs_add_drive_opts (g, "disk.im g", G UES TFS _ADD_DRIVE_O PTS _FO RM AT, "raw", /* raw form at */ G UES TFS _ADD_DRIVE_O PTS _READO NLY, 0, /* for write */ -1 /* this m arks end of optional argum ents */ ) == -1) exit (EXIT_FAILURE); /* Run the libguestfs back-end. */ if (guestfs_launch (g) == -1) exit (EXIT_FAILURE); /* G et the list of devices. Because we only added one drive * above, we expect that this list should contain a single * elem ent. */ 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 M BR partition. */ if (guestfs_part_disk (g, devices[0], "m br") == -1) exit (EXIT_FAILURE); /* G et the list of partitions. We expect a single elem ent, 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_m kfs (g, "ext4", partitions[0]) == -1) exit (EXIT_FAILURE); /* Now m ount the filesystem so that we can add files. */ if (guestfs_m ount_options (g, "", partitions[0], "/") == -1) exit (EXIT_FAILURE); /* Create som e files and directories. */ if (guestfs_touch (g, "/em pty") == -1) exit (EXIT_FAILURE); 258 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る const char *m essage = "Hello, world\n"; if (guestfs_write (g, "/hello", m essage, strlen (m essage)) == -1) exit (EXIT_FAILURE); if (guestfs_m kdir (g, "/foo") == -1) exit (EXIT_FAILURE); /* This uploads the local file /etc/resolv.conf into the disk im age. */ 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 m anually by calling guestfs_um ount_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_S UCCES S ); } 次の 2 つのコマンドでこのプログラムをコンパイルしてから実行します。 gcc -Wall test.c -o test -lguestfs ./test プログラムの実行が正しく終了すると、d is k .im g という名前のディスクイメージが作成されるはずです。このイメージ は guestfish で調べることができます。 guestfish --ro -a disk.im g -m /dev/sda1 ><fs> ll / ><fs> cat /foo/resolv.conf デフォルトでは (C と C++ のバインディングの場合のみ)、libguestfs は stderr にエラーを出力します。エラーハンド ラーを設定すると、この動作を変更することができます。詳細については guestfs(3) の man ページに記載されてい ます。 17.12. virt- syspre p: 仮想マ シン設定の リセット virt-sysprep コマンドラインツールは、クローンを作成できるよう、ゲスト仮想マシンをリセットしたり、この設定を解除し たりするために使用できます。このプロセスでは、SSH ホストキー、永続的なネットワーク MAC 設定、およびユーザー アカウントを削除します。また、 virt-sysprep は、SSH キー、ユーザー、またはロゴの追加など、仮想マシンをカスタマイ ズできます。各ステップは必要に応じて有効にしたり無効にしたりすることができます。 sysprep という用語は、Micro so ft Windo ws システムで使用される System Preparatio n ツール (sysprep.exe) に由来しますが、現在このツールは Windo ws のゲストでは動作しません。 259 仮 想 化 管 理 ガイ ド 注記 libguestfs および guestfish には ro o t 権限が必要ありません。アクセスするディスクイメージの読み取り、 書き込み、または読み書きに ro o t アクセスが必要な場合のみ ro o t で実行する必要があります。 virt-sysprep ツールは libguestfs-to o ls-c パッケージに含まれ、このパッケージは以下のコマンドでインストールで きます。 $ y u m in s t a ll lib g u e s t fs - t o o ls - c virt-sysprep ツールのみをインストールするには、以下のコマンドを実行します。 $ y u m in s t a ll / u s r / b in / v ir t - s y s p r e p 重要 virt-sysprep は、実行中のゲストまたはディスクイメージを変更します。 virt-sysprep を使用するには、ゲスト 仮想マシンをオフラインにする必要があるため、コマンドを実行する前にこれをシャットダウンしてください。ゲス ト仮想マシンの既存のコンテンツを保持するには、最初にディスクのスナップショット、コピー、またはクローンを 作成する必要があります。ディスクのコピーまたはクローンに関する詳細は、libguestfs.o rg を参照してくださ い。 virt-sysprep には以下のコマンドを使用できます。 表1 7 . 1 virt -s ys p re p コマ ンド コマ ンド 説明 例 --help 特定のコマンドまたはパッケージ全 体についての簡潔なヘルプエント リーを表示します。ヘルプの詳細は、 virt-sysprep の man ページを参照 してください。 ゲスト仮想マシンからのディスクイ メージである指定の ファイルを追加し ます。ディスクイメージの形式は自動 検出されます。これを無効にし、特定 の形式を強制実行するには、- fo r m a t オプションを使用します。 libvirt を使用している場合は、指定 の URI に接続します。省略されてい る場合は、KVM ハイパーバイザーか ら接続されます。ゲストブロックデバ イスを直接指定する場合は (v ir t s y s p r e p - a )、 libvirt は一切使用 されません。 指定されたゲスト仮想マシンからす べてのディスクを追加します。ドメイン UUID をドメイン名の代わりに使用 できます。 $ v ir t - s y s p r e p - - h e lp -a [ file ] または --add [ file ] -c [ URI] または --co nnect [ URI] -d [ guest] または --do main [ guest] 260 $ v ir t - s y s p r e p - - a d d / d e v / v m s / d is k .im g $ v ir t - s y s p r e p - c q e m u :/ / / s y s t e m $ v ir t - s y s p r e p - - d o m a in 9 0 d f2 f3 f- 8 8 5 7 - 5 b a 9 - 2 7 14 7 d 9 5 9 0 7 b 1c 9 e 第 17章 オ フ ラ イ ン ツール でゲス ト仮 想 マ シ ン の デ ィ ス ク にア ク セス す る コマ ンド 説明 例 -n または --dry-run または -dryrun ゲスト仮想マシンに読み取り専用の 「dry run」Sysprep 操作を実行しま す。これは sysprep 操作を実行しま すが、最終的にディスクへの変更を 破棄します。 指定された 操作 を有効にします。使 用可能な操作を一覧表示するには、-list コマンドを使用します。 -a オプションは、デフォルトでディス クイメージの形式を自動検出します。 これを使用すると、コマンドラインに 続く -a オプションのディスク形式が 強制実行されます。--fo rmat auto を使用すると、後続の -a オプション の自動検出に切り替わります (上記 の -a コマンド参照)。 $ v ir t - s y s p r e p - n --enable [ o peratio ns ] --fo rmat [r a w |q c o w 2 |a u t o ] --list-o peratio ns --mo unt-o ptio ns virt-sysprep プログラムでサポート される操作を一覧表示します。これら の操作は 1 行に 1 つずつ表示さ れ、1 つのスペースで区切られた フィールドが 1 つ以上含まれます。 出力の最初のフィールドには、- e n a b le フラグに指定できる操作名 が入ります。2 つ目のフィールドに は、操作がデフォルトで有効である場 合は * 文字が入り、有効でない場合 は空白になります。同じ行の追加 フィールドには操作の説明が入りま す。 ゲスト仮想マシンの各マウントポイン トについてマウントオプションを設定 します。マウントポイントとオプション のペア (mo untpo int:o ptio ns) の セミコロンで区切られた一覧を使用 します。この一覧を引用符で囲み、 シェルでこれを保護する必要がある 場合があります。 $ v ir t - s y s p r e p - - e n a b le ssh-hotkeys,udevp e r s is t e n t - n e t $ v ir t - s y s p r e p - - fo r m a t r a w - a d is k .im g は disk.img の raw 形式 (自動検出なし) を強制 しますが、v ir t - s y s p r e p - fo r m a t r a w - a d is k .im g - fo r m a t a u t o - a a n o t h e r .im g は d is k .im g の raw 形式 (自動検出なし) を強制実 行してから a n o t h e r .im g の自動 検出に戻ります。信頼されていない raw 形式のゲストディスクイメージが ある場合、このオプションを使用して ディスク形式を指定する必要があり ます。これにより、悪意のあるゲスト に関連するセキュリティー上の問題 を防ぐことができます。 $ v ir t - s y s p r e p - lis t - o p e r a t io n s bash-history * Rem ove the bash history in the guest cron-spool * Rem ove user at-jobs and cronjobs dhcp-client-state * Rem ove DHCP client leases dhcp-server-state * Rem ove DHCP server leases ... $ v ir t - s y s p r e p - - m o u n t o p t io n s "/ :n o t im e " は、n o t im e 操作でルートディレクト リーをマウントします。 261 仮 想 化 管 理 ガイ ド コマ ンド 説明 例 --selinux-relabel および --no selinux-relabel virt-sysprep は、ゲストの最初の起 動時に SELinux の再ラベル付けを 常にスケジュールするわけではあり ません。場合によっては再ラベル付 けは実行されますが (virt-sysprep に変更されたファイルが存在する場 合など)、すべての操作によってファイ ルの削除のみが行われる場合、(- e n a b le d e le t e - - d e le t e / s o m e / file を使用する場合など) 再ラベル付けはスケジュールされま せん。- - s e lin u x - r e la b e l オプ ションを使用すると、常に SELinux の再ラベル付けが強制されます が、- - n o - s e lin u x - r e la b e l を 設定すると再ラベル付けはスケ ジュールされません。ファイルに正し い SELinux ラベルが付けられるよう にするため、- - s e lin u x r e la b e l を使用することが推奨さ れます。 ログメッセージが出力されないように します。 デバッグ目的で詳細なメッセージを 有効にします。 virt-sysprep バージョン番号を表示 し、終了します。 $ v ir t - s y s p r e p - s e lin u x - r e la b e l -q または --quiet -v または --verbo se -V または --versio n $ v ir t - s y s p r e p - q $ v ir t - s y s p r e p - v $ v ir t - s y s p r e p - V 詳細は libguestfs ドキュメント を参照してください。 17.13. トラブルシューティング libguestfs が動作しているかどうかを確認できるテストツールがあります。libguestfs をインストールしてから次のコ マンドを実行し (ro o t 権限は不要)、通常の動作をテストします。 $ libguestfs-test-tool このツールにより、libguestfs の動作テスト用のテキストが大量に出力されます。テストにパスすると、出力の最後の 方で次のテキストが表示されます。 ===== TES T FINIS HED O K ===== 17.14 . その 他の ドキュメ ントについて libguestfs とそのツールに関する主な情報源となるドキュメンテーションについては Unix の man ページをご覧くだ さい。API については guestfs(3) に記載されています。guestfish については guestfish(1) に記載されています。 また、virt ツールについては virt ツールの man ページをご覧ください (virt-df(1))。 262 第 18 章 ゲス ト仮 想 マ シ ン 管 理 の 単 純 な ツール の 使 用 第18章 ゲスト仮想マシン管理の単純なツールの使用 virt-manager のほかにも、ゲスト仮想マシンのコンソールにアクセスできるようにする規模のより小さな最小限の ツールがあります。以下のセクションでは、これらのツールについて説明します。 18 .1. virt- vie we r の 使用 virt-viewer は、ゲスト仮想マシンのグラフィカルコンソールを表示するための最小限のツールです。このコンソールは VNC または SPICE プロトコルを使用してアクセスされます。ゲストは、その名前、ID、または UUID に基づいて参照 されます。ゲストがすでに実行されていない場合は、ビューアーがコンソールへの接続を試行する前にゲストが起動す るまで待機するよう、ビューアーに対して指示を与えることができます。ビューアーはリモートホストに接続してコンソー ル情報を参照し、さらに同じネットワークトランスポートを使用してリモートコンソールに接続することができます。 virt-viewer ツールをインストールするには、以下を実行します。 # s u d o y u m in s t a ll v ir t - v ie w e r 基本的な virt viewer コマンドは以下のようになります。 # v ir t - v ie w e r [ O P TIO N S ] D O M A IN - N A M E |ID |U U ID 以下のオプションを virt-viewer と一緒に使用することができます。 - h 、または - - h e lp - コマンドラインの help の要約を表示します。 - V 、または - - v e r s io n - virt-viewer のバージョン番号を表示します。 - v 、または - - v e r b o s e - ゲスト仮想マシンへの接続についての情報を表示します。 - c [ U R I] 、または - - c o n n e c t = U R I - ハイパーバイザーの接続 URI を指定します。 - w 、または - - w a it - コンソールへの接続を試行する前にドメインを起動させます。 - r 、または - - r e c o n n e c t - ドメインがシャットダウンおよび再起動する場合にドメインに自動的に再接続します。 - z P C T 、または - - z o o m = P C T - 指定されるパーセントでディスプレイウィンドウのズームレベルを調整します。許 可される範囲は 10 -20 0 % です。 - a 、または - - a t t a c h - libvirt を使用して、TCP/UNIX ソケット接続を行う代わりにローカルディスプレイに直 接アタッチします。これにより、 libvirt で認証がすでに許可されている場合はリモートディスプレイでの認証の必要 がなくなります。このオプションはリモートディルプレイでは機能しません。 - f 、または - - fu ll- s c r e e n - フルスクリーンサイズに最大化したコマンドウィンドウで起動します。 - h H O TK E YS 、または - - h o t k e y s H O TK E YS - 新たに指定されたホットキーでデフォルトのホットキー設定を オーバーライドします。例18 .4 「ホットキーの設定」を参照してください。 - - d e b u g - デバッグ情報を出力します。 例1 8 . 1 ゲス ト 仮想マ シ ンへ の 接続 XEN ハイパーバイザーを使用する場合: # v ir t - v ie w e r g u e s t - n a m e 263 仮 想 化 管 理 ガイ ド KVM-QEMU ハイパーバイザーを使用する場合: # v ir t - v ie w e r - - c o n n e c t q e m u :/ / / s y s t e m 7 例1 8 . 2 接続前に特定ゲス ト の 起動を待機す る 以下のコマンドを入力します。 # v ir t - v ie w e r - - r e c o n n e c t - - w a it 6 6 a b 3 3 c 0 - 6 9 19 - a 3 f7 - e 6 5 9 - 16 c 8 2 d 2 4 8 5 2 1 例1 8 . 3 T L S を使用し て リモ ート コンソ ール に接続す る 以下のコマンドを入力します。 #v ir t - v ie w e r - - c o n n e c t x e n :/ / e x a m p le .o r g / d e m o SSH を使用してリモートホストに接続するには、ゲスト設定を参照してから、コンソールへの直接のトンネル化され ない接続を行います。 例1 8 . 4 ホッ ト キ ーの 設定 カスタマイズされたホットキーを作成するには、以下のコマンドを実行します。 # virt-viewer --hotkeys=([action1]=[key-com bination1]), ([action2]=[keycom bination2]) 以下のアクションをホットキーに割り当てることができます。 to ggle-fullscreen release-curso r smartcard-insert smartcard-remo ve キー名の組み合わせは大/小文字を区別しません。それぞれのホットキー設定には固有のキーの組み合わせがあ ります。 たとえば、ホットキーを作成してフルスクリーンモードに変更するには、以下のようにします。 #v ir t - v ie w e r - - h o t k e y s = t o g g le - fu lls c r e e n = s h ift +f11 q e m u :/ / / s y s t e m 7 18 .2. re mote - vie we r remo te-viewer は、SPICE および VNC をサポートする単純なリモートデスクトップディスプレイクライアントです。 virt-viewer ツールをインストールするには、以下を実行します。 # s u d o y u m in s t a ll r e m o t e - v ie w e r 264 第 18 章 ゲス ト仮 想 マ シ ン 管 理 の 単 純 な ツール の 使 用 基本的な remo te viewer コマンドは以下のようになります。r e m o t e - v ie w e r [ O P TIO N S ] D O M A IN N A M E |ID |U U ID 以下のオプションを remo te-viewer と一緒に使用することができます。 - h 、または - - h e lp - コマンドラインの help の要約を表示します。 - V 、または - - v e r s io n - remo te-viewer のバージョン番号を表示します。 - v 、または - - v e r b o s e - ゲスト仮想マシンへの接続についての情報を表示します。 - z P C T 、または - - z o o m = P C T - 指定されるパーセントでディスプレイウィンドウのズームレベルを調整します。許 可される範囲は 10 -20 0 % です。 - f 、または - - fu ll- s c r e e n - フルスクリーンサイズに最大化したコマンドウィンドウで起動します。 - t TITL E 、または - - t it le TITL E - 指定される文字列にウィンドウのタイトルを設定します。 - - s p ic e - c o n t r o lle r - SPICE コントローラーを使用し、SPICE サーバーで接続を初期化します。このオプ ションは、web ページからクライアントを起動することを許可するために SPICE ブラウザーアドオンによって使用さ れます。 - - d e b u g - デバッグ情報を出力します。 詳細は、remo te-viewer の man ページを参照してください。 265 仮 想 化 管 理 ガイ ド 第19章 仮想ネットワークの構築 本章では、libvirt を使った仮想ネットワークの作成、起動、停止、削除、変更などを行なう際に理解しておく必要がある 概念について解説しています。 詳細は libvirt リファレンスの章でご覧ください。 19.1. 仮想ネ ットワ ークの ス イッチ Libvirt 仮想ネットワークでは 仮想ネ ッ ト ワーク の ス イッ チ という概念を利用します。仮想ネットワークのスイッチは、 ソフトウェアで構成されホストー物理マシンサーバー上で動作します。仮想マシン群 (ゲスト) が接続され、各ゲストの ネットワークトラフィックはこのスイッチを経由することになります。 図1 9 . 1 ゲス ト を 2 つ持つ仮想ネ ッ ト ワーク の 例 Linux ホスト物理マシンのサーバーは、 仮想ネットワークスイッチをネットワークインターフェースとして表します。 はじ めて libvirtd デーモン (lib v ir t d ) をインストールして起動した場合、 仮想ネットワークスイッチを表すデフォルトの ネットワークインターフェースは v ir b r 0 になります。 266 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 2 仮想ネ ッ ト ワーク ス イッ チへ の インターフ ェ ース を持つ L in u x ホス ト 物理マ シ ン 上記の v ir b r 0 インターフェースは、 他のインターフェースと同様 ifc o n fig コマンドや ip コマンドで表示させるこ とができます。 $ ifconfig virbr0 virbr0 Link encap:Ethernet HWaddr 1B:C4:94:CF:FD:17 inet addr:192.16 8 .122.1 Bcast:192.16 8 .122.255 M ask:255.255.255.0 UP BRO ADCAS T RUNNING M ULTICAS T M TU:1500 M etric:1 RX packets:0 errors:0 dropped:0 overruns:0 fram e:0 TX packets:11 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:3097 (3.0 KiB) $ ip addr show virbr0 3: virbr0: <BRO ADCAS T,M ULTICAS T,UP,LO WER_UP> m tu 1500 qdisc noqueue state UNKNO WN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff inet 192.16 8 .122.1/24 brd 192.16 8 .122.255 scope global virbr0 19.2. ブリッジ モ ード ブ リッ ジ モ ード の使用時には、すべてのゲスト仮想マシンがホスト物理マシンとして同一サブネット内に表示されま す。同一の物理ネットワーク上にある他の物理マシンはこれらの仮想マシンを認識し、仮想マシンにアクセス可能で す。ブリッジングは、OSI ネットワークモデルの第 2 層で動作します。 複数の物理インターフェースはボンドで結合し、ハイパーバイザー上で使用することが可能です。このボンドはブリッジ に追加され、ゲスト仮想マシンもブリッジに追加されます。ただし、ボンディングドライバーにはいくつかの操作モードが あり、このなかで仮想ゲストマシンが使用されているブリッジと機能するものは、2、3 しかありません。 警告 ゲスト仮想マシンと使用すべきボンディングモードは、Mo de 1、Mo de 2、および Mo de 4 のみです。いかな る状況でも、Mo des 0 、3、5、または 6 を使用しないでください。また、arp-mo nito ring は機能しないので、 ボンディングモードの監視には mii-mo nito ring を使用してください。 267 仮 想 化 管 理 ガイ ド ボンディングモードに関する詳細情報は、ナレッジベースの ボンディングモードに関する記事 か Red Hat Enterprise Linux 6 導入ガイド を参照してください。 19.3. Ne twork A ddre ss Translation モ ード デフォルトでは、仮想ネットワークスイッチは NAT モードで動作します。SNAT (So urce-NAT) や DNAT (Destinatio n-NAT) ではなく IP マスカレードを使用します。IP マスカレードを使用すると、接続しているゲストが外 部ネットワークとの通信にホスト物理マシンの IP アドレスを使用できるようになります。仮想ネットワークスイッチが NAT モードで動作している場合、デフォルトではホスト物理マシンの外部にあるコンピューターはホスト内部にあるゲ ストと通信できません。これを以下の図で示します。 図1 9 . 3 ゲス ト を 2 つ持つ仮想ネ ッ ト ワーク ス イッ チで NAT を使用し て いる例 警告 仮想ネットワークスイッチは iptables のルールで構成された NAT を使用します。スイッチが稼働したままの 状態でこれらのルールを編集することは推奨できません。編集を間違った場合、誤ったルールが原因でスイッ チが通信を行えなくなる恐れがあります。 スイッチが実行されていない場合、以下を実行して、ポートのマスカレード範囲を作成するために、fo rward mo de NAT のパブリック IP 範囲を設定することができます。 # ip t a b le s - j S N A T - - t o - s o u r c e [ s t a r t ]- [ e n d ] 19.3.1. DNS と DHCP 268 第 19 章 仮 想 ネ ットワーク の 構 築 IP 情報は DHCP 経由でゲストに割り当てることができます。この割り当てを行うためアドレスのプールを仮想ネット ワークスイッチに割り当てることができます。libvirt は d n s m a s q プログラムを使用してこれを行います。 dnsmasq のインスタンスは、このインスタンスを必要とする仮想ネットワークスイッチに自動的に設定されて起動されます。 図1 9 . 4 d n s ma s q を実行し て いる仮想ネ ッ ト ワーク ス イッ チ 19.4 . ルーティング モ ード ル ーティング モ ード を使用する場合、仮想スイッチはホスト物理マシンにつながっている物理的な LAN に接続され、 NAT を使わずにトラフィックの受け渡しを行います。仮想スイッチによりすべてのトラフィックが検査され、またネット ワークパケット内に含まれる情報がルーティングを決定するために使用されます。このモードを使用すると、仮想マシン はすべてそれ自体のサブネット内に存在することになり、仮想スイッチ経由でルーティングが行われます。ただし、手作 業で物理的なルーター設定を行わないと、物理的なネットワーク上に存在する他のホスト物理マシンからはこれらの 仮想マシンは認識されないため、アクセスすることもできません。このため、このモードが常に理想的であるとは言えま せん。ルーティングモードは OSI ネットワークモデルの第 3 層で動作します。 269 仮 想 化 管 理 ガイ ド 図1 9 . 5 ル ーティング モ ードの 仮想ネ ッ ト ワーク ス イッ チ 19.5. 隔離モ ード 隔離モ ード を使用する場合、仮想スイッチに接続されているゲスト同士の通信およびホスト物理マシンとの通信は可 能ですが、トラフィックはホスト物理マシンの外側へは通過していきません。また、ホスト物理マシンの外側からのトラ フィックを受け取ることもできません。このモードで dnsmasq を使用するには、 DHCP などの基本的な機能が必要に なります。ただし、このネットワークを物理的なネットワークと切り離しても、 DNS 名の解決は行われます。したがって、 DNS 名は解決できるのに ICMP エコー要求 (ping) のコマンドは失敗するといった状況になる可能性があります。 270 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 6 隔離モ ードの 仮想ネ ッ ト ワーク ス イッ チ 19.6. デフォルト設定 libvirtd デーモン (lib v ir t d ) を初めてインストールすると、NAT モードの初期仮想ネットワークスイッチの構成が含 まれます。この構成を使用すると、インストールしているゲストがホスト物理マシンを経由して外部ネットワークとの通 信を行なえるようになります。以下の図は、この lib v ir t d のデフォルト構成を表しています。 図1 9 . 7 lib virt の デフ ォ ル ト の ネ ッ ト ワーク 設定 注記 仮想ネットワークを特定の物理インターフェースに制限することができます。複数のインタフェース (e t h 0 、e t h 1 、e t h 2 など) を持つ物理システムで役に立つ場合があります。ルーティングモードおよび NAT モードで使用すると便利で、d e v = < in t e r fa c e > オプションで指定できます。また、新しい仮想ネットワークを 作成している場合は v ir t - m a n a g e r で指定することもできます。 19.7. 一般的な事例 本セクションでは、種類の異なるネットワークモードをいくつか紹介し、その使用例を説明しています。 271 仮 想 化 管 理 ガイ ド 19.7.1. ブ リ ッジ モ ード ブリッジモードは、OSI モデルの第 2 層で作動します。これのモードの使用時には、ゲスト仮想マシンすべてが同一サ ブネット上でホスト物理マシンとして表示されます。ブリッジモードの一般的な使用例には、以下のものがあります。 ホスト物理マシンとともに既存ネットワーク内でゲスト仮想マシンをデプロイし、エンドユーザーに対して仮想マシン と物理マシンの違いを明らかにする。 既存の物理ネットワーク設定に変更を加えずにゲスト仮想マシンをデプロイする。 既存の物理ネットワークに容易にアクセス可能である必要があるゲスト仮想マシンをデプロイする。ゲスト仮想マシ ンを、DHCP などの既存のブロードキャストドメイン内でサービスにアクセスする必要のある物理ネットワーク上に 配置する。 ゲスト仮想マシンを VLAN が使用されている既存のネットワークに接続する。 19.7.2. ルーティング モ ード D MZ 安全を確保する目的で制御サブネットワーク内に 1 ノードまたは複数ノードを配置しているネットワークの例を見てみ ます。こうした特殊なサブネットワークの導入は一般的に行われており、DMZ と呼ばれています。 このレイアウトにつ いて詳細を以下の図で示します。 図1 9 . 8 D M Z の 構成例 272 第 19 章 仮 想 ネ ットワーク の 構 築 DMZ 内のホスト物理マシンは、とくに WAN (外部) ホスト物理マシンおよび LAN (内部) ホスト物理マシンにサービ スを提供します。管理や運営の方法は場所ごとにまたセキュリティや信頼できるレベルよって異なる点を考慮すると、さ まざまな場所から DMZ 内のホストにアクセスできなければならないこうした環境では ルーティングモードが最適な 設定となります。 仮想サ ーバ ーの ホス ティング 仮想サーバーホスティング会社を例に見てみます。この仮想サーバーホスティング会社は複数のホスト物理マシンを 有し、 それぞれのホスト物理マシンに物理的なネットワーク接続を 2 つずつ持たせています。片方のインターフェース は管理および会計に使用し、もう片方は仮想マシンの接続に使用しています。 各ゲストには独自のパブリック IP アド レスを持たせていますが、ホスト物理マシンにはプライベートの IP アドレスを持たせています。これはゲストの管理作 業を内部の管理者に制限するためです。この状況をわかりやすく説明するため以下に図を示します。 図1 9 . 9 仮想サ ーバ ーの 構成例 ホスト物理マシンにパブリック IP アドレス、仮想マシンに静的なパブリック IP アドレスを持たせると、ブリッジしている ネットワーク構成は使用できません。プロバイダーはパブリックホスト物理マシンの MAC アドレスからのパケットしか 受け取れないためです。図で示します。 273 仮 想 化 管 理 ガイ ド 図1 9 . 1 0 静的 IP ア ドレ ス を使用す る仮想サ ーバ ー 19.7.3. NAT モ ード NAT (Netwo rk Address Translatio n) モードがデフォルトのモードになります。ダイレクトネットワークに可視性を 必要としないテストなどに使用することができます。 19.7.4 . 隔離モ ード 隔離モードを使用すると、通信を行うことができるのは仮想マシン同士のみに限ることができます。仮想マシンは物理 的なネットワークでの通信は行えません。 19.8 . 仮想ネ ットワ ークを管理す る システムで仮想ネットワークを設定する 1. 編集 メニューから 接続の詳細 を選択します。 274 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 1 1 ホス ト 物理マ シ ンの 詳細を選択す る 2. 接続の 詳細 メニューが開きます。仮想ネットワーク タブをクリックします。 図1 9 . 1 2 仮想ネ ッ ト ワーク の 設定 3. メニュー左側のボックスに使用可能なネットワークがすべて表示されます。ボックス内のネットワークを選択し て適宜編集を行うと仮想ネットワークの設定を修正することができます。 19.9. 仮想ネ ットワ ークを作成す る システムで仮想ネットワークを作成するには、以下を実行します。 1. 接続の詳細 メニューから 仮想ネットワーク のタブを開きます。(+) マークのアイコンで表されている ネットワークの追加 ボタンをクリックします。詳細は 「仮想ネットワークを管理する」 を参照してください。 275 仮 想 化 管 理 ガイ ド 図1 9 . 1 3 仮想ネ ッ ト ワーク の 設定 新し い仮想ネ ッ ト ワーク の 作成 ウィンドウが開きます。進む をクリックして先に進みます。 276 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 1 4 新し い仮想ネ ッ ト ワーク を作成す る 2. 仮想マシンの名前を入力して 進む をクリックします。 277 仮 想 化 管 理 ガイ ド 図1 9 . 1 5 仮想ネ ッ ト ワーク の 名前を入力す る 3. 仮想ネットワーク用の IPv4 アドレス領域を入力し、進む をクリックします。 278 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 1 6 IP v4 ア ドレ ス 領域を選択す る 4 . IP アドレス範囲の 開始 と 終了 を指定して仮想ネットワークの DHCP 範囲を定義します。進む をクリック して先に進みます。 279 仮 想 化 管 理 ガイ ド 図1 9 . 1 7 D HCP 範囲を選択す る 5. 仮想ネットワークをどのように物理ネットワークに接続するかを選択します。 280 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 1 8 物理ネ ッ ト ワーク に接続す る 物理ネットワークにフォワード を選択する場合は、宛先 に いずれかの物理デバイス か特定の物 理デバイスを選択します。また、モード には N A T か ルーティング のいずれかを選択します。 進む をクリックして先に進みます。 6 . これでネットワーク作成の準備が整いました。ネットワークの設定を確認して、完了 をクリックします。 281 仮 想 化 管 理 ガイ ド 図1 9 . 1 9 ネ ッ ト ワーク 作成の 準備完了 7. これで新しい仮想ネットワークが 接続の詳細 ウィンドウの 仮想ネットワーク タブに表示されるようにな ります。 19.10 . 仮想ネ ットワ ークをゲス トに接続す る 仮想ネットワークをゲストに接続する 1. 仮想マシンマネージャー ウィンドウ内で、ネットワークを割り当てるゲストを強調表示させます。 282 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 2 0 表示させる仮想マ シ ンを選択す る 2. 仮想マシンマネージャーの 編集 メニューから 仮想マシンの詳細 を選択します。 図1 9 . 2 1 仮想マ シ ンの 詳細を表示す る 3. 仮想マシンの詳細ウィンドウにある ハードウェアを追加 ボタンをクリックします。 283 仮 想 化 管 理 ガイ ド 図1 9 . 2 2 仮想マ シ ンの 詳細ウィンドウ 4 . 新規の仮想ハードウェアの追加 ( A d d n e w v ir t u a l h a r d w a r e ) ウィンドウ内の左側のペイン から ネットワーク ( N e t w o r k ) を選択し、ホストデバイス メニューでネットワーク名 (この例では n e t wo rk 1 ) を選択して 完了 をクリックします。 284 第 19 章 仮 想 ネ ットワーク の 構 築 図1 9 . 2 3 新規の 仮想ハ ードウェ ア の 追加ウィンドウか ら ネ ッ ト ワーク を選択す る 5. これで新しいネットワークが仮想ネットワークインターフェースとして表示されるようになりました。 ゲストの起 動時に提供されるようになります。 285 仮 想 化 管 理 ガイ ド 図1 9 . 2 4 ゲス ト の ハ ードウェ ア 一覧に表示され る新し いネ ッ ト ワーク 19.11. 物理インターフェース に直接に接続す る 本章の説明は、仮想マシンの NIC をホスト物理マシンの指定された物理インターフェースに直接割り当てることを支 援するために用意されています。このセットアップでは、Linux macvtap ドライバーが利用可能である必要がありま す。macvtap デバイスの操作モードについては、「vepa」がデフォルトのモードですが、選択できる 4 つのモードがあ ります。それらの動作を以下に示します。 物理インタフ ェ ース の 配信モ ード ve p a 仮想マシンのパケットはすべて外部ブリッジに送信されます。宛先が送信元と同じホスト物理マシン上にあ る仮想マシンになるパケットは VEPA 対応のブリッジによってホスト物理マシンに送り返されます (最近の ブリッジは一般的には VEPA には対応していません)。 b rid g e 宛先が送信元と同じホスト物理マシン上にあるパケットはターゲット macvtap デバイスに直接配信されま す。送信元のデバイスと目的地のデバイスはいずれも直接配信用の bridge モードにしておく必要があり ます。いずれかを vepa モードにする場合は、VEPA 対応のブリッジが必要です。 p riva t e 286 第 19 章 仮 想 ネ ットワーク の 構 築 すべてのパケットは外部ブリッジに送信されます。それらが同じホスト物理マシンのターゲット VM に送信 されるのは、それらが外部ルーターまたはゲートウェイ経由で送信され、そのデバイスがそれらをホスト物 理マシンに送り戻す場合のみです。ソースまたは宛先デバイスのいずれかが private モードの場合に、こ の手順が実行されます。 p a s s t h ro u g h 移行機能を損なうことなく、 SRIOV 対応の NIC の仮想機能を直接、 仮想マシンに接続します。 すべての パケットが設定されたネットワークデバイスの VF/IF に送信されます。 そのデバイスの機能によっては、 追 加要件ないしは制約が適用される場合があります。 たとえば、 linux の場合なら 2.6 .38 またはそれ以降 のカーネルが必要になります。 4 種類の各モードの設定は、ドメインの XML ファイルを変更することで行ないます。このファイルを開いたら、以下のよ うにしてモードの変更を行ないます。 <devices> ... <interface type='direct'> <source dev='eth0' m ode='vepa'/> </interface> </devices> 直接接続したゲスト仮想マシンのネットワークアクセスは、ホスト物理マシンの物理インターフェースが接続されている ハードウェアスイッチで管理することができます。 スイッチが IEEE 8 0 2.1Qbg 標準に設定されている場合は、インターフェースに以下に示すように追加パラメーターを 持たせることができます。virtualpo rt 要素のパラメーターについては IEEE 8 0 2.1Qbg 標準の記載をご覧ください。 その値についてはネットワーク固有となるため、ネットワーク管理者にお問い合わせください。8 0 2.1Qbg では、 VIS (Virtual Statio n Interface) は仮想マシンの仮想インターフェースのことを指します。 IEEE 8 0 2.1Qbg の場合、VLAN ID にはゼロ以外の値が必要になります。また、スイッチが IEEE 8 0 2.1Qbg 標準 に設定されている場合、その値についてはネットワーク固有となるため、ネットワーク管理者にお問い合わせください。 Virt u a l S t a t io n In t e rfa ce の タイプ ma n a g e rid VSI Manager ID で VSI タイプとインスタンス定義が含まれるデータベースを識別します。整数の値とな り、0 の値は予約されています。 t yp e id VSI Type ID で ネットワークアクセスの特性を示す VSI タイプを識別します。VSI タイプは一般的にはネッ トワーク管理者によって管理されます。整数の値になります。 t yp e id ve rs io n VSI Type Versio n では VSI Type の複数のバージョンを許可します。整数の値になります。 in s t a n ce id VSI Instance ID 識別子は、VSI インスタンス (つまり、仮想マシンの仮想インターフェース) の作成時に生 成されます。グローバルに固有となる識別子です。 p ro file id プロファイル ID には、このインターフェースに適用されるポートプロファイル名が含まれます。この名前は、 ポートプロファイルのデータベースによってポートプロファイルからネットワークパラメーターに解決され、こ のネットワークパラメーターがこのインターフェースに適用されます。 287 仮 想 化 管 理 ガイ ド 4 種類の各タイプの設定は、ドメインの XML ファイルを変更することで行ないます。このファイルを開いたら、 以下のよ うにしてモードの設定を行ないます。 <devices> ... <interface type='direct'> <source dev='eth0.2' m ode='vepa'/> <virtualport type="8 02.1Q bg"> <param eters m anagerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8 b5c-4eeb-8 f00-d8 4eaa0aaa4f"/> </virtualport> </interface> </devices> プロファイル ID を以下に示します。 <devices> ... <interface type='direct'> <source dev='eth0' m ode='private'/> <virtualport type='8 02.1Q bh'> <param eters profileid='finance'/> </virtualport> </interface> </devices> ... 19.12. ネ ットワ ークの フィルター機能を適用す る このセクションでは libvirt のネットワークフィルター、フィルターの目的、その概要と XML 形式などについて紹介して います。 19.12.1. はじめ に ネットワークフィルター機能の目的は、仮想化システムの管理者がネットワークトラフィックのフィルタールールを仮想 マシンに設定し、実施することができるようにする、また仮想マシンによる送受信を許可するネットワークトラフィックの パラメーターーを管理できるようにすることです。ネットワークトラフィックのフィルタールールは、仮想マシンの起動時に ホスト物理マシンで適用されます。フィルタールールは仮想マシン内からは避けることができないため、仮想マシンの ユーザーにとっては強制的となります。 ゲスト仮想マシンから見ると、ネットワークフィルターのシステムにより、インターフェースごと個別に各仮想マシンの ネットワークトラフィックフィルタールールを設定することができるようになります。これらのルールは仮想マシンの起動 時にホスト物理マシンで適用され、仮想マシンの実行中に変更することができます。ルールの変更を行なう場合は、 ネットワークフィルターの XML 記述を編集します。 複数の仮想マシンに同じ汎用ネットワークフィルターを利用させることができます。 このようなフィルターを変更すると、 このフィルターを参照している実行中の全仮想マシンのネットワークトラフィックフィルターのルールが更新されます。 実行していないマシンは起動時に更新されます。 前述の通り、 適用しているネットワークトラフィックフィルターのルールは、特定タイプのネットワーク構成に設定された ネットワークインターフェースに個別に適用することができます。対応しているネットワークタイプは次の通りです。 ネットワーク イーサネット -- ブリッジモードで使用してください 288 第 19 章 仮 想 ネ ットワーク の 構 築 bridge 例1 9 . 1 ネ ッ ト ワーク フ ィル ターの 例 トップレベルのフィルターの参照にはインターフェース XML が使用されます。次の例では、 インターフェースの記 述で clean-traffic フィルターを参照しています。 <devices> <interface type='bridge'> <m ac address='00:16 :3e:5d:c7:9e'/> <filterref filter='clean-traffic'/> </interface> </devices> ネットワークフィルターは XMLで記述します。他のフィルターへの参照またはトラフィックフィルターのルールのいず れかを含ませる、または両方を組み合わせて含ませることもできます。上記の参照フィルター clean-traffic は、他 のフィルターへの参照のみを含み実際のフィルタールールは含んでいません。 他のフィルターへの参照を使用する ことができるため、フィルターのツリーを構成することが可能です。 clean-traffic フィルターは # v ir s h n w filt e r - d u m p x m l c le a n - t r a ffic コマンドを使用すると表示させることができます。 前述した通り、1 つのネットワークフィルターを複数の仮想マシンに参照させることができます。一般的にはインター フェースにはトラフィックフィルタールールに関連付けられた個別のパラメーターがあるため、フィルターの XML に 記述されているルールは変数を使って法則化することができます。この場合、変数の名前をフィルターの XML で 使用し、フィルターが参照される場所にその名前と値を入力します。 例1 9 . 2 記述の 拡張 次の例では、インターフェースの記述にパラメーターの名前「IP」と値「ドット表記の IP アドレス」を加えて拡張して います。 <devices> <interface type='bridge'> <m ac address='00:16 :3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <param eter nam e='IP' value='10.0.0.1'/> </filterref> </interface> </devices> この例では、clean-traffic ネットワークトラフィックフィルターは IP アドレスパラメーター 10 .0 .0 .1 で表され、ルー ルの指示によりこのインターフェースからのトラフィックはすべて必ず 10 .0 .0 .1 をソースの IP アドレスとして使用 するようになります。これがこのフィルターの目的です。 19.12.2. フィルタ ーチェーン フィルタールールはフィルターチェーンで整理します。各チェーン (ブランチ) 内にエントリーとして複数のパケットフィル タールールを持つツリー構造と考えることができます。 パケットはルートチェーンでフィルター評価を開始し、次に他のチェーンでの評価を継続していき、ルートチェーンに 戻ってくるか、途中のチェーンでドロップされるか、または承認されます。 289 仮 想 化 管 理 ガイ ド libvirt のネットワークフィルターシステムでは、ユーザーによってトラフィックフィルター機能のアクティブ化が選択され た仮想マシンのネットワークインターフェースにはすべてルートチェーンが自動的に作成されます。ユーザーは、ルート チェーン内で直接インスタンス作成されるフィルタールールを記述したり、プロトコル固有のフィルターチェーンを作成 しプロトコル固有のルールを効率的に評価したりすることができます。 次のようなチェーンがあります。 ro o t mac stp (ツリープロトコル全体) vlan arp と rarp ipv4 ipv6 チェーン名にプロトコル名をプレフィックスとして付けるだけで、mac、stp、vlan、arp、rarp、ipv4 、ipv6 などそれぞれ のプロトコルを評価するチェーンを複数作成することができます。 例1 9 . 3 ARP ト ラフ ィッ ク フ ィル ター 以下の例では、チェーンに「arp-xyz」や「arp-test 」などのチェーン名を付け、そのチェーン内で ARP プロトコルの パケットが評価されるようにしています。 次のフィルター XML では arp チェーン内で ARP トラフィックをフィルタリングする例を示しています。 <filter nam e='no-arp-spoofing' chain='arp' priority='-500'> <uuid>f8 8 f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid> <rule action='drop' direction='out' priority='300'> <m ac m atch='no' srcm acaddr='$ M AC'/> </rule> <rule action='drop' direction='out' priority='350'> <arp m atch='no' arpsrcm acaddr='$ M AC'/> </rule> <rule action='drop' direction='out' priority='400'> <arp m atch='no' arpsrcipaddr='$ IP'/> </rule> <rule action='drop' direction='in' priority='450'> <arp opcode='Reply'/> <arp m atch='no' arpdstm acaddr='$ M AC'/> </rule> <rule action='drop' direction='in' priority='500'> <arp m atch='no' arpdstipaddr='$ IP'/> </rule> <rule action='accept' direction='inout' priority='6 00'> <arp opcode='Request'/> </rule> <rule action='accept' direction='inout' priority='6 50'> <arp opcode='Reply'/> </rule> <rule action='drop' direction='inout' priority='1000'/> </filter> 290 第 19 章 仮 想 ネ ットワーク の 構 築 ARP 固有となるルールをルートのチェーンではなく「arp」チェーン内に置くことで、ARP プロトコル以外のパケット を ARP プロトコル固有のルールで評価する必要がなくなります。このためトラフィックフィルタリングの効率性が向 上することになります。ただし、プロトコル用のフィルタールールは必ずそのプロトコル用のチェーンに置くよう注意 してください。他のルールは評価されなくなります。たとえば、IPv4 プロトコルのパケットは ARP チェーンを通らな いため、ARP チェーン内の IPv4 ルールは評価されません。 19.12.3. フィルタ ーチェーンの 優先度 前述の通り、フィルタールールを作成すると、すべてのチェーンはルートチェーンにつながれます。こうしたチェーンがア クセスされる順序はそのチェーンの優先度に影響されます。次の表では、優先度を割り当てることができるチェーンと そのデフォルトの優先度を示します。 表1 9 . 1 フ ィル ターチェ ーンの デフ ォ ル ト 優先度値 チェ ーン ( プレ フ ィッ ク ス ) デフ ォ ル ト の 優先度 stp mac vlan ipv4 ipv6 arp rarp -8 10 -8 0 0 -750 -70 0 -6 0 0 -50 0 -4 0 0 注記 優先度の値が小さいチェーンほど値が大きいチェーンより先にアクセスされます。 表19.1「フィルターチェーンのデフォルト優先度値」 に記載されているチェーンには、フィルターノード内の優先 度の (XML) 属性に値 [-10 0 0 から 10 0 0 の範囲] を記述してカスタムの優先度を割り当てることもできま す。たとえば、 「フィルターチェーン」 のフィルターは arp チェーンには -50 0 のデフォルト優先度を示します。 19.12.4 . フィルタ ー内での 変数の 使い方 ネットワークトラフィックフィルターのサブシステムで使用するよう MAC と IP の 2 種類の変数が予約されています。 ネットワークインターフェースの MAC アドレスには M A C が指定されます。この変数を参照するフィルタールールは自 動的にインターフェースの MAC アドレスに置換されます。ユーザー側で明示的に MAC パラメータを与える必要がな いため便利です。 前述の IP パラメーター同様、 MAC パラメーターの指定は可能ですが、インターフェースが使用す る MAC アドレスは libvirt で認識できるためお勧めしません。 パラメーター IP は、 仮想マシン内のオペレーティングシステムに特定のインターフェースで使用させる IP アドレスを 表します。パラメーターが明示的な指定ではなく参照する形になっている場合、libvirt デーモンによりインターフェース で使用されている IP アドレス (および IP パラメータの値) の確定が試行されるため、この場合 IP パラメーターは特殊 となります。現在の IP アドレス検出には限界があるため、この機能の使い方および使用した場合に期待できる限度に ついては 「限界」 をよくお読みください。 「フィルターチェーン」 で示した XML ファイルには n o - a r p - s p o o fin g の フィルターが含まれています。MAC と IP の変数を参照する場合にネットワークフィルター XML を利用した事例にな ります。 参照させる変数には常に $ 文字のプレフィックスが付きます。変数の値の形式は XML で指定されるフィルター属性 によって期待されるタイプにする必要があります。上記の例では、 IP パラメーターに正式な IP アドレスを標準形式で 持たせる必要があります。不適切な形式を与えると、フィルターの変数が値に置換されないため仮想マシンが起動し 291 仮 想 化 管 理 ガイ ド なくなったり、ホットプラグインを使用している場合はインターフェースが接続されなくなります。XML 属性に期待され るタイプをいくつか 例19.4 「変数タイプの例」 に示します。 例1 9 . 4 変数タイプの 例 変数には複数の要素を含ませることができるため (例、 変数 IP には特定のインターフェースで有効となる複数の IP アドレスを含ませることが可)、IP 変数に複数の要素を与える場合は以下のように記述します。 <devices> <interface type='bridge'> <m ac address='00:16 :3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <param eter nam e='IP' value='10.0.0.1'/> <param eter nam e='IP' value='10.0.0.2'/> <param eter nam e='IP' value='10.0.0.3'/> </filterref> </interface> </devices> この XML ファイルにより一つのインターフェースに複数の IP アドレスを有効にするフィルターが作成されます。各 IP アドレスが異なるフィルタールールになります。したがって、上記の XML とルールを使用すると、3 種類の異な るフィルタールールが作成されます (IP アドレスごと 1 ルール)。 <rule action='accept' direction='in' priority='500'> <tcp srpipaddr='$ IP'/> </rule> 複数の要素を含む変数の各要素にアクセスすることができるため、以下のようなフィルタールールは DSTPORTS 変数の 2 番目の要素にアクセスします。 <rule action='accept' direction='in' priority='500'> <udp dstportstart='$ DS TPO RTS [1]'/> </rule> 例1 9 . 5 各種変数の 使い方 $ V A R IA B L E [ @ < it e r a t o r id = "x "> ] の表記を使用すると、異なる一覧のルールを使ってあらゆる組み合わ せを表すことができるフィルタールールの作成が可能です。次のルールでは、仮想マシンが DSTPORTS で指定さ れている複数のポート上で SRCIPADDRESSES に指定されている複数のソース IP アドレスからのトラフィックを 受信できるよう許可しています。ルールは、 要素へのアクセスに 2 種類の独立した反復子を使って、変数 SRCIPADDRESSES と DSTPORTS のあらゆる組み合わせを生成します。 <rule action='accept' direction='in' priority='500'> <ip srcipaddr='$ S RCIPADDRES S ES [@ 1]' dstportstart='$ DS TPO RTS [@ 2]'/> </rule> SRCIPADDRESSES と DSTPORTS に具体的な値を割り当てます。 S RCIPADDRES S ES = [ 10.0.0.1, 11.1.2.3 ] DS TPO RTS = [ 8 0, 8 08 0 ] 292 第 19 章 仮 想 ネ ットワーク の 構 築 $ S R C IP A D D R E S S E S [ @ 1] と $ D S TP O R TS [ @ 2 ] を使って変数に値を割り当てると、以下のようにアドレスと ポートのあらゆる組み合わせが作成されることになります。 10 .0 .0 .1, 8 0 10 .0 .0 .1, 8 0 8 0 11.1.2.3, 8 0 11.1.2.3, 8 0 8 0 $ S R C IP A D D R E S S E S [ @ 1] と $ D S TP O R TS [ @ 1] の表記など、1 つの反復子を使って前述の変数にアクセス すると、両方の一覧に並列にアクセスするため、次のような組み合わせになります。 10 .0 .0 .1, 8 0 11.1.2.3, 8 0 8 0 注記 $ V A R IA B L E は $ V A R IA B L E [ @ 0 ] の簡略形になります。このセクションの冒頭で示したように、先の表記 は常に反復子の役割となる it e r a t o r id = "0 " が付くと仮定しています。 19.12.5. 自動 IP アド レ ス 検出と DHCP ス ヌーピング 1 9 .1 2 .5 .1 . はじ め に 仮想マシンのインターフェースで使用される IP アドレスの検出は、値が割り当てられておらず、変数の IP が参照され る場合には自動的にアクティブ化されます。使用する IP アドレスラーニングメソッドを指定する場合に変数 C TR L _ IP _ L E A R N IN G を使用します。 any、 dhcp、 no ne が有効な値になります。 any の値では、libvirt に対し、パケットを使って仮想マシンで使用しているアドレスを確定するよう指示します。これは、 変数 TR L _ IP _ L E A R N IN G が設定されていない場合のデフォルトになります。このメソッドの場合、検出する IP アド レスはインターフェースごとに 1 つのみとなります。ゲスト仮想マシンの IP アドレスが検出されると、その IP ネットワー クトラフィックがそのアドレスにロックされ、IP アドレスのなりすましなどがそのフィルターの 1 つで防止されます。この 場合、IP アドレスのなりすましと見られるような、仮想マシンのユーザーによるゲスト仮想マシン内からのインター フェースの IP アドレスの変更は行なえなくなります。ゲスト仮想マシンを別のホスト物理マシンに移行したり、一時停 止状態から再開させた場合、ゲスト仮想マシンが送信する最初のパケットによって特定のインターフェースで使用でき る IP アドレスが再度確定されます。 dhcp の値では、libvirt に DHCP サーバーで割り当てられる有効なリースを持つアドレスしか受け取らないよう指示 します。このメソッドは 1 つのインターフェースでの複数 IP アドレスの検出および使用に対応しています。ゲスト仮想マ シンが一時停止状態から再開すると、有効な IP アドレスのリースがそのフィルターに適用されます。その他の場合、 ゲスト仮想マシンは新しい IP アドレスを取得するのに DHCP を使用します。ゲスト仮想マシンを別の物理的なホスト 物理マシンに移行する場合には、ゲスト仮想マシンで DHCP プロトコルを再実行する必要があります。 CTRL_IP_LEARNING を no ne に設定すると、libvirt では IP アドレスラーニングは行なわれず、明示的な値を割り 当てない IP の参照はエラーになります。 1 9 .1 2 .5 .2 . DHC P ス ヌ ーピ ング 293 仮 想 化 管 理 ガイ ド C TR L _ IP _ L E A R N IN G = d h c p (DHCP スヌーピング) により、とくに IP アドレスの割り当てを信頼できる DHCP サーバーに限るフィルターと併用したい場合に、なりすまし防止に対する安全性が強化されます。有効にする場合は、 D H C P S E R V E R 変数を有効な DHCP サーバーの IP アドレスに設定し、この変数を使って着信 DHCP の応答を処 理するフィルターを与えます。 DHCP スヌーピングが有効にされており、DHCP リースの有効期限が切れた場合、ゲスト仮想マシンは DHCP サー バーから新しい有効な IP アドレスを取得するまで、その IP アドレスを使用できなくなります。ゲスト仮想マシンを移行 する場合、IP アドレスを使用するには新しい有効な DHCP リースを取得させる必要があります (仮想マシンをいったん ダウンさせてから再起動するなど)。 注記 自動 DHCP 検出では、ゲスト仮想マシンがインフラストラクチャーの DHCP サーバーと通信する DHCP トラ フィックをリッスンします。libvirt でのサービス妨害攻撃を回避するには、パケット評価の速度制限を行ないま す。つまり、ゲスト仮想マシンがインターフェース上で 1 秒間に大量の DHCP パケットを送信している場合に は、そのパケットすべてには評価を行なわないようにして、フィルターが適用されないようにます。通常の DHCP クライアントの動作の場合、1 秒に送信する DHCP パケット数は少ないと考えられます。また、DHCP パケットが送信できないようインフラストラクチャー内の全ゲスト仮想マシンに適切なフィルターを設定すること も重要となります。したがって、ポート 6 7 からポート 6 8 へのゲスト仮想マシンによる UDP および TCP トラ フィックの送信をできないようにするか、または DHCPSERVER 変数を全ゲスト仮想マシンで使用して DHCP サーバーのメッセージが信頼できる DHCP サーバーからしか送信できないよう制限する必要があります。同 時に、なりすまし防止の対策をサブネット内の全ゲスト仮想マシンで有効にしておく必要があります。 例1 9 . 6 D HCP ス ヌ ーピ ング 用の IP を作動させる DHCP スヌーピングメソッドを使った IP アドレスラーニングの起動例を以下の XML で示します。 <interface type='bridge'> <source bridge='virbr0'/> <filterref filter='clean-traffic'> <param eter nam e='CTRL_IP_LEARNING ' value='dhcp'/> </filterref> </interface> 19.12.6. 予約済み変数 表19.2「予約済み変数」 で予約済みとみなされ libvirt によって使用される変数を示します。 表1 9 . 2 予約済み変数 変数名 定義 MAC IP IPV6 インターフェースの MAC アドレス インターフェースで使用中の IP アドレス一覧 現在実装されていない: インターフェースで使用中の IPV6 アドレスの一覧 信頼できる DHCP サーバーの IP アドレス一覧 現在実装されていない: 信頼できる DHCP サーバーの IPv6 アドレスの一覧 IP アドレス検出モードの選択 DHCPSERVER DHCPSERVERV6 CTRL_IP_LEARNING 19.12.7. 要素と属性の 概要 294 第 19 章 仮 想 ネ ットワーク の 構 築 19.12.7. 要素と属性の 概要 ネットワークフィルターすべてに必要なルート要素は 2 つの属性を持つ < filt e r > になります。n a m e 属性で特定の フィルターの固有名を指定します。c h a in 属性はオプションですが、基礎となるホスト物理マシンのファイアウォール サブシステムによってより効率的な処理を実現するために特定のフィルターを整理することができます。現在、システ ムで対応しているチェーンは、r o o t 、ip v 4 、ip v 6 、a r p および r a r p のみです。 19.12.8. 他の フィルタ ーへ の 参照 いずれのフィルターにも他のフィルターへの参照を持たせることができます。フィルターツリー内では各フィルターを複 数回参照させることもできますが、フィルター間の参照がループとならないようにする必要があります。 例1 9 . 7 cle a n t ra ffic フ ィル ターの 例 いくつか他のフィルターを参照している clean-traffic ネットワークフィルターの XML を以下に示します。 <filter nam e='clean-traffic'> <uuid>6 ef5306 9-ba34-94a0-d33d-17751b9b8 cb1</uuid> <filterref filter='no-m ac-spoofing'/> <filterref filter='no-ip-spoofing'/> <filterref filter='allow-incom ing-ipv4'/> <filterref filter='no-arp-spoofing'/> <filterref filter='no-other-l2-traffic'/> <filterref filter='qem u-announce-self'/> </filter> 別のフィルターを参照させる場合は、XML ノードの filterref をフィルターノードの内側に与える必要があります。こ のノードには参照先のフィルター名をその値として持つ属性フィルターを持たせる必要があります。 新しいネットワークフィルターはいつの時点で定義しても構いません。また、libvirt がまだ認識できないネットワークフィ ルターへの参照を含ませることもできます。ただし、仮想マシンの起動後、 またはフィルターを参照するネットワークイン ターフェースのホットプラグイン後には、フィルターツリー内の全ネットワークフィルターが利用できる状態でなければな りません。利用できないフィルターがある場合には仮想マシンが起動しなくなるか、ネットワークインターフェースの接続 が行なえません。 19.12.9. フィルタ ールール 発信 IP パケット内の IP アドレス (変数 IP の値から取得される) が期待したアドレスではない場合、トラフィックをド ロップするルールを実施するネットワークトラフィックフィルターのシンプルな例を以下の XML で示します。これにより 仮想マシンからの IP アドレスのなりすましを防ぎます。 例1 9 . 8 ネ ッ ト ワーク ト ラフ ィッ ク フ ィル ターの 例 <filter nam e='no-ip-spoofing' chain='ipv4'> <uuid>fce8 ae33-e6 9e-8 3bf-26 2e-3078 6 c1f8 072</uuid> <rule action='drop' direction='out' priority='500'> <ip m atch='no' srcipaddr='$ IP'/> </rule> </filter> 295 仮 想 化 管 理 ガイ ド トラフィックフィルターのルールはルールノードで開始します。このノードには以下の属性を最大 3 つまで含ませること ができます。 actio n を mandato ry にすると、次の値を取ることができます。 dro p (ルールに一致すると、さらに分析することなくパケットを破棄し、メッセージは出力しません) reject (ルールに一致すると、さらに分析することなく ICMP 拒否メッセージを生成します) accept (ルールに一致すると、さらに分析することなくパケットを受け取ります) return (ルールに一致すると、このフィルターを通過しますがさらに分析するため呼び出しフィルターに制御を 戻します) co ntinue (ルールに一致すると、さらに分析するため次のルールに移動します) directio n を mandato ry にすると、次の値を取ることができます。 in - 着信トラフィック o ut - 発信トラフィック ino ut - 着信と発信のトラフィック prio rity はオプションです。ルールの優先度は、ルールが他のルールに対して相対的にインスタンス生成される順 序を制御します。小さい値のルールは大きい値のルールより先にインスタンス生成されます。有効な値は -10 0 0 から 10 0 0 の範囲です。この属性を与えると、デフォルトでは優先度 50 0 が与えられます。ルートチェーン内の フィルタールールは、ルートチェーンに接続されるフィルターでその優先度にしたがい分類されます。これにより、 フィルターチェーンへのアクセスを持たせながらフィルタールール同士を交互配置することができるようになりま す。詳細は 「フィルターチェーンの優先度」 を参照してください。 statematch はオプションです。「0 」または「false」に設定すると、基礎となる接続状態の一致をオフにします。デ フォルト設定は「1」または「true」です。 詳細は 「高度なフィルター設定について」 をご覧ください。 前述の 例19.7「clean traffic フィルターの例」 では、 type ip のトラフィックはチェーン ipv4 に関連付けられ、ルー ルは p r io r it y = 5 0 0 になることを示しています。 type ip のトラフィックもチェーン ipv4 に関連付けられる別のフィ ルターが参照される場合などは、そのフィルターのルールは先のルールの p r io r it y = 5 0 0 に相対的に順序付けら れます。 ルールにはトラフィックのフィルターを行なうルールを 1 つ含ませることができます。上記の例では、タイプ ip のトラ フィックがフィルターされます。 19.12.10 . 対応している プロトコル 以下に、ネットワークフィルターのサブシステムで対応しているプロトコルの詳細について示します。このタイプのトラ フィックルールはネスト化されたノードとしてルールノードで与えます。ルールがフィルターされるトラフィックタイプによ り属性は異なります。上記の例では s r c ip a d d r の属性が一つ使用されていました。 この属性は ip トラフィックフィ ルターノード内で有効になります。 次のセクションでは有効な属性と期待されるデータタイプについて示します。次のよ うなデータタイプが使用可能です。 UINT8 : 8 ビットの整数; 0 -255 の範囲 UINT16 : 16 ビットの整数; 0 -6 5535 の範囲 MAC_ADDR: ドット付き 10 進数形式の MAC アドレス (0 0 :11:22:33:4 4 :55 など) MAC_MASK: MAC アドレス形式による MAC アドレスマスク (FF:FF:FF:FC:0 0 :0 0 など) 296 第 19 章 仮 想 ネ ットワーク の 構 築 IP_ADDR: ドット付き 10 進数形式の IP アドレス (10 .1.2.3 など) IP_MASK: ドット付き 10 進数形式 (255.255.24 8 .0 ) または CIDR マスク (0 -32) による IP アドレスマスク IPV6 _ADDR: 数値形式の IPv6 アドレス (FFFF::1) IPV6 _MASK: 数値形式 (FFFF:FFFF:FC0 0 ::) または CIDR マスク (0 -128 ) による IPv6 マスク STRING: 文字列 BOOLEAN: 'true'、'yes'、'1'、または 'false'、'no '、'0 ' IPSETFLAGS: 最大 6 つの 'src' または 'dst' の要素で記述される ipset のソースフラグと宛先フラグで、パケッ トヘッダーのソース部分または宛先部分いずれかの機能を選択します (src,src,dst など)。 ここに入力する 'selecto rs' の数は参照される ipset のタイプによって異なります。 IP _ M A S K または IP V 6 _ M A S K のタイプを除き、すべての属性は no の値にあたる属性を使って無効にすることが できます。無効にした複数の属性をグループ化して 1 つにまとめることもできます。次の XML の抜粋部分の属性を 使った一例を示します。 [...] <rule action='drop' direction='in'> <protocol m atch='no' attribute1='value1' attribute2='value2'/> <protocol attribute3='value3'/> </rule> [...] ルールの動作によりそのルールが評価されるとともに、特定のプロトコル属性の境界内でそのルールが論理的に調 べられます。 従って、1 つの属性値がルールで与えた値に一致しない場合、評価のプロセス時にそのルール全体が 省略されることになります。従って、上記の例では、プロトコルプロパティーの a t t r ib u t e 1 が v a lu e 1 に、プロトコ ルプロパティーの a t t r ib u t e 2 が v a lu e 2 にいずれも一致せず、プロトコルプロパティー a t t r ib u t e 3 が v a lu e 3 に一致する場合、着信トラフィックのみがドロップされます。 1 9 .1 2 .1 0 .1 . M A C (イーサ ネ ッ ト ) プロトコル ID: mac このタイプのルールはルートチェーンに入ります。 表1 9 . 3 M AC プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAC_ADDR MAC_MASK pro to co lid UINT16 (0 x6 0 0 -0 xffff), STRING co mment STRING 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク レイヤー 3 プロトコル ID、有効な文 字列 [arp, rarp, ipv4 , ipv6 ] 最長 256 文字のテキスト文字列 フィルターは以下のように記述できます。 297 仮 想 化 管 理 ガイ ド [...] <m ac m atch='no' srcm acaddr='$ M AC'/> [...] 1 9 .1 2 .1 0 .2 . V LA N (8 0 2 .1 Q ) プロトコル ID: vlan このタイプのルールはルートチェーンまたは vlan チェーンのいずれかに入ります。 表1 9 . 4 VL AN プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAC_ADDR MAC_MASK vlan-id encap-pro to co l UINT16 (0 x0 -0 xfff, 0 - 4 0 95) UINT16 (0 x0 3c-0 xfff), String co mment STRING 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク VLAN ID カプセル化されたレイヤー 3 プロト コル ID、有効な文字列 arp、ipv4 、 ipv6 最長 256 文字のテキスト文字列 1 9 .1 2 .1 0 .3 . S TP (S p a nning Tre e P ro to c o l) プロトコル ID: stp このタイプのルールはルートチェーンまたは stp チェーンのいずれかに入ります。 表1 9 . 5 S T P プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK type UINT8 flags ro o t-prio rity ro o t-prio rity-hi ro o t-address ro o t-address-mask ro o r-co st ro o t-co st-hi sender-prio rity-hi sender-address sender-address-mask po rt po rt_hi UINT8 UINT16 UINT16 (0 x0 -0 xfff, 0 - 4 0 95) MAC _ADDRESS MAC _MASK UINT32 UINT32 UINT16 MAC_ADDRESS MAC_MASK UINT16 UINT16 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク BPDU (Bridge Pro to co l Data Unit) タイプ BPDU flagdstmacmask ルート優先度範囲の始点 ルート優先度範囲の終点 ルートの MAC アドレス ルートの MAC アドレスマスク ルートのパスコスト (範囲の始点) ルートのパスコスト (範囲の終点) 送信側優先度の範囲の終点 BPDU 送信側 MAC アドレス BPDU 送信側 MAC アドレスマスク ポート識別子 (範囲の始点) ポート識別子 (範囲の終点) 298 第 19 章 仮 想 ネ ットワーク の 構 築 属性名 データタイプ 定義 msg-age UINT16 msg-age-hi UINT16 max-age-hi hello -time hello -time-hi fo rward-delay fo rward-delay-hi co mment UINT16 UINT16 UINT16 UINT16 UINT16 STRING メッセージエイジタイマー (範囲の始 点) メッセージエイジタイマー (範囲の終 点) 最大エイジ時間の範囲の終点 Hello タイムタイマー (範囲の始点) Hello タイムタイマー (範囲の終点) フォワード遅延 (範囲の始点) フォワード遅延 (範囲の終点) 最長 256 文字のテキスト文字列 1 9 .1 2 .1 0 .4 . A R P /R A R P プロトコル ID: arp または rarp このタイプのルールはルートチェーンまたは arp/rarp チェーンのいずれかに入ります。 表1 9 . 6 ARP と RARP の プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAC_ADDR MAC_MASK hwtype pro to co ltype o pco de UINT16 UINT16 UINT16 , STRING arpsrcmacaddr MAC_ADDR arpdstmacaddr MAC _ADDR arpsrcipaddr IP_ADDR arpdstipaddr IP_ADDR gratututo us BOOLEAN co mment STRING 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク ハードウェアのタイプ プロトコルのタイプ Opco de の有効な文字列: Request、Reply、 Request_Reverse、 Reply_Reverse、 DRARP_Request、 DRARP_Reply、DRARP_Erro r、 InARP_Request、ARP_NAK ARP/RARP パケット内のソースの MAC アドレス ARP/RARP パケット内の宛先の MAC アドレス ARP/RARP パケット内のソースの IP アドレス ARP/RARP パケット内の宛先の IP アドレス 余計な ARP パケットをチェックする かどうかを指定するブール値 最長 256 文字のテキスト文字列 1 9 .1 2 .1 0 .5 . IP v 4 プロトコル ID: ip 299 仮 想 化 管 理 ガイ ド このタイプのルールはルートチェーンまたは ipv4 チェーンのいずれかに入ります。 表1 9 . 7 IP v4 プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAC_ADDR MAC_MASK srcipaddr srcipmask IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK pro to co l UINT8 , STRING srcpo rtstart UINT16 srcpo rtend UINT16 dstpo rtstart UNIT16 dstpo rtend UNIT16 co mment STRING 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク レイヤー 4 プロトコルの識別子、 pro to co l に有効な文字列: tcp、 udp、udplite、esp、ah、icmp、 igmp、sctp 有効なソースポート範囲の開始点、 必須のプロトコル 有効なソースポート範囲の終了点、 必須のプロトコル 有効な宛先ポート範囲の開始点、必 須のプロトコル 有効な宛先ポート範囲の終了点、必 須のプロトコル 最長 256 文字のテキスト文字列 1 9 .1 2 .1 0 .6 . IP v 6 プロトコル ID: ipv6 このタイプのルールはルートチェーンまたは ipv6 チェーンのいずれかに入ります。 表1 9 . 8 IP v6 プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAC_ADDR MAC_MASK srcipaddr srcipmask IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク 300 第 19 章 仮 想 ネ ットワーク の 構 築 属性名 データタイプ 定義 pro to co l UINT8 , STRING scrpo rtstart UNIT16 srcpo rtend UINT16 dstpo rtstart UNIT16 dstpo rtend UNIT16 co mment STRING レイヤー 4 プロトコル識別子、 pro to co l に有効な文字列: tcp、 udp、udplite、esp、ah、icmpv6 、 sctp 有効なソースポート範囲の開始点、 必須のプロトコル 有効なソースポート範囲の終了点、 必須のプロトコル 有効な宛先ポート範囲の開始点、必 須のプロトコル 有効な宛先ポート範囲の終了点、必 須のプロトコル 最長 256 文字のテキスト文字列 1 9 .1 2 .1 0 .7 . TC P /UDP /S C TP プロトコル ID: tcp、 udp、 sctp このタイプのトラフィック関してはチェーンパラメーターは無視されるため、省略するかルートに設定します。 表1 9 . 9 T CP / UD P / S CT P プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcipaddr srcipmask MAC_ADDR IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK scripto srcipfro m dstipfro m dstipto scrpo rtstart IP_ADDR IP_ADDR IP_ADDR IP_ADDR UNIT16 srcpo rtend UINT16 dstpo rtstart UNIT16 dstpo rtend UNIT16 co mment state STRING STRING flags STRING 送信側の MAC アドレス ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 有効なソースポート範囲の開始点、 必須のプロトコル 有効なソースポート範囲の終了点、 必須のプロトコル 有効な宛先ポート範囲の開始点、必 須のプロトコル 有効な宛先ポート範囲の終了点、必 須のプロトコル 最長 256 文字のテキスト文字列 NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 TCP のみ: マスク/フラグの形式、マ スクおよびフラグを SYN、ACK、 URG、PSH、FIN、RST または NONE か ALL のコンマで区切った 一覧 301 仮 想 化 管 理 ガイ ド 属性名 データタイプ 定義 ipset STRING ipsetflags IPSETFLAGS libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 1 9 .1 2 .1 0 .8 . IC M P プロトコル ID: icmp 注意: このタイプのトラフィックに関してはチェーンパラメーターは無視されるため、省略するか、またはルートに設定し ます。 表1 9 . 1 0 ICM P プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAD_ADDR MAC_MASK srcipaddr srcipmask IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK srcipfro m scripto dstipfro m dstipto type co de co mment state IP_ADDR IP_ADDR IP_ADDR IP_ADDR UNIT16 UNIT16 STRING STRING ipset STRING ipsetflags IPSETFLAGS 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 ICMP タイプ ICMP のコード 最長 256 文字のテキスト文字列 NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 1 9 .1 2 .1 0 .9 . IG M P 、ES P 、A H、UDP LITE、' A LL' プロトコル ID: igmp、esp、ah、udplite、all このタイプのトラフィックに関してはチェーンパラメーターは無視されるため、省略するか、またはルートに設定します。 表1 9 . 1 1 IG M P 、 E S P 、 AH、 UD P L IT E 、 ' AL L ' 302 第 19 章 仮 想 ネ ットワーク の 構 築 属性名 データタイプ 定義 srcmacaddr srcmacmask MAC_ADDR MAC_MASK dstmacaddr dstmacmask MAD_ADDR MAC_MASK srcipaddr srcipmask IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK srcipfro m scripto dstipfro m dstipto co mment state IP_ADDR IP_ADDR IP_ADDR IP_ADDR STRING STRING ipset STRING ipsetflags IPSETFLAGS 送信側の MAC アドレス 送信側の MAC アドレスに適用され るマスク 宛先の MAC アドレス 宛先の MAC アドレスに適用される マスク ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 最長 256 文字のテキスト文字列 NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 1 9 .1 2 .1 0 .1 0 . IP V 6 経由の TC P /UDP /S C TP プロトコル ID: tcp-ipv6 、udp-ipv6 、sctp-ipv6 このタイプのトラフィックに関してはチェーンパラメーターは無視されるため、省略するか、またはルートに設定します。 表1 9 . 1 2 IP v6 経由の T CP 、 UD P 、 S CT P プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcipaddr srcipmask MAC_ADDR IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK srcipfro m scripto dstipfro m dstipto srcpo rtstart srcpo rtend dstpo rtstart dstpo rtend co mment IP_ADDR IP_ADDR IP_ADDR IP_ADDR UINT16 UINT16 UINT16 UINT16 STRING 送信側の MAC アドレス ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 有効なソースポート範囲の開始点 有効なソースポート範囲の終了点 有効な宛先ポート範囲の開始点 有効な宛先ポート範囲の終了点 最長 256 文字のテキスト文字列 303 仮 想 化 管 理 ガイ ド 属性名 データタイプ 定義 state STRING ipset STRING ipsetflags IPSETFLAGS NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 1 9 .1 2 .1 0 .1 1 . IC M P v 6 プロトコル ID: icmpv6 このタイプのトラフィックに関してはチェーンパラメーターは無視されるため、省略するか、またはルートに設定します。 表1 9 . 1 3 ICM P v6 プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcipaddr srcipmask MAC_ADDR IP_ADDR IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK srcipfro m scripto dstipfro m dstipto type co de co mment state IP_ADDR IP_ADDR IP_ADDR IP_ADDR UINT16 UINT16 STRING STRING ipset STRING ipsetflags IPSETFLAGS 送信側の MAC アドレス ソースの IP アドレス ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 ICMPv6 のタイプ ICMPv6 のコード 最長 256 文字のテキスト文字列 NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 1 9 .1 2 .1 0 .1 2 . IP v 6 経由の IG M P 、ES P 、A H、UDP LITE、' A LL' プロトコル ID: igmp-ipv6 、esp-ipv6 、ah-ipv6 、udplite-ipv6 、all-ipv6 このタイプのトラフィックに関してはチェーンパラメーターは無視されるため、省略するか、またはルートに設定します。 表1 9 . 1 4 IP v 経由の IG M P 、 E S P 、 AH、 UD P L IT E 、 ' AL L ' プロ ト コル タイプ 属性名 データタイプ 定義 srcmacaddr srcipaddr MAC_ADDR IP_ADDR 送信側の MAC アドレス ソースの IP アドレス 304 第 19 章 仮 想 ネ ットワーク の 構 築 属性名 データタイプ 定義 srcipmask IP_MASK dstipaddr dstipmask IP_ADDR IP_MASK srcipfro m scripto dstipfro m dstipto co mment state IP_ADDR IP_ADDR IP_ADDR IP_ADDR STRING STRING ipset STRING ipsetflags IPSETFLAGS ソースの IP アドレスに適用されるマ スク 宛先の IP アドレス 宛先の IP アドレスに適用されるマス ク ソースの IP アドレス範囲の開始点 ソースの IP アドレス範囲の終了点 宛先の IP アドレス範囲の開始点 宛先の IP アドレス範囲の終了点 最長 256 文字のテキスト文字列 NEW、ESTABLISHED、 RELATED、INVALID または NONE のコンマで区切った一覧 libvirt の外側で管理されている IPSet の名前 IPSet のフラグ、ipset 属性を必要 とする 19.12.11. 高度なフィルタ ー設定について 次のセクションでは高度なフィルター設定について解説していきます。 1 9 .1 2 .1 1 .1 . 接続の 追跡 ネットワークフィルターのサブシステム (Linux 上) では、IP テーブルの接続追跡のサポートを利用しています。ネット ワークトラフィックの方向性を強制する (状態一致) 他、ゲストに対する同時接続数をカウントし制限するのに役立ちま す。たとえば、ゲスト仮想マシン側で TCP ポート 8 0 8 0 をサーバーとして開くと、クライアントはポート 8 0 8 0 でゲス ト仮想マシンに接続することができます。接続の追跡と方向性の強制により、逆方向となるポート 8 0 8 0 から (TCP クライアントから) ホストへの接続の開始は妨げられます。さらに重要な点は、追跡を行なうことにより、遠隔操作によ りゲスト仮想マシンへの接続を確立するような攻撃を防ぐことができます。たとえば、ゲスト仮想マシン内のユーザー が攻撃者のサイトでポート 8 0 への接続を確立した場合でも、攻撃者は逆方向となる TCP ポート 8 0 からこのゲス ト仮想マシンへの接続は開始できません。デフォルトでは、接続追跡およびトラフィックの方向性強制を有効にする接 続状態一致はオンになっています。 例1 9 . 9 T CP ポート へ の 接続をオ フ にす る X M L 例 以下の XML の抜粋例では、TCP ポート 1234 5 への着信接続に対してこの機能をオフにしています。 [...] <rule direction='in' action='accept' statem atch='false'> <cp dstportstart='12345'/> </rule> [...] これにより、TCP ポート 1234 5 への着信トラフィックが許可されますが、また仮想マシン内の TCP ポート 1234 5 (クライアント) からの接続開始も有効になります。状況により適している場合もありますが、適さない可能 性もあります。 1 9 .1 2 .1 1 .2 . 接続数を制限す る 305 仮 想 化 管 理 ガイ ド ゲスト仮想マシンで確立できる接続数を制限する場合、特定タイプのトラフィック接続数に制限を設けるルールを指定 する必要があります。たとえば、仮想マシンに同時に ping を許可するのは 1 つの IP アドレスのみに制限し、また同 時に持つことのできるアクティブな着信 SSH 接続を 1 つに制限する場合などです。 例1 9 . 1 0 接続数に制限を設け る X M L の 例 次の XML の抜粋例を使って接続数を制限することができます。 [...] <rule action='drop' direction='in' priority='400'> <tcp connlim it-above='1'/> </rule> <rule action='accept' direction='in' priority='500'> <tcp dstportstart='22'/> </rule> <rule action='drop' direction='out' priority='400'> <icm p connlim it-above='1'/> </rule> <rule action='accept' direction='out' priority='500'> <icm p/> </rule> <rule action='accept' direction='out' priority='500'> <udp dstportstart='53'/> </rule> <rule action='drop' direction='inout' priority='1000'> <all/> </rule> [...] 306 第 19 章 仮 想 ネ ットワーク の 構 築 注記 制限ルールは、トラフィックを許可するルールの前に XML に記載する必要があります。例19.10 「接続数に制 限を設ける XML の例」 の XML ファイルでは、ポート 22 へ送信される DNS トラフィックがゲスト仮想マシン に到着するのを許可するルールが追加され、SSH デーモンによる DNS 検索の失敗に関連する理由で SSH セッションが確立されなくなることを防ぐようにされています。このルールを省くと、SSH クライアントが接続を 試行する際に予期しないハングを招く可能性があります。トラフィックの追跡に関連するタイムアウトを扱う場合 は十分な注意が必要です。ユーザーがゲスト仮想マシン内で終了させた可能性のある ICMP ping に長期の タイムアウトがホスト物理マシンの接続追跡システムで設定されていると、別の ICMP ping を通過させない ことがあります。 最適なソリューションとしては、ホスト物理マシンの s y s fs 内のタイムアウトをコマンド「# e c h o 3 > / p r o c / s y s / n e t / n e t filt e r / n f_ c o n n t r a c k _ ic m p _ t im e o u t 」で調整する方法です。このコマン ドにより、ICMP 接続の追跡タイムアウトが 3 秒に設定されます。1 つの ping が終了すると、別の ping が 3 秒後に開始できるようになります。 何らかの理由でゲスト仮想マシンにより TCP 接続が正しく閉じられなかった場合、とくにホスト物理マシンで の TCP のタイムアウト値が長時間設定されていた場合などは、接続が長い期間、開いたままになります。ま た、アイドル接続は接続追跡システム内でタイムアウトすることがあり、パケットが交換されると再度、アクティ ブになる場合があります。 ただし、 制限が低すぎると新たに開始された接続がアイドル接続を TCP バックオフに強制することがありま す。 したがって、 接続の制限はむしろ高く設け、 新しい TCP 接続での変動がアイドル接続に関連して異常な トラフィック動作の原因にならないようにします。 1 9 .1 2 .1 1 .3 . コマ ンドラインツール virsh がネットワークフィルターのライフサイクルサポートで拡張されています。ネットワークフィルターサブシステムに 関連するコマンドはすべて n w filt e r のプレフィックスで開始されます。使用できるコマンドは次の通りです。 n w filt e r - lis t : 全ネットワークフィルターの UUID と名前を表示します n w filt e r - d e fin e : 新しいネットワークフィルターを指定するか、または既存のフィルターを更新します (フィル ター名の入力要)。 n w filt e r - u n d e fin e : 指定したネットワークフィルターを削除します (フィルター名の入力要)。また、使用中の ネットワークフィルターは削除しません。 n w filt e r - d u m p x m l : 指定したネットワークフィルターを表示します (フィルター名の入力要)。 n w filt e r - e d it : 指定したネットワークフィルターを編集します (フィルター名の入力要)。 1 9 .1 2 .1 1 .4 . 事前に用意さ れ るネ ッ ト ワーク フ ィ ル タ ー libvirt で自動的にインストールされるサンプルのネットワークフィルターの一覧を示します。 表1 9 . 1 5 ICM P v6 プロ ト コル タイプ コマ ンド名 詳細 no -arp-spo o fing ゲスト仮想マシンによる ARP トラフィックのなりすましを 防ぎます。このフィルターは ARP 要求と返信メッセージ だけを許可し、パケットにはゲストの MAC と IP アドレス が必ず含まれるよう強制します。 307 仮 想 化 管 理 ガイ ド コマ ンド名 詳細 allo w-dhcp ゲスト仮想マシンによる DHCP 経由の IP アドレスの要 求を許可します (すべての DHCP サーバー)。 ゲスト仮想マシンによる指定 DHCP サーバーからの IP アドレスの要求を許可します。DHCP サーバーのドット 付き 10 進数 IP アドレスをこのフィルターへの参照内 に与える必要があります。変数名は DHCPSERVER に してください。 ゲスト仮想マシンが、パケット内部のアドレスとは異なる ソースの IP アドレスを持つ IP パケットを送信することを 防ぎます。 ゲスト仮想マシンが IP マルチキャストパケットを送信す ることを防ぎます。 MAC、IP および ARP のなりすましを防ぎます。このフィ ルターは構築ブロックとして他の複数のフィルターを参 照します。 allo w-dhcp-server no -ip-spo o fing no -ip-multicast clean-traffic これらのフィルターは構築ブロックに過ぎないため、 ネットワークトラフィックフィルターの機能を果たすためには他の フィルターとの組み合わせが必要になります。 上記の一覧内でもっとも使用されるフィルターが clean-traffic フィル ターです。 たとえば、 このフィルター自体を no -ip-multicast フィルターと組み合わせ、 パケットのなりすまし防止に 加え仮想マシンによる IP マルチキャストトラフィックの送信も防ぎます。 1 9 .1 2 .1 1 .5 . 独自の フ ィ ル タ ーを記述す る libvirt で提供されるのは数種類のサンプルネットワークフィルターのみとなるため、独自のフィルターの記述を検討す るのもよいでしょう。独自のフィルターを記述する場合、ネットワークフィルターサブシステムについて、またこのシステ ムが内部的にどのように機能するのかを知っておく必要があるかもしれません。また、意図するトラフィック以外のトラ フィックは通過できず、 意図するトラフィックのみが確実に通過できるようフィルタリングを行なうプロトコルについて十 分な知識と理解が必要になります。 ネットワークフィルターサブシステムは、現在、Linux のホスト物理マシン上でしか利用できないため、Qemu および KVM タイプの仮想マシンにしか動作しません。Linux では、ebtables、iptables、ip6 tables のサポートで構築さ れ、またこれらの機能を利用をします。「対応しているプロトコル」 の一覧を参照してください。以下のプロトコルを ebtables を使って実装できます。 mac stp (ツリープロトコル全体) vlan (8 0 2.1Q) arp、rarp ipv4 ipv6 IPv4 経由で実行するプロトコルはすべて iptables を使ってサポートします。IPv6 経由で実行するプロトコルは ip6 tables を使って実装します。 Linux ホスト物理マシンを使用すると、libvirt のネットワークフィルターサブシステムで作成されたトラフィックフィル タールールはすべて ebtables で実装したフィルターサポートを最初に通過してから、 iptables または ip6 tables フィルターに移行します。フィルターツリーに mac、stp、vlan arp、rarp、ipv4 、ipv6 などいずれかのプロトコルの ルールがある場合、まず etable のルールと記述されている値が自動的に使用されます。 308 第 19 章 仮 想 ネ ットワーク の 構 築 同じプロトコルのチェーンを複数作成することができます。チェーン名には、 前にエミュレートしたプロトコルのいずれ かのプレフィックスを含ませる必要があります。ARP トラフィックの処理用に追加でチェーンを作成する場合は、arptest などの名前を付けたチェーンを指定することができます。 たとえば、IP プロトコルフィルターを使用し、許可される UDP パケットのポート、ソースと宛先の IP アドレス、プロトコ ルの属性を指定して、ソースと宛先のポートごとに UDP トラフィック上でフィルターをかけることが可能です。これによ り、ebtables を使った早期の UDP トラフィックのフィルタリングが可能になります。ただし、UDP パケットなどの IP または IPv6 パケットが ebtables 層を通過した後に、iptables または ip6 tables のルールのインスタンスを作成 するルールが少なくとも 1 つフィルターツリー内にある場合は、 UDP パケットを通過させるルールをこのフィルター層 にも与える必要があります。これは、適切な udp または udp-ipv6 のトラフィックフィルターノードを含むルールで行な います。 例1 9 . 1 1 カ ス タム の フ ィル ターを作成す る 以下の要件を満たすフィルターが必要であると仮定します。 仮想マシンのインターフェースによる MAC、IP、ARP のなりすましを防ぐ 仮想マシンのインターフェースの TCP ポート 22 と 8 0 のみを開く 仮想マシンによるインターフェースからの ping トラフィック送信を許可する、ただしインターフェース上で仮想マ シンに対する ping には応答させない 仮想マシンによる DNS 検索を許可する (ポート 53 への UDP) なりすまし防止の要件は、 既存の c le a n - t r a ffic フィルターで満たすことができるため、カスタムフィルターか らこのフィルターを参照させます。 TCP ポート 22 と 8 0 のトラフィックを許可するため、2 種類のルールを追加します。ゲスト仮想マシンによる ping トラフィックの送信を許可するために ICMP トラフィックにルールを 1 つ追加します。単純にするため、ゲスト仮想マ シンによる一般的な ICMP トラフィックの開始を許可し、ICMP echo の要求および応答のメッセージに対する ICMP トラフィックの指定を行ないません。他のトラフィックについては、ゲスト仮想マシンからの発信および着信は すべて遮断します。これを行なうため、他のすべてのトラフィックをドロップするルールを追加します。ゲスト仮想マシ ン名は t e s t 、フィルターを関連付けるインターフェースは e t h 0 とし、作成するフィルターには t e s t - e t h 0 とい う名前を付けるとします。 上記をネットワークフィルターの XML に反映させると以下のようになります。 <filter nam e='test-eth0'> <!- - This rule references the clean traffic filter to prevent M AC, IP and ARP spoofing. By not providing an IP address param eter, libvirt will detect the IP address the guest virtual m achine is using. - -> <filterref filter='clean-traffic'/> <!- - This rule enables TCP ports 22 (ssh) and 8 0 (http) to be reachable - -> <rule action='accept' direction='in'> <tcp dstportstart='22'/> </rule> <rule action='accept' direction='in'> <tcp dstportstart='8 0'/> </rule> <!- - This rule enables general ICM P traffic to be initiated by the guest virtual m achine including ping traffic - -> <rule action='accept' direction='out'> <icm p/> 309 仮 想 化 管 理 ガイ ド </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> 1 9 .1 2 .1 1 .6 . サ ンプル の カ ス タ ム フ ィ ル タ ー 上記の XML 内のルールの 1 つにはゲスト仮想マシンのソースまたは宛先のアドレスとなるいずれかの IP アドレス が含まれていますが、トラフィックのフィルタリングは正しく動作します。ルールの評価はインターフェースごとに内部的 に発生しますが、ソースや宛先の IP アドレスではなく、パケットを送信したか、または受信するインターフェース (tap) に基づいて追加でルールが評価されるためです。 例1 9 . 1 2 ネ ッ ト ワーク インターフ ェ ース の 詳細部分の サ ンプル X M L test ゲスト仮想マシンのドメイン XML 内にあるネットワークインターフェースの詳細例を以下の XML の抜粋例で 示します。 [...] <interface type='bridge'> <source bridge='m ybridge'/> <filterref filter='test-eth0'/> </interface> [...] ICMP トラフィックをさらに厳密に制御し、ICM echo の要求はゲスト仮想マシンからしか送信できないようにする と共に、ICMP echo の応答もゲスト仮想マシンでしか受信できないようにするには、上記の ICMP ルールを次の 2 つのルールに置き換えます。 <!- - enable outgoing ICM P echo requests- -> <rule action='accept' direction='out'> <icm p type='8 '/> </rule> <!- - enable incom ing ICM P echo replies- -> <rule action='accept' direction='in'> <icm p type='0'/> </rule> 例1 9 . 1 3 サ ンプル の カ ス タム フ ィル ター No 2 この例では、前述の例と同じようなフィルターを構築していますが、ゲスト仮想マシン内にある ftp サーバーでの要 件一覧を拡大しています。このフィルターの要件は次の通りです。 310 第 19 章 仮 想 ネ ットワーク の 構 築 ゲスト仮想マシンのインターフェースによる MAC、IP、ARP のなりすましを防ぐ ゲスト仮想マシンのインターフェースの TCP ポート 22 と 8 0 のみを開く ゲスト仮想マシンによるインターフェースからの ping トラフィック送信を許可するが、インターフェース上でゲス ト仮想マシンに対する ping には応答させない ゲスト仮想マシンによる DNS 検索を許可する (ポート 53 への UDP) ftp サーバーを有効にして (アクティブモード)、ゲスト仮想マシンの内側で稼働できるようにする ゲスト仮想マシンの内側で FTP サーバーを稼働できるようにする追加要件は、FTP 制御トラフィックに対してポー ト 21 をアクセス可能にし、またゲスト仮想マシンによるゲスト仮想マシンの TCP ポート 20 から FTP クライアント (FTP アクティブモード) へ向けて発信する TCP 接続の確立を許可することになります。このフィルターは複数の方 法で記述することができるため、この例では 2 種類のソリューションを示します。 1 つ目のソリューションでは、Linux ホスト物理マシンの接続追跡フレームワークとのつながりを提供する TCP プ ロトコルの状態属性を利用します。ゲスト仮想マシンが開始した FTP データ接続の場合 (FTP アクティブモード)、 RELATED の状態を使ってゲスト仮想マシンによって開始された FTP データ接続が既存の FTP 制御接続の結 果である (または関連性がある) ことを検出します。これにより、パケットがファイアウォールを通過できるようになり ます。ただし、RELATED 状態は、FTP データパスの TCP 発信接続の 1 番目のパケットにのみ有効になります。 以後、状態は ESTABLISHED になります。この状態が均等に着信と発信の方向に適用されます。これはすべてゲ スト仮想マシンの TCP ポート 20 から発信された FTP データトラフィックに関連します。これが次のソリューション につながります。 <filter nam e='test-eth0'> <!- - This filter (eth0) references the c le a n t r a ffic filter to prevent M AC, IP, and ARP spoofing. By not providing an IP address param eter, libvirt will detect the IP address the guest virtual m achine 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 m achine-initiated FTP data connection related to an existing FTP control connection - -> <rule action='accept' direction='out'> <tcp srcportstart='20' state='RELATED,ES TABLIS HED'/> </rule> <!- - This rule accepts all packets from a client on the FTP data connection - -> <rule action='accept' direction='in'> <tcp dstportstart='20' state='ES TABLIS HED'/> </rule> <!- - This rule enables TCP port 22 (S S H) to be reachable - -> <rule action='accept' direction='in'> <tcp dstportstart='22'/> </rule> <!- -This rule enables TCP port 8 0 (HTTP) to be reachable - -> <rule action='accept' direction='in'> <tcp dstportstart='8 0'/> </rule> 311 仮 想 化 管 理 ガイ ド <!- - This rule enables general ICM P traffic to be initiated by the guest virtual m achine, including ping traffic - -> <rule action='accept' direction='out'> <icm p/> </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> RELATED 状態を使ってフィルターを試す前に、適切な接続追跡モジュールがホスト物理マシンのカーネルにロー ドされていることを確認する必要があります。カーネルのバージョンによっては、ゲスト仮想マシンで FTP 接続が確 立される前に次の 2 つのコマンドのいずれかを実行する必要があります。 #m o d p r o b e n f_ c o n n t r a c k _ ft p - このコマンドが使用できる場合はこれを使います。 #m o d p r o b e ip _ c o n n t r a c k _ ft p - 上記のコマンドが使えない場合にこのコマンドを使用します。 FTP 以外のプロトコルを RELATED 状態と併用する場合は、該当するモジュールをロードする必要があります。各 プロトコルに使用できるモジュールは、ftp、tftp、irc、sip、sctp、amanda です。 2 つ目のソリューションでは、前述のソリューションよりさらに多くの接続の状態フラグを利用しています。このソ リューションでは、トラフィックの一番最初のパケットが検出されると接続の NEW 状態が有効になる点を利用して います。続いて、流れの最初のパケットが許可されると、その流れは接続になるため ESTABLISHED 状態に移行 します。したがって、ESTABLISHED 接続のパケットのゲスト仮想マシンへの着信、またゲスト仮想マシンからの 発信を許可する汎用ルールを記述することができます。NEW 状態で識別できる一番最初のパケットに関する特定 のルールを記述し、データを受け取ることができるポートを指示します。明示的に許可されていないポートに向けた パケットはすべてドロップされるため、ESTABLISHED 状態にはなりません。そのポートから送信される後続パケッ トもすべてドロップされます。 <filter nam e='test-eth0'> <!- - This filter references the c le a n t r a ffic filter to prevent M AC, IP and ARP spoofing. By not providing and IP address param eter, 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 m achine - -> <rule action='accept' direction='in'> <all state='ES TABLIS HED'/> </rule> <!- - This rule allows the packets of all previously accepted and related connections be sent from the guest virtual m achine - -> <rule action='accept' direction='out'> <all state='ES TABLIS HED,RELATED'/> </rule> <!- - This rule enables traffic towards port 21 (FTP) and port 22 (S S H)- -> 312 第 19 章 仮 想 ネ ットワーク の 構 築 <rule action='accept' direction='in'> <tcp dstportstart='21' dstportend='22' state='NEW'/> </rule> <!- - This rule enables traffic towards port 8 0 (HTTP) - -> <rule action='accept' direction='in'> <tcp dstportstart='8 0' state='NEW'/> </rule> <!- - This rule enables general ICM P traffic to be initiated by the guest virtual m achine, including ping traffic - -> <rule action='accept' direction='out'> <icm p 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> 19.12.12. 限界 ネットワークフィルターサブシステムに関して、現在既知の限界を以下に示します。 仮想マシンの移行サポートは、ゲスト仮想マシンのトップレベルのフィルターで参照されるフィルターツリー全体が ターゲットのホスト物理マシンでも使用できる場合に限られます。たとえば、ネットワークフィルター c le a n t r a ffic はすべての libvirt インストールで使用できる状態でなければなりません。これにより、このフィルターを 参照するゲスト仮想マシンの移行が可能になります。バージョンの互換性が問題とならないよう、定期的にパッ ケージの更新を行い、常に最新の libvirt バージョンを使用するようにしてください。 インターフェースに関連しているネットワークトラフィックフィルターを失わないよう、移行はバージョン 0 .8 .1 または それ以降の libvirt インストール間で行うようにしてください。 VLAN (8 0 2.1Q) パケットがゲスト仮想マシンによって送信された場合、プロトコル ID が arp、rarp、ipv4 、ipv6 のルールではフィルターを行うことができません。このようなパケットをフィルターできるのは、プロトコル ID が MAC か VLAN の場合のみです。したがって、clean-traffic フィルターの例の 例19.1「ネットワークフィルターの 例」 は期待通りには機能しません。 19.13. トンネ ルの 作成 このセクションでは、複数の異なるトンネルを使用したシナリオを実施する方法について説明します。 19.13.1. マ ルチキ ャ ス トトンネ ルの 作成 マルチキャストグループは、仮想ネットワークを表すためにセットアップされます。ネットワークデバイスが同じマルチ キャストグループにあるゲスト仮想マシンは、異なるホスト物理マシン間であっても相互に通信することができます。こ のモードは、権限のないユーザーも使用できます。デフォルトの DNS または DHCP サポートはなく、発信ネットワーク 313 仮 想 化 管 理 ガイ ド アクセスもありません。発信ネットワークアクセスを提供するには、ゲスト仮想マシンの 1 つに、適切なルートを提供す る、最初の 4 つのネットワークタイプのいずれかに接続されている 2 つ目の NIC が必要になります。マルチキャスト プロトコルは、ゲスト仮想マシンのユーザーモードと互換性があります。指定するソースアドレスは、マルチキャストアド レスブロックに使用されるアドレスからのものである必要があります。 マルチキャストトンネルを作成するには、以下の XML 詳細を < d e v ic e s > 要素に指定します。 ... <devices> <interface type='m cast'> <m ac address='52:54:00:6 d:90:01'> <source address='230.0.0.1' port='5558 '/> </interface> </devices> ... 図1 9 . 2 5 マ ル チキ ャス ト ト ンネ ル の X M L サ ンプル 19.13.2. TCP トンネ ルの 作成 TCP クライアント/サーバーアーキテクチャーは仮想ネットワークを提供します。この設定では、他のすべてのゲスト仮 想マシンがクライアントとして設定される中、1 つのゲスト仮想マシンがネットワークのサーバーエンドを提供します。す べてのネットワークトラフィックは、ゲスト仮想マシンサーバーを経由してゲスト仮想マシンクライアント間で経路指定さ れます。このモードは、権限のないユーザーも利用できます。このモードは、デフォルトの DNS または DHCP サポート を提供せず、発信ネットワークアクセスも提供しないことに注意してください。発信ネットワークアクセスを提供するに は、ゲスト仮想マシンの 1 つに、適切なルートを提供する、最初の 4 つのネットワークタイプのいずれかに接続されて いる 2 つ目の NIC がなければなりません。 TCP トンネルを作成するには、以下の XML 詳細を < d e v ic e s > 要素に置きます。 ... <devices> <interface type='server'> <m ac address='52:54:00:22:c9:42'> <source address='192.16 8 .0.1' port='5558 '/> </interface> ... <interface type='client'> <m ac address='52:54:00:8 b:c9:51'> <source address='192.16 8 .0.1' port='5558 '/> </interface> </devices> ... 図1 9 . 2 6 T CP ト ンネ ル の ドメイン X M L サ ンプル 19.14 . vLA N タグ の 設定 314 第 19 章 仮 想 ネ ットワーク の 構 築 virtual lo cal area netwo rk (vLAN) タグは、v ir s h n e t - e d it コマンドを使用して追加されます。このタグは、 SR-IOV デバイスの PCI デバイスの割り当てで使用することもできます。詳細は、「SR-IOV デバイスの場合の PCI 割 り当て (パススルー) の設定 」を参照してください。 <network> <nam e>ovs-net</nam e> <forward m ode='bridge'/> <bridge nam e='ovsbr0'/> <virtualport type='openvswitch'> <param eters interfaceid='09b11c53-8 b5c-4eeb-8 f00-d8 4eaa0aaa4f'/> </virtualport> <vlan trunk='yes'> <tag id='42' nativeM ode='untagged'/> <tag id='47'/> </vlan> <portgroup nam e='dontpanic'> <vlan> <tag id='42'/> </vlan> </portgroup> </network> 図1 9 . 2 7 vS e t t in g VL AN タグ ( 対応す るネ ッ ト ワーク タイプの 場合の み) ネットワークタイプがゲストに透過的な vlan タグに対応している場合 (のみ)、オプションの < v la n > 要素は、このネッ トワークを使用するすべてのゲストのトラフィックに適用する 1 つ以上の vlan タグを指定することができます。 (o penvswitch および type='ho stdev' SR-IOV ネットワークはゲストトラフィックの透過的な VLAN タグに対応しま せん。標準的な Linux ブリッジや libvirt の独自の仮想ネットワークなど、これ以外のものもこのタグに対応しません。 8 0 2.1Qbh (vn-link) および 8 0 2.1Qbg (VEPA) スイッチは、ゲストトラフィックを特定の vlans にタグ付けするため の独自の方法 (libvirt 外)を提供します。tagu 属性は、予想どおりに、使用する vlan タグを指定します。ネットワーク に複数の < v la n > 要素が定義されている場合、ユーザーはすべての指定タグを使用して VLAN トランキングを実行 することを必要していると想定されます。単一タグの VLAN トランキングが必要な場合、オプション属性の trunk='yes' を VLAN 要素に追加できます。 o penvswitch を使用するネットワーク設定の場合、「native-tagged」(ネイティブ-タグ付け) および「nativeuntagged」(ネイティブ-タグ解除) の VLAN モードを設定することができます。これは、< t a g > 要素でオプションの nativeMo de 属性を使用します。nativeMo de は「tagged」または「untagged」に設定することができます。この 要素の id 属性は、ネイティブの vlan を設定します。 < v la n > 要素は、ドメインの < in t e r fa c e > 要素に直接指定されるのと同様に、< p o r t g r o u p > 要素にも指定す ることができます。vlan タグが複数の場所に指定される場合、< in t e r fa c e > の設定が優先され、次に interface co nfig で選択される < p o r t g r o u p > が適用されます。< n e t w o r k > の < v la n > は、< p o r t g r o u p > または < in t e r fa c e > にいずれの値も指定されない場合にのみ選択されます。 19.15. QoS の 仮想ネ ットワ ークへの 適用 Quality o f Service (Qo S) は、ネットワーク上のすべてのユーザーにとっての最適な体験を保証するリソースコント ロールシステムを指し、遅延、ジッター (ゆらぎ)、またはパケットの喪失を防ぎます。Qo S はアプリケーション固有の、ま たはユーザー/グループに固有のものにすることができます。詳細は、「Qo S (Quality o f Service)」 を参照してくださ い。 315 仮 想 化 管 理 ガイ ド 第20章 qemu -k vm コマンド、フラグ、および引数 20 .1. はじめ に 注記 本章の主な目的は、Red Hat Enterprise Linux 6 でエミュレーターおよびハイパーバイザーとして使用され る q e m u - k v m ユーティリティーのコマンド、フラグ、および引数の一覧を提供することです。これは、機能するこ とがわかっているものの、ユーザーの自己責任において使用されるオプションについての包括的な要約です。 Red Hat Enterprise Linux 6 は、基礎となる仮想化テクノロジーに KVM を使用しています。使用されるマ シンのエミュレーターおよびハイパーバイザーは、qemu-kvm と呼ばれる QEMU の修正版になります。この バージョンはオリジナルの QEMU の設定オプションすべてには対応しないため、追加オプションがいくつかあ ります。 ここに記載されていない オプションは、使用しないでください。 ホワイト リス ト 形式 < n a me > - 構文詳細で使用されている場合、この文字列はユーザー定義の値に置き換えてください。 [ a | b | c] - 構文記述で使用されている場合、 「 | 」で区切られている文字列のいずれかひとつだけを使用します。 コメントがない場合、 オプションはあらゆる値に対応します。 20 .2. 基本オプション エミュレ ート したマ シ ン -M <マシンタイプ> -ma ch in e <machine-type>[ , < p r o p e r t y > [ = < v a lu e > ][ , ..]] プロ セッ サ ーの タ イプ -cp u <mo del>[,<FEATURE>][...] 追加のモデルは、- c p u ? コマンドを実行すると表示されます。 O p t e ro n _ G 5 - AMD Optero n 6 3xx クラスの CPU O p t e ro n _ G 4 - AMD Optero n 6 2xx クラスの CPU O p t e ro n _ G 3 - AMD Optero n 23xx (AMD Optero n Gen 3) O p t e ro n _ G 2 - AMD Optero n 22xx (AMD Optero n Gen 2) O p t e ro n _ G 1 - AMD Optero n 24 0 (AMD Optero n Gen 1) We s t me re - Westmere E56 xx/L56 xx/X56 xx (Nehalem-C) Ha s we ll - Intel Co re プロセッサー (Haswell) S a n d yB rid g e - Intel Xeo n E312xx (Sandy Bridge) 316 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 Ne h a le m - Intel Co re i7 9xx (Nehalem Class Co re i7) P e n ryn - Intel Co re 2 Duo P9xxx (Penryn Class Co re 2) Co n ro e - Intel Celero n_4 x0 (Co nro e/Mero m Class Co re 2) cp u 6 4 -rh e l5 - Red Hat Enterprise Linux 5 QEMU Virtual CPU 対応バージョン cp u 6 4 -rh e l6 - Red Hat Enterprise Linux 6 QEMU Virtual CPU 対応バージョン d e fa u lt - 特殊なオプションです。有効にするには default を上記のオプションと併用します。 プロ セッ サ ーの ト ポロ ジ ー -s mp <n>[,co res=<nco res>][,threads=<nthreads>][,so ckets=<nso cks>][,maxcpus=<maxcpus>] ハイパーバイザーとゲストのオペレーティングシステムにより適用するプロセッサーのトポロジーに制約があります。 NUM A シ ス テム -n u ma <no des>[,mem=<size>][,cpus=<cpu[-cpu>]][,no deid=<no de>] ハイパーバイザーとゲストのオペレーティングシステムにより適用するプロセッサーのトポロジーに制約があります。 メモ リーの サ イズ -m <megs> 対応できる値は、ゲストの最小値と最大値およびハイパーバイザーの制約によって限られます。 キ ーボードの レ イアウ ト -k <language> ゲス ト 名 -n a me <name> ゲス ト の UUID -u u id <uuid> 20 .3. ディス クの オプション 汎用ドライブ -d rive <o ptio n>[,<o ptio n>[,<o ptio n>[,...]]] 以下のようなオプションに対応しています。 re a d o n ly [o n|o ff] we rro r [eno spc|repo rt|sto p|igno re] re rro r [repo rt|sto p|igno re] id =<id> 317 仮 想 化 管 理 ガイ ド if=no ne の場合、ドライブの id には以下のような制約があります。 IDE ディスクには、drive-ide0 -<BUS>-<UNIT> <id> の形式の <id> が必要になります。 正しい例を示します。 -drive if=no ne,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> として渡す場合、ドライブの指定が IDE ドライブ (if=ide、 if=no ne + -device idedrive のいずれか) で、メディアタイプが cdro m (media=cdro m) に指定されている場合にのみ対応していま す。 <file> がブロックデバイス、キャラクターデバイスのいずれでもない場合は、「:」を含ませないようにしてくださ い。 if =<interface> no ne、ide、virtio 、flo ppy のインターフェースに対応しています。 in d e x =<index> me d ia =<media> ca ch e =<cache> 対応している値は no ne、writeback、writethro ugh です。 co p y-o n -re a d =[o n|o ff] s n a p s h o t =[yes|no ] s e ria l =<serial> a io =<aio > fo rma t =<fo rmat> このオプションは必須ではないため省略可能です。ただし、セキュリティー上危険であるため、raw イメージには推 奨できません。対応している形式は以下の通りです。 q co w2 ra w ブ ート オ プシ ョン -b o o t [o rder=<drives>][,menu=[o n|o ff]] ス ナ ッ プシ ョッ ト モ ード -s n a p s h o t 20 .4 . ディス プレイの オプション 318 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 グ ラフ ィ ッ ク を無効にす る -n o g ra p h ic V G A カ ードの エミュレ ーシ ョン -vg a <type> 対応している種類: cirru s - Cirrus Lo gic GD54 4 6 ビデオカード s t d - Bo chs VBE 拡張を搭載している標準的な VGA カード q xl - Spice 準仮想カード n o n e - VGA カードの無効 V NC ディ ス プレ イ -vn c <display>[,<o ptio n>[,<o ptio n>[,...]]] 対応しているディスプレイ値: [<ho st>]:<po rt> unix:<path> s h a re [allo w-exclusive|fo rce-shared|igno re] no ne - 指定されている他のオプションではサポートされません サポートしているオプションは以下の通りです。 t o =<po rt> re ve rs e p a s s wo rd t ls x5 0 9 =</path/to /certificate/dir> - t ls を指定した場合に対応 x5 0 9 ve rify =</path/to /certificate/dir> - t ls を指定した場合に対応 sasl a cl S p ic e デス ク ト ッ プ -s p ice o ptio n[,o ptio n[,...]] サポートしているオプションは以下の通りです。 p o rt =<number> a d d r =<addr> ip v4 319 仮 想 化 管 理 ガイ ド ip v6 p a s s wo rd =<secret> d is a b le -t ick e t in g d is a b le -co p y-p a s t e t ls -p o rt =<number> x5 0 9 -d ir =</path/to /certificate/dir> x5 0 9 -k e y-file =<file> x5 0 9 -k e y-p a s s wo rd =<file> x5 0 9 -ce rt -file =<file> x5 0 9 -ca ce rt -file =<file> x5 0 9 -d h -k e y-file =<file> t ls -cip h e r =<list> t ls -ch a n n e l [main|display|curso r|inputs|reco rd|playback] p la in t e xt -ch a n n e l [main|display|curso r|inputs|reco rd|playback] ima g e -co mp re s s io n =<co mpress> jp e g -wa n -co mp re s s io n =<value> z lib -g lz -wa n -co mp re s s io n =<value> s t re a min g -vid e o =[o ff|all|filter] a g e n t -mo u s e =[o n|o ff] p la yb a ck -co mp re s s io n =[o n|o ff] s e a mle s s -mig ra t io =[o n|o ff] 20 .5. ネ ットワ ークの オプション TA P ネ ッ ト ワーク -n e t d e v t a p ,id=<id>][,<o ptio ns>...] 次のオプションに対応しています (すべて name=value の形式を使用)。 ifname fd script do wnscript sndbuf vnet_hdr 320 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 vho st vho stfd vho stfo rce 20 .6. デバイス の オプション 汎用デバ イス -d e vice <driver>[,<pro p>[=<value>][,...]] すべてのドライバーで次のプロパティーに対応しています。 id bus 次のドライバーに対応しています (使用できるプロパティーを付記)。 p ci-a s s ig n ho st bo o tindex co nfigfd addr ro mbar ro mfile multifunctio n デバイスに複数の機能がある場合は、すべての機能を同じゲストに割り当てる必要があります。 rt l8 1 3 9 mac netdev bo o tindex addr e 10 0 0 mac netdev bo o tindex addr virt io -n e t -p ci io eventfd 321 仮 想 化 管 理 ガイ ド vecto rs indirect event_idx csum guest_csum gso guest_tso 4 guest_tso 6 guest_ecn guest_ufo ho st_tso 4 ho st_tso 6 ho st_ecn ho st_ufo mrg_rxbuf status ctrl_vq ctrl_rx ctrl_vlan ctrl_rx_extra mac netdev bo o tindex x-txtimer x-txburst tx addr q xl ram_size vram_size revisio n cmdlo g 322 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 addr id e -d rive unit drive physical_blo ck_size bo o tindex ver wwn virt io -b lk -p ci class drive lo gical_blo ck_size physical_blo ck_size min_io _size o pt_io _size bo o tindex io eventfd vecto rs indirect_desc event_idx scsi addr virt io -s cs i-p ci - 6 .3 でテクニカルプレビュー、6 .4 よりサポート Windo ws ゲストの場合、テクニカルプレビューの Windo ws Server 20 0 3 は 6 .5 よりサポートされなくなりま した。ただし、Windo ws Server 20 0 8 と 20 12、および Windo ws deskto p 7 と 8 は 6 .5 より完全にサポー トされています。 vecto rs indirect_desc event_idx num_queues addr is a -d e b u g co n is a -s e ria l 323 仮 想 化 管 理 ガイ ド index io base irq chardev virt s e ria lp o rt nr chardev name virt co n s o le nr chardev name virt io -s e ria l-p ci vecto rs class indirect_desc event_idx max_po rts flo w_co ntro l addr E S 1370 addr AC9 7 addr in t e l-h d a addr h d a -d u p le x cad h d a -micro cad h d a -o u t p u t cad 324 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 i6 3 0 0 e s b addr ib 7 0 0 - プロパティーなし s g a - プロパティーなし virt io -b a llo o n -p ci indirect_desc event_idx addr u s b -t a b le t migrate po rt u s b -k b d migrate po rt u s b -mo u s e migrate po rt u s b -ccid - 6 .2 より対応 po rt slo t u s b -h o s t - 6 .2 よりテクニカルプレビュー ho stbus ho staddr ho stpo rt vendo rid pro ductid iso bufs po rt u s b -h u b - 6 .2 より対応 po rt u s b -e h ci - 6 .2 よりテクニカルプレビュー freq 325 仮 想 化 管 理 ガイ ド maxframes po rt u s b -s t o ra g e - 6 .2 よりテクニカルプレビュー drive bo o tindex serial remo vable po rt u s b -re d ir - 6 .3 のテクニカルプレビュー、6 .4 よりサポート chardev filter s cs i-cd - 6 .3 のテクニカルプレビュー、6 .4 よりサポート drive lo gical_blo ck_size physical_blo ck_size min_io _size o pt_io _size bo o tindex ver serial scsi-id lun channel-scsi wwn s cs i-h d -6 .3 のテクニカルプレビュー、6 .4 よりサポート drive lo gical_blo ck_size physical_blo ck_size min_io _size o pt_io _size bo o tindex ver 326 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 serial scsi-id lun channel-scsi wwn s cs i-b lo ck -6 .3 のテクニカルプレビュー、6 .4 よりサポート drive bo o tindex s cs i-d is k - 6 .3 のテクニカルレビュー drive=drive lo gical_blo ck_size physical_blo ck_size min_io _size o pt_io _size bo o tindex ver serial scsi-id lun channel-scsi wwn p iix3 -u s b -u h ci p iix4 -u s b -u h ci ccid -ca rd -p a s s t h ru グ ロ ーバ ル デバ イス の 設定 -g lo b a l <device>.<pro perty>=<value> 「汎用デバイス」セクションでは次のような追加デバイスに対応しています。 is a -fd c driveA driveB bo o tindexA 327 仮 想 化 管 理 ガイ ド bo o tindexB q xl-vg a ram_size vram_size revisio n cmdlo g addr キ ャラク タ ーデバ イス -ch a rd e v backend,id=<id>[,<o ptio ns>] 対応しているバックエンドは以下の通りです。 n u ll ,id=<id> - null デバイス s o ck e t ,id=<id>,po rt=<po rt>[,ho st=<ho st>][,to =<to >][,ipv4 ][,ipv6 ][,no delay][,server][,no wait] [,telnet] - tcp ソケット s o ck e t ,id=<id>,path=<path>[,server][,no wait][,telnet] - unix ソケット file ,id=<id>,path=<path> - ファイルへのトラフィック s t d io ,id=<id> - 標準 I/O s p ice vmc ,id=<id>,name=<name> - spice チャンネル US B を有効にす る -u s b 20 .7. Linux/マ ルチブートの 起動 カ ーネ ル フ ァ イル -k e rn e l <bzImage> 注記: マルチブートイメージには対応していません R A M ディ ス ク -in it rd <file> コマ ンドラインパ ラメータ ー -a p p e n d <cmdline> 20 .8 . 専門的なオプション K V M 仮想化 328 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 -e n a b le -k vm QEMU-KVM で対応しているのは KVM 仮想化のみとなるため、KVM 仮想化がある場合はデフォルトで使用されま す。-enable-kvm を使用した際に KVM が使用可能ではななかった場合、qemu-kvm は失敗します。ただし、enable-kvm を使用せず、また KVM も使用可能ではない場合、q e mu -k vm は TCG モードで実行します。これにつ いてはサポートされていません。 カ ーネ ル モ ードの P IT 再インジ ェク シ ョンを無効にす る -n o -k vm-p it -re in je ct io n シ ャッ ト ダウ ンなし -n o -s h u t d o wn 再起動なし -n o -re b o o t シ リアル ポート 、 モ ニタ ー、 Q M P -s e ria l <dev> -mo n it o r <dev> -q mp <dev> 対応しているデバイスは以下の通りです。 s t d io - 標準の入出力 n u ll - null デバイス file :<filename> - ファイルに出力 t cp :[<ho st>]:<po rt>[,server][,no wait][,no delay] - TCP Net コンソール u n ix :<path>[,server][,no wait] - Unix ドメインソケット mo n :<dev_string> - 上記デバイスのいずれか、マルチプレックスモニターにも使用 n o n e - 無効、「-serial」の場合にのみ使用 ch a rd e v :<id> - 「-chardev」で作成したキャラクターデバイス モ ニタ ーの リダイレ ク ト -mo n <chardev_id>[,mo de=[readline|co ntro l]][,default=[o n|o ff]] 手動による C P U 起動 -S R TC -rt c [base=utc|lo caltime|date][,clo ck=ho st|vm][,driftfix=no ne|slew] 329 仮 想 化 管 理 ガイ ド Wa tc hd o g -wa t ch d o g mo del Wa tc hd o g の リアク シ ョン -wa t ch d o g -a ct io n <actio n> ゲス ト メモ リーの バ ッ キ ング -me m-p re a llo c -me m-p a t h /dev/hugepages S M BIO S エント リー -s mb io s type=0 [,vendo r=<str>][,<versio n=str>][,date=<str>][,release=%d.%d] -s mb io s type=1[,manufacturer=<str>][,pro duct=<str>][,versio n=<str>][,serial=<str>][,uuid= <uuid>][,sku=<str>][,family=<str>] 20 .9. ヘルプなどの オプション ヘルプ -h -h e lp バ ージ ョン -ve rs io n オ ーディ オ の ヘ ル プ -a u d io -h e lp 20 .10 . その 他の オプション 移行 (マ イグ レ ーシ ョン) -in co min g デフ ォ ル ト 設定なし -n o d e fco n fig -n o d e fa u lt s 「-no defaults」を付けない実行には対応していません デバ イス の 設定フ ァ イル -re a d co n fig <file> -writ e co n fig <file> 330 第 2 0 章 q e m u - kv m コ マ ン ド 、 フ ラ グ 、 および 引 数 ロ ードさ れ 保存さ れ た状態 -lo a d vm <file> 331 仮 想 化 管 理 ガイ ド 第21章 ドメイン XM L の操作 このセクションでは、ドメインを表示するために使用される XML 形式について説明します。ここで、 ドメイン という用語 は、すべてのゲスト仮想マシンに必要な ro o t < d o m a in > 要素を指します。ドメイン XML には以下の 2 つの属性が あります。t y p e はドメインを実行するために使用されるハイパーバイザーを指定します。許可される値はドライバーに 固有の値ですが、 K V M およびその他の値が含まれます。id は実行中のゲスト仮想マシンの固有の整数識別子で す。非アクティブなマシンには ID 値がありません。本章のセクションではドメイン XML の各種コンポーネントについて 説明します。本マニュアルの他の章では、ドメイン XML の操作が必要な場合に本章に言及している場合があります。 21.1. 一般的な情報およびメ タデータ この情報はドメイン XML の以下の部分に入ります。 <dom ain type='xen' id='3'> <nam e>fv0</nam e> <uuid>4dea22b31d52d8 f32516 78 2e98 ab3fa0</uuid> <title>A short description - title - of the dom ain</title> <description>S om e hum an readable description</description> <m etadata> <app1:foo xm lns:app1="http://app1.org/app1/">..</app1:foo> <app2:bar xm lns:app2="http://app1.org/app2/">..</app2:bar> </m etadata> ... </dom ain> 図2 1 . 1 ドメイン X M L メタデータ ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 一般的なメタデータの 要素 要素 説明 <nam e> 仮想マシンの名前を割り当てます。この名前には英数文 字のみを使用する必要があり、単一ホスト物理マシン内 で固有なものにする必要があります。これは多くの場合、 永続的な設定ファイルを格納する目的でファイル名を作 成するために使用されます。 仮想マシンのグローバルに固有となる識別子を割り当 てます。形式は、たとえば 3 e 3 fc e 4 5 - 4 f5 3 - 4 fa 7 b b 3 2 - 11f3 4 16 8 b 8 2 b のように RFC 4 122 に準拠 している必要があります。新規マシンを削除/作成する際 にこれが省略されると、ランダムな UUID が生成されま す。さらに、sysinfo 仕様で UUID を指定することもでき ます。 t it le には、ドメインの簡単な説明用のスペースが作 成されます。タイトルには改行を含めることができませ ん。 < u u id > < t it le > 332 第 2 1章 ド メ イ ン X M L の 操 作 要素 説明 < d e s c r ip t io n > title とは異なり、このデータは libvirt では全く使用され ず、ここにはユーザーが表示させたいすべての情報を含 めることができます。 カスタムメタデータを XML ノード/ツリーの形式で格納 するためにアプリケーションで使用することができます。 アプリケーションは、それぞれの XML ノード/ツリーのカ スタムの名前空間を使用する必要があります。この場 合、1 つの名前空間に 1 つのトップレベル要素のみが あります (アプリケーションに構造が必要な場合は、名前 空間の要素にサブ要素を持たせる必要があります)。 <m etadata> 21.2. オペレーティング シス テム の 起動 仮想マシンを起動するには多くの方法があり、それぞれに利点と欠点があります。それぞれの方法については、後続 のサブセクションで説明します。これには、BIOS ブートローダー、ホスト物理マシンブートローダー、およびカーネルに よるダイレクトブートが含まれます。 21.2.1. BIO S ブ ートローダー BIOS から起動する方法は、完全仮想化に対応するハイパーバイザーで利用できます。この場合、BIOS には起動順 序の優先順位 (フロッピー、ハードディスク、CD-ROM、ネットワーク) があり、ブートイメージの取得/検索方法が決定 されます。ドメイン XML の OS セクションには、以下のような情報が含まれます。 ... <os> <type>hvm </type> <loader>/usr/lib/xen/boot/hvm loader</loader> <boot dev='hd'/> <boot dev='cdrom '/> <bootm enu enable='yes'/> <sm bios m ode='sysinfo'/> <bios useserial='yes' rebootTim eout='0'/> </os> ... 図2 1 . 2 B IO S ブ ート ロ ーダーの ドメイン X M L ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 2 B IO S ブ ート ロ ーダー要素 要素 説明 333 仮 想 化 管 理 ガイ ド 要素 説明 <type> ゲスト仮想マシンで起動されるオペレーティングシステ ムのタイプを指定します。h v m は、OS がベアメタルで実 行されるように設計されたものであることを示すため、完 全仮想化が必要になります。lin u x は Xen 3 ハイパー バイザーのゲスト ABI に対応する OS を参照します。さ らに、2 つのオプション属性があり、a r c h は仮想化に 対する CPU アーキテクチャーを指定し、m a c h in e はマ シンタイプを指します。詳細は、『Driver Capabilities』 を参照してください。 ドメインの作成プロセスを支援するために使用される ファームウェアの部分を参照します。これは、Xen 完全 仮想化ドメインを使用する場合にのみ必要になります。 fd 、h d 、c d r o m または n e t w o r k のいずれかの値を 取り、考慮される次のブートデバイスを指定するために 使用されます。bo o t 要素は、順番に試行するブートデ バイスの優先順序のリストをセットアップするために複 数回繰り返すことができます。同じタイプの複数デバイス は、バスの順序を保持した状態で、それらのターゲットに 基づいてソートされます。ドメインが定義された後に、 libvirt によって (virDo mainGetXMLDesc から) で返 される XML 設定は、ソートされた順序でデバイスを一 覧表示します。ソート後は、最初のデバイスに bo o table (起動可能) というマークが付けられます。詳 細は、『BIOS bo o tlo ader』 を参照してください。 ゲスト仮想マシンの起動時のインタラクティブなブートメ ニューのプロンプトを有効にするかどうかを決定しま す。e n a b le 属性には y e s または n o のいずれかを使 用できます。いずれも指定されない場合、ハイパーバイ ザーのデフォルトが使用されます。 SMBIOS 情報をゲスト仮想マシンで表示する方法を決 定します。m o d e 属性は、e m u la t e (ハイパーバイザー がすべての値を生成) か、または h o s t (ホスト物理マ シンの SMBIOS 値から、UUID を除くブロック 0 および ブロック 1 のすべての値をコピー。 virCo nnectGetSysinfo 呼び出しはコピーされた内容 を表示するために使用できる)、または s y s in fo (sysinfo 要素の値を使用) のいずれかに指定される必 要があります。いずれも指定されない場合、ハイパーバイ ザーのデフォルト設定が使用されます。 この要素には、y e s または n o の値が使用される可能 性のある属性 u s e s e r ia l が含まれます。この属性は、 ユーザーがシリアルポートに BIOS メッセージを表示す ることを可能にする Serial Graphics Adapter を有 効/無効にします。そのため、シリアルポートを定義して おく必要があります。さらに、ブートが失敗した場合にゲ スト仮想マシンが起動を再び開始するかどうかや、どの 程度の時間が経過した後に再起動を開始するかなどを (BIOS に従って) 制御する、r e b o o t Tim e o u t という 別の属性があることにも注意してください。最大値 (ミリ 秒単位) は 6 5 5 3 5 で、特別な値である - 1 の場合は再 起動が無効になります。 < lo a d e r > <boot> <bootm enu> < s m b io s > < b io s > 21.2.2. ホス ト物理マ シンの ブ ートローダー 334 第 2 1章 ド メ イ ン X M L の 操 作 準仮想化を採用するハイパーバイザーは通常 BIOS をエミュレートせず、代わりにホスト物理マシンがオペレーティン グシステムの起動を行います。これにより、ゲスト仮想マシンのカーネルを選択するためのインターフェースを提供する ために、ホスト物理マシンで擬似ブートローダーが使用される場合があります。以下は、Xen の場合の pygrub の例 です。 ... <bootloader>/usr/bin/pygrub</bootloader> <bootloader_args>--append single</bootloader_args> ... 図2 1 . 3 ホス ト 物理マ シ ンブ ート ロ ーダーの ドメイン X M L ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 3 B IO S ブ ート ロ ーダー要素 要素 説明 < b o o t lo a d e r > ホスト物理マシン OS のブートローダー実行可能プログ ラムへの完全修飾パスを提供します。このブートロー ダーは起動するカーネルを選択します。ブートローダー の必要な出力は、使用されるハイパーバイザーによって 異なります。 ブートローダーに渡されるコマンドライン引数を許可しま す (オプションのコマンド) < b o o t lo a d e r _ a r g s > 21.2.3. カーネ ルか ら の 直接起動 新規ゲスト仮想マシンの OS をインストールする際に、ホスト物理マシン OS に格納されるカーネルと initrd から直 接起動することが役立つ場合が多くあります。これにより、コマンドライン引数がインストーラーに直接渡されます。この 機能は通常、準仮想化および完全仮想化ゲスト仮想マシンで利用できます。 ... <os> <type>hvm </type> <loader>/usr/lib/xen/boot/hvm loader</loader> <kernel>/root/f8 -i38 6 -vm linuz</kernel> <initrd>/root/f8 -i38 6 -initrd</initrd> <cm dline>console=ttyS 0 ks=http://exam ple.com /f8 -i38 6 /os/</cm dline> <dtb>/root/ppc.dtb</dtb> </os> ... 図2 1 . 4 カ ーネ ル か ら の 直接起動 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 4 カ ーネ ル か ら 直接起動す るため の 要素 335 仮 想 化 管 理 ガイ ド 要素 説明 <type> < lo a d e r > < k e r n e l> BIOS ブートのセクションの説明と同様です。 BIOS ブートのセクションの説明と同様です。 ホスト物理マシン OS のカーネルイメージへの完全修飾 パスを指定します。 ホスト物理マシン OS の (オプションの) ramdisk イメー ジへの完全修飾パスを指定します。 起動時にカーネル (またはインストーラー) に渡される引 数を指定します。これは、多くの場合、代替プライマリーコ ンソール (例: シリアルポート)、またはインストールメディ アソース/キックスタートファイルを指定するために使用 されます。 < in it r d > < c m d lin e > 21.3. SMBIOS シス テム 情報 一部のハイパーバイザーは、ゲスト仮想マシンにどのシステム情報を提供するかについての制御を可能にします (たと えば、SMBIOS フィールドにはハイパーバイザーによってデータが設定され、ゲスト仮想マシンの dmideco de コマン ドで検査されます)。オプションの sysinfo 要素は、情報の以下のようなカテゴリーすべてを扱います。 ... <os> <sm bios m ode='sysinfo'/> ... </os> <sysinfo type='sm bios'> <bios> <entry nam e='vendor'>LENO VO </entry> </bios> <system > <entry nam e='m anufacturer'>Fedora</entry> <entry nam e='vendor'>Virt-M anager</entry> </system > </sysinfo> ... 図2 1 . 5 S M B IO S シ ス テム 情報 < s y s in fo > 要素には、サブ要素のレイアウトを決める必須の属性 t y p e があり、以下のように定義することができ ます。 s m b io s - サブ要素は特定の SMBIOS 値を呼び出します。これは、< o s > 要素の smbio s サブ要素と共に使用 されている場合にゲスト仮想マシンに影響を与えます。sysinfo のそれぞれのサブ要素は SMBIOS ブロックに名 前を付け、それらの要素内にブロック内のフィールドを説明する entry 要素のリストが入ることがあります。以下の ブロックおよびエントリーが認識されます。 b io s - これは SMBIOS のブロック 0 で、エントリー名は v e n d o r 、v e r s io n 、d a t e 、および r e le a s e か ら取られます。 < s y s t e m > - これは SMBIOS のブロック 1 で、エントリー名は m a n u fa c t u r e r 、p r o d u c t 、v e r s io n 、s e r ia l 、u u id 、s k u 、および fa m ily から取られます。u u id エ ントリーがトップレベルの UUID 要素と共に指定される場合、これらの 2 つの値は一致する必要があります。 336 第 2 1章 ド メ イ ン X M L の 操 作 21.4 . CPU の 割り当て <dom ain> ... <vcpu placem ent='static' cpuset="1-4,^3,6 " current="1">2</vcpu> ... </dom ain> 図2 1 . 6 CP U の 割り 当て < c p u > 要素は、ゲスト仮想マシン OS に割り当てられる仮想 CPU (vCPU) の最大数を定義します。この値は、1 か らハイパーバイザーがサポートする最大数の間の値にする必要があります。この要素には、ドメインがプロセスする物 理 CPU 数とデフォルトで固定可能な仮想 CPU のコンマ区切りのリストである、オプションの c p u s e t 属性を含める ことができます。 ドメインプロセスと仮想 CPU の固定ポリシーは、c p u t u n e 属性を使用して別個に指定が可能であることに注意して ください。e m u la t o r p in 属性が < c p u t u n e > で指定される場合、< v c p u > で指定される c p u s e t は無視されま す。 同様に、v c p u p in の値を設定している仮想 CPU では、c p u s e t 設定は無視されます。v c p u p in が指定されてい ない仮想 CPU の場合、これは c p u s e t によって指定される物理 CPU に固定されます。c p u s e t 一覧の各要素は 単一の CPU 番号、CPU 番号の範囲、キャレット (^) に以前の範囲から除外される CPU 番号を続けたもののいずれ かになります。属性 c u r r e n t は、最大数より少ない数の仮想 CPU を有効にするかどうかを指定するために使用す ることができます。 オプションの p la c e m e n t 属性を使うと、ドメインプロセスの CPU 配置モードを指定することができま す。p la c e m e n t は、s t a t ic か a u t o のいずれかに設定できます。< v c p u p la c e m e n t = 'a u t o '> と設定した 場合、システムは numad にクエリを行い、< n u m a t u n e > タグで指定した設定を使用し、< v c p u > のその他の設定 を無視します。< v c p u p la c e m e n t = 's t a t ic '> と設定した場合は、システムは < n u m a t u n e > の設定ではな く、< v c p u p la c e m e n t > タグで指定した設定を使用します。 21.5. CPU の チューニング <dom ain> ... <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"/> <em ulatorpin cpuset="1-3"/> <shares>2048 </shares> <period>1000000</period> <quota>-1</quota> <em ulator_period>1000000</em ulator_period> 337 仮 想 化 管 理 ガイ ド <em ulator_quota>-1</em ulator_quota> </cputune> ... </dom ain> 図2 1 . 7 CP U の チュ ーニング ドメイン XML のこのセクションのコンポーネントはすべてオプションで、以下のようになります。 表2 1 . 5 CP U チュ ーニング 要素 要素 説明 <cputune> ドメインの CPU 調整可能パラメーターについての詳細 を提供します。これはオプションです。 ドメイン VCPU が固定されるホスト物理マシンの物理 CPU を指定します。これが省略されていて、要素 < v c p u > の属性 c p u s e t が指定されない場合、vCPU はデフォルトですべての物理 CPU に固定されます。こ れには 2 つの属性が含まれ、属性 v c p u は id を指定 し、属性 c p u s e t は、要素 < v c p u > の属性 c p u s e t と同じになります。 ドメインのサブセットである「emulato r」(vcpu を含まな い) が固定されるホスト物理マシン CPU を指定します。 これが省略されていて、要素 < v c p u > の属性 c p u s e t が指定されていない場合、「emulato r」はデ フォルトですべての物理 CPU に固定されます。これに は、固定先となる物理 CPU を指定する 1 つの必須属 性である c p u s e t が含まれます。要素 < v c p u > の属 性 p la c e m e n t が a u t o の場合、e m u la t o r p in は 許可されません。 ドメインの比例加重配分を指定します。これが省略され ている場合、デフォルトはオペレーティングシステム固有 のデフォルト値になります。値の単位がない場合、それ は他の仮想ゲストマシンの設定との対比で計算されま す。たとえば、ゲスト仮想マシンが 20 4 8 の値で設定さ れている場合、処理時間は 10 24 の値で設定されるゲ スト仮想マシンの処理時間の 2 倍になります。 実施間隔をマイクロ秒単位で指定します。p e r io d を使 用することにより、ドメインの各 vcpu は、割り当てられた ランタイムのクォータを超える消費が許可されません。こ の値は 10 0 0 - 10 0 0 0 0 0 の範囲内にある必要がありま す。p e r io d の値が 0 の場合は、値なしを意味します。 マイクロ秒単位で許可される最大帯域幅を指定します。 負の値の q u o t a を持つドメインは、ドメインの帯域幅が 不十分であることを示し、つまりそれが帯域幅で制御さ れていないことを意味します。値は 10 0 0 18 4 4 6 7 4 4 0 7 3 7 0 9 5 5 1 の範囲内になるか、または 0 未満にする必要があります。0 の値を持つ q u o t a は値 なしを意味します。この機能を使用して、すべての vcpus が同じ速度で実行されるようにすることができま す。 < v c p u p in > < e m u la t o r p in > <shares> < p e r io d > <quota> 338 第 2 1章 ド メ イ ン X M L の 操 作 要素 説明 < e m u la t o r _ p e r io d > 実施間隔をマイクロ秒単位で指定しま す。< e m u la t o r _ p e r io d > 内で、ドメインのエミュレー タースレッド (vcpus を除く) は、実行時間に相当する < e m u la t o r _ q u o t a > を超える量を消費することが許 可されません。< e m u la t o r _ p e r io d > 値は 10 0 0 10 0 0 0 0 0 の範囲内にある必要があります。0 の値を持 つ < e m u la t o r _ p e r io d > は値なしを意味します。 マイクロ秒単位でドメインのエミュレータースレッドに許 可される最大帯域幅を指定します (vcpus を除く)。負の 値の < e m u la t o r _ q u o t a > を持つドメインは、ドメイン がエミュレータースレッド (vcpus を除く) の無限の帯域 幅を持つことを示し、つまり、それが帯域幅で制御されて いないことを意味します。値は 10 0 0 18 4 4 6 7 4 4 0 7 3 7 0 9 5 5 1 の範囲内にあるか、または 0 未満にある必要があります。0 の値を持つ < e m u la t o r _ q u o t a > は値なしを意味します。 < e m u la t o r _ q u o t a > 21.6. メ モ リーの バッキング メモリーのバッキングにより、ハイパーバイザーはゲスト仮想マシン内の大きいページを適切に管理できます。 オプションの < m e m o r y B a c k in g > 要素には、その中に < h u g e p a g e s > 要素を設定することができます。これはハ イパーバイザーに対し、ゲスト仮想マシンのメモリーを、通常のネイティブページのサイズではなく、hugepage を使っ て割り当てるよう指示します。 <dom ain> ... <m em oryBacking> <hugepages/> </m em oryBacking> ... </dom ain> 図2 1 . 8 メモ リーの バ ッ キ ング 21.7. メ モ リーチューニング <dom ain> ... <m em tune> <hard_lim it unit='G '>1</hard_lim it> <soft_lim it unit='M '>128 </soft_lim it> <swap_hard_lim it unit='G '>2</swap_hard_lim it> 339 仮 想 化 管 理 ガイ ド <m in_guarantee unit='bytes'>6 7108 8 6 4</m in_guarantee> </m em tune> ... </dom ain> 図2 1 . 9 メモ リーチュ ーニング ドメイン XML のこのセクションのコンポーネントはすべてオプションで、以下のようになります。 表2 1 . 6 メモ リーチュ ーニング 要素 要素 説明 <m em tune> ドメインのメモリー調整可能なパラメーターについての詳 細を提供します。これが省略されている場合、デフォルト は OS が指定するデフォルト値になります。これらのパラ メーターはプロセス全体に適用されます。そのため、制 限を設定する場合は、ゲストマシンの RAM、ゲスト仮想 マシンのビデオ RAM の追加、いくらかのメモリーオー バーヘッドを可能にする必要があります。メモリーオー バーヘッドについては正確に測定するのが困難なため、 試行錯誤が必要になります。それぞれの調整可能なパ ラメーターに対して < m e m o r y > の場合と同じ値を使用 して入力の単位を指定することができます。後方互換の 場合、出力は常に KiB 単位になります。 これは、ゲスト仮想マシンが使用できる最大メモリーで す。この値の 単位 は キビバイト です (例: 10 24 バ イトのブロック) これは、メモリー競合中に強制するメモリーの制限です。 この値の 単位 はキビバイトです (例: 10 24 バイトのブ ロック)。 これは、ゲスト仮想マシンが使用できる最大メモリーに swap を足したものです。この値の 単位 はキビバイトで す (例: 10 24 バイトのブロック)。これ は、< h a r d _ lim it > 値よりも大きくなければなりませ ん。 これは、ゲスト仮想マシンへの割り当てを保証できる最 小メモリーです。この値の単位はキビバイトです (例: 10 24 バイトのブロック)。 < h a r d _ lim it > < s o ft _ lim it > < s w a p _ h a r d _ lim it > < m in _ g u a r a n t e e > 21.8 . NUMA ノードの チューニング 従来の管理ツールを使用して NUMA ノードのチューニングが実行されると、以下のドメイン XML パラメーターが影 響を受けます。 > <dom ain> ... <num atune> 340 第 2 1章 ド メ イ ン X M L の 操 作 <m em ory m ode="strict" nodeset="1-4,^3"/> </num atune> ... </dom ain> 図2 1 . 1 0 NUM A ノ ードの チュ ーニング ドメイン XML のこのセクションのコンポーネントはすべてオプションで、以下のようになります。 表2 1 . 7 NUM A ノ ードの チュ ーニング 要素 要素 説明 <num atune> ドメインプロセスの NUMA ポリシーを制御することに よってNUMA ホスト物理マシンのパフォーマンスを調整 する方法の詳細を提供します。 NUMA ホスト物理マシンのドメインプロセスにメモリーを 割り当てる方法を指定します。これには、複数のオプショ ンの属性が含まれます。属性 m o d e は、in t e r le a v e 、s t r ic t 、または p r e fe r r e d のい ずれかになります。いずれの値も指定されない場合、デ フォルトで s t r ic t になります。属性 n o d e s e t は、要 素< v c p u > の属性 c p u s e t と同じ構文を使用して NUMA ノードを指定します。属性 p la c e m e n t は、ドメ インプロセスのメモリー配置モードを指定するために使 用できます。その値は s t a t ic または a u t o のいずれ かにすることができます。属性 < n o d e s e t > が指定さ れる場合、デフォルトで < v c p u > の < p la c e m e n t > になるか、または s t a t ic になります。a u t o は、 numad の照会から返される adviso ry ノードセットか らメモリーを割り当てるのみで、属性 no deset の値は、 それが指定されている場合は無視されます。v c p u の属 性 p la c e m e n t が a u t o であり、属性 < n u m a t u n e > が指定されていない場 合、< p la c e m e n t > a u t o およびモード s t r ic t が指 定されたデフォルトの numatune が暗黙的に追加され ます。 <m em ory> 21.9. ブロック I/ O チューニング <dom ain> ... <blkiotune> <weight>8 00</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> 341 仮 想 化 管 理 ガイ ド </device> </blkiotune> ... </dom ain> 図2 1 . 1 1 ブ ロ ッ ク I/ O チュ ーニング ドメイン XML のこのセクションのコンポーネントはすべてオプションで、以下のようになります。 表2 1 . 8 ブ ロ ッ ク I/ O チュ ーニング 要素 要素 説明 < b lk io t u n e > このオプションの要素は、ドメインの Blkio cgro up の 調整可能パラメーターを調整する機能を提供します。こ れが省略されている場合、デフォルトで OS が指定する デフォルトになります。 このオプションの weight 要素は、ゲスト仮想マシンの 全体の I/O 加重になります。この値は 10 0 - 10 0 0 の 範囲内にある必要があります。 ドメインには、ドメインが使用するそれぞれのホスト物理 マシンブロックデバイスのウェイトをさらに調整する複数 の < d e v ic e > 要素が含まれる場合があります。複数の ゲスト仮想マシンディスクは単一のホスト物理マシンブ ロックデバイスを共有できることに注意してください。さら に、それらが同じホスト物理マシンファイルシステム内の ファイルでサポートされるため、このチューニングパラ メーターは、ゲスト仮想マシンの各ディスクデバイスに関 連付けられるのではなく、グローバルドメインレベルで実 行されます (これは、単一 < d is k > に適用される < io t u n e > 要素と対比できます)。それぞれの device 要素には、デバイスの絶対パスを記述する < p a t h > と、 許可される範囲が 10 0 から 10 0 0 までのデバイスの 相対的比率 (ウェイト) を指定する < w e ig h t > の 2 つ の必須のサブ要素があります。 < w e ig h t > < d e v ic e > 21.10 . リソース パ ーティション作成 ハイパーバイザーでは、該当パーティションのネスト化によって、仮想マシンをリソースパーティションに配置できる可能 性があります。< r e s o u r c e > 要素は、リソースパーティション設定に関連する設定をグループ化し、現在ドメインを配 置するリソースパーティションのパスを定義するコンテンツを持つ子要素をサポートしています。パーティションが一覧 表示されない場合、ドメインはデフォルトのパーティションに配置されます。ゲスト仮想マシンを起動する前にパーティ ションが存在することを確認するのは app/admin になります。デフォルトでは (ハイパーバイザーに固有の) デフォル トパーティションのみが存在することが想定されます。 <resource> <partition>/virtualm achines/production</partition> </resource> 図2 1 . 1 2 リソ ース パ ーティシ ョ ン作成 342 第 2 1章 ド メ イ ン X M L の 操 作 現在、リソースパーティションは、パーティションパスをマウントされたすべてのコントローラー内の cgro ups ディレクト リーにマップする QEMU および LXC ドライバーによってサポートされています。 21.11. CPU モ デルおよびトポロジ ー このセクションは、CPU モデルの要件について扱います。すべてのハイパーバイザーには、ゲストがデフォルトで表示 する CPU 機能についての独自のポリシーがあることに注意してください。QEMU/KVM によってゲストに提供される CPU 機能のセットは、ゲスト仮想マシン設定で選択される CPU モデルによって異なります。q e m u 3 2 および q e m u 6 4 は基本的な CPU モデルですが、他に利用できる他のモデル (追加の機能を含む) もあります。それぞれの モデルとそのトポロジーは、ドメイン XML の次の要素を使って指定されます。 <cpu m atch='exact'> <m odel fallback='allow'>core2duo</m odel> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='1'/> <feature policy='disable' nam e='lahf_lm '/> </cpu> 図2 1 . 1 3 CP U モ デル およびト ポロ ジ ーサ ンプル 1 <cpu m ode='host-m odel'> <m odel fallback='forbid'/> <topology sockets='1' cores='2' threads='1'/> </cpu> 図2 1 . 1 4 CP U モ デル およびト ポロ ジ ーサ ンプル 2 <cpu m ode='host-passthrough'/> 図2 1 . 1 5 CP U モ デル およびト ポロ ジ ーサ ンプル 3 CPU モデルまたはその機能への制限が設けられていない場合、以下のような単純な cpu 要素が使用される場合が あります。 <cpu> <topology sockets='1' cores='2' threads='1'/> </cpu> 図2 1 . 1 6 CP U モ デル およびト ポロ ジ ーサ ンプル 4 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 343 仮 想 化 管 理 ガイ ド 表2 1 . 9 CP U モ デル およびト ポロ ジ ー要素 要素 説明 <cpu> この要素には、vCPU 機能セット用の全パラメーターが 含まれます。 < c p u > 要素で表示された機能を利用可能な vCPU と どの程度一致させるかを指定します。< t o p o lo g y > が < c p u > で入れ子になっている唯一の要素である場 合、m a t c h 属性を省略することができます。m a t c h 属 性には以下のものがあります。 <m atch> m in im u m - 記載される機能は必要最小限の要件 になります。vCPU で利用可能な機能は表示される ものよりも多くある可能性がありますが、これが受け 入れられる最小限のものです。最小限の要件が満 たされないと、この値は失敗します。 e x a c t - ゲスト仮想マシンに提供される仮想 CPU は、指定された機能に完全に一致する必要がありま す。一致するものがない場合、エラーが発生します。 s t r ic t - ホスト物理マシンの CPU が仕様に完全 に一致しない場合、ゲスト仮想マシンは作成されま せん。 m a t c h 属性が < c p u > 要素から省略されると、デフォ ルトの m a t c h = 'e x a c t ' が使用されます。 344 第 2 1章 ド メ イ ン X M L の 操 作 要素 説明 <m ode> このオプションの属性は、ゲスト仮想マシン CPU をホス ト物理マシン CPU にできるだけ類似した設定を容易に するために使用できます。モード属性に使用できる属性 は以下になります。 c u s t o m - CPU をゲスト仮想マシンに表示する方 法を説明します。これは、m o d e 属性が指定されな い場合のデフォルト設定です。このモードにより、ゲ スト仮想マシンがどのホスト物理マシン上で起動さ れるかにかかわらず、永続的なゲスト仮想マシンに 同じハードウェアが表示されるようにします。 h o s t - m o d e l - これは基本的に、capabilities XML からドメイン XML にホスト物理マシンの CPU 定義をコピーするためのショートカットです。ドメイン を起動する直前に CPU 定義がコピーされるので、 同じ XML を異なる複数のホスト物理マシン上で使 用することができます。その間、それぞれのホスト物 理マシンがサポートする最適なゲスト仮想マシン CPU は依然として提供されます。m a t c h 属性も、 いずれの機能要素もこのモードでは使用できませ ん。詳細は、libvirt do main XML CPU mo dels を 参照してください。 h o s t - p a s s t h r o u g h このモードでは、ゲスト仮 想マシンに表示される CPU は、libvirt 内でエラーを 生じさせる要素を含め、ホスト物理マシン CPU の場 合と全く同じになります。このモードの大きな短所 は、ゲスト仮想マシン環境を異なるハードウェア上で 再現できないことにあり、そのためこのモードは細心 の注意を払って使用することが推奨されま す。m o d e l または fe a t u r e 要素もいずれもこの モードでは許可されません。 h o s t - m o d e l と h o s t - p a s s t h r o u g h の両方 のモードでは、現在のホスト物理マシンで使用される 実際の (ho st-passthro ugh モードの値と近似す る) CPU 定義は、virDo mainGetXMLDesc API を呼び出す際に VIR_DOMAIN_XML_UPDATE_CPU フラグを指 定することによって決定できます。異なるハードウェ アが提供されると、オペレーティングシステムの再ア クティブ化を引き起こす傾向があり、かつ異なる機能 を持つ複数のホスト物理マシン間で移行するゲスト 仮想マシンを実行する場合は、この出力を使用して、 より堅牢な移行のために XML を custo m モードに 書き換えることができます。 345 仮 想 化 管 理 ガイ ド 要素 説明 < m o d e l> ゲスト仮想マシンが要求する CPU モデルを指定しま す。利用可能な CPU モデルとそれらの定義の一覧は、 libvirt のデータディレクトリーにインストールされた c p u _ m a p .x m l ファイルにあります。ハイパーバイザー が正確な CPU モデルを使用できない場合、libvirt は、 CPU 機能の一覧を維持しつつ、ハイパーバイザーでサ ポートされる直近のモデルにフォールバックします。オプ ションの fa llb a c k 属性は、この動作を禁止するため に使用できます。この場合、サポートされていない CPU モデルを要求するドメインを起動する試行は失敗します。 fallback 属性のサポートされている値は、a llo w (デ フォルト) と fo r b id です。オプションの v e n d o r _ id 属性は、ゲスト仮想マシンによって表示されるベンダー ID を設定するために使用できます。ID の長さは、ちょう ど 12 文字分である必要があります。これが設定されて いない場合、ホスト物理マシンのベンダー ID が使用さ れます。使用できる標準的な値は、A u t h e n t ic A M D と G e n u in e In t e l です。 ゲスト仮想マシンが要求する CPU ベンダーを指定しま す。この要素がない場合、ゲスト仮想マシンは、ベンダー に関係なく、指定された機能に一致する CPU 上で実行 されます。サポートされるベンダーの一覧は c p u _ m a p .x m l にあります。 ゲスト仮想マシンに提供される仮想 CPU の要求される トポロジーを指定します。3 つのゼロ以外の値を、ソケッ ト、コアおよびスレッドに指定する必要があります。それ ぞれは、CPU ソケットの合計数、1 ソケットあたりのコア 数、1 コアあたりのスレッド数になります。 選択した CPU モデルによって提供される機能を微調整 するために使用されるゼロまたは 1 つ以上の要素を含 めることができます。既知の機能名の一覧は、CPU モデ ルと同じファイルにあります。それぞれの feature 要素 の意味は、以下の値のいずれかに設定する必要のある そのポリシー属性によって変わります。 <vendor> < t o p o lo g y > < fe a t u r e > fo r c e - 仮想マシンがホスト物理マシン CPU に実 際にサポートされているかどうかにかかわらず、仮想 マシンのサポートを強制します。 r e q u ir e - 機能がホスト物理マシンによってサ ポートされていない場合、ゲスト仮想マシンの作成 が失敗することを決定します。これはデフォルトの設 定です。 o p t io n a l - この機能は仮想 CPU によってサポー トされますが、サポートされるのは、ホスト物理マシン CPU によってサポートされている場合のみです。 d is a b le - これは仮想 CPU によってサポートされ ません。 fo r b id - 機能がホスト物理マシン CPU によって サポートされている場合、ゲスト仮想マシンの作成は 失敗します。 21.11.1. ゲス ト仮想マ シンの NUMA トポロジ ー 346 第 2 1章 ド メ イ ン X M L の 操 作 ゲスト仮想マシンの NUMA トポロジーは、< n u m a > 要素とドメイン XML の以下の部分を使用して指定できます。 <cpu> <num a> <cell cpus='0-3' m em ory='512000'/> <cell cpus='4-7' m em ory='512000'/> </num a> </cpu> ... 図2 1 . 1 7 ゲス ト 仮想マ シ ンの NUM A ト ポロ ジ ー それぞれの cell 要素は NUMA セルまたは NUMA ノードを指定します。c p u s は、ノードの一部である CPU または CPU の範囲を指定します。m e m o r y はノードメモリーをキビバイト単位で指定します (例: 10 24 バイトのブロック)。 それぞれのセルまたはノードには、0 から始まる昇順で c e llid または n o d e id が割り当てられます。 21.12. イベント設定 ドメイン XML の以下のセクションを使用すると、各種のイベントで実行されるデフォルトのアクションをオーバーライド できます。 <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <on_lockfailure>poweroff</on_lockfailure> 図2 1 . 1 8 イベ ント 設定 以下の要素のコレクションを使用すると、ゲスト仮想マシン OS がライフサイクル操作をトリガーする際のアクションを 指定することができます。一般的なユースケースには、初期の OS インストールの実行時に電源オフとして処理される 再起動を強制する方法があります。これにより、VM をインストール後の最初のブート時に再設定することができます。 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 0 イベ ント 設定の 要素 状態 説明 347 仮 想 化 管 理 ガイ ド 状態 説明 < o n _ p o w e r o ff> ゲスト仮想マシンが電源オフを要求する際に実行される アクションを指定します。4 つの引数を使用できます。 d e s t r o y - このアクションは、ドメインを完全に終了 させ、すべてのリソースをリリースします。 r e s t a r t - このアクションは、ドメインを完全に終了 させ、同じ設定でこれを再起動します。 p r e s e r v e - このアクションは、ドメインを完全に終 了させますが、そのリソースは追加の分析ができるよ うに保持されます。 r e n a m e - r e s t a r t - このアクションはドメインを完 全に終了させてから、新しい名前でこれを再起動し ます。 <on_reboot> ゲスト仮想マシンが再起動を要求する際に実行されるア クションを指定します。4 つの引数を使用できます。 d e s t r o y - このアクションは、ドメインを完全に終了 させ、すべてのリソースをリリースします。 r e s t a r t - このアクションは、ドメインを完全に終了 させ、同じ設定でこれを再起動します。 p r e s e r v e - このアクションは、ドメインを完全に終 了させますが、そのリソースは追加の分析ができるよ うに保持されます。 r e n a m e - r e s t a r t - このアクションはドメインを完 全に終了させてから、新しい名前でこれを再起動し ます。 <on_crash> ゲスト仮想マシンがクラッシュする際に実行されるアク ションを指定します。さらに、これは以下の追加のアク ションに対応します。 c o r e d u m p - d e s t r o y - クラッシュしたドメインの コアはダンプされ、ドメインは完全に終了し、すべての リソースはリリースされます。 c o r e d u m p - r e s t a r t - クラッシュしたドメインの コアはダンプされ、ドメインは同じ設定で再起動しま す。 以下の 4 つの引数を使用できます。 d e s t r o y - このアクションは、ドメインを完全に終了 させ、すべてのリソースをリリースします。 r e s t a r t - このアクションは、ドメインを完全に終了 させ、同じ設定でこれを再起動します。 p r e s e r v e - このアクションは、ドメインを完全に終 了させますが、そのリソースは追加の分析ができるよ うに保持されます。 r e n a m e - r e s t a r t - このアクションはドメインを完 全に終了させてから、新しい名前でこれを再起動し ます。 348 第 2 1章 ド メ イ ン X M L の 操 作 状態 説明 < o n _ lo c k fa ilu r e > ロックマネージャーがリソースロックを失う場合に取るべ きアクションを指定します。以下のアクションは、それらす べてが個別のロックマネージャーによってサポートされ る必要はないものの、libvirt によって認識されます。いず れのアクションも指定されない場合、各ロックマネー ジャーは、そのデフォルトアクションを取ります。以下の引 数を使用することができます。 p o w e r o ff - 強制的にドメインの電源をオフにしま す。 r e s t a r t - ロックを再取得するようにドメインを再起 動します。 p a u s e - ロックの問題が解決されるとドメインが手 動で再開できるようにドメインを一時停止します。 ig n o r e - 何も起こらない場合はドメインを実行した ままにします。 21.13. 電力管理 ドメイン XML の以下のセクションに影響を与える従来の管理ツールを使用して、ゲスト仮想マシン OS への BIOS の広告を強制的に有効にしたり、無効にしたりすることが可能です。 ... <pm > <suspend-to-disk enabled='no'/> <suspend-to-m em enabled='yes'/> </pm > ... 図2 1 . 1 9 電力管理 < p m > 要素は、引数 y e s を使用して有効にするか、または引数 n o を使用して無効にすることができます。BIOS サ ポートは、引数の s u s p e n d - t o - d is k を使用する場合は S3 に、引数 s u s p e n d - t o - m e m の ACP スリープ状 態を使用する場合は S4 に対して実行できます。何も指定されていない場合、ハイパーバイザーは、そのデフォルト値 のままになります。 21.14 . ハ イパ ーバイザ ーの 機能 ハイパーバイザーを使って、一部の CPU/マシン機能を有効にしたり (s t a t e = 'o n ') 、無効にしたり (s t a t e = 'o ff' ) できます。 ... <features> <pae/> <acpi/> 349 仮 想 化 管 理 ガイ ド <apic/> <hap/> <privnet/> <hyperv> <relaxed state='on'/> </hyperv> </features> ... 図2 1 . 2 0 ハ イパ ーバ イザ ーの 機能 すべての機能は < fe a t u r e s > 要素内に一覧表示されますが、< s t a t e > が指定されない場合はそれは無効にさ れます。使用可能な機能は、c a p a b ilit ie s XML を呼び出して見つけることができますが、完全仮想化ドメインにつ いての一般的なセットは以下のようになります。 表2 1 . 1 1 ハ イパ ーバ イザ ー機能の 要素 状態 説明 <pae> 物理ドレスの拡張モードでは、32 ビットのゲスト仮想マ シンが 4 GB を超えるメモリーに対応できます。 たとえば KVM ゲスト仮想マシンに対する電源管理に便 利ですが、正常なシャットダウンを実行できる必要があり ます。 プログラミング可能な IRQ 管理の使用を可能にします。 この要素については、ゲスト仮想マシンの EOI (割り込 み終点: End o f Interrupt) の可用性を設定する値の o n と o ff を含むオプションの属性 e o i があります。 ハードウェア支援のページング (Hardware Assisted Paging) がハードウェアで利用可能な場合に、その使 用を有効にします。 Micro so ft Windo ws を実行するゲスト仮想マシンの 動作を改善する各種の機能を有効にします。オプション の属性 r e la x e d に値 o n または o ff を指定して、タイ マーの制約の緩和を有効/無効にします。 < a c p i> < a p ic > <hap> hyperv 21.15. 時間管理 ゲスト仮想マシンのクロックは、通常ホスト物理マシンのクロックから初期化されます。大半のオペレーティングシステ ムは、ハードウェアのクロックがデフォルトの設定である UTC のままであることを想定しています。Windo ws ゲスト仮 想マシンの場合は、ゲスト仮想マシンを lo c a lt im e に設定する必要があります。 ... <clock offset='localtim e'> <tim er nam e='rtc' tickpolicy='catchup' track='guest'> <catchup threshold='123' slew='120' lim it='10000'/> </tim er> <tim er nam e='pit' tickpolicy='delay'/> </clock> ... 350 第 2 1章 ド メ イ ン X M L の 操 作 図2 1 . 2 1 時間管理 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 2 時間管理の 要素 状態 説明 < c lo c k > o ffs e t 属性は 4 つの使用できる値を取り、ゲスト仮 想マシンクロックをホスト物理マシンに同期する方法に 対する詳細な制御を可能にします。ハイパーバイザーは、 すべてのタイムソースに対するすべてのポリシーに対応 する必要がないことに注意してください。 u t c - クロックを起動時に UTC に同期します。u t c モードは v a r ia b le モードに変換でき、これは adjustment 属性を使用して制御できます。値が r e s e t の場合、変換は実行されません。数値は、初 期 adjustment としてその値を使用すること で、v a r ia b le モードへの変換を強制します。デフォ ルトの adjustment はハイパーバイザーに固有の ものになります。 lo c a lt im e - ゲスト仮想マシンクロックを、起動時 にホスト物理マシンの設定タイムゾーンに同期しま す。adjustment 属性は 'utc' モードと同様に作動 します。 t im e z o n e - ゲスト仮想マシンクロックを、 timezo ne 属性を使って要求されるタイムゾーンに 同期します。 v a r ia b le - basis 属性に基づいて、ゲスト仮想マ シンクロックに、UTC または lo caltime との対比で 適用される任意のオフセットを指定します。UTC (ま たは lo caltime) に対する差分は、a d j u s t m e n t 属性を使用して数秒単位で指定されます。ゲスト仮 想マシンは、RTC (リアルクロックタイム) を自由に調 整することができ、行なわれた調整は再起動後も維 持されます。これは、RTC 調整が再起動のたびに失 われる u t c と lo c a lt im e モード (オプション属性 a d j u s t m e n t = 'r e s e t ' を指定) とは対照的で す。さらに、b a s is 属性には、u t c (デフォルト) また は lo c a lt im e のいずれかを使用することができま す。c lo c k 要素には、ゼロまたは 1 以上の < t im e r > 要素を含めることができます。 < t im e r > < fr e q u e n c y > <m ode> <present> 注記を参照してください。 これは、n a m e ="t s c " が実行される周波数を指定する 符号なし整数です。 m o d e 属性は、n a m e = "t s c " < t im e r > が管理され る方法を制御 し、a u t o 、n a t iv e 、e m u la t e 、p a r a v ir t 、または s m p s a fe に設定することができます。他のタイマーは 常にエミュレートされます。 特定のタイマーがゲスト仮想マシンで利用できるかどう かを指定します。y e s または n o に設定することができ ます。 351 仮 想 化 管 理 ガイ ド < t im e r > 要素についての 追加情報 各 < t im e r > 要素には n a m e 属性を含める必要があり、指定される名前に応じて以下の属性を持つ場合が あります。 < n a m e > - 変更される t im e r を選択します。以下の値が受け入れ可能です。k v m c lo c k (QEMUKVM)、p it (QEMU-KVM)、または r t c (QEMU-KVM)、または t s c (libxl のみ)。p la t fo r m は現在サ ポートされていないことに注意してください。 track - timer track を指定します。以下の値が受け入れ可能です。b o o t 、g u e s t 、または w a ll 。t r a c k は n a m e = "r t c " にのみ有効です。 t ic k p o lic y - ゲスト仮想マシンにティックを挿入するための期限に間に合わなかった場合にどうなるか を決定します。以下の値を割り当てることができます。 d e la y -通常レートでのティックの配信を継続します。ゲスト仮想マシンの時間は、ティックの遅延によ り遅れます。 c a t c h u p - ティックの遅れを取り戻すために、高めレートでティックを配信します。ゲスト仮想マシンの 時間は、遅れが取り戻されると表示されなくなります。さらに、thresho ld、slew、および limit の 3 つ のオプション属性があり、それぞれは正の整数になります。 m e r g e - 遅れたティックを単一ののティックにマージし、それらを挿入します。ゲスト仮想マシンの時間 は、マージの実行方法により、遅れる可能性があります。 d is c a r d - 遅れたティックを破棄し、デフォルトの間隔設定で挿入を続行します。ゲスト仮想マシンの 時間は、遅れたティックの処理についての明示的なステートメントがない場合に遅れる可能性がありま す。 21.16. デバイス この XML 要素のセットすべては、ゲスト仮想マシンのドメインに提供されるデバイスを説明するために使用されます。 以下のデバイスのすべては、メインデバイス要素の子として示されます。 以下の仮想デバイスがサポートされています。 virtio -scsi-pci - PCI バスストレージデバイス virtio -9p-pci - PCI バスストレージデバイス virtio -blk-pci - PCI バスストレージデバイス virtio -net-pci - PCI バスネットワークデバイス (virtio -net とも呼ぶ) virtio -serial-pci - PCI バス入力デバイス virtio -ballo o n-pci - PCI バスメモリーバルーンデバイス virtio -rng-pci - PCI バス仮想乱数ジェネレーターデバイス 重要 ベクター番号が 33 以上の値に設定されている virtio デバイスが作成される場合、このデバイスは、Red Hat Enterprise Linux 6 上ではゼロの値に設定されているように動作しますが、Red Hat Enterprise Linux 7 ではそのように動作しません。結果として生じるベクター設定の不一致により、いずれかのプラット フォームの virtio デバイスのベクターの番号が 33 以上に設定されている場合は、移行エラーが生じます。そ のため、v e c t o r の値を 33 以上に設定することは推奨されません。virtio -ballo o n-pci と virtio -rng-pci を除くすべての virtio デバイスが v e c t o r を受け付けます。 352 第 2 1章 ド メ イ ン X M L の 操 作 ... <devices> <em ulator>/usr/lib/xen/bin/qem u-dm </em ulator> </devices> ... 図2 1 . 2 2 デバ イス - 子要素 < e m u la t o r > 要素のコンテンツは、デバイスモデルエミュレーターのバイナリーへの完全修飾パスを指定します。 capabilities XML は、それぞれの特定ドメインタイプ、またはアーキテクチャーの組み合わせに対して使用するため の推奨されるデフォルトエミュレーターを指定します。 21.16.1. ハ ード ド ライブ 、 フロッピーディス ク、 CDRO M ドメイン XML のこのセクションは、ディスク要素でフロッピー、ハードディスク、CDROM または準仮想化ドライバーが 指定されている場合など、ディスクのようなデバイスを指定します。 ... <devices> <disk type='file' snapshot='external'> <driver nam e="tap" type="aio" cache="default"/> <source file='/var/lib/xen/im ages/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 nam e="qem u" type="raw" io="threads" ioeventfd="on" event_idx="off"/> <source protocol="sheepdog" nam e="im age_nam e"> <host nam e="hostnam e" port="7000"/> </source> <target dev="hdb" bus="ide"/> <boot order='1'/> <transient/> <address type='drive' controller='0' bus='1' unit='0'/> 353 仮 想 化 管 理 ガイ ド </disk> <disk type='network'> <driver nam e="qem u" type="raw"/> <source protocol="rbd" nam e="im age_nam e2"> <host nam e="hostnam e" port="7000"/> </source> <target dev="hdd" bus="ide"/> <auth usernam e='m yuser'> <secret type='ceph' usage='m ypassid'/> </auth> </disk> <disk type='block' device='cdrom '> <driver nam e='qem u' type='raw'/> <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> <disk type='block' device='lun'> <driver nam e='qem u' 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 nam e='qem u' type='raw'/> <source dev='/dev/sda'/> <geom etry cyls='16 38 3' heads='16 ' secs='6 3' trans='lba'/> <blockio logical_block_size='512' physical_block_size='4096 '/> <target dev='hda' bus='ide'/> </disk> <disk type='volum e' device='disk'> <driver nam e='qem u' type='raw'/> <source pool='blk-pool0' volum e='blk-pool0-vol0'/> <target dev='hda' bus='ide'/> </disk> </devices> ... 図2 1 . 2 3 デバ イス - ハ ードドライブ 、 フ ロ ッ ピ ーディス ク 、 CD RO M 2 1 .1 6 .1 .1 . ディ ス ク 要素 < d is k > 要素は、ディスクを記述するためのメインコンテナーです。属性の t y p e は < d is k > 要素と共に使用できま す。以下のタイプが受け入れ可能です。 file b lo c k d ir network 詳細は、Disk Elements を参照してください。 2 1 .1 6 .1 .2 . ソ ース 要素 354 第 2 1章 ド メ イ ン X M L の 操 作 < d is k t y p e = 'file ''> の場合、file 属性は、ディスクを保持するファイルへの完全修飾パスを指定しま す。< d is k t y p e = 'b lo c k '> の場合、d e v 属性は、ディスクとして機能するホスト物理マシンへのパスを指定しま す。file と b lo c k の両方の場合に、下記の 1 つ以上のオプションサブ要素 s e c la b e l を使用して、そのソース ファイルのドメインセキュリティーラベルポリシーをオーバーライドすることができます。ディスクタイプが d ir の場 合、d ir 属性は、ディスクとして使用されるディレクトリーへの完全修飾パスを指定します。ディスクタイプが n e t w o r k の場合、プロトコル属性は、要求されるイメージにアクセスするためのプロトコルを指定します。使用できる 値は、n b d 、r b d 、s h e e p d o g または g lu s t e r です。 プロトコル属性が r b d 、s h e e p d o g または g lu s t e r の場合、追加属性の n a m e は、使用するボリュームおよび/ま たはイメージを指定するために必須となります。ディスクタイプが n e t w o r k の場合、s o u r c e には、t y p e = 'd ir ' お よび t y p e = 'n e t w o r k ' などの、接続するホスト物理マシンを指定するために使用されるゼロまたは 1 つ以上の h o s t サブ要素が含まれる場合があります。CDROM またはフロッピー (デバイス属性) を表す file ディスクタイプ の場合、ソースファイルにアクセスできない場合にディスクをどう処理するかについてのポリシーを定義することができ ます。これは、以下の値と共に、s t a r t u p P o lic y 属性を処理することによって実行されます。 m a n d a t o r y は、何らかの理由で見当たらない場合に、失敗を生じさせます。これはデフォルトの設定です。 r e q u is it e は、ブート時に見つからない場合に失敗を生じさせ、移行/復元/復帰の時点で見つからない場合に ドロップします。 o p t io n a l は、開始の試行時にドロップします。 2 1 .1 6 .1 .3 . M irro t 要素 この要素は、ハイパーバイザーが B lo c k C o p y 操作を開始する場合に見られます。ここで、属性ファイルの < m ir r o r > ロケーションには、最終的には、属性形式のファイル形式 (ソースの形式と異なる可能性がある) で、ソー スと同じコンテンツが含まれることになります。ready 属性がある場合、ディスクはピボットできることが認識されます。 それ以外の場合、ディスクはおそらくコピーを続けます。現在のところ、この要素は出力でのみ有効であり、入力では無 視されます。 2 1 .1 6 .1 .4 . Ta rg e t 要素 < t a r g e t > 要素は、ディスクがゲスト仮想マシン OS に公開されるバス/デバイスを制御します。dev 属性は、論理デ バイス名を示します。指定される実際のデバイス名がゲスト仮想マシン OS 内のデバイス名にマップされるとは限りま せん。オプションのバス属性は、エミュレートするディスクデバイスのタイプを指定します。使用できる値は、以下の標準 的な値を含む、ドライバー固有の値になります。id e 、s c s i 、v ir t io 、x e n 、u s b または s a t a 。バスタイプは、省略さ れる場合、デバイス名のスタイルから推定されます。たとえば、's d a ' という名前のデバイスは、通常 SCSI バスを使 用してエクスポートされます。オプション属性の t r a y は、リムーバブルディスク (CDROM またはフロッピーディスク など) のトレイ状態を示し、値は o p e n または c lo s e d にすることができます。デフォルト設定は c lo s e d です。詳細 は、target Elements を参照してください。 2 1 .1 6 .1 .5 . io tune オプションの < io t u n e > 要素は、デバイスごとに異なる可能性のある値と共に、追加のデバイスごとの I/O チューニ ングを提供する機能を提供します (ドメインにグローバルに適用される b lk io t u n e 要素と比較)。この要素には、以 下のオプションのサブ要素があります。全くサブ要素が指定されていないか、または 0 の値と共に指定されている場 合は制限がないことを示すことに注意してください。 < t o t a l_ b y t e s _ s e c > - 秒あたりのバイト単位の合計スループット制限です。この要素 は、< r e a d _ b y t e s _ s e c > または < w r it e _ b y t e s _ s e c > と共に使用することはできません。 < r e a d _ b y t e s _ s e c > - 秒あたりのバイト単位の読み込みスループット制限です。 < w r it e _ b y t e s _ s e c > - 秒あたりのバイト単位の書き込みスループット制限です。 < t o t a l_ io p s _ s e c > - 秒あたりの合計 I/O 回数です。この要素は、< r e a d _ io p s _ s e c > または < w r it e _ io p s _ s e c > と共に使用することができません。 355 仮 想 化 管 理 ガイ ド < r e a d _ io p s _ s e c > - 秒あたりの読み込み I/O 回数です。 < w r it e _ io p s _ s e c > - 秒あたりの書き込み I/O 回数です。 2 1 .1 6 .1 .6 . d riv e r オプションの < d r iv e r > 要素では、ディスク提供に使用されるハイパーバイザードライバーに関連する詳細指定が可 能です。以下のオプションが使用可能です。 ハイパーバイザーが複数のバックエンドドライバーをサポートする場合、n a m e 属性は、プライマリーバックエンドド ライバーの名前を選択し、オプションのtype 属性はサブタイプを提供します。使用できるタイプの一覧は、Driver Elements を参照してください。 オプションの c a c h e 属性は、キャッシュメカニズムを制御します。使用できる値は以下の通りで す。d e fa u lt 、n o n e 、w r it e t h r o u g h 、w r it e b a c k 、d ir e c t s y n c (w r it e t h r o u g h に似ていますが、ホ スト物理マシンのページキャッシュをバイパスします) および u n s a fe (ホスト物理マシンはすべてのディスク IO を キャッシュする可能性があり、ゲスト仮想マシンの同期要求は無視されます)。 オプションの e r r o r _ p o lic y 属性は、ディスクの読み込みまたは書き込みエラー時にハイパーバイザーがどのよ うに動作するかを制御します。使用できる値は、s t o p 、r e p o r t 、ig n o r e 、および e n o s p a c e で す。e r r o r _ p o lic y のデフォルト設定は r e p o r t です。さらに、読み取りエラーの動作のみを制御するオプショ ンの r e r r o r _ p o lic y もあります。r e r r o r _ p o lic y が指定されていない場合、e r r o r _ p o lic y が読み込 みエラーと書き込みエラーの両方に使用されます。r e r r o r _ p o lic y が指定される場合、それは読み込みエラー の e r r o r _ p o lic y をオーバーライドします。また、e n o s p a c e は読み込みエラーの有効なポリシーではないこと に注意してください。そのため、e r r o r _ p o lic y が e n o s p a c e に設定され、n o r e r r o r _ p o lic y が読み込 みエラーに指定される場合、デフォルト設定の r e p o r t が使用されます。 オプションの io 属性は、I/O 上の特定のポリシーを制御します。q e m u ゲスト仮想マシンは、t h r e a d s および n a t iv e をサポートします。オプションの io e v e n t fd 属性により、ユーザーはディスクデバイスのドメイン I/O の 非同期処理を設定できます。デフォルトはハイパーバイザーによって設定されます。受け入れ可能な値は、o n およ び o ff です。これを有効にすることにより、別のスレッドが I/O を処理する間に、ゲスト仮想マシンを実行させるこ とができます。通常これは、I/O 時のシステム CUP の高い使用率を経験するゲスト仮想マシンの場合に役立ちま す。なお、過負荷のホスト物理マシンは、ゲスト仮想マシンの I/O 待ち時間を増やす可能性があります。io の操 作が確実に必要でない限り、デフォルトの設定を変更せず、ハイパーバイザーによる設定を許可することが強く推 奨されます。 オプションの e v e n t _ id x 属性は、デバイスイベント処理のいくつかの側面を制御し、o n または o ff のいずれか に設定できます。これが o n の場合、割り込みの数が減少し、ゲスト仮想マシンに対して終了します。デフォルトは ハイパーバイザーによって決定され、デフォルト設定は o n になります。この動作が次善的なオプションである場合 には、この属性は機能の o ff を強制する方法を提供します。e v e n t _ id x の操作が確実に必要でない限り、デ フォルトの設定を変更せずに、ハイパーバイザーによる設定を許可することが強く推奨されます。 オプションの c o p y _ o n _ r e a d 属性は、読み込みバッキングファイルをイメージファイルにコピーするかどうかを制 御します。許可される値は、o n または o ff のいずれかになります。c o p y - o n - r e a d は、同じバッキングファイル のセクターに繰り返しアクセスすることを防ぎ、バッキングファイルが速度の遅いネットワーク上にある場合に便利 になります。デフォルトで、c o p y - o n - r e a d は o ff になります。 2 1 .1 6 .1 .7 . 追加の デバ イス 要素 以下の属性は、d e v ic e 要素内で使用することができます。 < b o o t > - ディスクが起動可能であると指定します。 追加の ブ ート 値 < o r d e r > - ブートシーケンス時にデバイスが試行される順序を決定します。 356 第 2 1章 ド メ イ ン X M L の 操 作 < p e r - d e v ic e > bo o t 要素は、BIOS ブートローダーセクションの一般的な bo o t 要素と共に使用すること ができません。 < e n c r y p t io n > - ボリュームが暗号化される方法を指定します。詳細は、ストレージの暗号化についてのページ を参照してください。 < r e a d o n ly > - デバイスがゲスト仮想マシンで変更できないことを示します。この設定は、a t t r ib u t e d e v ic e = 'c d r o m ' の場合のディスクのデフォルトです。 s h a r e a b le デバイスがドメイン間で共有されることが予期されることを示します (ハイパーバイザーおよび OS がこれをサポートする場合)。s h a r e a b le が使用される場合、c a c h e = 'n o ' がそのデバイスに使用される必要 があります。 < t r a n s ie n t > - ゲスト仮想マシンが終了する場合、デバイスコンテンツへの変更が自動的に元に戻されることを 示します。一部のハイパーバイザーでは、ディスクを t r a n s ie n t とマークすることにより、ドメインが移行またはス ナップショットに加わることを防ぎます。 < s e r ia l> - ゲスト仮想マシンのハードドライブのシリアル番号を指定します。たとえば、< s e r ia l> WDWMAP9A96 6 14 9< / s e r ia l> のようになります。 < w w n > - 仮想ハードディスクまたは CD-ROM ドライブの WWN (Wo rld Wide Name) を指定します。これは、 16 進法の 16 桁番号で構成される必要があります。 < v e n d o r > - 仮想ハードディスクまたは CD-ROM デバイスのベンダーを指定します。この長さは、8 文字の印刷 可能な文字を超えることはできません。 < p r o d u c t > - 仮想ハードディスクまたは CD-ROM デバイスの製品を指定します。その長さは、16 文字の印刷 可能な文字を超えることはできません。 < h o s t > - 以下の 4 つの属性をサポートします。v iz 、n a m e 、p o r t 、t r a n s p o r t および s o c k e t 。これらは、 ホスト名、ポート番号、トランスポートタイプおよびソケットのパスをそれぞれ指定します。この要素の意味と要素の 数は、以下に示される p r o t o c o l 属性によって異なります。 追加の ホス ト 属性 n b d - nbd-server を実行するサーバーを指定し、単一のホスト物理マシンにのみ使用することができます。 r b d - RBD タイプのサーバーを監視し、1 つ以上のホスト物理マシンに使用することができます。 s h e e p d o g - sheepdo g サーバーの 1 つを指定し (デフォルトは lo calho st:70 0 0 )、1 つのホスト物理マ シンに使用できるか、またはいずれのホスト物理マシンにも使用できません。 g lu s t e r - glusterd デーモンを実行するサーバーを指定し、単一のホスト物理マシンにのみ使用できます。 transpo rt 属性の有効な値は t c p 、r d m a または u n ix です。いずれの値も指定されていない場合は、t c p が想定されます。transpo rt が u n ix の場合、s o c k e t 属性は、unix ソケットへのパスを指定します。 < a d d r e s s > - ディスクをコントローラーの指定されたスロットに関連付けます。実際の < c o n t r o lle r > デバイ スを推定できることもありますが、これを明示的に指定することもできます。t y p e 属性は必須であり、通常は p c i または d r iv e になります。p c i コントローラーの場合、b u s 、s lo t 、および fu n c t io n の属性が、オプションの d o m a in および m u lt ifu n c t io n と共に存在する必要があります。m u lt ifu n c t io n はデフォルトで o ff に なります。d r iv e コントローラーの場合、追加属性の c o n t r o lle r 、b u s 、t a r g e t 、および u n it を使用でき、 それぞれのデフォルト設定は 0 になります。 a u t h - ソースにアクセスするのに必要な認証資格情報を提供します。これには、認証時に使用するユーザー名を 特定する必須属性 username と、必須属性 t y p e を持つサブ要素 s e c r e t が含まれます。詳細は、Device Elements を参照してください。 g e o m e t r y - 配置設定をオーバーライドする機能を提供します。これは、ほとんどの場合 S390 DASD ディスクま たは古い DOS ディスクに対して役立ちます。 357 仮 想 化 管 理 ガイ ド c y ls - シリンダーの数を指定します。 h e a d s - ヘッドの数を指定します。 s e c s - トラックあたりのセクター数を指定します。 t r a n s - BIOS-Translatio n-Mo dus を指定し、n o n e 、lb a または a u t o のいずれかを取ることができます。 b lo c k io - ブロックデバイスを、以下に記載されるブロックデバイスプロパティーのいずれかでオーバーライドでき るようにします。 b lo ck io オ プシ ョ ン lo g ic a l_ b lo c k _ s iz e - ゲスト仮想マシン OS にレポートし、ディスク I/O の最小単位について記述しま す。 p h y s ic a l_ b lo c k _ s iz e - ゲスト仮想マシン OS にレポートし、ディスクデータの位置合わせに関連する ディスクのハードウェアセクターサイズを記述します。 21.16.2. ファイルシス テム ゲスト仮想マシンから直接アクセスできるホスト物理マシンのファイルシステムディレクトリーにあります。 ... <devices> <filesystem type='tem plate'> <source nam e='m y-vm -tem plate'/> <target dir='/'/> </filesystem > <filesystem type='m ount' accessm ode='passthrough'> <driver type='path' wrpolicy='im m ediate'/> <source dir='/export/to/guest'/> <target dir='/im port/from /host'/> <readonly/> </filesystem > ... </devices> ... 図2 1 . 2 4 デバ イス - フ ァ イル シ ス テム file s y s t e m 属性には、以下の値を使用できます。 t y p e = 'm o u n t ' - ゲスト仮想マシンにマウントするホスト物理マシンのディレクトリーを指定します。いずれの値 も指定されていない場合は、これがデフォルトタイプになります。このモードには、属性の t y p e = 'p a t h ' または t y p e = 'h a n d le ' を持つオプションのサブ要素 d r iv e r があります。ドライバーブロックには、ホスト物理マシン のページキャッシュをさらに制御するオプション属性の w r p o lic y があり、この属性を省略すると、デフォルト設 定に戻ります。一方、この値を指定すると、ゲスト仮想マシンのファイル書き込み操作時に接触されるすべてのペー ジに対して、ホスト物理マシンの書き戻しが即時にトリガーされます。 t y p e = 't e m p la t e ' - OpenVZ ファイルシステムテンプレートを指定し、OpenVZ ドライバーによってのみ使用 されます。 358 第 2 1章 ド メ イ ン X M L の 操 作 t y p e = 'file ' - ホスト物理マシンファイルがイメージとして処理され、ゲスト仮想マシンにマウントされることを指 定します。このファイルシステム形式は自動検出され、LXC ドライバーによってのみ使用されます。 t y p e = 'b lo c k ' - ゲスト仮想マシンでマウントされるホスト物理マシンのブロックデバイスを指定します。ファイル システム形式は自動検出され、LXC ドライバーによってのみ使用されます。 t y p e = 'r a m ' - ホスト物理マシン OS からのメモリーを使用する、インメモリーファイルシステムが使用されること を指定します。so urce 要素には、キビバイト単位でメモリー使用制限を設ける単一属性の u s a g e があり、LXC ドライバーによってのみ使用されます。 t y p e = 'b in d ' - ゲスト仮想マシン内の別のディレクトリーにバインドされるゲスト仮想マシン内のディレクトリーを 指定します。この要素は、LXC ドライバーによってのみ使用されます。 a c c e s s m o d e は、ソースのアクセス用にセキュリティーモードを指定します。現在、これは、QEMU/KVM ドライ バーに対して type='mo unt' と指定する場合にのみ機能します。使用できる値は以下の通りです。 p a s s t h r o u g h - ゲスト仮想マシン内から設定されるユーザーのアクセス権でソースがアクセスされることを 指定します。これは、いずれも指定されていない場合にデフォルトの accessmo de になります。 m a p p e d - ソースがハイパーバイザーのアクセス権でアクセスされることを指定します。 s q u a s h - 'p a s s t h r o u g h ' に似ていますが、例外は、c h o w n のような権限による操作の失敗が無視され ることです。これにより、ハイパーバイザーを ro o t 以外で実行するユーザーにとって、passthro ugh のような モードを使いやすいものとします。 < s o u r c e > - ゲスト仮想マシンでアクセスされるホスト物理マシン上のリソースを指定します。n a m e 属性 は、< t y p e = 't e m p la t e '> と共に使用され、d ir 属性は < t y p e = 'm o u n t '> と共に使用される必要がありま す。u s a g e 属性は、メモリーを KB 単位で設定するために < t y p e = 'r a m '> と共に使用する必要があります。 t a r g e t - ゲスト仮想マシン内のどこでソースドライバーがアクセスできるかを決定します。大半のドライバーの場 合、これは自動的なマウントポイントになりますが、QEMU-KVM の場合、これは、マウントする場所のヒントとして ゲスト仮想マシンにエクスポートされる任意の文字列タグでしかありません。 r e a d o n ly - ゲスト仮想マシンの読み取り専用マウントとしてファイルシステムのエクスポートを有効にします。デ フォルトでは、r e a d - w r it e アクセスが指定されます。 s p a c e _ h a r d _ lim it - このゲスト仮想マシンのファイルシステムに利用可能な最大領域を指定します。 s p a c e _ s o ft _ lim it - このゲスト仮想マシンのファイルシステムで利用できる最大領域を指定します。コンテ ナーは、猶予期間についてのソフト制限を超えることが許可されます。その後にハード制限が施行されます。 21.16.3. デバ イス アド レ ス 多くのデバイスには、ゲスト仮想マシンに提示されるデバイスが仮想バス上のどこに配置されるかを説明するオプショ ンの < a d d r e s s > サブ要素があります。アドレス (またはアドレス内のオプション属性) が入力で省略される場合、 libvirt は適切なアドレスを生成しますが、レイアウトにより多くの制御が必要な場合は明示的なアドレスが必要になり ます。address 要素を含むデバイス例について、以下を参照してください。 すべてのアドレスには、デバイスが置かれるバスを記述する必須の属性 t y p e があります。指定されるデバイスに使 用するアドレスを選択することは、デバイスおよびゲスト仮想マシンのアーキテクチャーによって部分的に制限されま す。たとえば、ディスクデバイスは t y p e = 'd is k ' を使用し、コンソールデバイスは、i6 8 6 または x8 6 _6 4 ゲスト仮 想マシンで t y p e = 'p c i' を使用するか、または Po werPC6 4 pseries ゲスト仮想マシンで t y p e = 's p a p r v io ' を使用します。各アドレスの < t y p e > には、デバイスが置かれるバス上の場所を制御するオプション属性があ ります。追加属性は以下のようになります。 t y p e = 'p c i' - PCI アドレスには以下のような追加属性があります。 d o m a in (2 バイトの 16 進整数。qemu は現在使用していません) 359 仮 想 化 管 理 ガイ ド b u s (0 から 0 xfff までの 16 進値) s lo t (0 x0 から 0 x1ff までの 16 進値) fu n c t io n (0 から 7 までの値) さらに、m u lt ifu n c t io n 属性も利用できます。これは、PCI コントロールレジスターの特定のスロット/機能 のマルチファンクションビットをオンにするよう制御します。この multifunctio n 属性は、デフォルトで 'o ff' になりますが、マルチファンクションが使用されるスロットのファンクション 0 では 'o n ' に設定する必要があ ります。 t y p e = 'd r iv e - ドライブアドレスには、以下の追加属性があります。 c o n t r o lle r - (2 桁のコントローラー番号) b u s - (2 桁のバス番号) t a r g e t - (2 桁のバス番号) u n it - (バス上の 2 桁のユニット番号) t y p e = 'v ir t io - s e r ia l' - 各 virtio -serial アドレスには、以下の追加属性があります。 c o n t r o lle r - (2 桁のコントローラー番号) b u s - (2 桁のバス番号) s lo t - (バス内の 2 桁のスロット) t y p e = 'c c id ' - スマートカードに使用される CCID アドレスには、以下の追加属性があります。 b u s - (2 桁のバス番号) s lo t 属性 - (バス内の 2 桁のスロット) t y p e = 'u s b ' - USB アドレスには、以下の追加属性があります。 b u s - (0 から 0 xfff までの 16 進値) p o r t - (1.2 または 2.1.3.1 など最大 4 つのオクテットからなるドット区切りの表記) t y p e = 's p a p r - v io - Po werPC pseries のゲスト仮想マシンで、デバイスは SPAPR-VIO バスに割り当てら れます。これには、フラットな 6 4 ビットのアドレス空間があります。通常、デバイスは通常 0 x10 0 0 のゼロ以外の 倍数で割り当てられますが、その他のアドレスも有効であり、libvirt によって許可されています。追加属性: reg (開始レジスターの 16 進値のアドレス) をこの属性に割り当てることができます。 21.16.4 . コントローラー ゲスト仮想マシンのアーキテクチャーにより、多くの仮想デバイスを単一バスに割り当てることができます。通 常、 libvirt はバスに使用するコントローラーを自動的に推定できます。ただし、ゲスト仮想マシン XML に明示的な < c o n t r o lle r > 要素を指定する必要がある場合があります。 ... <devices> <controller type='ide' index='0'/> <controller type='virtio-serial' index='0' ports='16 ' vectors='4'/> <controller type='virtio-serial' index='1'> 360 第 2 1章 ド メ イ ン X M L の 操 作 <address type='pci' dom ain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> <controller type='scsi' index='0' m odel='virtio-scsi' num _queues='8 '/> </controller> ... </devices> ... 図2 1 . 2 5 コント ロ ーラー要素 各コントローラーには、"id e "、"fd c "、"s c s i"、"s a t a "、 "u s b "、"c c id "、または "v ir t io s e r ia l" のいずれかにする必要のある必須属性 t y p e 、および バスコントローラーが (a d d r e s s 要素のコントロー ラー属性で使用されるために) 表示される順序を記述する10 進整数である、必須属性の in d e x がありま す。"v ir t io - s e r ia l" コントローラーには、コントローラーで接続できるデバイスの数を制御する、2 つの追加のオ プション属性である p o r t s と v e c t o r s があります。 < c o n t r o lle r t y p e = 's c s i'> には、以下のいずれかになるオプション属性の m o d e l があります。"a u t o " 、 "b u s lo g ic " 、"ib m v s c s i" 、"ls ilo g ic " 、"ls ia s 10 6 8 " 、"v ir t io - s c s i または "v m p v s c s i" 。virtio scsi コントローラーおよびドライバーは KVM および Windo ws ゲスト仮想マシンの両方で機能することに注意してく ださい。また、< c o n t r o lle r t y p e = 's c s i'> には、指定するキューの数に対するマルチキューサポートを有効に する属性 n u m _ q u e u e s があります。 "u s b " コントローラーには、以下のいずれかになるオプション属性の m o d e l があります。"p iix 3 u h c i" 、"p iix 4 - u h c i" 、"e h c i" 、"ic h 9 - e h c i1" 、"ic h 9 - u h c i1" 、"ic h 9 - u h c i2 " 、"ic h 9 u h c i3 " 、"v t 8 2 c 6 8 6 b - u h c i" 、"p c i- o h c i" または "n e c - x h c i" 。さらに、USB バスがゲスト仮想マシンに対 して明示的に無効にされる必要がある場合、m o d e l= 'n o n e ' を使用できます。Po werPC6 4 "spapr-vio " アドレス には、関連付けられたコントローラーがありません。 PCI または USB バス上のデバイスとなっているコントローラーの場合、オプションのサブ要素 a d d r e s s は、上記で 指定される形式を使って、コントローラーのマスターバスとの正確な関係を指定できます。 USB コンパニオンコントローラーには、コンパニオンとマスターコントローラーの正確な関係を指定するためのオプショ ンのサブ要素 m a s t e r があります。コンパニオンコントローラーは、そのマスターと同じバス上にあるため、コンパニ オンのインデックス値も等しくなければなりません。 ... <devices> <controller type='usb' index='0' <address type='pci' dom ain='0' </controller> <controller type='usb' index='0' <m aster startport='0'/> <address type='pci' dom ain='0' </controller> ... </devices> ... m odel='ich9-ehci1'> bus='0' slot='4' function='7'/> m odel='ich9-uhci1'> bus='0' slot='4' function='0' m ultifunction='on'/> 図2 1 . 2 6 デバ イス - コント ロ ーラー - US B 21.16.5. デバ イス の リ ース 361 仮 想 化 管 理 ガイ ド ロックマネージャーを使用する場合、ゲスト仮想マシンに対してデバイスリースを記録するオプションがあります。ロック マネージャーは、ゲスト仮想マシンはリースが取得されない限り開始されないようにします。通常の管理ツールを使用 して設定される場合、ドメイン XML の以下のセクションが影響を受けます。 ... <devices> ... <lease> <lockspace>som earea</lockspace> <key>som ekey</key> <target path='/som e/lease/path' offset='1024'/> </lease> ... </devices> ... 図2 1 . 2 7 デバ イス - デバ イス の リース le a s e セクションには、以下の引数を含めることができます。 lo c k s p a c e - キーが保持される lo ckspace を特定する任意の文字列です。ロックマネージャーは、 lo ckspace 名の形式または長さに追加の制限を設定できます。 k e y - 取得されるリースを一意的に識別する任意の文字列です。ロックマネージャーは、キーの形式または長さに 対して追加の制限を設定することができます。 t a r g e t - lo ckspace に関連付けられたファイルの完全修飾パスです。オフセットは、ファイル内のどこにリース が格納されるかを指定します。ロックマネージャーがオフセットを必要としない場合、この値を 0 に設定します。 21.16.6. ホス ト物理マ シンの デバ イス 割り当て 2 1 .1 6 .6 .1 . US B / P C I デバ イス ホスト物理マシンの USB および PCI デバイスは、管理ツールを使用してホスト物理マシンを変更することによっ て、h o s t d e v 要素を使用してゲスト仮想マシンに渡すことができます。ドメイン XML ファイルの以下のセクションが 設定されます。 ... <devices> <hostdev m ode='subsystem ' type='usb'> <source startupPolicy='optional'> <vendor id='0x1234'/> <product id='0xbeef'/> </source> <boot order='2'/> </hostdev> </devices> ... 362 第 2 1章 ド メ イ ン X M L の 操 作 図2 1 . 2 8 デバ イス - ホス ト 物理マ シ ンの デバ イス 割り 当て または、以下を実行することもできます。 ... <devices> <hostdev m ode='subsystem ' type='pci' m anaged='yes'> <source> <address bus='0x06 ' slot='0x02' function='0x0'/> </source> <boot order='1'/> <rom bar='on' file='/etc/fake/boot.bin'/> </hostdev> </devices> ... 図2 1 . 2 9 デバ イス - ホス ト 物理マ シ ン割り 当て の 代替 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 3 ホス ト 物理マ シ ンデバ イス 割り 当て 要素 パ ラメーター 説明 hostdev これは、ホスト物理マシンを説明するためのメインコンテ ナーです。USB デバイスパススルーの場合、m o d e は常 に s u b s y s t e m であり、t y p e は、USB デバイスの場 合は u s b 、PCI デバイスの場合は p c i になります。 m a n a g e d が PCI デバイスについて y e s とされる場 合、これは、ゲスト仮想マシンに渡される前に、ホスト物 理マシンから切り離され、ゲスト仮想マシンが終了した 後にホスト物理マシンに再アタッチされます。m a n a g e d が省略されるか、または PCI および USB デバイスに対 して n o となる場合、ユーザーは、ゲスト仮想マシンの開 始またはデバイスのホットプラグの前に引数 v ir N o d e D e v ic e D e t t a c h (または v ir s h n o d e d e v - d e t t a c h ) を使用することができ、ゲスト仮 想マシンのホットアンプラグまたは停止の後に v ir N o d e D e v ic e R e A t t a c h (または v ir s h n o d e d e v - r e a t t a c h ) を使用することができます。 363 仮 想 化 管 理 ガイ ド パ ラメーター 説明 source ホスト物理マシンから表示されるデバイスについて説明 します。USB デバイスは、v e n d o r および p r o d u c t 要 素を使用してベンダー/製品 ID によって処理されるか、 または a d d r e s s 要素を使用してホスト物理マシン上 のデバイスのアドレスによって処理されます。他方、PCI デバイスは、それらのアドレスによってのみ記述されま す。USB デバイスのソース要素には、指定のホスト物理 マシンの USB デバイスが見つからなかった場合の処理 についてのルールを定義するために使用できる s t a r t u p P o lic y 属性が含まれる可能性があります。 この属性は、以下の値を受け入れます。 m a n d a t o r y - 何かの理由で見つからない場合に 失敗します (デフォルト) r e q u is it e - 起動時に見つからない場合に失敗 し、移行/復元/復帰の時点で見つからない場合にド ロップします。 o p t io n a l - 開始の試行時に見つからない場合に ドロップします。 vendor, product boot rom address 2 1 .1 6 .6 .2 . ブ ロ ッ ク / キ ャラク タ ーデバ イス 364 これらの要素のそれぞれには、USB ベンダーおよび製 品 ID を指定する id 属性があります。ID は、10 進数、 16 進数 (0 x で開始) または 8 進数 (0 で開始) の形 式で指定できます。 デバイスが起動可能であることを指定します。この属性 の順序は、ブートシーケンス時にデバイスが試行される 順序を決定します。デバイスごとの bo o t 要素は、BIOS ブートローダーセクションの一般的な bo o t 要素と共に 使用することができません。 PCI デバイスの ROM がゲスト仮想マシンに提示される 方法を変更するために使用されます。オプションの b a r 属性は、o n または o ff に設定でき、デバイスの ROM がゲスト仮想マシンのメモリーマップに表示されるかどう かを決定します (PCI 資料によると、r o m b a r 設定は、 ROM の Base Address Register の表示を制御しま す)。ro m bar が指定されない場合、デフォルト設定が 使用されます。オプションの file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイ ナリーファイルをポイントするために使用されます。これ は、たとえば sr-io v 対応のイーサネットデバイス (VF の ブート ROM を持たない) の仮想機能用に PXE ブート ROM を提供するのに便利です。 さらに、デバイスが表示されるホスト物理マシン上の USB バスとデバイス番号を指定するための b u s および d e v ic e 属性があります。これらの属性の値は、10 進 数、16 進数 (0 x で開始) または 8 進数 (0 で開始) の 形式で指定できます。PCI デバイスの場合、要素には 3 つの属性が含まれ、デバイスを ls p c i または v ir s h n o d e d e v - lis t で検索できるように指定することがで きます。 第 2 1章 ド メ イ ン X M L の 操 作 ホスト物理マシンのブロック/キャラクターデバイスは、管理ツールを使用してドメイン xml の h o s t d e v 要素を変更す ることで、ゲスト仮想マシンに渡すことができます。これは、コンテナーベースの仮想化の場合にのみ可能であることに 注意してください。 ... <hostdev m ode='capabilities' type='storage'> <source> <block>/dev/sdf1</block> </source> </hostdev> ... 図2 1 . 3 0 デバ イス - ホス ト 物理マ シ ンデバ イス 割り 当て ブ ロ ッ ク キ ャラク ターデバ イス 以下は代替アプローチです。 ... <hostdev m ode='capabilities' type='m isc'> <source> <char>/dev/input/event3</char> </source> </hostdev> ... 図2 1 . 3 1 デバ イス - ホス ト 物理マ シ ンデバ イス 割り 当て ブ ロ ッ ク キ ャラク ターデバ イス の 代替法 1 以下はもう 1 つの代替アプローチです。 ... <hostdev m ode='capabilities' type='net'> <source> <interface>eth0</interface> </source> </hostdev> ... 図2 1 . 3 2 デバ イス - ホス ト 物理マ シ ンデバ イス 割り 当て ブ ロ ッ ク キ ャラク ターデバ イス の 代替法 2 ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 4 ブ ロ ッ ク / キ ャラク ターデバ イス 要素 365 仮 想 化 管 理 ガイ ド パ ラメーター 説明 hostdev これは、ホスト物理マシンデバイスを記述するためのメイ ンコンテナーです。ブロック/キャラクターデバイスのパス スルーの場合 m o d e は常に c a p a b ilit ie s で、ブ ロックデバイスの場合 t y p e は b lo c k で、キャラクター デバイスの場合 c h a r になります。 これは、ホスト物理マシンから表示されるデバイスについ て記述します。ブロックデバイスの場合、ホスト物理マシ ン OS のブロックデバイスへのパスは、ネスト化された b lo c k 要素に指定され、キャラクターデバイスの場合 は、c h a r 要素が使用されます。 source 21.16.7. リ ダイレ クトさ れ る デバ イス キャラクターデバイスによる USB デバイスのリダイレクトは、ドメイン XML の以下のセクションを変更する管理ツール でこれを設定することによりサポートされます。 ... <devices> <redirdev bus='usb' type='tcp'> <source m ode='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> ... 図2 1 . 3 3 デバ イス - リダイレ ク ト され るデバ イス ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。 表2 1 . 1 5 リダイレ ク ト され るデバ イス 要素 パ ラメーター 366 説明 第 2 1章 ド メ イ ン X M L の 操 作 パ ラメーター 説明 r e d ir d e v これは、リダイレクトされるデバイスを記述するためのメイ ンコンテナーです。b u s は、USB デバイスの場合は u s b にする必要があります。トンネルのホスト物理マシン側を 記述するには、サポートされるシリアルデバイスの 1 つ の一致する追加属性タイプが必要になります。それらの 典型例は、t y p e = 't c p ' または t y p e = 's p ic e v m c ' (SPICE グラフィックスデバイスの usbredir チャンネル を使用) です。redirdev 要素にはオプションのサブ要素 a d d r e s s があり、これは、デバイスを特定のコントロー ラーに関連付けます。さらに、s o u r c e などのサブ要素 が、指定される t y p e に基づいて必要になる場合があ ります。ただし、t a r g e t サブ要素は不要です (キャラク ターデバイスのコンシューマーが、ゲスト仮想マシンに表 示されるデバイスではなく、ハイパーバイザー自体である ため)。 デバイスが起動可能であることを指定します。o rder 属 性は、ブートシーケンス時にデバイスを試行する順序を 決定します。デバイスごとの bo o t 要素は、BIOS ブート ローダーセクションの一般的な bo o t 要素と共に使用 することができません。 これは、特定のデバイスをリダイレクトからフィルターする ためのフィルタールールを作成するために使用されま す。これは、各フィルタールールを定義するためにサブ要 素 u s b d e v を使用します。c la s s 属性は USB クラス コードです。 boot r e d ir filt e r 21.16.8. ス マ ートカード デバ イス 仮想スマートカードは、s m a r t c a r d 要素からゲスト仮想マシンに提供されます。ホストマシン上の USB スマート カードリーダーデバイスは、単純なデバイスパススルーではゲストで使用することができません。仮想スマートカードは ホストとゲストの両方で利用可能とすることができないので、ゲストから削除されるとホストのコンピューターをロック できます。このため一部のハイパーバイザーは、ゲスト仮想マシンにスマートカードインターフェースを提供できる特殊 な仮想デバイスを提供します。その際、資格情報がホストマシン、またはサードパーティーのスマートカードプロバイ ダーによって作成されたチャンネルからどのように取得されたかを記述するために複数のモードが使用されます。キャ ラクターデバイスによる USB デバイスのリダイレクション用のパラメーターを設定するには、ドメイン XML の以下のセ クションを編集します。 ... <devices> <sm artcard m ode='host'/> <sm artcard m ode='host-certificates'> <certificate>cert1</certificate> <certificate>cert2</certificate> <certificate>cert3</certificate> <database>/etc/pki/nssdb/</database> </sm artcard> <sm artcard m ode='passthrough' type='tcp'> <source m ode='bind' host='127.0.0.1' service='2001'/> <protocol type='raw'/> <address type='ccid' controller='0' slot='0'/> 367 仮 想 化 管 理 ガイ ド </sm artcard> <sm artcard m ode='passthrough' type='spicevm c'/> </devices> ... 図2 1 . 3 4 デバ イス - ス マ ート カ ードデバ イス s m a r t c a r d 要素には、必須属性の m o d e があります。以下のモードがサポートされます。それぞれのモードでは、 ゲスト仮想マシンには、物理 USB CCID (Chip/Smart Card Interface Device) カードのように動作する USB バ ス上にデバイスが表示されます。 モード属性は以下のようになります。 表2 1 . 1 6 ス マ ート カ ードの mo d e 要素 パ ラメーター 説明 m o d e = 'h o s t ' このモードでは、ハイパーバイザーは、ゲスト仮想マシン から NSS 経由でホスト物理マシンのスマートカードへ のすべてのダイレクトアクセス要求を中継します。これ以 外の属性またはサブ要素は不要です。オプションの a d d r e s s サブ要素の使用については、以下を参照し てください。 このモードにより、スマートカードをホスト物理マシンに プラグインする代わりに、ホスト物理マシン上のデータ ベースにある 3 つの NSS 証明書名を指定することがで きます。これらの証明書は、コマンドの c e r t u t il - d / e t c / p k i/ n s s d b - x - t C T, C T, C T - S - s C N = c e r t 1 - n c e r t 1, により生成され、結果として 作成される 3 つの証明書名は、3 つの c e r t ific a t e サブ認証のそれぞれのコンテンツとして指定される必要 があります。追加のサブ要素の d a t a b a s e は代替ディ レクトリーへの絶対パスを指定できます (証明書の作成 時の c e r t u t il コマンドの - d フラグに一致)。これが 表示されない場合、デフォルトは / e t c / p k i/ n s s d b になります。 このモードでは、ハイパーバイザーがホスト物理マシンと 直接通信するのではなく、すべての要求を 2 次的なキャ ラクターデバイス経由でサードパーティープロバイダー (これがその後、スマートカードと通信するか、3 つの認 証ファイルを使用します) にトンネルすることができます。 この操作モードでは、対応するシリアルデバイスタイプの いずれかに一致する、追加属性の t y p e が、トンネルの ホスト物理マシン側を記述するために必要になりま す。t y p e = 't c p ' または t y p e = 's p ic e v m c ' (SPICE グラフィックスデバイスのスマートカードチャンネ ルを使用) などが一般的な例になります。さら に、s o u r c e などのサブ要素は、指定されるタイプに応 じて必要になります。ただし、t a r g e t サブ要素は不要 です (キャラクターデバイスのコンシューマーが、ゲスト仮 想マシン内に表示されるデバイスではなく、ハイパーバイ ザー自体であるため)。 m o d e = 'h o s t - c e r t ific a t e s ' m o d e = 'p a s s t h r o u g h ' 各モードはオプションのサブ要素 a d d r e s s をサポートします。これは、スマートカードと ccid バスコントローラー間 の相関関係を微調整します (「デバイスアドレス」 を参照してください)。 368 第 2 1章 ド メ イ ン X M L の 操 作 21.16.9. ネ ットワークインタ ーフェース ネットワークインターフェースデバイスは、ドメイン XML の以下の部分を設定する管理ツールを使用して変更されます。 ... <devices> <interface type='bridge'> <source bridge='xenbr0'/> <m ac address='00:16 :3e:5d:c7:9e'/> <script path='vif-bridge'/> <boot order='1'/> <rom bar='off'/> </interface> </devices> ... 図2 1 . 3 5 デバ イス - ネ ッ ト ワーク インターフ ェ ース ゲスト仮想マシンに表示されるネットワークインターフェースを指定するには、いくつかの方法が考えられます。以下の サブセクションでは、それぞれ共通のセットアップオプションについて詳述しています。さらに、それぞれの < in t e r fa c e > 要素には、オプションの < a d d r e s s > サブ要素があり、このサブ要素は、属性 t y p e = 'p c i' によ り、インターフェースを特定の pci スロットに関連付けることができます (「デバイスアドレス」 を参照)。 2 1 .1 6 .9 .1 . 仮想ネ ッ ト ワーク 仮想ネットワークは、動的/ワイヤレス設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続 (または、ホ スト物理マシンのハードウェアの詳細が < n e t w o r k > 定義に別個に記載される複数ホスト物理マシン環境) につい て推奨される設定です。さらに、これは、名前付きネットワーク定義によって詳述される接続を提供します。仮想ネット ワークの fo r w a r d m o d e 設定に応じて、ネットワークは完全に分離するか (< fo r w a r d > 要素の指定なし)、明示 的なネットワークデバイスまたはデフォルトルートに対して NAT を実行するか (fo r w a r d m o d e = 'n a t ' )、NAT な しで経路指定されるか (fo r w a r d m o d e = 'r o u t e '/ )、またはホスト物理マシンのネットワークインターフェースの いずれかに接続されるか (macvtap 経由)、またはブリッジデバイスに接続されます (fo r w a r d m o d e = ' b r id g e |p r iv a t e |v e p a |p a s s t h r o u g h '/ )。 ブリッジ、プライベート、vepa、およびパススルーの fo rward モードが指定されたネットワークの場合、ホスト物理マシ ンの必要な DNS および DHCP サービスが libvirt 外にすでにセットアップされていることが想定されます。分離 (iso lated)、nat および経路指定されるネットワークの場合、DHCP および DNS は、libvirt によって仮想ネットワーク 上で提供され、IP 範囲は、v ir s h n e t - d u m p x m l [ n e t w o r k n a m e ] により仮想ネットワーク設定を検査して決 定できます。デフォルトのルートに対して NAT を実行する既成の「デフォルト」セットアップと呼ばれる仮想ネットワーク があり、この場合、IP 範囲は 192.16 8 .122.0 /255.255.255.0 になります。それぞれの仮想マシンには、vnetN の名前で作成された、関連付けられた tun デバイスがあり、これは、< t a r g e t > 要素でオーバーライドすることがで きます (「ターゲット要素のオーバーライド」を参照してください)。 インターフェースのソースがネットワークの場合、ポートグループはネットワークの名前で指定することができます。1 つ のネットワークには複数のポートグループが定義される場合があり、それぞれのポートグループには、ネットワーク接続 の異なるクラスについて若干異なる設定情報が含まれます。さらに、< d ir e c t > ネットワーク接続 (以下で説明) のよ うに、タイプ n e t w o r k の接続が < v ir t u a lp o r t > 要素を指定すると、vepa (8 0 2.1Qbg) または 8 0 2.1Qbh 互 換スイッチまたは Open vSwitch 仮想スイッチに設定データが転送されることがあります。 スイッチの実際のタイプは、ホスト物理マシン上の < n e t w o r k > の設定によって変わる場合があるため、仮想ポート のタイプ属性を省略したり、複数の異なる仮想ポートから属性を指定 (さらに特定の属性を省略) したりすることがで きます。ドメインの起動時に、完全な < v ir t u a lp o r t > 要素が、ネットワークで定義されるタイプと属性、およびイン ターフェースで参照されるポートグループをマージすることによって構成されます。新たに構成される仮想ポートは、こ 369 仮 想 化 管 理 ガイ ド れら 2 つを組み合わせたものです。下位の仮想ポートからの属性は、上位の仮想ポートで定義された属性を変更する ことができません。インターフェースの優先順位が最も高くなり、ポートグループの優先順位が最も低くなります。 たとえば、8 0 2.1Qbh スイッチと Open vSwitch スイッチの両方を持つ適切なネットワークを動作させるには、no type を指定することができますが、接続を機能させるには、p r o file id (スイッチが 8 0 2.1Qbh の場合) と in t e r fa c e id (スイッチが Open vSwitch の場合) の両方を指定する必要があります (さらに、ネットワークの v ir t u a lp o r t から入力される m a n a g e r id 、t y p e id 、または p r o file id などの他の属性は省略することもで きます)。ゲスト仮想マシンが特定タイプのスイッチにのみ接続するよう制限する場合、仮想ポートのタイプを指定でき、 指定されたポートタイプのスイッチのみが接続されます。追加のパラメーターを指定すると、スイッチの接続はさらに制 限されます。ポートが指定されており、ホスト物理マシンのネットワークに異なるタイプの仮想ポートがある場合、イン ターフェースの接続は失敗します。仮想ネットワークのパラメーターは、管理ツールを使用してドメイン XML の以下の 部分を変更して定義されます。 ... <devices> <interface type='network'> <source network='default'/> </interface> ... <interface type='network'> <source network='default' portgroup='engineering'/> <target dev='vnet7'/> <m ac address="00:11:22:33:44:55"/> <virtualport> <param eters instanceid='09b11c53-8 b5c-4eeb-8 f00-d8 4eaa0aaa4f'/> </virtualport> </interface> </devices> ... 図2 1 . 3 6 デバ イス - ネ ッ ト ワーク インターフ ェ ース - 仮想ネ ッ ト ワーク 2 1 .1 6 .9 .2 . LA N の ブ リッ ジ これが、静的な有線ネットワーク設定を持つホスト物理マシン上の一般的なゲスト仮想マシンの接続に推奨される設 定であることに留意してください。 LAN へのブリッジは、ゲスト仮想マシンから直接 LAN に接続するブリッジを提供します。これは、1 つ以上のホスト物 理マシンの物理 NIC がスレーブ化されているホスト物理マシンにブリッジデバイスがあることが想定されます。ゲスト 仮想マシンには、< v n e t N > の名前で作成された、関連付けられた t u n デバイスがあります。この名前 は、< t a r g e t > 要素でオーバーライドできます (「ターゲット要素のオーバーライド」を参照してください)。< t u n > デバ イスはブリッジに対してスレーブ化されます。IP 範囲/ネットワーク設定は、LAN で使用される任意の設定になります。 これは、物理マシンのように、ゲスト仮想マシンに対して完全な着信および発信ネットアクセスを提供します。 Linux システムでは、ブリッジデバイスは、通常標準の Linux ホスト物理マシンブリッジです。Open vSwitch をサ ポートするホスト物理マシンでは、v ir t u a lp o r t t y p e = 'o p e n v s w it c h '/ をインターフェース定義に追加する ことによって Open vSwitch ブリッジデバイスに接続することもできます。Open vSwitch タイプの仮想ポート は、p a r a m e t e r s 要素で以下の 2 つのパラメーターを受け入れます。1 つは、Open vSwitch へのこの特定のイン ターフェースを一意的に特定するために使用される標準 UUID になる in t e r fa c e id です (これを指定しない場 合、ランダムな in t e r fa c e id が、インターフェースの初回定義時に生成されます)。もう 1 つはオプションの p r o file id であり、これはインターフェース < p o r t - p r o file > として Open vSwitch に送信されます。LAN 設 定へのブリッジを設定するには、管理ツールを使用してドメイン XML の以下の部分を設定します。 370 第 2 1章 ド メ イ ン X M L の 操 作 ... <devices> ... <interface type='bridge'> <source bridge='br0'/> </interface> <interface type='bridge'> <source bridge='br1'/> <target dev='vnet7'/> <m ac address="00:11:22:33:44:55"/> </interface> <interface type='bridge'> <source bridge='ovsbr'/> <virtualport type='openvswitch'> <param eters profileid='m enial' interfaceid='09b11c53-8 b5c-4eeb-8 f00d8 4eaa0aaa4f'/> </virtualport> </interface> ... </devices> 図2 1 . 3 7 デバ イス - ネ ッ ト ワーク インターフ ェ ース - L AN の デバ イス 2 1 .1 6 .9 .3 . ポート の マ ス カ レ ード範囲の 設定 ポートのマスカレード範囲を設定する必要がある場合に、ポートは以下のように設定できます。 <forward m ode='nat'> <address start='192.0.2.1' end='192.0.2.10'/> </forward> ... 図2 1 . 3 8 ポート の マ ス カ レ ード範囲 これらの値は、「Netwo rk Address Translatio n モード」 に説明されるように ip t a b le s コマンドを使って設定さ れる必要があります。 2 1 .1 6 .9 .4 . ユーザ ー領域 S LIR P ス タ ッ ク ユーザー領域 SLIRP スタックパラメーターを設定すると、外部への NAT が指定された仮想 LAN が提供されます。仮 想ネットワークには DHCP および DNS サービスがあり、ゲスト仮想マシンに対して、10 .0 .2.15 から開始される IP アドレスを提供します。デフォルトのルーターは 10 .0 .2.2 であり、DNS サーバーは 10 .0 .2.3 です。このネットワーク 設定は、ゲスト仮想マシンが発信アクセスを持つことを必要とする、権限のないユーザーにとって唯一のオプションで す。 ユーザー領域 SLIP スタックパラメーターは、ドメイン XML の以下の部分に定義されます。 371 仮 想 化 管 理 ガイ ド ... <devices> <interface type='user'/> ... <interface type='user'> <m ac address="00:11:22:33:44:55"/> </interface> </devices> ... 図2 1 . 3 9 デバ イス - ネ ッ ト ワーク インターフ ェ ース - ユーザ ー領域 S L IRP ス タッ ク 2 1 .1 6 .9 .5 . 汎用イーサ ネ ッ ト 接続 管理者が、ゲスト仮想マシンのネットワークを LAN に接続するための任意のスクリプトを実行するための手段を提供 します。ゲスト仮想マシンには、v n e t N という名前で作成される t u n デバイスがあります。これは、t a r g e t 要素で オーバーライドすることができます。t u n デバイスを作成した後に、シェルスクリプトが実行され、ホスト物理マシンの ネットワーク統合に必要なすべてのことを実行することが予期されます。デフォルトでは、このスクリプトは / e t c / q e m u - ifu p と呼ばれますが、これをオーバーライドすることができます (「ターゲット要素のオーバーライド」を 参照してください)。 汎用イーサネット接続パラメーターは、ドメイン XML の以下の部分に定義されます。 ... <devices> <interface type='ethernet'/> ... <interface type='ethernet'> <target dev='vnet7'/> <script path='/etc/qem u-ifup-m ynet'/> </interface> </devices> ... 図2 1 . 4 0 デバ イス - ネ ッ ト ワーク インターフ ェ ース - 汎用イーサ ネ ッ ト 接続 2 1 .1 6 .9 .6 . 物理インタ ーフ ェース へ の 直接割り当て < in t e r fa c e t y p e = 'd ir e c t '> を使うと、仮想マシンの NIC がホスト上の指定された物理インターフェースに 割り当てられます。 このセットアップでは、Linux macvtap ドライバーを利用可能にする必要があります。macvtap デバイスの操作モー ドには、v e p a (「Virtual Ethernet Po rt Aggregato r」、これがデフォルト)、b r id g e または p r iv a t e のいずれか を選択します。 物理インターフェースへの直接割り当てを設定するには、ドメイン XML で以下のパラメーターを使用します。 372 第 2 1章 ド メ イ ン X M L の 操 作 ... <devices> ... <interface type='direct'> <source dev='eth0' m ode='vepa'/> </interface> </devices> ... 図2 1 . 4 1 デバ イス - ネ ッ ト ワーク インターフ ェ ース - 物理インターフ ェ ース へ の 直接割り 当て 個々のモードにより、パケットの配信が 表21.17「物理インターフェース要素への直接割り当て」 に示されるような動 作で行なわれます。 表2 1 . 1 7 物理インターフ ェ ース 要素へ の 直接割り 当て 要素 説明 vepa ゲスト仮想マシンのすべてのパケットは、外部ブリッジに 送信されます。宛先がパケットの発信元と同じホスト物 理マシン上にあるゲスト仮想マシンのパケットは、VEPA 対応ブリッジによって、ホスト物理マシンに送り戻されま す (最近のブリッジは VEPA 対応でない場合が多い)。 宛先が発信元と同じホスト物理マシン上にあるパケット は、ターゲットの macvtap デバイスに直接配信されま す。直接配信されるようにするには、発信元および宛先デ バイスの両方を bridge モードにする必要があります。こ れらのいずれかが v e p a モードの場合は、VEPA 対応 のブリッジが必要になります。 すべてのパケットは外部ブリッジに送信されます。それら が同じホスト物理マシンのターゲット VM に送信される のは、それらが外部ルーターまたはゲートウェイ経由で 送信され、そのデバイスがそれらをホスト物理マシンに 送り戻す場合のみです。ソースまたは宛先デバイスのい ずれかが private モードの場合に、この手順が実行さ れます。 この機能は、SRIOV 対応の NIC の仮想機能を、移行機 能を失わずにゲスト仮想マシンに直接割り当てます。す べてのパケットは、設定されたネットワークデバイスの VF/IF に送信されます。デバイスの機能に応じて、追加 の前提条件または制限が適用される場合があります。た とえば、これにはカーネル 2.6 .38 以上が必要になりま す。 b r id g e p r iv a t e passthrough 直接割り当てられる仮想マシンのネットワークアクセスは、ホスト物理マシンの物理インターフェースが接続される ハードウェアスイッチで管理できます。 スイッチが IEEE 8 0 2.1Qbg 標準に準拠している場合、インターフェースは以下に示す追加パラメーターを持つことが できます。virtualpo rt 要素のパラメーターについては IEEE 8 0 2.1Qbg 標準の記載をご覧ください。その値について はネットワーク固有となるため、ネットワーク管理者にお問い合わせください。8 0 2.1Qbg では、VIS (Virtual Statio n Interface) は仮想マシンの仮想インターフェースのことを指します。 IEEE 8 0 2.1Qbg の場合、VLAN ID にゼロ以外の値が必要になります。 操作可能な追加の要素については 表21.18 「物理インターフェースの追加要素への直接割り当て」 に説明されてい ます。 373 仮 想 化 管 理 ガイ ド 表2 1 . 1 8 物理インターフ ェ ース の 追加要素へ の 直接割り 当て 要素 説明 m a n a g e r id VSI Manager ID は、VSI タイプおよびインスタンス定 義を含むデータベースを特定します。これは、整数値で、 値 0 は予約されています。 VSI Type ID は、ネットワークアクセスの特性を示す VSI タイプを特定します。VSI タイプは一般的にはネット ワーク管理者によって管理されます。これは、整数の値 になります。 VSI Type Versio n では VSI Type の複数のバージョ ンを許可します。これは、整数の値になります。 VSI Instance ID 識別子は、VSI インスタンス (つまり、 仮想マシンの仮想インターフェース) の作成時に生成さ れます。これは、グローバルに固有となる識別子です。 プロファイル ID には、このインターフェースに適用される ポートプロファイル名が含まれます。この名前は、ポート プロファイルのデータベースによってポートプロファイル からネットワークパラメーターに解決され、これらのネット ワークパラメーターがこのインターフェースに適用されま す。 t y p e id t y p e id v e r s io n in s t a n c e id p r o file id ドメイン XML の追加パラメーターには以下が含まれます。 ... <devices> ... <interface type='direct'> <source dev='eth0.2' m ode='vepa'/> <virtualport type="8 02.1Q bg"> <param eters m anagerid="11" typeid="1193047" typeidversion="2" instanceid="09b11c53-8 b5c-4eeb-8 f00-d8 4eaa0aaa4f"/> </virtualport> </interface> </devices> ... 図2 1 . 4 2 デバ イス - ネ ッ ト ワーク インターフ ェ ース - 物理インターフ ェ ース の 追加パ ラメーターへ の 直接割 り 当て インターフェースには、スイッチが IEEE 8 0 2.1Qbh 標準に準拠している場合は、以下に示す追加のパラメーターを設 定できます。値はネットワーク固有のものであるため、ネットワーク管理者にお問い合わせください。 ドメイン XML の追加パラメーターには以下が含まれます。 ... <devices> ... <interface type='direct'> 374 第 2 1章 ド メ イ ン X M L の 操 作 <source dev='eth0' m ode='private'/> <virtualport type='8 02.1Q bh'> <param eters profileid='finance'/> </virtualport> </interface> </devices> ... 図2 1 . 4 3 デバ イス - ネ ッ ト ワーク インターフ ェ ース - 物理インターフ ェ ース の 追加パ ラメーターへ の 直接割 り 当て p r o file id 属性には、このインターフェースに適用されるポートプロファイルの名前が含まれます。この名前は、ポー トプロファイルのデータベースによって、ポートプロファイルからネットワークパラメーターに解決され、それらのネット ワークパラメーターはこのインターフェースに適用されます。 2 1 .1 6 .9 .7 . P C I パ ス ス ル ー PCI ネットワークデバイス (s o u r c e 要素で指定される) は、最初にオプションでデバイスの MAC アドレスを設定済み の値に設定し、オプションで指定した v ir t u a lp o r t 要素を使用してデバイスを 8 0 2.1Qbh 対応のスイッチに関連 付け (上記の仮想ポートの例にある type='direct' ネットワークデバイスを参照) を行なった後に、汎用デバイスパス スルーを使用してゲスト仮想マシンに直接割り当てます。標準の単一ポート PCI イーサネットカードドライバーの設計 上の制限により、SR-IOV (単一 Ro o t I/O 仮想化) 仮想化機能 (VF) デバイスのみを、以下の方法で割り当てられる ことに注意してください。標準の単一ポート PCI または PCIe イーサネットカードをゲスト仮想マシンに割り当てるに は、従来の h o s t d e v デバイス定義を使用します。 ネットワークデバイスのこの「インテリジェントなパススルー」が標準の h o s t d e v デバイスの機能に非常に似ているこ とに注意してください。相違点は、このメソッドでは、パススルーデバイスの MAC アドレスと v ir t u a lp o r t を指定す ることを許可する点です。これらの機能が不要な場合で、SR-IOV をサポートしない (そのため、ゲスト仮想マシンのド メインに割り当てられた後のリセット時に設定済みの MAC アドレスが失われる) 標準の単一ポート PCI、PCIe、また は USB ネットワークを持つ場合や、0 .9.11 より前の libvirt のバージョンを使用している場合、in t e r fa c e t y p e = 'h o s t d e v '/ ではなく、標準の h o s t d e v を使用して、デバイスをゲスト仮想マシンに割り当てる必要があ ります。 ... <devices> <interface type='hostdev'> <driver nam e='vfio'/> <source> <address type='pci' dom ain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </source> <m ac address='52:54:00:6 d:90:02'> <virtualport type='8 02.1Q bh'> <param eters profileid='finance'/> </virtualport> </interface> </devices> ... 図2 1 . 4 4 デバ イス - ネ ッ ト ワーク インターフ ェ ース - P CI パ ス ス ル ー 2 1 .1 6 .9 .8 . マ ル チキ ャス ト ト ンネ ル 375 仮 想 化 管 理 ガイ ド マルチキャストグループは、仮想ネットワークを表示するために使用することができます。ネットワークデバイスが同じマ ルチキャストグループ内にあるゲスト仮想マシンは、それらが複数の物理的なホスト物理マシンにまたがって存在する 場合でも、相互に通信します。このモードは、権限を持たないユーザーとして使用することができます。デフォルトの DNS または DHCP サポートや、発信ネットワークアクセスはありません。発信ネットワークアクセスを提供するには、適 切なルートを指定するために、ゲスト仮想マシンのいずれかに、最初の 4 つのネットワークタイプのいずれかに接続さ れる 2 番目の NIC がなければなりません。マルチキャストプロトコルは、u s e r m o d e linux ゲスト仮想マシンによっ て使用されるプロトコルと互換性もあります。マルチキャストトンネルは、管理ツールを使用して in t e r fa c e t y p e を操作し、これを m c a s t に設定/変更し、さらに mac およびソースアドレスを指定することによって作成されます。結 果は、ドメイン XML に対してなされた変更に示されます。 ... <devices> <interface type='m cast'> <m ac address='52:54:00:6 d:90:01'> <source address='230.0.0.1' port='5558 '/> </interface> </devices> ... 図2 1 . 4 5 デバ イス - ネ ッ ト ワーク インターフ ェ ース - マ ル チキ ャス ト ト ンネ ル 2 1 .1 6 .9 .9 . TC P ト ンネ ル TCP クライアント/サーバーアーキテクチャーを作成することは、1 つのゲスト仮想マシンがネットワークのサーバーエ ンドを提供し、その他のすべてのゲスト仮想マシンがクライアントとして設定される仮想ネットワークを提供するもう 1 つの方法になります。ゲスト仮想マシン間のすべてのネットワークトラフィックは、サーバーとして設定されるゲスト仮想 マシンを経由で経路指定されます。このモデルも、権限のないユーザーが使用することができます。デフォルトの DNS や DHCP サポートはなく、発信ネットワークアクセスもありません。発信ネットワークアクセスを提供するには、ゲスト仮 想マシンの 1 つに、最初の 4 つのネットワークタイプのいずれかに接続され、適切なルートを提供している 2 番目の NIC がある必要があります。TCP トンネルは、管理ツールを使用して in t e r fa c e t y p e を操作し、これを s e r v e r または c lie n t に設定/変更し、さらに mac およびソースアドレスを指定して作成されます。結果は、ドメイ ン XML に対してなされた変更に示されます。 ... <devices> <interface type='server'> <m ac address='52:54:00:22:c9:42'> <source address='192.16 8 .0.1' port='5558 '/> </interface> ... <interface type='client'> <m ac address='52:54:00:8 b:c9:51'> <source address='192.16 8 .0.1' port='5558 '/> </interface> </devices> ... 図2 1 . 4 6 デバ イス - ネ ッ ト ワーク インターフ ェ ース - T CP ト ンネ ル 376 第 2 1章 ド メ イ ン X M L の 操 作 2 1 .1 6 .9 .1 0 . NIC ドライバ ー固有オ プシ ョンの 設定 一部の NIC には調整可能なドライバー固有のオプションがある場合があります。これらのオプションは、インター フェース定義の d r iv e r サブ要素の属性として設定されます。これらのオプションは、管理ツールで ドメイン XML の 以下のセクションを設定して設定されます。 <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <m odel type='virtio'/> <driver nam e='vhost' txm ode='iothread' ioeventfd='on' event_idx='off'/> </interface> </devices> ... 図2 1 . 4 7 デバ イス - ネ ッ ト ワーク インターフ ェ ース - NIC ドライバ ー固有オ プシ ョ ンの 設定 現在、以下の属性が「virtio 」NIC ドライバーに使用できます。 表2 1 . 1 9 virt io NIC ドライバ ー要素 パ ラメーター 説明 nam e オプションの n a m e 属性は、使用するバックエンドドライ バーのタイプを強制します。値は、q e m u (ユーザース ペースバックエンド) または v h o s t (vho st モジュール をカーネルで指定するように要求するカーネルバックエ ンド) のいずれかになります。カーネルサポートなしに vho st ドライバーを要求する試みは拒否されます。 vho st ドライバーが存在する場合、デフォルト設定は v h o s t ですが、存在しない場合はサイレントに q e m u にフォールバックします。 送信バッファーが一杯の場合に、パケット送信の処理方 法を指定します。値は、io t h r e a d または t im e r のい ずれかに設定できます。io t h r e a d に設定される場合、 packet tx がドライバーの下半分の io thread ですべ て実行されます (このオプションは、"t x = b h " を q e m u コマンドラインの -device virtio -net-pci オプションに 変換します)。t im e r に設定される場合、tx の作業は qemu で実行され、現行時間に送信できる以上の tx データがある場合、タイマーが qemu が他のタスクの実 行に移行する前に設定されます。タイマーが切れると、さ らに多くのデータを送信するための別の試行が行なわ れます。通常、これを変更することが必要であることが確 実でない限り、このオプションをそのままにしておく必要 があります txm ode 377 仮 想 化 管 理 ガイ ド パ ラメーター 説明 io e v e n t fd ユーザーがインターフェースデバイスのドメイン I/O の非 同期処理を設定することを許可します。デフォルトはハイ パーバイザーに決定されます。許可される値は、o n と o ff です。このオプションを有効にすると、別のスレッド が I/O を処理する間、qemu はゲスト仮想マシンを実行 することができます。通常、I/O 時にシステム CPU の使 用率が高くなるゲスト仮想マシンの場合に、この利点が あります。他方、物理的なホスト物理マシンに過剰な負 荷を与えると、ゲスト仮想マシンの I/O 待機時間も増え ることになります。そのため、これを変更することが必要 であることが確実でない限り、このオプションをそのまま にしておく必要があります。 event_idx 属性は、デバイスのイベント処理のいくつか の側面を制御します。値は、o n または o ff のいずれか になります。o n を選択することにより、ゲスト仮想マシン の割り込みと終了の数が少なくなります。デフォルトは o n です。この動作が準最適な場合、この属性は、この 機能をオフに強制実行する方法を提供します。これを変 更することが必要であることが確実でない限り、このオ プションをそのままにする必要があります。 e v e n t _ id x 2 1 .1 6 .9 .1 1 . タ ーゲッ ト 要素の オ ーバ ーライド ターゲット要素をオーバーライドするには、管理ツールを使用して、ドメイン XML に以下の変更を行います。 ... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> </interface> </devices> ... 図2 1 . 4 8 デバ イス - ネ ッ ト ワーク インターフ ェ ース - ターゲッ ト 要素の オ ーバ ーライド ターゲットが指定されない場合、一部のハイパーバイザーは、作成された tun デバイスの名前を自動的に生成します。 この名前は手動で指定できますが、名前は「vnet」または「vif」のいずれでも開始することができません。これらは libvirt と一部のハイパーバイザーで予約されるプレフィックスであるためです。これらのプレフィックスを使用して手動 で指定されたターゲットは無視されます。 2 1 .1 6 .9 .1 2 . 起動順序の 指定 起動順序を指定するには、管理ツールを使用してドメイン XML に以下の変更を行ないます。 ... <devices> 378 第 2 1章 ド メ イ ン X M L の 操 作 <interface type='network'> <source network='default'/> <target dev='vnet1'/> <boot order='1'/> </interface> </devices> ... 図2 1 . 4 9 起動順序の 指定 これをサポートするハイパーバイザーの場合、ネットワークの起動に使用される特定の NIC を指定できます。属性の順 序は、ブートシーケンス時にデバイスが試行される順序を決定します。デバイスごとの bo o t 要素は、BIOS ブートロー ダーセクションの一般的な bo o t 要素と共に使用することができないことに注意してください。 2 1 .1 6 .9 .1 3 . インタ ーフ ェース R O M BIO S 設定 ROM BIOS 設定を指定するには、管理ツールを使用してドメイン XML に以下のような変更を行います。 ... <devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <rom bar='on' file='/etc/fake/boot.bin'/> </interface> </devices> ... 図2 1 . 5 0 インターフ ェ ース RO M B IO S 設定 これをサポートするハイパーバイザーの場合、PCI ネットワークデバイスの ROM をゲスト仮想マシンに提示する方法 を変更することができます。b a r 属性は o n または o ff に設定することができ、デバイスの ROM がゲスト仮想マシン のメモリーマップに表示されるかどうかを決定します (PCI 資料によると、「ro mbar」設定は ROM の Base Address Register の提示を制御します)。ro m bar が指定されない場合、qemu デフォルトが使用されます (古いバージョン の qemu はデフォルトの o ff を使用しましたが、新しい qemus にはデフォルトの o n が指定されます)。オプション の file 属性は、デバイスの ROM BIOS としてゲスト仮想マシンに提示されるバイナリーファイルをポイントするため に使用されます。これは、ネットワークデバイスの代替ブート ROM を指定する際に便利です。 2 1 .1 6 .9 .1 4 . Q o S (Q ua lity o f S e rv ic e ) ドメイン XML のこのセクションは、サービスの品質設定を提供します。着信および発信トラフィックは別個に形成でき ます。b a n d w id t h 要素には、最大で 1 つの着信、および最大で 1 つの発信の子要素を持たせることができます。こ れらの子のいずれかを省略すると、そのトラフィック方向に Qo S が適用されなくなります。そのため、ドメインの着信ト ラフィックのみを設定する場合には、着信のみを使用し、逆の場合も同じです。 これらの要素のいずれかには 1 つの必須属性 a v e r a g e (または下記の flo o r ) があります。a v e r a g e は、設定さ れるインターフェースの平均的なビットレートを指定します。次に、以下のような 2 つのオプション属性を持ちま す。p e a k は、インターフェースがデータを送信できる最大レートを指定し、b u r s t はピークの速度でバーストできるバ イト量を指定します。属性に使用できる値は整数です。 a v e r a g e および p e a k 属性の単位は 1 秒あたりキロバイトとなり、b u r s t はキロバイト単位でのみ設定されます。 379 仮 想 化 管 理 ガイ ド さらに、着信トラフィックには、オプションで flo o r 属性を持たせることができます。これは、形成されるインターフェー スの最小スループットを保証します。flo o r の使用には、すべてのトラフィックが、Qo S による決定が行なわれる 1 つのポイントを経由することが必要になります。そのため、これは、in t e r fa c e t y p e = 'n e t w o r k '/ に fo r w a r d タイプの r o u t e 、n a t 、または no fo rward が指定されている場合にのみ使用できます。仮想ネットワーク内で、すべ ての接続されたインターフェースには着信 Qo S が設定され (少なくとも a v e r a g e ) る必要があるものの、flo o r 属 性には a v e r a g e を指定する必要がないことに注意する必要があります。ただし、 p e a k および b u r s t 属性には依 然として a v e r a g e が必要です。現在、ingress qdiscs にはいずれのクラスも設定できないため、flo o r は、発信ト ラフィックではなく、着信にのみ適用できます。 Qo S 設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <interface type='network'> <source network='default'/> <target dev='vnet0'/> <bandwidth> <inbound average='1000' peak='5000' floor='200' burst='1024'/> <outbound average='128 ' peak='256 ' burst='256 '/> </bandwidth> </interface> <devices> ... 図2 1 . 5 1 Q o S ( Q u a lit y o f S e rvice ) 2 1 .1 6 .9 .1 5 . V LA N タ グ の 設定 (サ ポート さ れ るネ ッ ト ワーク タ イプでの み) VLAN 設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <interface type='bridge'> <vlan> <tag id='42'/> </vlan> <source bridge='ovsbr0'/> <virtualport type='openvswitch'> <param eters interfaceid='09b11c53-8 b5c-4eeb-8 f00-d8 4eaa0aaa4f'/> </virtualport> </interface> <devices> ... 図2 1 . 5 2 VL AN タグ の 設定 ( サ ポート され るネ ッ ト ワーク タイプでの み) ゲスト仮想マシンが使用するネットワークタイプが、ゲスト仮想マシンに対して透過的な vlan タグに対応している場合 (のみ)、オプションの v la n 要素は、このゲスト仮想マシンのネットワークトラフィックに適用する 1 つ以上の vlan タ 380 第 2 1章 ド メ イ ン X M L の 操 作 グを指定することができます。(o penvswitch および t y p e = 'h o s t d e v ' SR-IOV インターフェースはゲスト仮想マ シンのトラフィックの透過的な VLAN タグに対応しません。標準的な Linux ブリッジや libvirt 独自の仮想ネットワーク などのこれ以外のものもこれをサポートしません。8 0 2.1Qbh (vn-link) および 8 0 2.1Qbg (VEPA) スイッチは、ゲス ト仮想マシンのトラフィックを特定の vlans にタグ付けするための独自の方法 (libvirt の外部)を提供します。複数タ グの指定を許可するには (vlan トランキングの場合)、サブ要素の t a g は、使用する vlan タグを指定します (例: t a g id = '4 2 '/ )。インターフェースに複数の v la n 要素が定義される場合、ユーザーはすべての指定タグを使用 して VLAN トランキングを実行することが想定されます。単一タグの VLAN トランキングが必要な場合、オプション属 性の t r u n k = 'y e s ' をトップレベルの vlan 要素に追加できます。 2 1 .1 6 .9 .1 6 . 仮想リンク 状態の 変更 この要素は、仮想ネットワークリンクの状態を設定する方法を提供します。属性の s t a t e に使用できる値は、u p およ び d o w n です。d o w n が値として指定される場合、インターフェースは、ネットワークケーブルが切断されているかのよ うに動作します。この要素が指定されていない場合のデフォルト動作では、リンク状態が u p になります。 仮想リンク状態の設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <interface type='network'> <source network='default'/> <target dev='vnet0'/> <link state='down'/> </interface> <devices> ... 図2 1 . 5 3 仮想リンク 状態の 変更 21.16.10 . 入力デバ イス 入力デバイスは、ゲスト仮想マシンのグラフィカルフレームバッファーとの対話を許可します。フレームバッファーを有効 にする場合、入力デバイスが自動的に提供されます。絶対的なカーソル移動のためにグラフィックスタブレットを提供 するなどの目的で、追加デバイスを明示的に追加することができます。 入力デバイスの設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <input type='m ouse' bus='usb'/> </devices> ... 図2 1 . 5 4 入力デバ イス < in p u t > 要素には、必須属性の t y p e があります。この属性は、m o u s e または t a b le t に設定できます。前者は、 相対的なカーソル移動を使用するのに対し、後者は絶対的なカーソル移動を提供します。オプションの b u s 属性は、 正確なデバイスタイプを詳細化するために使用し、x e n (準仮想化)、p s 2 、および u s b に設定できます。 381 仮 想 化 管 理 ガイ ド input 要素には、上記のようにデバイスを特定の PCI スロットに関連付けることのできるオプションのサブ要素 < a d d r e s s > があります。 21.16.11. ハ ブ デバ イス ハブは、デバイスをホスト物理マシンシステムに接続するために利用できるポートが増えるよう、単一ポートを複数に拡 張するデバイスです。 ハブデバイスの設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <hub type='usb'/> </devices> ... 図2 1 . 5 5 ハ ブ デバ イス hub 要素には 1 つの必須属性があり、そのタイプの値には u s b のみを使用できます。hub 要素には、オプションの サブ要素 a d d r e s s があり、これにはデバイスを特定のコントローラーに関連付けることのできる t y p e = 'u s b ' が 付きます。 21.16.12. グ ラフィカルフレ ーム バ ッファー グラフィックスデバイスは、ゲスト仮想マシン OS とのグラフィカルな対話を可能にします。ゲスト仮想マシンは、通常は 管理者との対話を可能にするために設定されるフレームバッファーか、またはテキストコンソールのいずれかを持ちま す。 グラフィカルフレームバッファーデバイスの設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を 加えます。 ... <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' m ultiUser='yes' /> <graphics type='desktop' fullscreen='yes'/> <graphics type='spice'> <listen type='network' network='rednet'/> </graphics> </devices> ... 図2 1 . 5 6 グ ラフ ィカ ル フ レ ーム バ ッ フ ァ ー g r a p h ic s 要素には、必須の t y p e 属性があります。これは、以下に説明するように、値の s d l 、v n c 、r d p または 382 第 2 1章 ド メ イ ン X M L の 操 作 d e s k t o p を取ります。 表2 1 . 2 0 グ ラフ ィカ ル フ レ ーム バ ッ フ ァ ー要素 パ ラメーター 説明 sdl これは、ホスト物理マシンのデスクトップ上にウィンドウを 表示します。使用するディスプレイには d is p la y 属性、 認証 ID には x a u t h 属性、および値の y e s または n o を受け入れるオプションの fu lls c r e e n 属性という、3 つのオプションの引数を取ることができます。 VNC サーバーを起動します。p o r t 属性は TCP ポート 番号を指定します (自動割り当てであることを示すレガ シー構文として - 1 を指定)。a u t o p o r t 属性は、使用 する TCP ポートの自動割り当てを示すために推奨され る新しい構文です。lis t e n 属性は、サーバーがリッス ンする IP アドレスです。p a s s w d 属性は、クリアテキスト で VNC パスワードを提供します。k e y m a p 属性は、使 用するキーマップを指定します。パスワードの有効性につ いての制限は、t im e s t a m p p a s s w d V a lid To = '2 0 10 - 0 4 - 0 9 T15 :5 1:0 0 ' を UTC に指定するなどして、設定することができま す。c o n n e c t e d 属性は、パスワードの変更時に接続さ れたクライアントの制御を可能にします。VNC は k e e p 値のみを受け入れます。これはすべてのハイパーバイ ザーではサポートできないことに注意してください。リッ スン/ポートを使用する代わりに、QEMU は、Unix ドメイ ンソケットパスでリッスンするソケット属性をサポートしま す。 SPICE サーバーを起動します。p o r t 属性は TCP ポー ト番号を指定 (自動割り当てであることを示すレガシー 構文として -1 を指定) し、t ls P o r t は代替のセキュア ポート番号を指定します。a u t o p o r t 属性は、両方の ポート番号の自動割り当てを示すために推奨される新 たな構文です。lis t e n 属性は、サーバーがリッスンす る IP アドレスです。p a s s w d 属性は、クリアテキストに SPICE パスワードを提供します。k e y m a p 属性は、使用 するキーマップを指定します。パスワードの有効性につい ての制限を、t im e s t a m p p a s s w d V a lid To = '2 0 10 - 0 4 - 0 9 T15 :5 1:0 0 ' を UTC に指定するなどして設定できます。c o n n e c t e d 属性は、パスワードの変更時に接続されるクライアントの 制御を可能にします。SPICE は、「keep to keep client co nnected」、「disco nnect to disco nnect client」およびパスワード変更における「fail to fail」を 受け入れます。これはすべてのハイパーバイザーでサ ポートされている訳ではないことに注意してくださ い。d e fa u lt M o d e 属性は、デフォルトのチャンネルセ キュリティーポリシーを設定し、有効な値は s e c u r e 、in s e c u r e でデフォルトは a n y です。(可能 な場合は s e c u r e ですが、セキュアパスが利用可能で ない場合はエラーを出す代わりに in s e c u r e にフォー ルバックします)。 vnc s p ic e SPICE に標準の、および TLS で保護された TCP ポートの両方が設定されている場合、各ポートでどのチャンネルを 実行できるかについて制限することが必要になる場合があります。これは、1 つ以上の c h a n n e l 要素をメイン g r a p h ic s 要素内に追加することによって実行されます。有効なチャンネル名に 383 仮 想 化 管 理 ガイ ド は、m a in 、d is p la y 、in p u t s 、c u r s o r 、p la y b a c k 、r e c o r d 、s m a r t c a r d 、および u s b r e d ir があります。 SPICE 設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 <graphics type='spice' port='-1' tlsPort='-1' autoport='yes'> <channel nam e='m ain' m ode='secure'/> <channel nam e='record' m ode='insecure'/> <im age com pression='auto_glz'/> <stream ing m ode='filter'/> <clipboard copypaste='no'/> <m ouse m ode='client'/> </graphics> 図2 1 . 5 7 S P ICE 設定 SPICE は、オーディオ、イメージおよびストリーミングの可変的な圧縮設定をサポートします。これらの設定は、以下の すべての要素の co mpressio n 属性で使用できます。イメージ圧縮を設定するための im a g e (auto _glz、 auto _lz、quic、glz、lz、o ff を許可)、WAN 経由でのイメージ JPEG 圧縮用の j p e g (auto 、never、always を許 可)、WAN イメージ圧縮を設定するための z lib (auto 、never、always を許可) およびオーディオストリーム圧縮を 有効にするための p la y b a c k (o n または o ff を許可)。 ストリーミングモードは、s t r e a m in g 要素によって設定され、その m o d e 属性は、filt e r 、a ll または o ff のいず れかに設定されます。 さらに、コピーアンドペースト機能 (SPICE エージェント経由) は、c lip b o a r d 要素によって設定されます。これはデ フォルトで有効にされ、c o p y p a s t e プロパティーを n o に設定することによって無効にできます。 マウスモードは m o u s e 要素によって設定され、その m o d e 属性は s e r v e r または c lie n t のいずれかに設定さ れます。いずれのモードも指定されない場合、qemu のデフォルトが使用されます (c lie n t モード)。 追加の要素には以下が含まれます。 表2 1 . 2 1 追加の グ ラフ ィカ ル フ レ ーム バ ッ フ ァ ー要素 パ ラメーター 説明 rdp RDP サーバーを起動します。ポート属性は TCP ポート 番号を指定します (自動割り当てであることを示すレガ シー構文として -1 を指定する)。auto po rt 属性は、使 用する TCP ポートの自動割り当てを示すために推奨さ れる新たな構文です。replaceUser 属性は、VM への 複数の同時接続が許可されるかどうかを決定するブー ル値です。multiUser は、新規クライアントが単一接続 モードで接続される場合に、既存の接続がドロップされ るかどうか、また新規接続が VRDP サーバーによって確 立される必要があるかどうかを決定するために使用され ます。 この値は、しばらくの間 VirtualBo x ドメイン用に保持さ れます。これは、"sdl" と同様にホスト物理マシンのデス クトップ上にウィンドウを表示しますが、VirtualBo x ビューアーを使用します。"sdl" のように、これはオプショ ンの属性の display および fullscreen を受け入れま す。 desktop 384 第 2 1章 ド メ イ ン X M L の 操 作 パ ラメーター 説明 lis t e n g r a p h ic s のグラフィックスタイプ vnc および spice 用にリッスンするソケットをセットアップするために使用さ れるアドレス情報を入れる代わりに、lis t e n と呼ばれ る g r a p h ic s のサブ要素を指定できます (上記の例を 参照)。lis t e n は以下の属性を受け入れます。 t y p e - アドレスまたはネットワークのいずれかに設 定されます。これは、この listen 要素が直接使用さ れるアドレスを指定するか、またはネットワークに名 前を付けて (それがリッスンする適切なアドレスを決 定するために使用される) 指定されるかどうかを指 定します。 a d d r e s s - この属性には、リッスンする IP アドレス またはホスト名 (DNS 照会により IP アドレスに解決 される) のいずれかが含まれます。実行中のドメイン の「ライブ」 XML の場合、この属性 は、t y p e = 'n e t w o r k ' の場合でも、リッスンするた めに使用される IP アドレスに設定されます。 netwo rk - t y p e = 'n e t w o r k ' の場合、netwo rk 属性には、設定済みネットワークの libvirt のリストに ネットワークの名前が含まれます。名前付きのネット ワーク設定は、適切なリッスンアドレスを決定するた めに検査されます。たとえば、ネットワークがその設 定に IPv4 アドレスを持つ場合 (たとえば、ルートの fo rward タイプまたは、nat、または no fo rward タ イプ (iso lated) の場合)、ネットワークの設定にリス トされる最初の IPv4 アドレスが使用されます。ネッ トワークがホスト物理マシンのブリッジを記述する場 合、そのブリッジデバイスに関連付けられた最初の IPv4 アドレスが使用され、ネットワークが 'direct' (macvtap) モードのいずれかを記述する場合には、 最初の fo rward dev の最初の IPv4 アドレスが使 用されます。 21.16.13. ビ デオデバ イス ビデオデバイス。 ビデオデバイスの設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を加えます。 ... <devices> <video> <m odel type='vga' vram ='8 192' heads='1'> <acceleration accel3d='yes' accel2d='yes'/> </m odel> </video> </devices> ... 385 仮 想 化 管 理 ガイ ド 図2 1 . 5 8 ビ デオ デバ イス g r a p h ic s 要素には必須の t y p e 属性があり、これは、以下に説明するように値 "sdl"、"vnc"、"rdp" または "deskto p" を取ります。 表2 1 . 2 2 グ ラフ ィカ ル フ レ ーム バ ッ フ ァ ー要素 パ ラメーター 説明 v id e o v id e o 要素は、ビデオデバイスを記述するためのコンテ ナーです。下位互換性のため、video が設定されていな いものの、ドメイン XML に g r a p h ic s 要素がある場 合、libvirt は、ゲスト仮想マシンタイプに基づいてデフォ ルトの v id e o を追加します。"ram" または "vram" が 指定されていない場合、デフォルト値が使用されます。 これには、必須の t y p e 属性があり、この属性は、利用 可能なハイパーバイザー機能に応じて、値の v g a 、c ir r u s , v m v g a 、x e n 、v b o x 、または q x l を取 ります。さらに、ビデオメモリーの容量は、ヘッドと共に vram および図の番号を使用して キビバイト単位 (10 24 バイトのブロック) で指定できます。 aceleratio n がサポートされる場合、a c c e le r a t io n 要素で a c c e l3 d と a c c e l2 d 属性を使用してこれを 有効にする必要があります。 オプションの address サブ要素は、ビデオデバイスを 特定の PCI スロットに関連付けるために使用すること ができます。 m odel acceleratio n address 21.16.14 . コンソール、 シリ アル、 パ ラレ ル、 およ びチャ ンネ ルデバ イス キャラクターデバイスは、仮想マシンと対話する方法を提供します。準仮想化コンソール、シリアルポート、パラレルポー トおよびチャンネルは、すべてキャラクターデバイスとして分類されるため、同じ構文を使用して表示されます。 コンソール、チャンネルその他のデバイス設定を指定するには、管理ツールを使用してドメイン XML に以下の変更を 行います。 ... <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 m ode='bind' path='/tm p/guestfwd'/> 386 第 2 1章 ド メ イ ン X M L の 操 作 <target type='guestfwd' address='10.0.2.1' port='46 00'/> </channel> </devices> ... 図2 1 . 5 9 コンソ ール 、 シ リア ル 、 パ ラレ ル 、 およびチャンネ ル デバ イス これらのディレクティブのそれぞれで、トップレベルの要素名 (parallel、serial、co nso le、channel) は、ゲスト仮想 マシンにデバイスがどのように提示されるかを記述します。ゲスト仮想マシンのインターフェースは、target 要素によっ て設定されます。ホスト物理マシンに提示されるインターフェースは、トップレベル要素の type 属性で指定されます。 ホスト物理マシンのインターフェースは、so urce 要素によって設定されます。so urce 要素には、ソケットパスでラベ ルが実行される方法をオーバーライドするためのオプションの seclabel が含まれます。この要素がない場合、セキュ リティーラベルはドメインごとの設定から継承されます。それぞれのキャラクターデバイス要素には、オプションのサブ 要素 a d d r e s s が含まれ、これはデバイスを特定のコントローラーまたは PCI スロットに関連付けることができます。 21.16.15. ゲス ト仮想マ シンの インタ ーフェース キャラクターデバイスは、以下のタイプのいずれかとして、自らをゲスト仮想マシンに提示します。 パラレルポートを設定するには、以下の変更をドメイン XML に行うために管理ツールを使用します。 ... <devices> <parallel type='pty'> <source path='/dev/pts/2'/> <target port='0'/> </parallel> </devices> ... 図2 1 . 6 0 ゲス ト 仮想マ シ ンインターフ ェ ース の パ ラレ ル ポート < t a r g e t > には、p o r t 属性を持たせることができます。これは、ポート番号を指定します。ポートには、0 から始まる 番号が付けられます。通常は、0 、1 または 2 のパラレルポートがあります。 シリアルポートを設定するには、管理ツールを使用して、ドメイン XML に以下の変更を行います。 ... <devices> <serial type='pty'> <source path='/dev/pts/3'/> <target port='0'/> </serial> </devices> ... 図2 1 . 6 1 ゲス ト 仮想マ シ ンインターフ ェ ース の シ リア ル ポート 387 仮 想 化 管 理 ガイ ド < t a r g e t > には、p o r t 属性を持たせることができます。これはポート番号を指定します。ポートは 0 から始まる番 号を付けることができます。通常は、0 、1 または 2 のシリアルポートがあります。さらに、オプションの t y p e 属性があ り、これは、値を選択するのに is a - s e r ia l と u s b - s e r ia l の 2 つのオプションがあります。t y p e がない場 合、is a - s e r ia l がデフォルトで使用されます。usb-serial の場合、オプションのサブ要素 < a d d r e s s > と t y p e = 'u s b ' は、上記のようにデバイスを特定のコントローラーに関連付けることができます。 < c o n s o le > 要素は、インタラクティブなコンソールを表示するために使用されます。使用されるゲスト仮想マシンのタ イプによって、また以下のルールに応じて、コンソールは準仮想化デバイスであるか、またはシリアルデバイスのクロー ンになる可能性があります。 t a r g e t Ty p e 属性が設定されていない場合、デフォルトデバイスの t y p e はハイパーバイザーのルールに基づ きます。デフォルトの t y p e は、libvirt にフィードされる XML を再度照会する際に追加されます。完全仮想化ゲス ト仮想マシンの場合、デフォルトのデバイスタイプは通常シリアルタイプになります。 t a r g e t Ty p e 属性が s e r ia l の場合で、< s e r ia l> 要素が存在しない場合、co nso le 要素は < s e r ia l> 要素にコピーされます。< s e r ia l> 要素がすでに存在する場合、co nso le 要素は無視されます。 t a r g e t Ty p e 属性が s e r ia l ではない場合、それは通常の方法で処理されます。 最初の < c o n s o le > 要素のみが、s e r ia l の t a r g e t Ty p e を使用できます。2 番目のコンソールはすべて準 仮想化する必要があります。 s390 では、co nso le 要素は、sclp または sclplm (ラインモード) の targetType を使用できます。SCLP は s390 のネイティブのコンソールタイプです。SCLP コンソールに関連付けられたコントローラーはありません。 以下の例では、virtio コンソールデバイスは、/dev/hvc[0 -7] としてゲスト仮想マシン内で公開されます (詳細は、 http://fedo rapro ject.o rg/wiki/Features/Virtio Serial を参照してください)。 ... <devices> <console type='pty'> <source path='/dev/pts/4'/> <target port='0'/> </console> <!-- KVM virtio console --> <console type='pty'> <source path='/dev/pts/5'/> <target type='virtio' port='0'/> </console> </devices> ... ... <devices> <!-- KVM s390 sclp console --> <console type='pty'> <source path='/dev/pts/1'/> <target type='sclp' port='0'/> </console> </devices> ... 図2 1 . 6 2 ゲス ト 仮想マ シ ンインターフ ェ ース - virt io コンソ ール デバ イス 388 第 2 1章 ド メ イ ン X M L の 操 作 コンソールがシリアルポートとして表示される場合、< t a r g e t > 要素には、シリアルポートの場合と同じ属性がありま す。通常、1 つのコンソールのみが存在します。 21.16.16. チャ ンネ ル これは、ホスト物理マシンとゲスト仮想マシン間のプライベートな通信チャンネルを表し、管理ツールを使用してゲスト 仮想マシンに変更を加えることによって操作できます。その結果、ドメイン XML の以下のセクションに変更が加わりま す。 ... <devices> <channel type='unix'> <source m ode='bind' path='/tm p/guestfwd'/> <target type='guestfwd' address='10.0.2.1' port='46 00'/> </channel> <!-- KVM virtio channel --> <channel type='pty'> <target type='virtio' nam e='arbitrary.virtio.serial.port.nam e'/> </channel> <channel type='unix'> <source m ode='bind' path='/var/lib/libvirt/qem u/f16 x8 6 _6 4.agent'/> <target type='virtio' nam e='org.qem u.guest_agent.0'/> </channel> <channel type='spicevm c'> <target type='virtio' nam e='com .redhat.spice.0'/> </channel> </devices> ... 図2 1 . 6 3 チャンネ ル これは、各種の方法で実装できます。< c h a n n e l> の特定のタイプは < t a r g e t > 要素の t y p e 属性で指定されま す。異なるチャンネルタイプには、以下のようにそれぞれ異なるターゲット属性があります。 g u e s t fw d - 指定された IP アドレスに対してゲスト仮想マシンにより送信される TCP トラフィックを決定し、ポー トはホスト物理マシン上のチャンネルデバイスに転送されます。t a r g e t 要素には、address と po rt 属性があり ます。 v ir t io - 準仮想化された virtio チャンネルです。< c h a n n e l> は、ゲスト仮想マシンの / d e v / v p o r t * の下 に公開され、オプション要素の n a m e が指定される場合は / d e v / v ir t io - p o r t s / $ n a m e に表示されます (詳細は、http://fedo rapro ject.o rg/wiki/Features/Virtio Serial を参照してください)。オプション要素の a d d r e s s は、上記のように、チャンネルを特定の t y p e = 'v ir t io - s e r ia l' コントローラーに関連付けます。 QEMU では、名前が "o rg.qemu.guest_agent.0 " の場合、libvirt は、ゲスト仮想マシンのシャットダウンやファ イルシステムの休止などのアクションのために、ゲスト仮想マシンにインストールされたゲスト仮想マシンエージェ ントと対話することができます。 s p ic e v m c - 準仮想化された SPICE チャンネルです。ドメインには、グラフィックスデバイスとしての SPICE サー バーも必要です。ここで、ホスト物理マシンは、メインチャンネル間のメッセージをピギーバッキングできま す。t a r g e t 要素は、属性 t y p e = 'v ir t io '; と共に指定される必要があり、オプション属性 n a m e はゲスト仮 想マシンがチャンネルにアクセスする方法を制御し、デフォルトで n a m e = 'c o m .r e d h a t .s p ic e .0 ' に設定さ 389 仮 想 化 管 理 ガイ ド れます。オプションの < a d d r e s s > 要素は、チャンネルを特定の t y p e = 'v ir t io - s e r ia l' コントローラーに 関連付けることができます。 21.16.17. ホス ト物理マ シンインタ ーフェース キャラクターデバイスは、以下のタイプのいずれかとして、自らをホスト物理マシンに提示します。 表2 1 . 2 3 キ ャラク ターデバ イス 要素 パ ラメーター 説明 Do main lo gfile キャラクターデバイスのすべての入 力を無効にし、出力を仮想マシンの ログファイルに送信します。 X M L ス ニペ ッ ト < d e v ic e s > < c o n s o le t y p e = 's t d io '> < t a r g e t p o r t = '1'/ > < / c o n s o le > < / d e v ic e s > Device lo gfile ファイルが開かれ、キャラクターデバ イスに送信されたすべてのデータが ファイルに書き込まれます。 < d e v ic e s > < s e r ia l t y p e = "file "> <source p a t h = "/ v a r / lo g / v m / v m - s e r ia l.lo g "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > Virtual co nso le キャラクターデバイスを仮想コンソー ルのグラフィカルフレームバッファー に接続します。通常、これは "ctrl+alt+3" などの特殊ホットキー シーケンスでアクセスされます。 < d e v ic e s > < s e r ia l t y p e = 'v c '> < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > 390 第 2 1章 ド メ イ ン X M L の 操 作 パ ラメーター 説明 Null device キャラクターデバイスを vo id に接続 します。データは入力に提供されませ ん。書き込まれたすべてのデータは 廃棄されます。 X M L ス ニペ ッ ト < d e v ic e s > < s e r ia l t y p e = 'n u ll'> < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > Pseudo TTY Pseudo TTY は、/ d e v / p t m x を 使用して割り当てられます。v ir s h c o n s o le などの適切なプロキシ は、シリアルポートとローカルに対話 することができます。 < d e v ic e s > < s e r ia l t y p e = "p t y "> <source p a t h = "/ d e v / p t s / 3 "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > NB Special case Ho st physical machine device pro xy NB Special case。< c o n s o le t y p e = 'p t y '> の場合に、TTY パ スも、トップレベルの < c o n s o le > タグ上の属性 t t y = '/ d e v / p t s / 3 ' として複製 されます。これは、< c o n s o le > タグ の既存の構文との互換性を提供し ます。 キャラクターデバイスは、基礎となる 物理キャラクターデバイスに渡されま す。デバイスタイプ、たとえば、エミュ レートされたシリアルポートは、ホス ト物理マシンのシリアルポートにの み接続される必要があり、シリアル ポートはパラレルポートに接続しない でください。 < d e v ic e s > < s e r ia l t y p e = "d e v "> <source p a t h = "/ d e v / t t y S 0 "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > 391 仮 想 化 管 理 ガイ ド パ ラメーター 説明 Named pipe キャラクターデバイスは出力を名前 付きパイプに書き込みます。詳細は、 pipe(7) MAN ページを参照してく ださい。 X M L ス ニペ ッ ト < d e v ic e s > < s e r ia l t y p e = "p ip e "> <source p a t h = "/ t m p / m y p ip e "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > TCP client/server キャラクターデバイスは、リモートサー バーに接続する TCP クライアントと して機能します。 < d e v ic e s > < s e r ia l t y p e = "t c p "> <source m o d e = "c o n n e c t " h o s t = "0 .0 .0 .0 " s e r v ic e = "2 4 4 5 "/ > <protocol t y p e = "r a w "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > または、クライアント接続を待機する TCP サーバーとして機能します。 < d e v ic e s > < s e r ia l t y p e = "t c p "> < s o u r c e m o d e = "b in d " h o s t = "12 7 .0 .0 .1" s e r v ic e = "2 4 4 5 "/ > <protocol t y p e = "r a w "/ > < t a r g e t p o r t = "1"/ > 392 第 2 1章 ド メ イ ン X M L の 操 作 パ ラメーター 説明 X M L ス ニペ ッ ト < / s e r ia l> < / d e v ic e s > または、raw TCP の代わりに telnet を使用することができます。さ らに telnets (secure telnet) およ び tls を使用することもできます。 < d e v ic e s > < s e r ia l t y p e = "t c p "> <source m o d e = "c o n n e c t " h o s t = "0 .0 .0 .0 " s e r v ic e = "2 4 4 5 "/ > <protocol t y p e = "t e ln e t "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < s e r ia l t y p e = "t c p "> < s o u r c e m o d e = "b in d " h o s t = "12 7 .0 .0 .1" s e r v ic e = "2 4 4 5 "/ > <protocol t y p e = "t e ln e t "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > 393 仮 想 化 管 理 ガイ ド パ ラメーター 説明 UDP netwo rk co nso le キャラクターデバイスは、UDP ネット コントロールサービスとして機能し、 パケットの送受信を行います。これは 損失を伴うサービスです。 X M L ス ニペ ッ ト < d e v ic e s > < s e r ia l t y p e = "u d p "> < s o u r c e m o d e = "b in d " h o s t = "0 .0 .0 .0 " s e r v ic e = "2 4 4 5 "/ > <source m o d e = "c o n n e c t " h o s t = "0 .0 .0 .0 " s e r v ic e = "2 4 4 5 "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > UNIX do main so cket client/server キャラクターデバイスは、UNIX ドメイ ンソケットサーバーとして機能し、 ローカルクライアントからの接続を受 け入れます。 < d e v ic e s > < s e r ia l t y p e = "u n ix "> < s o u r c e m o d e = "b in d " p a t h = "/ t m p / fo o "/ > < t a r g e t p o r t = "1"/ > < / s e r ia l> < / d e v ic e s > 21.17. サウンドデバイス 仮想サウンドカードは、so und 要素により、ホスト物理マシンに割り当てることができます。 ... <devices> <sound m odel='es1370'/> </devices> ... 図2 1 . 6 4 仮想サ ウンドカ ード 394 第 2 1章 ド メ イ ン X M L の 操 作 so und 要素には、必須属性の m o d e l があります。これは、エミュレートする実際のサウンドデバイスを指定します。 有効な値は、典型的なオプションとして 'e s 13 7 0 ' 、's b 16 ' 、'a c 9 7 ' 、および 'ic h 6 ' がありますが、基礎となる ハイパーバイザーに特有のものとなります。さらに、ich6 モデルを持つ so und 要素は、オーディオデバイスに各種の 音声コーデックを割り当てるためのオプションのサブ要素 c o d e c を持たせることができます。指定されない場合、デ フォルトのコーデックが、再生や録音を可能にするために割り当てられます。有効な値は、'd u p le x ' (line-in および line-o ut を提供) および 'm ic r o ' (speaker および micro pho ne を提供) です。 ... <devices> <sound m odel='ich6 '> <codec type='m icro'/> <sound/> </devices> ... 図2 1 . 6 5 サ ウンドデバ イス それぞれの so und 要素にはオプションのサブ要素 < a d d r e s s > があり、これは、上記のようにデバイスを特定の PCI スロットに関連付けることができます。 21.18 . ウォッチドッグ デバイス 仮想ハードウェアウォッチドッグデバイスは、< w a t c h d o g > 要素でゲスト仮想マシンに追加できます。ウォッチドッグデ バイスは、ゲスト仮想マシン内に追加のドライバーおよび管理デーモンを必要とします。libvirt 設定でウォッチドッグを 有効にするだけでは、いずれの機能も実行されません。現在、ウッチドッグが実行された場合の通知サポートはありま せん。 ... <devices> <watchdog m odel='i6 300esb'/> </devices> ... ... <devices> <watchdog m odel='i6 300esb' action='poweroff'/> </devices> </dom ain> 図2 1 . 6 6 ウォ ッ チドッ グ デバ イス 以下の属性がこの XML で宣言されます。 m o d e l - 必須の m o d e l 属性は、エミュレートする実際のウォッチドッグを指定します。有効な値は、基礎となるハ イパーバイザーに固有です。 m o d e l 属性は以下の値を取ることができます。 395 仮 想 化 管 理 ガイ ド i6 3 0 0 e s b — 推奨されるデバイスです。PCI Intel 6 30 0 ESB をエミュレートします。 ib 7 0 0 — ISA iBase IB70 0 をエミュレートします。 a c t io n - オプションの a c t io n 属性は、ウォッチドッグの有効期限が切れると取られるアクションについて記述 します。有効な値は基礎となるハイパーバイザーに固有です。a c t io n 属性には、以下の値を使用することができ ます。 r e s e t — デフォルト設定です。ゲスト仮想マシンを強制的にリセットします。 s h u t d o w n — ゲスト仮想マシンを正常にシャットダウンします (推奨されません) p o w e r o ff — ゲスト仮想マシンの電源を強制的にオフにします。 p a u s e — ゲスト仮想マシンを一時停止します。 n o n e — 何も実行しません。 d u m p — ゲスト仮想マシンを自動的にダンプします。 'shutdo wn' アクションでは、ゲスト仮想マシンが ACPI シグナルに反応できることが必要になります。ウォッチドッグ の有効期限が切れた状態では、ゲスト仮想マシンは通常 ACPI シグナルに反応することができません。そのため、 'shutdo wn' の使用は推奨されません。さらに、ダンプファイルを保存するディレクトリーは、ファイル /etc/libvirt/qemu.co nf の auto _dump_path で設定できます。 21.19. メ モ リーバルーンデバイス 仮想メモリーバルーンデバイスは、すべての Xen および KVM/QEMU ゲスト仮想マシンに追加されます。これ は、< m e m b a llo o n > 要素として表示されます。これは、適切な場合に自動的に追加されるので、特定の PCI スロッ トを割り当てる必要がない限り、この要素をゲスト仮想マシン XML に明示的に設定する必要はありません。 memballo o n デバイスを明示的に無効にする必要がある場合は、m o d e l= 'n o n e ' を使用することができます。 以下の例では、デバイスを KVM で自動的に追加しています。 ... <devices> <m em balloon m odel='virtio'/> </devices> ... 図2 1 . 6 7 メモ リーバ ル ーンデバ イス 以下は、静的 PCI スロット 2 が要求された状態で、デバイスが手動で追加されている例です。 ... <devices> <m em balloon m odel='virtio'> 396 第 2 1章 ド メ イ ン X M L の 操 作 <address type='pci' dom ain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </m em balloon> </devices> </dom ain> 図2 1 . 6 8 手動で追加され たメモ リーバ ル ーンデバ イス 必須の m o d e l 属性は、提供されるバルーンデバイスのタイプを指定します。仮想化プラットフォームに有効な値は以 下の通りです。KVM ハイパーバイザーの場合にデフォルト設定となる 'v ir t io ' 、または XEN ハイパーバイザーの 場合にデフォルト設定となる 'x e n ' です。 21.20 . TPM デバイス TPM デバイスは、QEMU ゲスト仮想マシンが TPM 機能にアクセスできるようにします。TPM パススルーデバイスタ イプは、1 つの QEMU ゲスト仮想マシンのホスト物理マシンの TPM へのアクセスを提供します。それ以外のソフト ウェアは、QEMU ゲスト仮想マシンが起動される時点で TPM デバイスを使用する可能性がありません (通常は / d e v / t p m 0 )。以下のドメイン XML 例は、TPM パススルーデバイスの使用について示しています。 ... <devices> <tpm m odel='tpm -tis'> <backend type='passthrough'> <backend path='/dev/tpm 0'/> </backend> </tpm > </devices> ... 図2 1 . 6 9 T P M デバ イス m o d e l 属性は、QEMU がゲスト仮想マシンに提供するデバイスモデルを指定します。モデル名が指定されていない 場合、tpm-tis が自動的に選択されます。< b a c k e n d > 要素は、TPM デバイスのタイプを指定します。以下のタイプ がサポートされます。'p a s s t h r o u g h ' — ホスト物理マシンの TPM デバイスおよび 'p a s s t h r o u g h ' を使用し ます。このバックエンドタイプには、ホスト物理マシン上の TPM デバイスへの排他的アクセスが必要になります。この ようなデバイスの例は、/ d e v / t p m 0 です。ファイル名は、so urce 要素のパス属性として指定されます。ファイル名が 指定されない場合、/ d e v / t p m 0 が自動的に使用されます。 21.21. セキュリティーラベル < s e c la b e l> 要素は、セキュリティードライバー上の制御を可能にします。以下のような 3 つの基本的な操作モード があります。libvirt が固有のセキュリティーラベルを自動的に生成する場合の 'd y n a m ic ' 、アプリケーション/管理 者がラベルを選択する場合の 's t a t ic ' 、または限定を無効にする場合の 'n o n e ' 。動的なラベル生成では、libvirt が仮想マシンに関連付けられるリソースの再ラベル化を常に実行します。静的なラベル割り当てでは、デフォルトでは 管理者またはアプリケーションがラベルがリソースに正しく設定されていることを確認する必要がありますが、自動ラ ベルは必要な場合は有効にできます。 複数のセキュリティードライバーが libvirt によって使用されている場合、複数の seclabel タグを使用でき、各ドライ バーに 1 つのタグを使用し、各タグで参照されるセキュリティードライバーは属性 m o d e l を使用して定義できます。 トップレベルのセキュリティーラベルに有効な入力 XML 設定は以下になります。 397 仮 想 化 管 理 ガイ ド <seclabel type='dynam ic' m odel='selinux'/> <seclabel type='dynam ic' m odel='selinux'> <baselabel>system _u:system _r:m y_svirt_t:s0</baselabel> </seclabel> <seclabel type='static' m odel='selinux' relabel='no'> <label>system _u:system _r:svirt_t:s0:c392,c6 6 2</label> </seclabel> <seclabel type='static' m odel='selinux' relabel='yes'> <label>system _u:system _r:svirt_t:s0:c392,c6 6 2</label> </seclabel> <seclabel type='none'/> 図2 1 . 7 0 セキ ュ リティーラベ ル 't y p e ' 属性が入力 XML に指定されていない場合、セキュリティードライバーのデフォルト設定が使用され、これは 'n o n e ' または 'd y n a m ic ' のいずれかになります。< b a s e la b e l> が設定されていても 't y p e ' が設定されて いない場合、タイプは 'd y n a m ic ' であると想定されます。リソースの自動再ラベルがアクティブな状態の実行中の ゲスト仮想マシンの XML を表示する場合、追加の XML 要素の im a g e la b e l が組み込まれます。これは、出力専 用の要素であるため、ユーザーが指定する XML 文書では無視されます。 以下の要素は、次のような値を使って操作することができます。 t y p e - s t a t ic 、d y n a m ic または n o n e のいずれかになります。libvirt が固有のセキュリティーラベルを自動 生成するかどうかを定めます。 m o d e l - 現在アクティブ化されているセキュリティーモデルに一致する有効なセキュリティーモデル名です。 r e la b e l - y e s または n o になります。これは、動的なラベルの割り当てが使用される場合、常に y e s にする必 要があります。静的なラベルの割り当てでは、デフォルトで n o に設定されます。 < la b e l> - 静的なラベルが使用されている場合、これは、仮想ドメインに割り当てる完全なセキュリティーラベル を指定するはずです。コンテンツのフォーマットは、使用されているセキュリティードライバーによって異なります。 S E L in u x : SELinux コンテキストです。 A p p A r m o r : AppArmo r プロファイルです。 D A C : コロンで区切られた所有者またはグループです。それらは、ユーザー/グループ名または uid/gid として 定義できます。ドライバーは、最初にこれらの値を名前として解析し、先頭の正の記号は、ドライバーに対してそ れらを uid または gid として解析することを強制するために使用できます。 < b a s e la b e l> - 動的なラベルが使用される場合、これは、ベースセキュリティーラベルを指定するためにオプ ションで使用できます。コンテンツのフォーマットは、使用されているセキュリティードライバーによって異なります。 < im a g e la b e l> - これは出力のみの要素であり、仮想ドメインに関連付けられたリソースで使用されるセキュリ ティーラベルを表示します。コンテンツの形式は、使用されるセキュリティードライバーによって異なります。再ラベル が有効な場合、ラベルを無効にする (ファイルが NFS またはセキュリティーラベルのない他のファイルシステムに ある場合は便利) か、または代替ラベルを要求する (管理アプリケーションがドメイン間のすべてではないが一部の 398 第 2 1章 ド メ イ ン X M L の 操 作 リソースの共有を可能にするための特殊ラベルを作成する場合に便利) ことによって、特定ソースファイル名に実 行されるラベルを微調整することもできます。seclabel 要素が、トップレベルのドメイン割り当てではなく、特定パ スに割り当てられる場合、属性の relabel またはサブ要素の label のみがサポートされます。 21.22. ドメ イン XML 設定例 x8 6 _6 4 上の QEMU でエミュレートされたゲスト仮想マシン <dom ain type='qem u'> <nam e>Q Em u-fedora-i6 8 6 </nam e> <uuid>c7a5fdbd-cdaf-9455-926 a-d6 5c16 db18 09</uuid> <m em ory>219200</m em ory> <currentM em ory>219200</currentM em ory> <vcpu>2</vcpu> <os> <type arch='i6 8 6 ' m achine='pc'>hvm </type> <boot dev='cdrom '/> </os> <devices> <em ulator>/usr/bin/qem u-system -x8 6 _6 4</em ulator> <disk type='file' device='cdrom '> <source file='/hom e/user/boot.iso'/> <target dev='hdc'/> <readonly/> </disk> <disk type='file' device='disk'> <source file='/hom e/user/fedora.im g'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> </interface> <graphics type='vnc' port='-1'/> </devices> </dom ain> 図2 1 . 7 1 ドメイン X M L 設定例 i6 8 6 上の KVM ハードウェアで加速されたゲスト仮想マシン <dom ain type='kvm '> <nam e>dem o2</nam e> <uuid>4dea24b3-1d52-d8 f3-2516 -78 2e98 a23fa0</uuid> <m em ory>131072</m em ory> <vcpu>1</vcpu> <os> <type arch="i6 8 6 ">hvm </type> </os> 399 仮 想 化 管 理 ガイ ド <clock sync="localtim e"/> <devices> <em ulator>/usr/bin/qem u-kvm </em ulator> <disk type='file' device='disk'> <source file='/var/lib/libvirt/im ages/dem o2.im g'/> <target dev='hda'/> </disk> <interface type='network'> <source network='default'/> <m ac address='24:42:53:21:52:45'/> </interface> <graphics type='vnc' port='-1' keym ap='de'/> </devices> </dom ain> 図2 1 . 7 2 ドメイン X M L 設定例 400 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ 第22章 トラブルシューティング この章では、Red Hat Enterprise Linux 6 の仮想化における一般的な問題とその解決策について解説しています。 この章は、仮想化技術に関連したいくつかの一般的な問題の理解を深めるために役立ちます。トラブルシューティング には、書籍から学ぶには難しい実践や経験が必要になります。 Red Hat Enterprise Linux 6 で仮想化の実験や検 証を行ないトラブルシューティングの技能を磨くことをお勧めします。 本ガイドで解決できない問題については、仮想化コミュニティーのサイトで答えを見つけることができる場合がありま す。Linux 仮想化のウェブサイト一覧については 「オンラインリソース」 をご覧ください。 22.1. デバッグ およびトラブルシューティング の ツ ール このセクションは、システム管理者用のアプリケーション、ネットワーク構築用のユーティリティー、デバッグ用のツール などを簡単に説明します。こうした標準的なシステム管理用ツールやログを活用してトラブルシューティングに役立て てください。 k v m _ s t a t - 「kvm_stat」 を参照してください。 trace-cm d ft r a c e 『Red Hat Enterprise Linux 開発者ガイド』 を参照してください。 vm stat io s t a t ls o f system tap crash sysrq sysrq t sysrq w 仮想化ネットワーク関連の問題を解決する場合に次のようなツールが役立ちます。 ifc o n fig tcpdum p t c p d u m p コマンドは、ネットワークパケット関連の問題を感知します。ネットワーク認証における問題や異常の発 見に役立ちます。t c p d u m p には、w ir e s h a r k という名前のグラフィカルバージョンもあります。 brctl b r c t l は、Linux カーネル内のイーサネットブリッジ構成を検査して設定するネットワーキングツールです。次の例 で使用しているコマンドを実行する場合は、まず ro o t のアクセス権を取得しておく必要があります。 # brctl show bridge-nam e bridge-id S TP enabled interfaces ----------------------------------------------------------------------------virtbr0 8 000.feffffff yes eth0 401 仮 想 化 管 理 ガイ ド # brctl showm acs virtbr0 port-no m ac-addr 1 fe:ff:ff:ff:ff: 2 fe:ff:ff:fe:ff: # brctl showstp virtbr0 virtbr0 bridge-id 8 000.fefffffffff designated-root 8 000.fefffffffff root-port 0 m ax-age 20.00 hello-tim e 2.00 forward-delay 0.00 aging-tim e 300.01 hello-tim er 1.43 topology-change-tim er 0.00 local? yes yes aging tim er 0.00 0.00 path-cost bridge-m ax-age bridge-hello-tim e bridge-forward-delay 0 20.00 2.00 0.00 tcn-tim er gc-tim er 0.00 0.02 他にも仮想化に関する問題の解決に役立つコマンドの一覧を以下に示します。 s t ra ce は、受信したり、 別のプロセスで使用されたシステムコールやイベントを追跡するコマンドです。 vn cvie we r は、サーバーまたは仮想マシン上で実行している VNC サーバーへの接続を行います。 y u m in s t a ll v n c コマンドを使用して、vn cviwe r をインストールします。 vn cs e rve r は、サーバーでリモートのデスクトップを開始します。リモートセッションにより virt-manager などの グラフィカルユーザーインターフェースを使用することができるようになります。 y u m in s t a ll v n c - s e r v e r コマンドを使用して、vn cs e rve r をインストールします。 22.2. virsh ダンプファイルの 作成 v ir s h d u m p コマンドを実行すると、ゲスト仮想マシンのコアをファイルにダンプする要求が送信されるので、仮想マ シンのエラーを診断することができます。このコマンドの実行には、引数の c o r e file p a t h で指定されるファイルと パスに適切なアクセス権があることを手動で確認することが必要になります。v ir s h d u m p コマンドは、co redump (または c r a s h ユーティリティー) と同様です。v ir s h d u m p ファイルを作成するには、以下を実行します。 #v ir s h d u m p < d o m a in > < c o r e file p a t h > [ - - b y p a s s - c a c h e ] { [ - - liv e ] | [ - c r a s h ] | [ - - r e s e t ] } [ - - v e r b o s e ] [ - - m e m o r y - o n ly ] do main (ゲスト仮想マシンのドメイン名) と co refilepath (新たに作成されたコアダンプファイルの場所) が必須で ある一方、以下の引数はオプションになります。 - - liv e : 実行中のマシンにダンプファイルを作成し、これを一時停止しません。 - - c r a s h : ゲスト仮想マシンを停止し、ダンプファイルを生成します。主な違いは、ゲスト仮想マシンが 「Crashed」を理由として「Sto pped」として一覧表示されないことにあります。virt -ma n a g e r ではステータス が「Paused」として一覧表示されることに注意してください。 - - r e s e t : ダンプが正常に行なわれた後にゲスト仮想マシンをリセットします。これらの 3 つのスイッチは相互に 排他的であることに注意してください。 - - b y p a s s - c a c h e : ファイルシステムのキャッシュをバイパスするために O_DIRECT を使用します。 - - m e m o r y - o n ly : ダンプファイルは、elf ファイルとして保存され、ドメインのメモリーと cpu 共通レジスター値の みが含まれます。このオプションは、ドメインがホストデバイスを直接使用する場合に非常に便利です。 - - v e r b o s e : ダンプの進捗状況が表示されます。 402 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ ダンププロセス全体は、v ir s h d o m j o b in fo コマンドを使用すると監視でき、v ir s h d o m j o b a b o r t の実行で キャンセルできます。 22.3. kvm_ stat k v m _ s t a t コマンドは、k v m カーネルモジュールからランタイム統計を取り込む pytho n スクリプトで す。k v m _ s t a t コマンドは、k v m に見えているゲストの動作を診断するために使用できます。とくに、ゲストでのパ フォーマンスに関する問題を診断します。現在、報告される統計は、システム全体のものであり、すべての実行中のゲ ストの動作が報告されます。このスクリプトを実行するには、 qemu-kvm-to o ls パッケージをインストールする必要が あります。『Red Hat Enterprise Linux 仮想化ホスト設定およびゲストインストールガイド』 を参照してください。 k v m _ s t a t コマンドを使用する場合は、 k v m カーネルモジュールがロードされ、 d e b u g fs がマウントされていなけ ればなりません。 この機能のどちらかが有効でない場合、 d e b u g fs または k v m モジュールを有効にするために必 要なステップが出力されます。例を示します。 # kvm _stat Please m ount debugfs ('m ount -t debugfs debugfs /sys/kernel/debug') and ensure the kvm m odules are loaded d e b u g fs をマウントしていない場合はマウントします。 # m ount -t debugfs debugfs /sys/kernel/debug k vm_ s t a t の 出力 k v m _ s t a t コマンドにより、 ホストと全ゲストの統計値が出力されます。 この出力は、(C t r l +c または q キーを使 用して) コマンドを終了するまで 更新されます。 # kvm _stat kvm statistics efer_reload 94 0 exits 4003074 31272 fpu_reload 13138 8 1 10796 halt_exits 14050 259 halt_wakeup 4496 203 host_state_reload 16 38 354 248 93 hypercalls 0 0 insn_em ulation 10938 50 1909 insn_em ulation_fail 0 0 invlpg 7556 9 0 io_exits 1596 98 4 24509 irq_exits 21013 36 3 irq_injections 48 039 1222 irq_window 246 56 8 70 largepages 0 0 m m io_exits 118 73 0 m m u_cache_m iss 4256 5 8 m m u_flooded 14752 0 m m u_pde_zapped 58 730 0 m m u_pte_updated 6 0 m m u_pte_write 138 795 0 m m u_recycled 0 0 403 仮 想 化 管 理 ガイ ド m m u_shadow_zapped m m u_unsync nm i_injections nm i_window pf_fixed pf_guest rem ote_tlb_flush request_irq signal_exits tlb_flush 40358 793 0 0 6 97731 279349 5 0 1 200190 0 0 0 0 3150 0 0 0 0 0 変数に関す る説明: e fe r_ re lo a d EFER (Extended Feature Enable Register) の再読み込みの回数 e xit s V M E X IT の全コール数 fp u _ re lo a d V M E N TR Y が FPU 状態を再ロードした回数 (ゲストが FPU - 浮動小数点演算ユニットを使用している場 合、 fp u _ r e lo a d が加算される) h a lt _ e xit s h a lt コールによりゲストが終了した回数 (一般的にゲストが idle の場合、このタイプの終了が見られる) h a lt _ wa k e u p h a lt から復帰した回数 h o s t _ s t a t e _ re lo a d ホスト状態の完全再ロードの回数 (現在 MSR セットアップとゲスト MSR 読み込みを累計) h yp e rca lls ゲストのハイパーバイザーサービスコール数 in s n _ e mu la t io n ホストにより模倣されたゲストの命令数 in s n _ e mu la t io n _ fa il in s n _ e m u la t io n 試行が失敗した回数 io _ e xit s I/O ポートアクセスによるゲストの終了回数 irq _ e xit s 外部割り込みによるゲストの終了回数 irq _ in je ct io n s ゲストに送信された割り込みの数 404 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ irq _ win d o w 顕著な割り込みウィンドウによるゲストの終了回数 la rg e p a g e s 現在使用中の大容量ページ数 mmio _ e xit s メモリーマップド I/O (MMIO) アクセスによるゲストの終了回数 mmu _ ca ch e _ mis s 作成された KVM MMU シャドウページ数 mmu _ flo o d e d MMU ページへの極度な書き込み動作の検出回数 (個々の書き込み動作ではなく検出された書き込み動 作をカウント) mmu _ p d e _ z a p p e d ページディレクトリーエントリー (PDE) の破棄動作の回数 mmu _ p t e _ u p d a t e d ページテーブルエントリー (PTE) の破棄動作の回数 mmu _ p t e _ writ e ゲストのページテーブルエントリー (PTE) の書き込み動作の回数 mmu _ re cycle d 再利用可能なシャドウページの数 mmu _ s h a d o w_ z a p p e d 無効になったシャドウページの数 mmu _ u n s yn c まだリンク解除されていない非同期化ページの数 n mi_ in je ct io n s ゲストへのマスク不能な割り込み (NMI) インジェクションの数 n mi_ win d o w マスク不能な割り込み (NMI) ウィンドウによるゲスト終了の回数 p f_ fixe d 固定化した (非ページング) ページテーブルエントリーマップ (PTE) の数 p f_ g u e s t ゲストに挿入されたページフォールトの数 re mo t e _ t lb _ flu s h 405 仮 想 化 管 理 ガイ ド リモート (sibling CPU) のトランスレーションルックアサイドバッファ (TLB) のフラッシュ要求の回数 re q u e s t _ irq ゲスト割り込みウィンドウ要求の終了回数 s ig n a l_ e xit s ホストからの保留信号によるゲスト終了の回数 t lb _ flu s h ハイパーバイザーにより実行された t lb _ flu s h 動作の回数 注記 k v m _ s t a t コマンドからの出力情報は、/ s y s / k e r n e l/ d e b u g / k v m / ディレクトリー内に配置された擬 似ファイルとして KVM ハイパーバイザーによってエキスポートされます。 22.4 . ゲス ト仮想マ シンがシャットダウンに失敗す る 通常、v ir s h s h u t d o w n コマンドを実行すると、電源ボタンの ACPI イベントが送信され、物理マシン上で誰かが 電源ボタンを押す場合と同様のアクションがコピーされます。すべての物理マシン内で、このイベントを処理するのは OS になります。これまでは、オペレーティングシステムは静かにシャットダウンしました。現在、最も有効なアクション は、何を実行すべきかを尋ねるダイアログを表示させることです。一部のオペレーティングシステムは、とりわけいずれ のユーザーもログインしていない場合にこのイベントを完全に無視します。このようなオペレーティングシステムがゲス ト仮想マシンにインストールされていると、v ir s h s h u t d o w n を実行しても機能しません (このコマンドが無視され るか、ダイアログが仮想ディスプレイに表示されるかのいずれかです)。ただし、 qemu-guest-agent チャンネルがゲ スト仮想マシンに追加され、このエージェントがゲスト仮想マシンの OS 内で実行されている場合、v ir s h s h u t d o w n コマンドは、エージェントに対し、ACPI イベントを送信する代わりにゲスト OS をシャットダウンするように 指示します。エージェントはゲスト仮想マシン OS の内部からシャットダウンを要求し、すべてのことが予想通りに機能 します。 手順2 2 . 1 ゲス ト 仮想マ シ ンの ゲス ト エージ ェ ント チャンネ ル の 設定 1. ゲスト仮想マシンを停止します。 2. ゲスト仮想マシン用のドメイン XML を開き、以下のスニペットを追加します。 <channel type='unix'> <source m ode='bind'/> <target type='virtio' nam e='org.qem u.guest_agent.0'/> </channel> 図2 2 . 1 ゲス ト エージ ェ ント チャンネ ル の 設定 3. v ir s h s t a r t [ d o m a in ] を実行して、ゲスト仮想マシンを起動します。 4 . ゲスト仮想マシンに qemu-guest-agent をインストールし (y u m in s t a ll q e m u - g u e s t - a g e n t )、こ れをサービス (qemu-guest-agent.service) として毎回の起動時に自動的に実行させるようにします。詳 細は、11章QEMU-img および QEMU ゲストエージェント を参照してください。 406 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ 22.5. シリアルコンソールでの トラブルシューティング Linux カーネルは、情報をシリアルポートに出力できます。これは、カーネルパニック、およびビデオデバイスまたはヘッ ドレスのサーバーでのハードウェア問題のデバッグに役に立ちます。このセクション内のサブセクションでは、KVM ハ イパーバイザーを使用しているホスト物理マシンに対してシリアルコンソールの出力を設定する方法を説明します。 このセクションでは、完全仮想化ゲストにシリアルコンソールの出力を有効にする方法を説明しています。 完全仮想化ゲストのシリアルコンソール出力は、v ir s h c o n s o le コマンドを使用すると表示させることができます。 完全仮想化ゲストのシリアルコンソールには、いくつか制限があるため注意してください。現時点での制限は以下のよ うになります。 出力データが消えたり、出力が乱れることがあります。 シリアルポートは、Linux の場合は t t y S 0 と呼ばれますが、Windo ws の場合は C O M 1 になります。 仮想シリアルポートに情報を出力させる場合は、仮想化オペレーティングシステムを設定する必要があります。 完全仮想化した Linux ゲストからのカーネル情報をドメインに出力する場合は、/ b o o t / g r u b / g r u b .c o n f ファイ ルを修正します。 k e r n e l 行に c o n s o le = t t y 0 c o n s o le = t t y S 0 , 115 2 0 0 を追記します。 title Red Hat Enterprise Linux S erver (2.6 .32-36 .x8 6 -6 4) root (hd0,0) kernel /vm linuz-2.6 .32-36 .x8 6 -6 4 ro root=/dev/volgroup00/logvol00 \ c o n s o le = t t y 0 c o n s o le = t t y S 0 , 115 2 0 0 initrd /initrd-2.6 .32-36 .x8 6 -6 4.im g ゲストを再起動します。 ホスト上で、以下のコマンドを使用してシリアルコンソールにアクセスします。 # virsh console v ir t - m a n a g e r を使って仮想テキストコンソールを表示することもできます。ゲストのコンソールウィンドウで、表示 メニューから テキストコンソール の S e r ia l 1 を選択します。 22.6. 仮想化の ログ ファイル 完全仮想化ゲストの各ログは / v a r / lo g / lib v ir t / q e m u / ディレクトリーにあります。各ゲストのログには GuestName .lo g という名前が付けられ、サイズの上限に達すると定期的に圧縮されます。 仮想マシンマネージャでエラーに遭遇した場合は、$ H O M E / .v ir t - m a n a g e r ディレクトリー内に存在する v ir t m a n a g e r .lo g ファイルの生成データを確認することができます。 22.7. ループデバイス エラー ファイルベースのゲストイメージを使用する場合は、設定ループデバイスの数を増やす必要があるかもしれません。デ フォルトの設定で許可しているのは、アクティブなループデバイスが最大 8 つまでです。8 つ以上のファイルベースゲ ストまたはループデバイスが必要な場合は、 設定ループデバイスの数を / e t c / m o d p r o b e .d / ディレクトリー内で 調節します。以下の行を追加してください。 options loop m ax_loop=6 4 この例では 6 4 を使用していますが、別の値を最大ループ値に指定しても構いません。また、ループデバイスでバック 407 仮 想 化 管 理 ガイ ド アップされたゲストをシステムに実装する必要があるかもしれません。完全仮想化のシステムにループデバイスバック アップのゲストを使用する場合は、p h y : d e v ic e コマンドまたは file : file コマンドを使用します。 22.8 . ライブマ イグ レーションに関す るエラー ライブマイブレーションによりメモリーの内容が何度も繰り返し転送されることがあります。これにより、常時メモリーへ の書き込みが行なわれるため、移行プロセスの速度が低下することになります。これが発生し、ゲストが毎秒 20 30 MB 以上の書き込みを行なうようになると、ライブマイグレーションが完了しなくなることがあります (集中)。この問 題は、Red Hat Enterprise Linux 6 では解決の予定はなく、Red Hat Enterprise Linux 7 で修正される予定で す。 現在のライブマイグレーション実装は、デフォルトの移行時間が 30 ミリ秒に設定されています。この値により、 残りを 転送するために移行の最後でゲストをいったん停止する時間を定義します。 値が高くなるほどライブマイグレーション が集中する確率が高くなります。 22.9. BIOS で Inte l V T- x と A MD- V の 仮想化ハ ードウェア拡張を有効にす る このセクションでは、ハードウェア仮想化拡張を識別し、拡張が無効になっている場合は BIOS 内でその拡張を有効 にする方法について説明しています。 Intel VT-x 拡張は、BIOS 内で無効になっている可能性があります。一部のノートパソコンベンダーは、デフォルトで CPU 内の Intel VT-x 拡張が無効にしています。 AMD-V の場合、仮想化拡張を BIOS で無効にすることはできません。 無効になっている仮想化拡張を有効にする方法については、次のセクションを参照してください。 仮想化拡張が BIOS で有効になっているか確認します。Intel VT や AMD-V の BIOS セッティングは、通常 Ch ip s e t または P ro ce s s o r のメニュー内にあります。メニュー名はこのガイドと異なる場合があります。仮想化拡 張のセッティングは S e c u r it y S e t t in g s のところ、または別のメニュー名になっている場合もあります。 手順2 2 . 2 B IO S 内で仮想化拡張を有効にす る 1. コンピュータを再起動して、システムの BIOS メニューを開きます。システムにより使用するキーは異なる場合 がありますが、通常、d e le t e キー、F 1 キー、 A lt と F 4 キーの組み合わせ、などいずれかを押すと BIOS メニューを開くことができます。 2. B IO S 内で仮想化拡張を有効にす る 注記 以下に示す手順の多くは、ご使用のマザーボードやプロセッサーの種類、チップセット、OEM などに より異なる場合があります。システム設定に関する正確な情報についてはそのシステムに付随するド キュメントなどを参照してください。 a. P r o c e s s o r サブメニューを開きます。プロセッサーセッティングメニューは C h ip s e t や A d v a n c e d C P U C o n fig u r a t io n 、N o r t h b r id g e などに隠れている場合があります。 b. In t e l V ir t u a liz a t io n Te c h n o lo g y (別名 Intel VT-x) を有効にします。 A M D - V の拡張 は BIOS 内では無効にできないため、すでに有効になっているはずです。 仮想化拡張機能には V ir t u a liz a t io n E x t e n s io n s や V a n d e r p o o l といったラベル名が付けられています。ま た、OEM とシステムの BIOS によってはこれ以外の名前が付けられていることもあります。 408 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ c. Intel VT-d あるいは AMD IOMMU というオプションがあればそれを有効にします。Intel VT-d と AMD IOMMU は PCI デバイス割り当てに使用されます。 d. S a v e & E x it を選択します。 3. マシンを再起動します。 4 . マシンが起動したら、c a t / p r o c / c p u in fo |g r e p - E "v m x |s v m " を実行します。 - - c o lo r の指 定はオプションですが、 検索した単語を強調表示させたい場合は便利です。コマンドからの出力があれば、 仮想化拡張が有効になっているということなります。 出力がない場合は、システムに仮想化拡張がない、また は BIOS 設定が正しく有効にされていない可能性があります。 22.10 . KV M ネ ットワ ークの パ フォーマ ンス デフォルトでは、KVM 仮想マシンには、Realtek 8 139 (rtl8 139) NIC (ネットワークインターフェースコントローラー) が割り当てられています。Red Hat Enterprise Linux のゲストには、デフォルトで virtio NIC が割り当ててられます が、Windo ws ゲストにはゲストタイプは指定されません。 rtl8 139 仮想化 NIC はほとんどの環境で正常に機能します。しかし、このデバイスは、たとえば 10 Gigabit Ethernet ネットワークなどの一部のネットワークでは、パフォーマンスが低下する問題の原因となる場合があります。 パフォーマンスを改善するには、準仮想化ネットワークドライバーに切り替えます。 注記 エミュレートするドライバーの選択肢として、仮想化した Intel PRO/10 0 0 (e 10 0 0 ) ドライバーもサポートさ れています。e 10 0 0 ドライバーを使用する場合は、 以下の手順にある v ir t io の部分を e 10 0 0 に置き換え ます。最善のパフォーマンスを得るには、v ir t io ドライバーの使用が推奨されます。 手順2 2 . 3 virt io ドライバ ーに切り 替え る 1. ゲストのオペレーティングシステムをシャットダウンします。 2. v ir s h コマンドを使用してゲストの設定ファイルを編集します ( G U E S T はゲスト名)。 # virsh edit G U E S T v ir s h e d it コマンドでは、使用するエディターは $ E D ITO R シェル変数で確定されます。 3. ネットワークインターフェースの設定セクションを見つけます。以下にネットワークインターフェースの設定セク ションを抜粋した部分を示します。 <interface type='network'> [ 出力は省略されています] <m odel type='rtl8 139' /> </interface> 4 . mo del 要素のタイプ属性を 'r t l8 13 9 ' から 'v ir t io ' に変更します。これによりドライバーが rtl8 139 から virtio に変更されます。 <interface type='network'> [output truncated] <m odel type= 'v ir t io ' /> </interface> 409 仮 想 化 管 理 ガイ ド 5. 変更を保存して、エディターを終了します。 6 . ゲストのオペレーティングシステムを再開します。 他の ネ ッ ト ワーク ドライバ ーを使用し て 新し いゲス ト を作成す る 別のネットワークドライバーで新規のゲストを作成することもできます。ネットワーク接続によるゲストのインストールが 困難な場合に、この手段が必要になるかもしれません。この方法では、 テンプレートとして使用するゲストが少なくとも 1つすでに作成されていなければなりません (CD か DVD などからインストール)。 1. 既存のゲスト (この例では、ゲスト名 Guest1) から XML テンプレートを作成します。 # virsh dum pxm l G uest1 > /tm p/ guest-tem plate .xm l 2. XML ファイルをコピーし、仮想マシンの名前、UUID、ディスクイメージ、MAC アドレス、その他固有のパラ メーターなどのフィールドを編集して更新を行います。UUID と MAC アドレスの行は削除して構いません。 virsh により UUID と MAC アドレスが生成されます。 # cp /tm p/ guest-tem plate .xm l /tm p/ new-guest .xm l # vi /tm p/ new-guest .xm l ネットワークインターフェースのセクションにモデルの行を追加します。 <interface type='network'> [output truncated] <m odel type='virtio' /> </interface> 3. 新規の仮想マシンを作成します。 # virsh define /tm p/new-guest.xm l # virsh start new-guest 22.11. libvirt による外部ス ナ ップショット作成の 回避策 QEMU ゲストには 2 つのクラスのスナップショットがあります。内部スナップショットは qco w2 ファイル内に完全に格 納されており、 libvirt によって完全にサポートされています。これにより、スナップショットの作成、削除、および復帰の 操作が可能になります。これは、とりわけオプションが指定されていない場合にスナップショットを作成する際 の、 libvirt によって使用されるデフォルトの設定になります。このファイルタイプでは、スナップショットを作成する場合 に他のタイプにかかる時間よりも少し多くの時間がかかりますが、qco w2 ディスクを使用するために libvirt で必要に なります。このファイルタイプのもう一つの短所は、QEMU の改良点を受けることができない点にあります。 他方、外部スナップショットはオリジナルのディスクイメージのすべてのタイプで機能し、ゲストのダウンタイムなしに取 得でき、さらに QEMU のアクティブな改良点を受けることができます。 libvirt では、- - d is k - o n ly オプションを s n a p s h o t - c r e a t e - a s に対して使用する場合 (または明示的な XML ファイルを同じ機能を実行する s n a p s h o t - c r e a t e に指定する場合) に作成されます。現在のところ、外部スナップショットは、 libvirt はそれらを 作成できるものの、それらを使ってそれ以上のタスクを実行できないため、一方的な操作になります。回避策について は、こちら に説明されています。 22.12. 日本語キーボードの ゲス トコンソールで欠如している文字 410 第 2 2 章 トラ ブ ル シ ュ ーティ ン グ Red Hat Enterprise Linux 6 のホスト上で、日本語キーボードをローカルでマシンに接続すると、下線 (_ 記号) な どの入力した文字がゲストコンソールでは正しく表示されない結果になることがあります。必要なキーマップがデフォ ルトでは正しくセットされていないことが原因です。 Red Hat Enterprise Linux 3 と Red Hat Enterprise Linux 6 のゲストでは、このようなキーを押してもエラーメッ セージは通常出ません。しかし、 Red Hat Enterprise Linux 4 と Red Hat Enterprise Linux 5 のゲストでは、 以 下のようなエラーメッセージが表示される場合があります。 atkdb.c: Unknown key pressed (translated set 2, code 0x0 on isa006 0/serio0). atkbd.c: Use 'setkeycodes 00 <keycode>' to m ake it known. v ir t - m a n a g e r でこの問題を修復するには、以下のステップを実行します。 v ir t - m a n a g e r で問題のゲストを開きます。 表示 → 詳細 をクリックします。 一覧内の ディスプレイ V N C を選択します。 キーマップ プルダウンメニューの Au t o を ja に変更します。 適用 ボタンをクリックします。 また、 目的のゲストで v ir s h e d it コマンドを使ってこの問題を修復することもできます。 v ir s h e d it < t a r g e t g u e s t > を実行します。 k e yma p = ' ja ' の属性を <graphics> タグに追加します。 <graphics type='vnc' port='-1' autoport='yes' k e y m a p = 'j a ' /> 22.13. 仮想化拡張機能を確認す る システムにハードウェアの仮想化拡張機能が備わっているかどうかを確認する場合にこのセクションを使用してくださ い。完全仮想化の場合には仮想化拡張機能 (Intel VT-x または AMD-V) が必要になります。 1. 次のコマンドを実行して利用できる CPU 仮想化拡張機能があるかを確認します。 $ grep -E 'svm |vm x' /proc/cpuinfo 2. 出力を分析します。 以下の出力には v m x エントリーが含まれています。 Intel VT-x 拡張機能を備えた Intel プロセッサーで あることがわかります。 flags : fpu tsc m sr pae m ce cx8 apic m trr m ca cm ov pat pse36 clflush dts acpi m m x fxsr sse sse2 ss ht tm syscall lm constant_tsc pni m onitor ds_cpl vm x est tm 2 cx16 xtpr lahf_lm 次の出力には s v m エントリーが含まれています。 AMD-V 拡張機能を備えた AMD プロセッサーである ことがわかります。 flags : fpu tsc m sr pae m ce cx8 apic m trr m ca cm ov pat pse36 clflush m m x fxsr sse sse2 ht syscall nx m m xext fxsr_opt lm 3dnowext 3dnow pni cx16 lahf_lm cm p_legacy svm cr8 legacy ts fid vid ttp tm stc 411 仮 想 化 管 理 ガイ ド 何らかの出力が表示されていれば、 そのプロセッサーにはハードウェアの仮想化拡張機能が備わっている ことになります。 ただし、 メーカー側によって BIOS で仮想化拡張機能が無効にされていることがあります。 システムのハイパースレッド、 コア、 CPU に対してそれぞれ「fla g s : 」出力の内容が複数回現れることがあ ります。 仮想化拡張機能は BIOS で無効になっている場合があります。 機能が表示されない、 または完全仮想化が 機能しないなどの場合は 手順22.2「BIOS 内で仮想化拡張を有効にする」 を参照してください。 3. KVM サ ブ シ ス テム が ロ ードされ て いるか 確認し ます 。 追加のチェックとして、 カーネル内に k v m モジュールがロードされているか確認します。 # lsm od | grep kvm 出力に k v m _ in t e l か k v m _ a m d のいずれかが含まれていれば、 k v m ハードウェアの仮想化モジュール は読み込まれているため、 ご使用のシステムは要件を満たしているということになります。 注記 libvirt パッケージをインストールしている場合は、 v ir s h コマンドで仮想化システムの機能の全一覧を出力 させることができます。 ro o t で v ir s h c a p a b ilit ie s を実行して全一覧を表示させます。 412 付 録 A 仮 想 ホス トメ トリ ック ス デ ーモ ン ( v ho s t m d ) 付録A 仮想ホストメトリックスデーモン (vh o st md) vh o s t md (Virtual Ho st Metrics Daemo n: 仮想ホストメトリックスデーモン) の使用により、仮想マシンがその稼 働元であるホストの限定的情報を認識できるようになります。このデーモンは、Red Hat Enterprise Linux fo r SAP でのみ提供されます。 ホスト内では、デーモン (vh o s t md ) が稼働しており、メトリックスを定期的にディスクイメージに書き込みます。この ディスクイメージは、ゲスト仮想マシンに読み込み専用としてエキスポートされます。ゲスト仮想マシンはディスクイメー ジを読み取ってメトリックスを認識することができます。簡単な同期化により、ゲスト仮想マシンが古いか、または破損し たメトリックスを読み込むのを防ぎます。 システム管理者は、ゲスト仮想マシンごとに使用できるメトリックスを選択します。さらに、システム管理者は 1 つ以上 のゲスト仮想マシンがメトリック設定にアクセスするのを防ぐことができます。 vh o s t md と vm-d u mp -me t rics を使用する必要のあるお客様は、パッケージをインストールするのに、SAP を実 行する RHEL システムをカスタマーポータルか Red Hat Subscriptio n Managemet の「RHEL fo r SAP」チャン ネルにサブスクライブさせるようにするために「RHEL fo r SAP Business Applicatio ns" のサブスクリプションが必 要になります。カスタマーポータルの以下の kbase 記事では、RHEL 上の vho stmd のセットアップについて説明し ています。https://access.redhat.co m/kno wledge/so lutio ns/4 156 6 413 仮 想 化 管 理 ガイ ド 付録B その他のリソース 仮想化および Red Hat Enterprise Linux に関する詳細については次のリソースを参照してください。 B.1. オンラインリソース http://www.libvirt.o rg/ は lib v ir t 仮想化 API の公式 web サイトになります。 http://virt-manager.et.redhat.co m/ は、仮想マシン管理用のグラフィカルなアプリケーション、仮想マ シ ン マ ネ ージ ャー (virt-manager) のプロジェクト web サイトになります。 仮想化センターがオープンしました。 http://www.o penvirtualizatio n.co m Red Hat 提供のドキュメントです。 http://www.redhat.co m/do cs/ 仮想化テクノロジーに関する概要です。 http://virt.kernelnewbies.o rg Red Hat の最新テクノロジーに関する記載です。 http://et.redhat.co m B.2. インス トールされているドキュメ ント m a n v ir s h および / u s r / s h a r e / d o c / lib v ir t - < v e r s io n - n u m b e r > — v ir s h 仮想マシン管理 ユーティリティーのサブコマンドおよびオプションが記載されている他、lib v ir t 仮想化ライブラリー API に関して 総合的に解説されています。 / u s r / s h a r e / d o c / g n o m e - a p p le t - v m - < v e r s io n - n u m b e r > — ローカルに実行している仮想マシン の監視および管理を行う GNOME のグラフィカルなパネルアプレットに関する記載です。 / u s r / s h a r e / d o c / lib v ir t - p y t h o n - < v e r s io n - n u m b e r > — lib v ir t ライブラリーの Pytho n バイ ンディングに関して詳細に説明されています。 lib v ir t - p y t h o n パッケージを使用することで、pytho n の開発 者は lib v ir t 仮想化管理ライブラリーと相互作用できるプログラムを作成できるようになります。 / u s r / s h a r e / d o c / p y t h o n - v ir t in s t - < v e r s io n - n u m b e r > — v ir t - in s t a ll コマンドに関するド キュメントです。仮想マシン内で Fedo ra や Red Hat Enterprise Linux 関連のディストリビューションのインス トールを開始する場合に役立ちます。 / u s r / s h a r e / d o c / v ir t - m a n a g e r - < v e r s io n - n u m b e r > — 仮想マシンマネージャーに関するドキュメ ントです。仮想マシンの管理に使用できるグラフィカルなツールについて解説されています。 414 付 録 C 改 訂 履 歴 付録C 改訂履歴 改訂 1 -4 4 8 . 2 翻訳完成 T ue Ma r 1 20 16 Ke n z o M o rig u ch i 改訂 1 -4 4 8 . 1 T ue Ma r 1 20 16 翻訳ファイルを XML ソースバージョン 1-4 4 8 と同期 Ke n z o M o rig u ch i 改訂 1 -4 4 8 6 .7 GA リリース候補の準備 L a u ra No vich T u e Ju l 1 4 2 0 1 5 改訂 1 -4 4 7 Fri Ju l 1 0 2 0 1 5 QE フィードバックを NPIV セクションに適用 (BZ#758 6 54 )。 D a yle P a rk e r 改訂 1 -4 4 6 バージョンをアップ。 Jiri He rrma n n T u e Ju l 7 2 0 1 5 改訂 1 -4 4 5 M o n Ju n 2 9 2 0 1 5 QE フィードバックを NPIV セクションに適用 (BZ#758 6 54 )。 D a yle P a rk e r 改訂 1 -4 4 4 Fri Ju n 2 6 2 0 1 5 QEMU-img 情報を変更 (BZ10 9296 1)。 L a u ra No vich 改訂 1 -4 4 3 M o n Ju n 2 2 2 0 1 5 NFS 移行例を変更 (BZ118 70 29)。 L a u ra No vich 改訂 1 -4 4 2 S un Ma y 31 20 15 NFS 移行例の指示を変更 (BZ118 70 29)。 L a u ra No vich 改訂 1 -4 4 1 S un Ma y 31 20 15 NFS 移行例の指示を変更 (BZ118 70 29)。 L a u ra No vich 改訂 1 -4 4 0 S un Ma y 31 20 15 L a u ra No vich 仮想ネットワークの章にブリッジモードとボンディングモードを追加 (BZ10 9714 3)。 qemu-img マップを修正 (BZ10 334 28 )。 改訂 1 -4 3 9 We d M a y 2 0 2 0 1 5 QEMU ゲストエージェントの Windo ws セクションでマイナーな編集。 D a yle P a rk e r 改訂 1 -4 3 8 Mo n Ma y 18 20 15 L a u ra No vich 仮想ネットワークの章にブリッジモードとボンディングモードを追加 (BZ10 9714 3)。 改訂 1 -4 3 7 Fri M a y 1 5 2 0 1 5 D a yle P a rk e r SME フィードバックを NPIV セクションに適用し、同セクションのフォーマットとコンテンツを編集 (BZ#758 6 54 )。 改訂 1 -4 3 5 修正 BZ#1171755。 Mo n Ma y 11 20 15 D a yle P a rk e r 改訂 1 -4 3 4 S un Ma y 10 20 15 L a u ra No vich 415 仮 想 化 管 理 ガイ ド qemu-img マップのエントリーを修正 (BZ10 334 28 )。 QA フィードバックにしたがい fallo cate() オプションを修正 (BZ10 926 91)。 改訂 1 -4 3 3 We d M a y 6 2 0 1 5 ボンディングモードについての情報を追加 (BZ10 9714 3)。 L a u ra No vich 改訂 1 -4 3 2 マイナー修正 BZ#1171755。 D a yle P a rk e r Mo n Ma y 4 20 15 改訂 1 -4 3 1 Fri M a y 1 2 0 1 5 NPIV コンテンツを追加 (BZ#758 6 54 )。 D a yle P a rk e r 改訂 1 -4 3 0 編集 L a u ra No vich T h u Ap r 3 0 2 0 1 5 改訂 1 -4 2 8 M o n Ap r 2 7 2 0 1 5 D a yle P a rk e r Windo ws コンテンツ用の QEMU ゲストエージェントを編集 (BZ#1116 222)。 Hyper-V 回避策に関する注意を追加 (BZ#116 136 7)。 改訂 1 -4 2 7 qemu-img マップの指示を修正。 T u e Ap r 2 1 2 0 1 5 L a u ra No vich 改訂 1 -4 2 6 T u e Ap r 2 1 2 0 1 5 「トラブルシューティング」の章の DR を修正 (BZ114 0 4 39)。 L a u ra No vich 改訂 1 -4 2 5 S u n Ap r 1 9 2 0 1 5 KVM オーバーコミットを修正 (BZ 11750 20 )。 L a u ra No vich 改訂 1 -4 2 4 再同期 Fri Ap r 1 7 2 0 1 5 L a u ra No vich 改訂 1 -4 2 3 再同期 Fri Ap r 1 7 2 0 1 5 L a u ra No vich 改訂 1 -4 2 2 Virsh の章を修正。 T h u Ap r 1 6 2 0 1 5 L a u ra No vich 改訂 1 -4 2 1 Virsh の章を修正。 T h u Ap r 1 6 2 0 1 5 L a u ra No vich 改訂 1 -4 2 0 Virsh の章を修正して明確化。 T h u Ap r 1 6 2 0 1 5 L a u ra No vich 改訂 1 -4 1 9 T h u rs Ap r 1 6 2 0 1 5 virt-sysprep のセクションを編集 (BZ#10 93270 ) D a yle P a rk e r 改訂 1 -4 1 8 We d Ap r 1 5 2 0 1 5 virt-sysprep のセクションを編集 (BZ#10 93270 ) デバイス制限の決定についての注意点を追加 (BZ#110 396 1)。 D a yle P a rk e r 改訂 1 -4 1 7 D a yle P a rk e r 416 M o n Ap r 1 3 2 0 1 5 付 録 C 改 訂 履 歴 Windo ws コンテンツ用の QEMU ゲストエージェントを編集 (BZ#120 6 0 19)。 改訂 1 -4 1 6 S u n Ap r 1 2 2 0 1 5 qemu-img マップを修正 (BZ10 334 28 )。 L a u ra No vich 改訂 1 -4 1 5 S u n Ap r 1 2 2 0 1 5 qemu-img を修正 (BZ 10 9296 1)。 L a u ra No vich 改訂 1 -4 1 4 Fri Ap r 1 0 2 0 1 5 D a yle P a rk e r Windo ws コンテンツ用の QEMU ゲストエージェントを編集 (BZ#120 6 0 19)。 改訂 1 -4 1 3 We d Ap r 8 2 0 1 5 virt-sysprep のセクションを追加 (BZ#10 93270 ) D a yle P a rk e r 改訂 1 -4 1 2 T u e s Ap r 7 2 0 1 5 D a yle P a rk e r Windo ws コンテンツ用の QEMU ゲストエージェントを追加編集 (BZ#120 6 0 19 および BZ#1116 222)。 改訂 1 -4 1 1 We d Ap r 1 2 0 1 5 ガイド全体を編集 ( BZ#1171755)。 D a yle P a rk e r 改訂 1 -4 1 0 qemu-img マップを修正。 L a u ra No vich S un Ma r 29 20 15 改訂 1 -4 0 9 We d M a r 2 5 2 0 1 5 D a yle P a rk e r ガイド全体を編集 ( BZ#1171755)。 SME フィードバックに基づき QEMU ゲストエージェントのセクションを編集 (BZ#120 1152)。 改訂 1 -4 0 8 Mo n Ma r 23 20 15 翻訳で見つかったガイド全体を編集 ( BZ#1171755)。 D a yle P a rk e r 改訂 1 -4 0 7 T ue Ma r 17 20 15 D a yle P a rk e r ドキュメントのスイート一覧を更新し、非推奨のハイパーバイザー導入ガイドを除外。 改訂 1 -4 0 6 T ue Ma r 17 20 15 QEMU ゲストエージェントのセクションを編集 (BZ#120 1152)。 D a yle P a rk e r 改訂 1 -4 0 5 qemu-kvm ホワイトリストを復元。 S co t t Ra d va n Fri Ja n 1 9 2 0 1 5 改訂 1 -4 0 2 T hu D e c 18 20 14 RHEL 6 スプラッシュページに so rt_o rder を実装するため更新 L a u ra No vich 改訂 1 -4 0 1 Mo n D e c 1 20 14 qemu-kvm ホワイトリストの章を削除。 新規非同期 6 .6 バージョンをポータルに公開。 S co t t Ra d va n 改訂 1 -4 0 0 Mo n D e c 1 20 14 S co t t Ra d va n フィクスを追加 (BZ#116 754 3)。ssh-add コマンドは、入力に秘密鍵を使用すること。 改訂 1 -3 9 9 T u e No v 1 1 2 0 1 4 L a u ra No vich 417 仮 想 化 管 理 ガイ ド qemu-kvm ホワイトリストを修正。 フィクスを追加 (BZ#11596 13)。 改訂 1 -3 9 8 T u e No v 1 1 2 0 1 4 qemu-kvm ホワイトリストを修正。 フィクスを追加 (BZ#11596 13)。 L a u ra No vich 改訂 1 -3 9 7 We d No v 5 2 0 1 4 Libvirt デバイスの警告を追加 (BZ#11596 13)。 L a u ra No vich 改訂 1 -3 9 4 6 .6 GA リリース向けバージョン。 D a yle P a rk e r T h u rs O ct 9 2 0 1 4 改訂 1 -3 9 2 T h u rs O ct 9 2 0 1 4 D a yle P a rk e r BZ#970 4 35: 手順 13.7.1. virsh を使用した GlusterFS ストレージプールの作成のステップ 3 の表現を QE フィードバック用に明確化。 virtio -rng セクションの誤字の修正。 BZ#10 6 728 2: 若干の表現の変更。 改訂 1 -3 8 8 T h u rs O ct 9 2 0 1 4 D a yle P a rk e r BZ#10 20 4 8 9: 「スナップショットの作成」セクションの virsh スナップショットコマンドについての Red Hat Enterprise Linux KVM がサポートしていない引数を削除。 改訂 1 -3 8 7 T h u rs O ct 9 2 0 1 4 誤字の修正 (BZ#970 4 35)。 古い改訂履歴のエントリーを削除。 D a yle P a rk e r 改訂 1 -3 8 5 We d O ct 8 2 0 1 4 D a yle P a rk e r BZ#9770 8 5: 15.13.6 . 仮想 CPU カウントの設定の --guest についての注記を追加し、誤字を修正。 418
© Copyright 2024 ExpyDoc