我正在开发一个基于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