背景を説明しましょう。
メインバッシュから:
私たちは使用
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_NEWNS
bashもアンロードされていることを確認する必要があります。しかし、今問題が発生します。
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はこの共有マウントポイントを保持し続けるため、フォルダをtaregt
rmdirできません。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
放っておいてください。