umount -l
기능을 사용한 후 최대한 안전하게 기본 장치를 제거하고 싶습니다 .
umount --force
파일 시스템은 새 프로세스에 표시되지 않기 때문에 마운트 해제 할 수 없습니다 .lsof
파일 시스템이 새 프로세스에 보이지 않게 되므로 열린 파일의 정확한 목록을 사용할 수 없습니다 .lsof
before를 사용하면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를 사용하여 모든 프로세스를 먼저 필터링할 수 있습니다 /
. 오탐(false positive)이 있을 수 있지만 매우 빠릅니다. 다음 단계(반드시 완료될 필요는 없지만 더 빠를 수 있음)는 /proc/$PID/fd
표시된 경로에 없는 파일이 있는지 모든 프로세스를 확인하는 것입니다.
완전하지만 빠른 검사는 아닐 수도 있습니다 stat
. /proc/$PID/fd
원래 장치가 표시됩니다. 따라서 제거하기 전에 값을 확인하여 작업을 더 쉽게 할 수 있습니다.