仮想サーバの構築はとても簡単で、次のようなvserverコマンドを使って行う。
vserver vserver1 build -n vserver1 --hostname vserver1.mydomain.com --interface eth0:192.168.1.31/24 -m debootstrap -- -d dapper
このコマンドによって、vserver1.mydomain.comというホスト名の仮想サーバ“vserver1”と、CIDR表記のプレフィックス長が24の192.168.1ネットワーク内のIPアドレス192.168.1.31を持つ仮想イーサネットデバイスが構築される。
この仮想サーバのパッケージデータベースとファイルシステムを配置するのが、debootstrapというコマンド(同名のパッケージから取得)で、Ubuntu Dapper Drakeのパッケージリポジトリからパッケージを取得するために引数dapperが渡されている。
この手順の実行には数々のパッケージのダウンロードとインストールが必要になるので少し時間が掛かるが、本格的なディストリビューションのインストールを行う場合ほどではない。というのもdebootstrapは必要最小限のパッケージのダウンロードとインストールしか行わないからだ。そのほかのパッケージは後でインストールできる。ただしdebootstrapが使えるのは、Debianベースのシステムのブートストラップ処理だけである。
Debianベースでないディストリビューションをインストールする場合は、別のツールを使う必要がある。RPMベースのディストリビューションのインストールには、rpmstrapを検討するとよい。
続いて以下のコマンドにより、新しく構築した仮想サーバを起動し、そのサーバに入る。
vserver vserver1 start
vserver vserver1 enter
これで仮想サーバ内に入ることができたわけだが(exitと入力すれば出られる)、最低限のパッケージしかインストールされていないことに注意が必要だ。topと入力すれば、この仮想サーバではプロセスがほとんど実行されていないことが分かる。またdfを実行すれば、ルートファイルシステムが仮想ブロックデバイスに用意されていることが分かる。この仮想ブロックデバイスの名は、おそらく/dev/hdv1になっているはずだ。
この時点で非常に基本的な仮想サーバが出来上がっているので、たいていは追加パッケージのインストールやシステムへのユーザー登録を行うことになるだろう。その方法は、ホストシステムで一般的に用いられているものと少しも変わらない。以下に、簡単だが役に立つ例を示す。
apt-get install ssh
adduser marc
これで仮想マシンに対してsshを実行できるようになる。Apache、BIND、SMTPといったサーバのインストールも同様に簡単で、それぞれのサーバプロセスでApache、BIND、SMTPなど種類の異なる仮想サーバを立てることもできる。
実際、これはセキュリティの点から見て非常に優れたアイデアである。というのは、こうしたプロセスのそれぞれを分離し、ほかのプロセスに悪影響がおよぶのを回避できるからだ(とはいえ、プロセスはすべて同じ物理的ハードウェア上で実行されているので、停電やハードウェア障害が起これば1つ残らず消滅してしまう)。
あるいは、DebianとGentooのそれぞれの最新バージョンを試したい場合も、両者を別々の仮想マシン上にインストールすることができる。さらに、実験版のすべてのソフトウェアやアップグレードを別々の仮想マシンにインストールすることも可能で、そうすればシステムを破壊してしまう危険がなくなる。このように仮想化には数多くの用途がある。
Linux-VServerによって、わずかなオーバーヘッドで優れたパフォーマンスを生み出し、それでいてセキュリティ性と障害分離性の向上も果たせるライトウェイトな仮想マシンを生成することができる。ハードウェアへの追加投資なしに、セキュアでフォールトトレラントなシステムを生成するのに利用できるわけだ。また、Linux-VServerを使えば、わざわざもう1台マシンを用意したりシステムの破壊について心配したりすることなく、ほかの開発環境の再現や最新のLinuxディストリビューションの試用も行える。
仮想化といえば、ハードウェアのレベルに至るまで仮想マシンをエミュレートし、エミュレートされたハードウェア上でオペレーティングシステム(OS)を実行する完全仮想化(full virtualization)のソフトウェアを思い浮かべる人が多い。これは、VMware、QEMU、Bochsといった著名なソフトウェアパッケージが採用しているアプローチだ。
完全仮想化のソフトウェアでは、プロセッサ、BIOS、入出力デバイスなど、広い範囲にわたってハードウェアの仮想化を行っている。このアプローチの利点の1つは、どんなOSでも仮想化ハードウェア上で実行できることにある。欠点は、ハードウェアのレイヤまでエミュレートしているためにオーバーヘッドが大きく、多くの場合、ゲストおよびホストの両OSで著しくパフォーマンスが低下することだ。
近年、準仮想化(paravirtualization)と呼ばれるもう1つの仮想化手法に多くの関心が集まっている。準仮想化の場合、仮想マシンは仮想マシンモニタ(VMM)すなわちハイパーバイザ内で実行され、そのサービスへのアクセスはソフトウェアインタフェースを介して行われる。
準仮想化というのは、実はIBMのメインフレームの時代にまで遡る古い手法だが、最近、Parallels WorkstationやXenなどのソフトウェアを搭載したパーソナルコンピュータへの適用が増えつつある。しかし、準仮想化にも欠点はあり、ハイパーバイザをサポートするためのゲスト OSの修正か、IntelやAMDの比較的新しいプロセッサによる特別なハードウェアのサポートのどちらかが通常必要になる。
ただし、ゲストOSをLinuxに限定すれば、より抽象度の高いレベルで仮想化を行い、パフォーマンスの向上をもたらすUser-mode Linux(UML)やLinux-VServerのような選択肢も考えられる。UMLを利用すれば、Linuxカーネルを(EmacsやVimのようなほかのLinuxのプロセスと同じように)ユーザープロセスとして「ホスト」側のLinux OSの内部で実行することができる。
この興味深いテクノロジーには、UMLが有効な最近のカーネルから任意のものを選んで実行できる、ゲストシステムのカーネルを従来よりも容易にデバッグできる、といった数々の利点がある。
Copyright © ITmedia, Inc. All Rights Reserved.