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

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

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

おすすめ記事