Убрано USB-устройство хранения данных все еще установлено

Я работаю над встроенной системой Linux на основе busybox. Иногда USB-устройство, которое физически удаляется из сообщения, все еще отображается в mount , df или /proc/mounts . Если я снова подключу устройство, он будет обнаружен, например, как /dev/sdb1 пока устройство /dev/sda1 все еще установлено.

Я знаю, что открытые дескрипторы файлов на удаленных устройствах могут вызвать это, но есть ли какие-либо другие условия, которые могут вызвать это поведение?

Вы можете написать правило udev, например

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

Это вызовет событие unplug, а затем удалит файловую систему из этого скрипта

 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