umount -l
機能を使用した後、できるだけ安全に基本ユニットを取り外したいと思います。
umount --force
ファイルシステムは新しいプロセスに表示されないため、マウント解除できません。lsof
ファイルシステムが新しいプロセスに表示されなくなるため、開いているファイルの正確なリストは利用できません。lsof
before を使用すると、2 つの呼び出し間umount -l
で新しいファイルを開く競合状態が発生します。
解決策をテストしています。sync && blockdev --setro /dev/<device>
このマニュアルには次のようblockdev --setro
にしか記載されていません。
読み取り専用に設定してください。
マニュアルページに何かがありましたか?これは--setro
デバイスにファイルを生成するようです。
# mount /dev/loop0 mountpoint/
# blockdev --setro /dev/loop0
# echo test > mountpoint/f
# sync
# umount mountpoint
# mount /dev/loop0 mountpoint/
mount: /tmp/mountpoint: WARNING: device write-protected, mounted read-only.
# cat mountpoint/f
test
#
環境:
$ uname -a
Linux svelte 4.9.39-1-MANJARO #1 SMP PREEMPT Fri Jul 21 08:25:24 UTC 2017 x86_64 GNU/Linux
$ blockdev --version
blockdev from util-linux 2.30
答え1
blockdev --setro
私はこれが次のように動作すると思いますchmod
。それはオブジェクトの将来の開放にのみ影響します。
ただし、検出の問題に対する回避策を提供できます。
- この値は削除遅延後に
/proc/$PID/cwd
変わります。/
- 表示されたプロセスへの開かれたファイルへのパス
/proc/$PID/fd
はまで移動されます。/
たとえばに/mnt/tmp/output
なります/output
。
したがって、cmdを使用してすべてのプロセスを最初にフィルタリングできます/
。誤検知があるかもしれませんが、非常に高速です。次のステップ(必ずしも完了する必要はありませんが、より高速です)は、表示された/proc/$PID/fd
パスにないファイルがあるかどうかを確認することです。
完全だが迅速な検査ではないかもしれませんstat
。/proc/$PID/fd
元のデバイスが表示されます。したがって、削除する前に値を確認して作業を簡単にすることができます。