저는 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