lguestの使用法
| 準仮想化 |
|---|
| 準仮想化(paravirtualization)は完全な仮想化よりも高速なパフォーマンスを発揮できるテクノロジであるが、これはゲストOSに自分が仮想化環境にて実行されていることを自覚させることにより、それを踏まえたシステムリソース要求が行われるようになるためである。これに対して完全な仮想化を行うハイパーバイザの場合、ゲストOSの行うI/Oオペレーションなどの特権的な呼び出しを常に監視して、ゲストOS上で必要なシミュレーションを実施しなければならない。 |
lguestは準仮想化ハイパーバイザであるため、そこで実行するゲストカーネルに対しては仮想化環境上で実行されていることを認識させるための変更を施して、システムリソースへの無許可アクセスを行わせないようにしておく必要がある。
lguestの実行時には、ホストおよびゲスト双方のカーネル設定において下記のオプションを有効化しておかなくてはならない。いずれにせよ、ホストとゲスト側で同じカーネルを使用させることで、設定の変更は大幅に簡単化されている。
- CONFIG_HIGHMEM64G=n――lguestはハイメモリのサポートで問題を起こす可能性があるため、この機能は無効化しておく方が無難である
- CONFIG_TUN=y/m――TUN/TAPデバイスドライバのサポート。“y”とするとカーネル中に作成され、“m”とするとローダブルモジュールとして作成される
- CONFIG_EXPERIMENTAL=y――開発中ないし未完成のコードおよびドライバに関するプロンプト。これを“y”にすると、ユーザに対して以降のオプション確認が行われるようになる
- CONFIG_PARAVIRT=y――カーネル中の準仮想化コードは開発中とのステータス付けがされているが、lguestを使用する際には必要となる
- CONFIG_lguest=y/m――Linuxハイパーバイザのサンプルコードをカーネルないしローダブルモジュールとして作成させる。これによりlguestのコアであるlgモジュールが得られる
- CONFIG_lguest_GUEST=y――lguestによるゲストのサポート
| XenおよびKVMに対するlguestの相違点 |
|---|
|
現行リリースのLinuxカーネルにはXenおよびKVMというハイパーバイザも取り込まれている。このうちKVMの実態は、Intel(VT:Virtualization Technology)およびAMD(AMD-V:AMD Virtualization)プロセッサで新規に実装されたハードウェア仮想化テクノロジにLinuxカーネルを対応させるためのパッチである。これは完全な仮想化に属するため、KVM上で使用するゲストOSについては事前の変更が不要であり、またLinux以外のゲストOSをホストインストレーション上で実行させることもできる。ただしVTないしAMD-V対応プロセッサを用いた仮想化を前提としているため、lguestとは異なりそれらに対応するハードウェアが必要となる。
一方のXenはlguestと同様の準仮想化モデルを採用しているため、ホスト上で実行させるゲストOSにはパッチを適用しなくてはならない。Xenはハードウェア上で直接動作する関係上、オペレーティングシステムの全インスタンスをゲストとしてロードするようになっているが、その中にはホストOSも含まれるため、パフォーマンスがある程度低下する場合がある。なお最近リリースされたXenでは、VTないしAMD-V対応の新型プロセッサ搭載マシンという制限付きで、ゲストを変更不要でロードできるようになっている。この意味においてXenは、準仮想化と完全な仮想化の双方をカバーした混成型のハイパーバイザであると言うこともできる。 |
設定変更後のカーネルについては再コンパイルしてから起動をさせるが、いずれかのカーネル設定オプションにて“y”ではなく“m”が選択してある場合は、「make modules_install」によるモジュールのインストールが必要となる。
ランチャプログラムのlguest.cは、Documentation/lguest/lguest.cのカーネルソースツリーに置かれているが、これはゲストカーネルのセットアップと設定に使用する。そのビルドにあたっては、当該ディレクトリにてmakeを実行すればいい。
lguestではブータブルCD/DVDからの起動は行えないため、X Window環境を含めたLinuxディストリビューション一式をインストールしておく必要がある。こうしたLinuxディストリビューションのインストールは、ハードドライブ上に別途確保したプライマリパーティションにて行う必要があるが、あるいはQEMUを使用していれば、仮想化環境にてこうしたディストリビューションの複数インスタンスをlguestに実行をさせることも可能となる。
ゲストカーネルを起動させるには、カーネルソースツリーのDocumentation/lguestにて下記のコマンドを実行する。
./lguest 64m ../../vmlinux --block=rootfile root=/dev/lgba
ここで64mにはゲストに割り当てるメモリ量を指定する。その次の../../vmlinuxは、ビルドディレクトリにあるカーネルイメージの指定部である。そしてrootfileは、ゲスト環境において/dev/lgbaとするファイルないしブロックデバイスであるが、具体的にはQEMUを用いてインストールしたイメージか、あるいはゲストのLinuxディストリビューションをインストールしたプライマリパーティションを指定すればいい。最後に残された/dev/lgbaはゲストカーネルに渡されるブートパラメータで、ここでは/dev/lgbaをルートデバイスとして使用させることを指定している。
すべてが問題なく進行すれば、ゲストOSへのログイン画面が表示されるはずである。
