Linux サブプロセスと親プロセスの共有マウントポイントが一致しません。

Linux サブプロセスと親プロセスの共有マウントポイントが一致しません。

背景を説明しましょう。

メインバッシュから:

私たちは使用

mount --bind /tmp/source /tmp/target
mount --make-shared /tmp/target

この共有マウントポイントの作成target

それから私たちは

unshare -m /bin/bash

子供たちの乱交を始めましょう。これまではすべてが正常に見えます。

その後、デフォルトのbashからtarget正常に削除しました。

umount /tmp/target

このカーネル文書によると:共有サブツリーtargetサブスレッドが(unshare -m)を介して起動されても、子CLONE_NEWNSbashもアンロードされていることを確認する必要があります。しかし、今問題が発生します。

Child bashではcat /proc/self/mountinfo、発見がtargetまだ存在します!

78 48 8:3 /tmp/source /tmp/target rw,relatime shared:1 - ext4 /dev/disk/by-uuid/98708f21-a59d-4b80-a85c-27b78c22e316 rw,errors=remount-ro,data=ordered

これは上記の文書の動作と一致しません。メインバッシュでcatを実行して削除された/proc/self/mountinfoことを確認します。これで、子bashはこの共有マウントポイントを保持し続けるため、フォルダをtaregtrmdirできません。target

rm -rf /tmp/target
rm: cannot remove ‘/tmp/target’: Device or resource busy

Ubuntu 14.04とCentOS 6.6でテストしました。これはカーネルのバグですか?あるいは、Linuxの共有マウントを誤って理解しているようです。

ベストアンサー1

heコマンドの最新バージョンは、デフォルトでunshareマウント伝播をプライベートに設定します。ただ--propagation unchanged放っておいてください。

おすすめ記事