Xenの準仮想化を徹底解説!直面する課題と実践的な回避策
始める前に、ひとつ警告しておきます。ハードウェア仮想化に対応していない環境でXenを使おうとすると、問題だらけの道のりになるということです。これは、仮想化拡張機能(VT-xやAMD-V)を備えた最新のCPUを持っていないのであれば、Xenに挑戦すべきではないという、ささやかなヒントです。VirtualBoxやVMware Playerといった手軽な個人向けソリューションとは大違いですが、そもそもXenはまったく異なる市場セグメントを狙った製品なのです。
とはいえ、筆者のように頑固で「チュートリアルで世界を征服したい」と考えるなら、Xenの準仮想化に挑戦しては挫折することになるでしょう。最大の障害となるのは、インストールを開始するためにXenゲストをCDやCDイメージ(ISO)から起動させることです。さらに、準仮想化のネットワーキング設定も一筋縄ではいきません。本記事では、これらの問題を少しでも簡単に乗り越える方法をお伝えします。あくまで「試みる」ということに重点を置いている点は、ご了承ください。
この記事では、どのような問題に直面するのか、その症状は何か、そして可能であればどう回避するのかを学びます。具体的には、準仮想化カーネルとinitrdファイルの扱い方、ゲスト向けブリッジネットワークアダプタの設定方法などを解説します。すべてが不確実性に包まれた内容ですが、それでは始めましょう。

なぜ準仮想化は面倒なのか
まずは公式の説明を見てみましょう。
準仮想化(Paravirtualization)とは、Xenが導入した効率的かつ軽量な仮想化技術であり、後に他の仮想化ソリューションにも採用されました。準仮想化はホストCPUの仮想化拡張機能を必要としません。ただし、準仮想化ゲストには、Xen上でネイティブに動作するよう移植された特別なカーネルが必要です。これにより、ゲストはハイパーバイザーを認識し、エミュレーションや仮想ハードウェアなしで効率的に動作できるのです。
ここで重要なのは「ゲストには特別なカーネルが必要」という部分です。これが何なのか、どうやって入手すればいいのか分からなければ、作業を進めるのに相当な苦労を強いられます。特に問題になるのは、システムインストールの第一歩であるライブCDイメージからの起動です。
CDまたはISOイメージからの起動問題
問題は、新しい仮想マシンのセットアップを試みた瞬間に始まります。これまで何度もやってきたように、まずはゲストをCDから起動したいところです。


しかし、ISOイメージを使用しても、次のような厄介なエラーが表示されてしまいます。


インターネットで検索すれば、これが可能か不可能かについて膨大な数の情報が見つかります。しかし、一行で解決することは決してなく、プラグアンドプレイでもありません。最も一般的な回避策は、イメージを展開してHTTPサーバーにアップロードする方法、あるいはイメージをループバックデバイスとしてマウントする方法です。
P.S. 記事末尾の「参考文献」セクションもぜひご覧ください。参照資料では、本記事のテストで使用したUbuntuが、追加の作業と修正なしには準仮想化ゲストとして起動できない理由が解説されています。
では、どうすればいいのか?
まず結論から言えば、提案されている方法の多くは簡単には実装できず、実際にはあまり機能しません。まずやるべきなのは、エラーメッセージをよく確認することです。「詳細(Details)」をクリックして、内容を確認してみましょう。役立つ情報が書かれているかもしれません。
すべてのケースを網羅することはできませんが、準仮想化の主な問題は、次の2つのコアな課題に集約されます。
- 課題1: ゲストシステムを起動するための適切なカーネルとinitrdが必要
- 課題2: 準仮想化のネットワークインターフェース設定が厄介
この2つの組み合わせこそが、CD/DVDからの仮想マシン起動を妨げる原因となっているのです。
カーネル&initrdイメージの設定
完全仮想化(HVM)の場合、話は簡単です。仮想マシンの設定ファイルで、builder、kernel、bootディレクティブを適切に指定するだけです。hvmloaderカーネルは常に利用可能なので、ここで困ることはありません。

ところが、準仮想化ゲスト用には、そのようなカーネルやinitrdが用意されていません。そのため、多少の工夫が必要になります。GUIウィザードで仮想マシンを作成した後に起動を試みると、CD-ROMエラーが発生します。しかし、このとき設定ファイルはすでにディスクに書き込まれています。
/etc/xen/vmディレクトリに移動し、設定ファイルをテキストエディタで開いてください。kernelとinitrdの行に注目しましょう。これらは/tmp配下の一時的なカーネル・initrdイメージを指しています。この2つのエントリを、恒久的なXenカーネルとinitrdファイルを指すように変更できますが、これらを別途ダウンロードしたり自前でビルドしたりする必要があるかもしれず、なかなか骨の折れる作業です。もうひとつの方法として、CDイメージの中身を確認し、Xen関連のファイルを探してコピーして使うこともできます。以下はそのサンプルです。

また、bootloaderディレクティブを適切な引数付きで使う方法もあります。ただし、仮想マシンごとに異なるパラメータが必要になるため、これも疲れるプロセスです。とはいえ、多くのLinuxゲストであれば、大きな但し書き付きで、以下の設定が機能するはずです。
bootloader = '/usr/lib/xen/boot/domUloader.py'
bootentry = '--entry-=xvda1:/boot/vmlinuz-xen,/boot/initrd-xen'
もちろん、ご自身の環境で使用している仮想デバイス名に合わせて、xvda1の部分を調整する必要があります。これはあくまで場当たり的なハックであり、必ずしも機能するとは限らない点にご注意ください。
準仮想化ネットワークインターフェースの問題
もうひとつの障害がvifディレクティブです。Xenの準仮想化ゲストは、あなたのネットワーク設定を受け付けない場合があります。その理由は、ネットワークアダプタをブリッジせずに直接使用できないからです。eth0やwlan0といったデバイスはそのまま使えず、xenbr0やbr0などのブリッジインターフェースを使用しなければなりません。コマンドラインから仮想マシンを起動しようとすると、エラーメッセージは非常に明確です。

暫定的な回避策としては、該当のディレクティブを削除するかコメントアウトすれば、仮想マシンは起動するはずです。繰り返しますが、他のチュートリアルでよくある断定的な「はい」とは異なり、ここでは苛立たしい「たぶん」の世界です。設定ファイル内のvif行をコメントアウトしてみてください。
#vif=['']
そして、起動に成功すれば、次はコンソール画面が現れます。


しかし、遅かれ早かれ、ネットワークの壁にぶつかることになります。
一般論として、ネットワークなしでも起動は可能かもしれません。しかしそれではほとんど実用になりません。ゲストには通信手段が必要だからです。そこで、アダプタをブリッジ構成にする必要があります。ただし、一部のネットワークインターフェース(特に無線LAN)はブリッジングをサポートしていない場合があるため、事前に確認しておきましょう。


繰り返しますが、これが役立つかどうかは保証の限りではありません。運が悪ければ、「今すぐ諦めたほうがいい」と告げるようなメッセージを目にすることもあるでしょう。あるいは、brctlユーティリティを使って手動でブリッジを作成するという手もあります。
ここまでのまとめ
内容がやや複雑になってきたので、ここまでのポイントを整理しましょう。準仮想化モードでXenを使う際のコアな課題は2つあります。
課題1:ゲスト用のブートローダー/カーネル
Xenの準仮想化モードでは、ゲスト用の適切なカーネルとinitrdファイルがディスク上のどこかに配置されている必要があります。これを解決するには、仮想マシンウィザードに一時的なエントリを作成させ、それを書き換える方法がありますが、これは一部のゲストOSでしか機能しません。たとえば、Red Hat 6ベースのScientific Linux 6は、この方式を明示的にサポートしているため、幸運なケースと言えます。あるいは、適切なXenカーネルとinitrdを手動で配置するか、最終手段としてbootloaderを直接指定する方法もあります。
課題2:ネットワークインターフェース
こちらは追加の手順が必要です。ネットワークブリッジを設定しなければなりません。有線・無線どちらのアダプタもブリッジ化できますが、ハードウェアによっては対応していない場合があります。
それでも、うまくいかないことはあります。おそらく、うまくいかないでしょう。結論として、Xenの準仮想化は苦痛を伴う作業であり、可能なら避けるのが賢明です。この方法で仮想マシンを動かす難易度を、他の仮想化ソリューションと比較すれば、答えは一目瞭然です。
参考文献
このガイドを読んだ後もまだ挑戦する勇気があるなら、ゲストをCD-ROMから起動するための解決策を扱った記事をいくつか読んでみるとよいでしょう。むしろ、「なぜそれが機能しないのか」「なぜ悩む価値がないのか」を理解するのに役立ちます。
まとめ
準仮想化モードでXenを扱うのは、決して快適な作業ではありません。ゲストシステムのpara-domU対応状況によっては、幸運にもCDやISOイメージから起動できるかもしれません。しかし、その場合でもブリッジネットワーキングが必要となり、これは必ずしも機能するとは限りません。特に無線アダプタでは顕著です。
さらに、ゲストシステム用のXenカーネルとinitrdファイルを探し回る羽目になり、最悪の場合は自前でカスタムビルドすることさえあり得ます。スキル・忍耐・管理コストのすべての面で、この負担はほとんどの人にとって大きすぎます。他の仮想化ソリューションなら、汗をかくことなく同じことが実現できるのですから。
本ガイドが、その霧を少しでも晴らす助けになれば幸いです。Webサーバー経由だろうと、ループバックデバイスだろうと、物理ドライブだろうと、本質は変わりません。特別なカーネルとinitrdイメージ、そしてブリッジネットワーキングが必要なのです。domU準仮想化に対応したゲストを持っていれば幸運ですが、そうでなければ多くの苦労が待っています。筆者からの率直なアドバイスは、「可能な限り避けて、代替ソリューションを選ぶべし」というものです。ただし、完全なハードウェア仮想化(HVM)モードでのXenは、実に魅力的な選択肢です。
それでは、良い仮想化ライフを!
-
VirtualBox 4レビュー:新機能と変更点を徹底解説
先日、Oracle(旧Sun、さらにその前はinnotek)が、同社の仮想化ソフトウェアの看板製品であるVirtualBoxの新バージョンをリリースしました。この洗練されていて多用途な製品は私のお気に入りの一つなので、早速試してみることにしました。ただし、懸念がないわけではありません。OpenSolarisやOpenOfficeなど、他の製品の扱いを見る限り、Oracleは必ずしもオープンソースに優しいとは言えないからです。ブランド名に「open」という言葉を使わないことが、生き残りの鍵なのかもしれませんね。 さておき、VirtualBoxは無料で使える優れたデスクトップ向け仮想化ソフトウェア
-
Product Creatorで独自のLinuxディストリビューションを作成する方法
今回は、再びKiwiについてお話しします。Kiwiはイメージングシステムであり、より大規模なopenSUSE Build Serviceの一部として組み込まれた、強力かつ多機能なイメージング/仮想化ソリューションです。自分のインストール環境、素のopenSUSE、あるいはその他のLinuxディストリビューションをベースに、あらゆる種類のOSイメージを作成できます。完全にカスタマイズ可能で、幅広いフォーマットで展開・配布できる点が魅力です。KiwiはXMLテンプレートを使用してこれらの処理を実現します。自動化やスクリプティングを好むパワーユーザー向けに設計されているためです。しかし、Kiwiには