SourceForge.JP: Open Source Software

LoginCreate AccountAdd BookmarkHelp

OpenSource Downloads

(7,965) Cabos
(3,068) 7-Zip
(2,483) Tera Term
(2,009) CrystalDiskInfo
(1,669) HandBrake Japanese Language Version
(1,252) CrystalDiskMark
(921) ffdshow
(669) Tween
(667) Boookends
10  (569) Amateras
11  (563) ギコナビ
12  (502) MergeDoc
13  (436) VirtualDubMod-jp
14  (422) えこでこツール
15  (375) SMPlayer
More >>

最近ブックマークされた記事

User Mode Linuxを使ってLinux内部でLinuxを実行する

2007年01月15日 10:08 1 2 3
  • スラッシュドットにタレコむ
  • あとで読む
User Mode Linux(UML)を使えば、ホスト側LinuxカーネルのユーザモードプロセスとしてLinuxカーネルを実行することが可能であり、1台の物理的ハードウェア上で複数の独立した仮想マシンを容易に実行できる。本稿ではこのUMLに注目し、1台のハードウェアで複数のLinuxを楽しむ方法やカーネルを簡単にデバッグできる方法を紹介する。

UMLでは、各仮想マシンがそれぞれに異なるソフトウェアを実行できる。ここで言うソフトウェアには、Linuxの各種ディストリビューションおよびカーネルも含まれる。つまり、互いに独立し、ホストマシンからも独立した複数の仮想マシンを徹底的にカスタマイズできるのだ。何より、このテクノロジを使って嬉しいのは、脆弱性を封じ込めることによるシステムのセキュア化、開発者や管理者に対する開発およびテスト用のプライベートなサンドボックスの提供、gdbなど使い慣れたユーザ空間ユーティリティによるカーネルの問題のデバッグが行えることである。

UMLを試してみる

UMLの新しいホームページにある「スターターガイド(Getting Started)」の手順に従えば、今すぐUMLを実行するのも難しくはない。この手順には、コンパイル済みUMLゲストカーネルと1.6GBのFedora Core 5ルートファイルシステム(80MBに圧縮されている)をダウンロードして実行する方法が示されている。

Linux-VServerXenのような他の仮想化ソフトウェアと異なり、ホストカーネル側には特別なサポートが一切必要ないので、簡単に作業を始められる。ただし後で説明するように、開発継続中の基本システム上で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ファイルの中身を取り出せる。こうすれば、複数のファイルを簡単にホストマシンから仮想マシンに転送することができる。

Marc-Abramowitz(2007年01月11日(木))
2007年07月01日 19:05 更新