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
, df
o /proc/mounts
. Si vuelvo a conectar el dispositivo, se detecta, por ejemplo, /dev/sdb1
mientras el /dev/sda1
dispositivo 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.service
en su sistema, duplíquelo /etc/systemd/system/systemd-udevd.service
y reemplace el contenido enMountFlags=shared