El dispositivo de almacenamiento USB extraído todavía está montado

El dispositivo de almacenamiento USB extraído todavía está montado

Estoy trabajando en un sistema Linux integrado basado en Busybox. A veces, un dispositivo USB que se retira físicamente de la publicación todavía se muestra en mount, dfo /proc/mounts. Si vuelvo a conectar el dispositivo, se detecta, por ejemplo, /dev/sdb1mientras el /dev/sda1dispositivo todavía está montado.

Sé que los identificadores de archivos abiertos en dispositivos eliminados pueden causar esto, pero ¿existe alguna otra condición que pueda desencadenar este comportamiento?

Respuesta1

Podrías escribir una regla udev como

ACTION=="remove", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="umount-removed.sh"

Lo que activará el evento de desconexión y luego desmontará el sistema de archivos de ese script

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

Puede ver el inicio de sesión en /var/daemon.log.

Editar :Olvidé precisar que udev usa un espacio de nombres específico, por lo que debe configurarlo para compartir el punto de montaje con el espacio de usuario.

Para hacerlo, ubique el archivo systemd-udevd.serviceen su sistema, duplíquelo /etc/systemd/system/systemd-udevd.servicey reemplace el contenido enMountFlags=shared

información relacionada