
だから私は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-private
mount
私が見逃している部分は何であり、実際にプライベートに設定するにはどうすればよいですか?
答え1
util-linux
2.27より古いシステムベースのディストリビューションを使用している場合は、これらの直感的ではない動作が表示されます。CLONE_NEWNS
たとえば、伝播フラグはshared
カーネル設定によって異なります。この設定は正常ですが、private
systemdはそれを変更します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-linux
2.27以前のDebian 9バージョンでは、デイブのソリューション私には効果がありません。しかしこれはうまくいきます:
mount --make-rprivate -o remount /
接頭辞があることに注意してくださいr
。再帰的。