rbindマウント後の再帰的なumount


13

chrootに入るとき、誰かが探しに行くときにすべてが正しい場所にあることを保証するために、-bindの代わりに-rbindを使用して/ sysと/ devをマウントする必要がある場合があります。

問題はマウント解除時に発生します。

単純なumountは常に失敗します。子がマウントされている状態でも使用されているようです。

$ 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)

おそらく、解決策は怠zyなマウントを実行することですが、これは私にとってかなり危険なようです。

私が見逃したこれを行うより良い方法はありますか?


1
よろしいということです/mnt/chroot/sys/kernel/securityその時点で実装されていますか?の出力はgrep /sys/kernel/security /proc/mounts何ですか?umountに引数をリストする必要はありません/etc/mtab。渡すと-n、ファイルはまったく開きません。
ジル 'SO-悪であるのをやめる' 14年

umountのxargsを作成するためのgrepコマンドをよく見ると、/ proc /
mounts

回答:


11

これは私のために正しく働いた-https : //unix.stackexchange.com/a/264488/4319

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

2つの別々のコマンドとして二つの第一のコマンドを持っていることが重要であった:結合していない--rbind--make-rslave、マウントの1回の呼び出しで。

なし--make-rslaveでは、動作は望ましくありませんでした(成功しませんでした):

  • umount -l 元の古いマウントポイントにも影響します
  • そしてumount -R、元の古いマウントポイントの下で忙しい(オープン)ファイルによって影響を受けるであろう。(非常に予期しない...)

このマウントの最近のバージョンで修正されている場合は知っているが、それが結合するために完全に大丈夫だしない--rbind--make-rslave呼び出しを同じにマウントしますmount --rbind --make-rslave /dev /mnt/test
ハビ・メリノ

1
2つの引数を組み合わせることができますが、代わりに非再帰的なマウントを行います。したがって、実際には意図したとおりに機能しません。
ミラル

10

この答えは、Gillesの功績です。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

メルシー、ジル!


1
しようとmount --rbind / /mnt && umount -n /mnt/dev/shm(またはpts)、私は得るumount: /mnt/dev/shm: target is busyumount -l /mntシステムを強制終了します(例えば、sdinがstdinがttyではないと言って失敗します)。これは、インストール済みのFedoraシステム上にあります。:私はそれが私の昔の問題だと思うunix.stackexchange.com/questions/269695/...
sourcejedi

3

以来のutil-linuxのv2.23(25年04月2013)umountコマンドをサポート-R, --recursiveオプションを選択します。

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

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


0

ありがとう。スクリプトでこれを使用して、chrootツリー全体をアンマウントします(必ず$ MNTを設定してください)。

for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
    umount $dir 2> /dev/null
    (( $? )) && umount -n $dir
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.