Next Previous Contents

9. Host file access

ホスト(UMLを走らせているPC)にあるファイルにアクセスしたいなら、仮想ネットワーク越しでNFSでマウントするとか、scp/rcpでファイルをコピーするとかの手段があります。しかし、それ以外の方法もあります。 hostfs を使えば、ホストのファイルシステムをUMLから直接マウントすることも可能です。

(訳注:この仕様があるので、hostfs ありでコンパイルされているUMLは、ルート権限さえあればホスト側のファイルを(ユーザ権限ではあるが)自由にアクセスできる可能性がある。UMLの内部ならヤバいソフトでも安心して実行できる、というのは単なるでたらめではないが、それは、すくなくとも、「正しく設定すれば」の話である。利便性と安全性の二律背反はここでも存在する。サーカムのような類のウイルスとの疑いがあるアプリを走らせるような、特殊な状況の際には、hostfs を無効にしてコンパイルしたUMLを使うと同時に、UMLの中においてもユーザ権限で走らせるべき。)

9.1 Using hostfs

まず、UMLにhostfs があるかどうかをチェックします。

cat /proc/filesystems
ここで、hostfs が出てこないなら、hostfs を有効にしてUMLを再コンパイルするか、hostfs がモジュールになっていれば、それをinsmodしてください。

UMLに hostfs があれば、あとは、マウントするだけです。

mount none /mnt/host -t hostfs
これは、ホスト側Linuxの / を 仮想マシンの /mnt/host にマウントします。

さすがに、/ をマウントするのはまずいでしょ、とかおもうなら、こんな風。

mount none /mnt/home -t hostfs -o /home
これは、ホスト側Linuxの /home を 仮想マシンの /mnt/home にマウントします。

9.2 hostfs as the root filesystem

(訳注:この章はいまいち意味がわからなかったので、大幅に意訳してます。今後改良予定ですが、急ぐ方は原文を参照のこと。そうでなくても、実行前にかならず 原文 を参照してください。ルート権限でディスクをいじっている部分があるので、ちょっとした操作ミス、解釈の誤りなどでシステムの崩壊を招く恐れがあります。)

ホストPCからは単なる馬鹿でかいファイルとしてしか認識できない例のディスクイメージではなく、ホストLinuxからみて、普通のディレクトリ構造と認識できる存在をブート用ディスクイメージとしてUMLに認識させることもできます。

まず、そんなディレクトリ構想をホストLinuxに作ります。簡単な方法としては、ループバックデバイスを使い、ホストLinuxに対し、UMLのディスクイメージを普通のファイルシステムとしてマウントします。こんな風に。これにより、./uml_root_dir 以下に、root_fs の内容がマウントされます。

# mount root_fs uml_root_dir -o loop
次に、(UML内部のLinuxカーネルが認識する)/etc/fstab を、以下のように変えます。普通は、UML内部のLinuxカーネルは、/ が ext2 とかになってるとおもいますが、そこを hostfs にします。
/dev/ubd/0       /        hostfs      defaults          1   1
(UMLはホストLinuxにおけるあなたの権限で走っているので、それでアクセスできるように)ループバックしてマウントした、UMLにとってのルートファイルシステムになるはずのホストLinuxのなかのディレクトリツリーの所有権を適切に変更します。たとえば、Jeff Dike にとってはこんな風。
ループバックでマウントしたディレクトリイメージのマウントポイントが
カレントディレクトリだとして、
# find . -uid 0 -exec chown jdike {} \;
なお、hostfs は、UML 内部のLinuxカーネルに対し、スタティックに組み込まれている必要性があります。insmod でモジュールとして起動後にダイナミックに組み込むのはまずいです。(訳注:理由は、起動時に認識しないとまずいファイルシステムを認識するのは、起動後にダイナミックに組み込むモジュールになるので・・・)。
あとは、ホストLinux側でループバックでマウントしたディレクトリを指定してUMLを起動します。
ubd0=/path/to/uml/root/directory
あとは普通にやってください。

9.3 Building hostfs

UMLを自分でコンパイルする場合で、hostfs を有効にした形でコンパイルするには、二つの方法があります。今お使いのUMLで hostfs が有効でない場合などにご参考まで。


Next Previous Contents