rbind マウント後の再帰マウント解除

rbind マウント後の再帰マウント解除

ルートを変更するときに、誰かが表示したときにすべてが正しい場所にあることを確認するために、-bindの代わりに-rbindを使用して/sysと/devをマウントする必要があります。

問題は削除したときに発生します。

単純な削除は常に失敗します。子供が設置されている場合は使用しているようです。

$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
    (In some cases useful info about processes that use
     the device is found by lsof(8) or fuser(1))

別の考えられる解決策は、次のようにprocにマウントをリストし、それぞれをアンマウントすることです。

$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount

ただし、再帰マウントが実際にmtabに登録されていないため、これも失敗します。

/mnt/chroot/sys/kernel/security is not mounted (according to mtab)

おそらく、回避策は遅延除去を実行することですが、これは私にとって非常に危険なようです。

私が逃したよりも良い方法はありますか?

答え1

この感じがぴったりだと思います -https://unix.stackexchange.com/a/264488/4319:

mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test

最初の2つのコマンドを2つの別々のコマンドとして扱うことが重要です。単一のマウント呼び出しで--rbind2 つのコマンドを結合しないでください。--make-rslave

そうでない場合、--make-rslaveその動作は望ましくないことです(そして成功しなかったものです)。

  • umount -l元の以前のマウントポイントにも影響します。
  • umount -R元の以前のマウントポイントで使用されている(開かれた)ファイルの影響を受けます。 (だから予想外…)

答え2

クレジットは次のとおりですザイルズこの答えに対して、Gillesは質問コメントで「-n」スイッチがmtabを無視し、/ proc / mountsにリストされているすべてをアンマウントすることを指摘しました。

マンページから:

-n     Unmount without writing in /etc/mtab.

したがって、--rbindを削除する方法に関する私の質問に答えるために、以下は私に役立つ完全なコマンドです。

grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount -n

ありがとう、ザイルズ!

答え3

~からユーティリティLinux v2.23(2013年4月25日)このumountコマンドはこの-R, --recursiveオプションをサポートします。

マニュアルページは次のとおりです。

指定された各ディレクトリを繰り返し削除します。何らかの理由でチェーンのアンマウント操作が失敗すると、各ディレクトリの再帰が停止します。マウントポイント間の関係は項目によって決まります /proc/self/mountinfo 。ファイルシステムはマウントポイントパスとして指定する必要があり、デバイス名(またはUUID)による再帰的なマウント解除はサポートされていません。

マウントされたファイルシステムの場合、苦情がある場合は、アンマウントする前にそのファイルシステムを実行する--rbind必要があるかもしれません。mount --make-rslaveumountdevice is busy

答え4

ありがとうございます。私はスクリプト全体でchroot-treeをアンマウントするためにこれを使います:($ MNTが適切に設定されていることを確認してください)

for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
    umount $dir 2> /dev/null
    (( $? )) && umount -n $dir
done

関連情報