読者です 読者をやめる 読者になる 読者になる

インフラSE日記

OSS、仮想化、金融工学、ゲーム、ときどきラーメン

chroot/jailは仮想化技術なのか

chrootとは

chrootは実行するプロセスのルートディレクトリを変更するシステムコールである。

chrootによって実行されたプロセスは、指定されたディレクトリを"/"だと思い込んで実行するため、それ以上の階層のディレクトリにアクセスすることはできない。これは"chroot監獄"などと呼ばれる。

chroot実行

実行環境:Ubuntu 12.04 64bit

実行コマンド:chroot /myroot ls

ディレクトリ構成

/myroot

 |_bin/bash

   |_bin/ls

   |_lib/ld-2.19.so

   |_lib64/ld-linux-x86-64.so.2

 

実行できませんでした。下記のエラーメッセージが出力された。

chroot: failed to run command ‘/bin/bash’: No such file or directory

 

今回の記事の目的はchrootを実行することじゃないから原因究明については

後ほど。でもこれなんかモヤモヤする。早く解消したい。

 

chroot/jailは仮想化技術なのか

前々からchroot/jailは仮想化じゃないと思ってました。その理由を述べます。

その前に、仮想化ってなんでしょうか。みんな当たり前に使っていて、実はよくわかっていないバズワードになっているのではと感じています。

wikipediaによると、「リソースの抽象化」って書いてますが、僕は仮想化とは「物理的な実体を論理的に一つのもの、または複数に見せかける」ことだと思っています。

そうすると、ハードディスクに書き込まれた0/1列を1つのファイルに見せるファイルシステムも仮想化ってことになるけど、これはどうなるんだろう…。OSもマルチプロセスも仮想化ってことになりますね。仮想化の技術の1つとしてマルチプロセス(物理CPUのリソースを分割するタイムシェアリング)があるのか…。卵が先か鶏が先かみたいな話になってしまいました。話を戻します。

 

chroot/jailは最上位のディレクトリをホストOSのルートディレクトリ以外のディレクトリにすることによって、ファイルシステムが複数あるように見せかけています。サンドボックスの役割を果たしています。

 

僕がchroot/jailを仮想化技術じゃないと思う理由は次の通り(というより、chroot/jailが仮想化技術と呼ばれていることへの個人的な不満になりますw)

1. カーネルが共通である

2. 囚人の見せかけられたファイルシステムは看守からアクセスできる

3. 囚人のプロセスは看守から見ることができる(killも可能)

 

 つまり、リソースの観点からは本当に閉じていないのです。

だから、chroot/jailを仮想化技術と呼ぶことに対して心理的な抵抗があります。

似たようなことを他の方もおっしゃっていました。ちなみにその方は「半仮想化」って読んでいましたね。なるほど!

 

ちなみに、抽象化は「対象から詳細を捨象し、考えるべき要素・概念を減らすこと」です。端的に言えば「こまけぇことはいいんだよ!」です。

 

最後に

他にも似たような技術にLXC/Dockerがありますね。ここらへんは全く知識がないので、ぜひ勉強していきたい分野です。

なんかただの愚痴?みたいになってしまいました。まだまだ未熟なのでさらに仮想化について学んでいきたいです。