"blockdev --setro" 이후에도 장치에 쓸 수 있습니다.

"blockdev --setro" 이후에도 장치에 쓸 수 있습니다.

umount -l기능을 사용한 후 최대한 안전하게 기본 장치를 제거하고 싶습니다 .

  • umount --force파일 시스템은 새 프로세스에 표시되지 않기 때문에 마운트 해제 할 수 없습니다 .
  • lsof파일 시스템이 새 프로세스에 보이지 않게 되므로 열린 파일의 정확한 목록을 사용할 수 없습니다 .
  • lsofbefore를 사용하면 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를 사용하여 모든 프로세스를 먼저 필터링할 수 있습니다 /. 오탐(false positive)이 있을 수 있지만 매우 빠릅니다. 다음 단계(반드시 완료될 필요는 없지만 더 빠를 수 있음)는 /proc/$PID/fd표시된 경로에 없는 파일이 있는지 모든 프로세스를 확인하는 것입니다.

완전하지만 빠른 검사는 아닐 수도 있습니다 stat. /proc/$PID/fd원래 장치가 표시됩니다. 따라서 제거하기 전에 값을 확인하여 작업을 더 쉽게 할 수 있습니다.

관련 정보