저는 busybox를 기반으로 임베디드 Linux 시스템을 개발 중입니다. 때로는 게시물에서 물리적으로 제거된 USB 장치가 mount
, df
또는 에 계속 표시되는 경우가 있습니다 /proc/mounts
. 장치를 다시 연결하면 장치 /dev/sdb1
가 마운트된 동안 감지됩니다./dev/sda1
제거된 장치에서 파일 핸들을 열면 이 문제가 발생할 수 있다는 점을 이해합니다. 하지만 이 동작을 유발할 수 있는 다른 조건이 있습니까?
답변1
다음과 같은 udev 규칙을 작성할 수 있습니다.
ACTION=="remove", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="umount-removed.sh"
이렇게 하면 연결 해제 이벤트가 트리거되고 이 스크립트에서 파일 시스템이 마운트 해제됩니다.
MNT_POINT=`df | grep "$DEVNAME" | awk '{print $6}'`
#If still mounted
if [ ! -z "$MNT_POINT" ];then
logger -i -t usbrm -p daemon.notice "The device $DEVNAME is still mounted"
#Umount fs
umount $DEVNAME
if [ $? -eq 0 ];then
logger -i -t usbrm -p daemon.notice "$DEVNAME successfully unmounted from $MNT_POINT"
else
logger -i -t usbrm -p daemon.err "Impossible to umount $DEVNAME from $MNT_POINT. Aborting..."
fi
fi
/var/daemon.log에서 로그를 볼 수 있습니다.
편집하다:정확히 udev가 특정 네임스페이스를 사용한다는 점을 잊어버리십시오. 따라서 마운트 지점을 사용자 공간과 공유하도록 구성해야 합니다.
이렇게 하려면 systemd-udevd.service
시스템에서 파일을 찾아 복사하고 /etc/systemd/system/systemd-udevd.service
내용을 다음으로 바꾸십시오.MountFlags=shared