だから私は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
てマウントネームスペース伝播を非公開に強制します。