バインドマウントがマウントネームスペースの外側に表示されるのはなぜですか?

バインドマウントがマウントネームスペースの外側に表示されるのはなぜですか?

だから私はLinuxのマウントネームスペースがどのように機能するのか理解しようとしています。だから私は少し実験をして2つの端末を開き、次のコマンドを実行しました。

ターミナル1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

ターミナル2

root@goliath:~# ls b
foo.txt

このマウントが第2ターミナルで見えるのはなぜですか?マウントネームスペースの一部ではないので、ここではディレクトリが空であるとマークしたいと思います。また、オプションを渡して-o shared=no試してみましたが、同じ結果が得られました。--make-privatemount

私が見逃している部分は何であり、実際にプライベートに設定するにはどうすればよいですか?

答え1

util-linux2.27より古いシステムベースのディストリビューションを使用している場合は、これらの直感的ではない動作が表示されます。CLONE_NEWNSたとえば、伝播フラグはsharedカーネル設定によって異なります。この設定は正常ですが、privatesystemdはそれを変更しますshared。 2.27からutil-linuxパッチが作成されましたunshare基本伝播動作として使用されるコマンドの基本動作をprivateより直感的に変更しました。

解決策

バージョン2.27より前のsystemdシステムを使用している場合は、util-linuxルートファイルシステムを再マウントする必要があります。後ろに実行unshareコマンド:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

バージョン 2.27 以降の systemd システムを使用している場合は、util-linux再インストールせずに質問に提供した例でそのまま動作する必要があります。そうでない場合は、コマンドを--propagation private渡しunshareてマウントネームスペース伝播を非公開に強制します。

答え2

Ubuntu(15.04と14.04)では機能しません。 Fedoraとよく合います。そしてFedora。 --make-private が必要かどうかを確認することもできます。

猫/proc/self/mountinfo grep共有|

共有されている場合は、別の名前空間でマウントを表示できることを意味します。その後、システム関連の問題があります。 --make-privateを使って動作させることができます。

答え3

util-linux2.27以前のDebian 9バージョンでは、デイブのソリューション私には効果がありません。しかしこれはうまくいきます:

mount --make-rprivate -o remount /

接頭辞があることに注意してくださいr再帰的

関連情報