2011-06-06 4 views
3

シェアード(CLONE_NEWNS)とそれに続くシステム( "bash")を実行する小さなCプログラムを書きました。unshare CLONE_NEWNSの振る舞いを理解する

マニュアルページには、プロセスには独自の名前空間が必要です。そこで、シェルでunmount/cgroupを試しました(cgroupは元のマシンにマウントされています)。

マシンのシェルでマウントを実行すると、/ cgroupもアンマウントされます。私はここに何かを逃していますか私はCLONE_NEWNSがメインシステムに影響を与えずにプロセスからファイルシステムをアンマウントさせることだと考えました。

答えて

5

(これ以外にも、プログラムを書く必要はありません。unshare(1)ユーティリティを使用することができます)。それ

が唯一の新しい名前空間でファイルシステムをアンマウントし、それを元に搭載されたままである - 問題はmountが現在マウントされたファイルシステムのリストを生成するために/etc/mtabを使用することであり、それは、そのことができます普通のファイルです新しい名前空間のmountコマンドによって更新されます。これは、/etc/mtabが本当に起こっているものと同期しなくなることを意味します(の1つで、/etc/mtabですが、マウントの名前空間は2つです)。

代わりに、実際に現在の名前空間にマウントされているものを確認するために/proc/mountsを確認してください。

+0

優秀な説明を使用して、/秘密にする必要があると思います – BSchlinker

0

私は、Fedora 19 3.10

共有を解除--mount/binに/ bashの

DF -h /ブーツ/

ファイルシステムサイズ使用さAVAIL使用%が

にマウントされたカーネルを共有解除してテストを行いました

は/ dev/SDA1 485M 238M 222M 52%/ブート

アンマウント/ブート/

第2のシェル上で

grepのブートの/ proc /マウント

エコー$?

多分私はその結果が、何か間違ったことは、私はFedoraのではなく、Ubuntuの上

0

共有解除作品を期待したもので、あなただけのCLONE_NEWNSをしようとすると同時に、それが動作することはできません直接呼び出しと全く同じではありません。

クローン(child_main、child_stack + STACK_SIZE、 CLONE_NEWUTS | CLONE_NEWNS | SIGCHLD、NULL);

この呼び出しは、名前空間の操作は、この現象は、親がcgroup内(すなわち、/)、「共有」としてマークされている/のマウント共有サブツリーのものである、

1

ほぼ確実に別の名前空間から見ることができますマウントは、他の名前空間のピア(他のインスタンス)にマウントイベントとアンマウントイベントを伝播します。これを確認するには、/ proc/self/mountinfoの/ mountの状態を調べます。この動作はsystemdによって確立されている可能性が高く、これはカーネルのデフォルトの "private"マウントを "shared"に戻します。「プライベート」動作を取得するには、

mount --make-private/

も参照してくださいhttps://bbs.archlinux.org/viewtopic.php?id=194388ともhttps://lwn.net/Articles/689856/