Linux-VServer
開発元 | Herbert Pötzl (コミュニティプロジェクト) |
---|---|
リポジトリ | |
対応OS | Linux |
プラットフォーム | x86, x64, SPARC/64, PA-RISC, S390/x, MIPS/64, ARM, PowerPC/64 |
種別 | OSレベルの仮想化 |
ライセンス | GNU GPL v.2 |
公式サイト | Linux-VServer.org |
Linux-VServer は、LinuxカーネルにOSレベルの仮想化機能を追加することで実装されたバーチャル・プライベート・サーバ。オープンソースソフトウェアとして開発・配布されており、GNU General Public License (GPL) でライセンスされている。
概要
[編集]プロジェクトの創始者は Jacques Gélinas。現在はオーストラリアの Herbert Pötzl が保守しており、負荷分散の実装を行っている Linux Virtual Server プロジェクトとは無関係である。
Linux-VServer はjail機構であり、コンピュータシステムの各種リソース(ファイルシステム、CPU時間、ネットワークアドレス、メモリなど)をセキュアに分割でき、プロセスは自身の存在するパーティション以外に対してDoS攻撃の影響を与えることができない。
各パーティションを「セキュリティコンテキスト」と呼び、その中で動作する仮想化されたシステムを「バーチャル・プライベート・サーバ」と呼ぶ。セキュリティコンテキストに下降するための chroot のようなユーティリティが用意されている。バーチャル・プライベート・サーバのブートは、単に新しいセキュリティコンテキスト内で init を起動すればよい。同様にシャットダウンするには、そのセキュリティコンテキスト内の全プロセスを停止すればよい。各コンテキストでLinuxディストリビューションを修正なしでブート可能であり、Debian や Fedora Core を並行動作させることができる。
バーチャル・プライベート・サーバは一般にWebホスティングサービスに利用され、顧客アカウントの分離、リソースのプーリング、潜在的セキュリティ違反の封じ込めなどに有効である。インストールにあたって領域を節約するため、各バーチャル・サーバのファイルシステムは「テンプレート」ファイルシステムのコピーオンライト型ハードリンクのツリーとして構築される。そのハードリンクはファイルシステムの特殊な属性付きであり、書き込み時にセキュアかつ透過的にファイルの実際のコピーに置換される。
同様の仮想化機構
[編集]OSレベルの仮想化技術の他の実装としては、OpenVZ、Parallels Virtuozzo Containers、FreeBSD jail 機構、Solaris Containers、FreeVPS(Linux-VServer から初期にフォーク)などがある。
利点
[編集]- バーチャル・サーバ間でシステムコールインタフェースは共通であり、エミュレータのオーバーヘッドは生じない。
- 各バーチャル・サーバにディスクイメージを持つ必要はなく、ファイルシステムを共有できる(ただし、コピーオンライト型ハードリンク経由)。これにより、システムのバックアップが容易になり、バーチャル・サーバ間でディスク空き領域をプールできる。
- バーチャル・サーバ内のプロセスは、ホストシステムの通常のプロセスと同じである。システム全体をエミュレートする仮想化よりもメモリやI/Oが効率化される。
- バーチャル・サーバ内のプロセスは、ホストシステムのスケジューラでスケジューリングされ、どのプロセスもSMPシステム上で並行動作可能である。システム全体のエミュレーションでは必ずしも簡単ではない。
- ネットワークは仮想化というよりも分離されているだけであり、パケット送受信に余分なオーバーヘッドが生じない。
欠点
[編集]- ホストカーネルにパッチをあてる必要がある。
- 全バーチャル・サーバが同じカーネルを共有するため、バグやセキュリティホールも共有する可能性がある。
- クラスタリングやプロセスマイグレーション機能がない。ホストカーネルおよびそのハードウェアで障害が発生すると、全バーチャル・サーバがダウンする危険性がある。
- ネットワークは仮想化ではなく分離されているだけである。このため、バーチャル・サーバが独自にルーティング設定したり、ファイアーウォールを設定したりできない。
- 一部のシステムコール(特にハードウェア関連、例えばリアルタイムクロック関連)、/proc や /sys ファイルシステムの一部は仮想化されていない。
- ディスクI/Oの帯域幅をバーチャル・サーバ毎に割り当てることができない。