避けるumount -l
これを書いている時点で、投票数の多い回答では、を使用することを推奨してumount -lいます。
umount -l危険であるか、せいぜい危険です。要約すれば:
- 実際にデバイスをアンマウントするのではなく、名前空間からファイルシステムを削除するだけです。開いているファイルへの書き込みは続行できます。
- btrfsファイルシステムの破損を引き起こす可能性があります
回避策/代替
の便利な動作は、絶対umount -lパス名によるアクセスからファイルシステムを非表示にすることです。これにより、マウスポイントの使用を最小限に抑えることができます。
これと同じ動作は、マウント解除するディレクトリに対する権限000を持つ空のディレクトリをマウントすることで実現できます。
次に、マウントポイントの下にあるファイル名への新しいアクセスは、権限がゼロの新しくオーバーレイされたディレクトリにヒットします。これにより、マウント解除への新しいブロッカーが防止されます。
最初にしようremount,ro
ロックを解除する主なアンマウントの成果は、読み取り専用の再マウントです。バッジを取得すると、次のremount,roことがわかります。
- 保留中のデータはすべてディスクに書き込まれています
- 今後の書き込み試行はすべて失敗します
- デバイスを物理的に切断する必要がある場合、データは一貫した状態にあります。
mount -o remount,ro /dev/device 書き込み用に開いているファイルがある場合は失敗することが保証されているので、まっすぐに試してください。あなたは幸運な気分かもしれません、パンク!
運が悪い場合は、書き込み用に開いているファイルがあるプロセスのみに焦点を当ててください。
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
その後、デバイスを読み取り専用で再マウントし、一貫した状態を確保できるはずです。
この時点で読み取り専用で再マウントできない場合は、ここにリストされている他の考えられる原因のいくつかを調査してください。
読み取り専用の再マウントアチーブメントのロックが解除されました☑</p>
おめでとうございます。マウントポイント上のデータは一貫性があり、将来の書き込みから保護されています。
なぜfuser劣るのかlsof
fuser早めに使ってみませんか?そうですね、 デバイスではなくディレクトリfuserを操作することもできます。そのため、ファイルの名前空間からマウントポイントを削除して引き続き使用する場合は、次のことを行う必要があります。fuser
mount -o bind /media/hdd /mntマウントポイントを別の場所に一時的に複製します
- 元のマウントポイントを非表示にして、名前空間をブロックします。
方法は次のとおりです。
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
次に、次のようになります。
- 元の名前空間が非表示になっています(これ以上ファイルを開くことができず、問題が悪化することはありません)
- 実行する(デバイスではなく)重複したバインドマウントディレクトリ
fuser。
これはより複雑です[1]が、以下を使用できます。
fuser -vmMkiw <mountpoint>
これは、書き込み用に開いているファイルでプロセスを強制終了するようにインタラクティブに要求します。もちろん、マウントポイントをまったく隠すことなくこれを行うことはできますが、上記の模倣umount -lは危険を伴うことはありません。
スイッチは-w書き込みプロセスに制限されており、-iインタラクティブであるため、読み取り専用の再マウント後、急いでいる場合は、次を使用できます。
fuser -vmMk <mountpoint>
マウントポイントの下で開いているファイルを使用して、残りのすべてのプロセスを強制終了します。
うまくいけば、この時点で、デバイスをアンマウントできます。(モードディレクトリを一番上にumountバインドマウントした場合は、マウントポイントで2回実行する必要があります。)000
または使用:
fuser -vmMki <mountpoint>
アンマウントをブロックしている残りの読み取り専用プロセスをインタラクティブに強制終了します。
くそー、私はまだ得ますtarget is busy!
アンマウントブロッカーは、開いているファイルだけではありません。他の原因とその解決策については、こことここを参照してください。
デバイスを完全にアンマウントするのを妨げている潜んでいるグレムリンを持っている場合でも、少なくともファイルシステムは一貫した状態になっています。
次に、を使用lsof +f -- /dev/deviceして、ファイルシステムを含むデバイスでファイルが開いているすべてのプロセスを一覧表示し、それらを強制終了できます。
[1]使用するのはそれほど複雑ではありませんmount --moveが、mount --make-private /parent-mount-pointそれには影響があります。基本的に、マウントポイントがファイルシステムの下にマウントされている場合は、/これを回避する必要があります。