O dispositivo de armazenamento USB removido ainda está montado

O dispositivo de armazenamento USB removido ainda está montado

Estou trabalhando em um sistema Linux embarcado baseado no busybox. Às vezes, um dispositivo USB removido fisicamente da postagem ainda é exibido mountem dfou /proc/mounts. Se eu reconectar o dispositivo, ele será detectado, por exemplo, /dev/sdb1enquanto o /dev/sda1dispositivo ainda estiver montado.

Eu sei que identificadores de arquivos abertos em dispositivos removidos podem causar isso, mas há alguma outra condição que possa desencadear esse comportamento?

Responder1

Você poderia escrever uma regra do udev como

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

O que irá acionar o evento unplug e então desmontar o sistema de arquivos desse 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

Você pode ver o login em /var/daemon.log.

Editar:Esqueci de especificar que o udev usa um espaço de nome específico, então você precisa configurá-lo para compartilhar o ponto de montagem com o espaço do usuário.

Para fazer isso, localize o arquivo systemd-udevd.serviceem seu sistema, duplique-o /etc/systemd/system/systemd-udevd.servicee substitua o conteúdo porMountFlags=shared

informação relacionada