已移除的 USB 存储设备仍然安装

已移除的 USB 存储设备仍然安装

我正在开发一个基于busybox的嵌入式Linux系统。有时,从帖子中物理移除的 USB 设备仍会显示在mountdf或 中/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

相关内容