Извлеченное USB-устройство хранения данных все еще подключено

Извлеченное USB-устройство хранения данных все еще подключено

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

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

решение1

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

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

Что вызовет событие отключения и затем отмонтирует файловую систему из этого скрипта.

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

Связанный контент