|
|
UMLでは、各仮想マシンがそれぞれに異なるソフトウェアを実行できる。ここで言うソフトウェアには、Linuxの各種ディストリビューションおよびカーネルも含まれる。つまり、互いに独立し、ホストマシンからも独立した複数の仮想マシンを徹底的にカスタマイズできるのだ。何より、このテクノロジを使って嬉しいのは、脆弱性を封じ込めることによるシステムのセキュア化、開発者や管理者に対する開発およびテスト用のプライベートなサンドボックスの提供、gdbなど使い慣れたユーザ空間ユーティリティによるカーネルの問題のデバッグが行えることである。
UMLを試してみる
UMLの新しいホームページにある「スターターガイド(Getting Started)」の手順に従えば、今すぐUMLを実行するのも難しくはない。この手順には、コンパイル済みUMLゲストカーネルと1.6GBのFedora Core 5ルートファイルシステム(80MBに圧縮されている)をダウンロードして実行する方法が示されている。
Linux-VServerやXenのような他の仮想化ソフトウェアと異なり、ホストカーネル側には特別なサポートが一切必要ないので、簡単に作業を始められる。ただし後で説明するように、開発継続中の基本システム上でUMLを実行する場合は、SKAS3パッチを用いてコンパイルしたホストカーネルが必要になることがある。「スターターガイド」の手順にある次のコマンドを見てみよう。
./linux-2.6.19-rc5 ubda=FedoraCore5-x86-root_fs mem=128M
UMLのゲストカーネル(linux-2.6.19-rc5)を、一般のプロセスをコマンドラインから実行するのと同じように実行していることがわかるだろう。ただし、UMLゲストカーネルはコマンドラインから実行できるように特別にコンパイルされていることに注意してほしい。通常のLinuxカーネルをコマンドラインから実行しようとしても動かないはずだ。UMLゲストカーネルのビルド方法については後で紹介する。
memパラメータは、仮想マシンに割り当てるRAMのサイズを単に指定するものだが、この値は物理マシンのメモリ総量を超えても構わない。ホストカーネルは、仮想マシンに対して仮想メモリを割り当てることができるためだ。
ただし、UMLカーネルはホスト上の通常のプロセスとして実行されるので、ホストマシンのアーキテクチャにおけるプロセスアドレス空間のサイズの制限を受ける。x86の場合は通常3GBである。
上記コマンドのubdaパラメータは仮想マシンの仮想ブロックデバイス/dev/udbaの作成に使うファイルの名前をUMLカーネルに与えるもので、このブロックデバイスが仮想マシンのルートファイルシステムになる。仮想ブロックデバイス/dev/udbaは仮想マシンの最初のブロックデバイスで、ホストLinuxシステムの物理ブロックデバイス/dev/hdaに相当する。
この場合は、/dev/ubdaがFedora Core 5のルートファイルシステムを含むファイルのデータを持つ仮想ブロックデバイスになるように設定している。つまり、UMLシステムはFedora Core 5のルートファイルシステムからブートされるわけだ。また、ブロックデバイスは複数の指定が可能であり、指定先はファイルシステムでなくてもよい。たとえば、/dev/ubdbというデバイスを作成してスワップパーティションにすることもできる。その場合はUMLカーネルを実行する前に、次のようにしてホストシステム上にファイルを作成しておく必要がある。
dd if=/dev/zero of=swap bs=1M count=128
このコマンドによってサイズ128MBのファイルができるので、UMLカーネルの起動時には次のようなubdbパラメータを使えばよい。
./linux-2.6.19-rc5 ubda=FedoraCore5-x86-root_fs ubdb=swap mem=128M
仮想マシンの起動時には、次のように2つのブロックデバイスの存在が確認できる。
[root@localhost ~]# ls -l /dev/ubd* brw-r----- 1 root disk 98, 0 Dec 14 02:19 /dev/ubda brw-r----- 1 root disk 98, 16 Dec 14 02:19 /dev/ubdb
/dev/ubdbをスワップ空間として設定し、その結果を確認するには、以下のコマンドを実行する。
[root@localhost ~]# mkswap /dev/ubdb Setting up swapspace version 1, size = 134213 kB [root@localhost ~]# swapon /dev/ubdb [root@localhost ~]# swapon -s Filename Type Size Used Priority /dev/ubdb partition 131064 0 -1
気が変わって/dev/ubdbをext3ファイルシステムとして使いたくなったら、次のようにすればよい。
[root@localhost ~]# swapoff /dev/ubdb [root@localhost ~]# mkfs.ext3 /dev/ubdb ... [root@localhost ~]# mkdir /mnt/ubdb [root@localhost ~]# mount /dev/ubdb /mnt/ubdb [root@localhost ~]# ls -l /mnt/ubdb total 12 drwx------ 2 root root 12288 Dec 14 02:22 lost+found
仮想ブロックデバイスは、ホストシステムの物理ブロックデバイスを参照することもできる。たとえば、UMLカーネル起動時にubdb=/dev/cdromと指定すれば、仮想マシンからホストシステムのCD-ROMドライブへのアクセスが可能になる。
また、ホストシステム上のtarファイルを仮想マシンのブロックデバイスとして指定することもでき、UMLカーネル起動時にubdb=hello.tarと指定しておけば、仮想マシン内でコマンドtar -xf /dev/udbdを実行することでこのtarファイルの中身を取り出せる。こうすれば、複数のファイルを簡単にホストマシンから仮想マシンに転送することができる。