O dispositivo de armazenamento USB removido ainda está montado

2

Estou trabalhando em um sistema Linux embutido baseado no busybox. Às vezes, um dispositivo USB fisicamente removido da postagem ainda é exibido em mount , df ou /proc/mounts . Se eu reconectar o dispositivo, ele será detectado como, por exemplo, /dev/sdb1 enquanto o dispositivo /dev/sda1 ainda estiver montado.

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

    
por Noir 07.05.2014 / 16:24

1 resposta

1

Você pode escrever uma regra do udev como

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

O qual acionará o evento de desconexão e depois 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 log em /var/daemon.log. Espero que ajude;)

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

Para fazer isso, localize o arquivo systemd-udevd.service em seu sistema e duplique-o para /etc/systemd/system/systemd-udevd.service e substitua o conteúdo por MountFlags=shared

    
por 18.08.2017 / 16:16