「blockdev --setro」以降もデバイスに書き込むことができます。

「blockdev --setro」以降もデバイスに書き込むことができます。

umount -l機能を使用した後、できるだけ安全に基本ユニットを取り外したいと思います。

  • umount --forceファイルシステムは新しいプロセスに表示されないため、マウント解除できません。
  • lsofファイルシステムが新しいプロセスに表示されなくなるため、開いているファイルの正確なリストは利用できません。
  • lsofbefore を使用すると、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。それはオブジェクトの将来の開放にのみ影響します。

ただし、検出の問題に対する回避策を提供できます。

  1. この値は削除遅延後に/proc/$PID/cwd変わります。/
  2. 表示されたプロセスへの開かれたファイルへのパス/proc/$PID/fdはまで移動されます。/たとえばに/mnt/tmp/outputなります/output

したがって、cmdを使用してすべてのプロセスを最初にフィルタリングできます/。誤検知があるかもしれませんが、非常に高速です。次のステップ(必ずしも完了する必要はありませんが、より高速です)は、表示された/proc/$PID/fdパスにないファイルがあるかどうかを確認することです。

完全だが迅速な検査ではないかもしれませんstat/proc/$PID/fd元のデバイスが表示されます。したがって、削除する前に値を確認して作業を簡単にすることができます。

関連情報