Оповещение пользователя, когда он небезопасно отключить флэш-накопитель USB

Пользователи неоднократно жалуются на потерянные данные на флэш-накопителях USB после того, как они отключили их, не отключая их. Мы запускаем Ubuntu 14.04 LTS на наших машинах. Авто-монтаж включен.

Поскольку я устал вспоминать, как они выполняли безопасное удаление перед отключением, я хочу, чтобы Ubuntu отображал предупреждение при отключении подключенного USB-накопителя.

Я думал о добавлении udev правило, которое работает notify-send при снятии в случае, если диск все еще установлен. Как я могу определить, был ли USB-накопитель установлен после извлечения?

2 ответа

Решение

Мне нравится подход Фабби, но хорошо учить людей этой вредной привычке (они не все время работают на управляемых машинах). Это похоже на функцию OSX, как описано здесь.

Есть небольшая разница, что вы можете использовать его, чтобы узнать, было ли это безопасно удалить:

  • переменная udev ID_PART_TABLE_TYPE=dos установлен для sdx дисковый узел (НЕ разделенный узелsdxYв) небезопасно удалить.

  • Где это не установлено в безопасном удалении

Замечено отслеживанием событий udev:

udevadm monitor -u --environment
  • Безопасное удаление

    UDEV  [8292.380554] change   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb (block)
    ACTION=change
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb
    DEVTYPE=disk
    DISK_MEDIA_CHANGE=1
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PATH=pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=2989
    SUBSYSTEM=block                                                              
    TAGS=:systemd:                                                               
    USEC_INITIALIZED=554873
    
  • Небезопасное удаление

    UDEV  [8391.320280] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb (block)
    ACTION=remove
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb
    DEVTYPE=disk
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PART_TABLE_TYPE=dos
    ID_PATH=pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=3022
    SUBSYSTEM=block
    TAGS=:systemd:
    USEC_INITIALIZED=436355
    

  1. Создать правило udev (изменить useranme)

    $ sudo nano /etc/udev/rules.d/90-unsafe-remove-notify.rules
    
    ACTION=="remove", KERNEL=="sd?", ENV{ID_PART_TABLE_TYPE}!="", RUN+="/usr/bin/sudo -u username DISPLAY=:0 notify-send 'Unsafe Remove' '<b><i>Your long message</b></i>' -i /usr/share/icons/gnome/48x48/emotes/face-worried.png -t 10000"
    
  2. Перезагрузить правила

    sudo udevadm control --reload-rules
    

Другой способ, вы можете использовать скрипт (Python), который подключается к udisks DBUS. В нем есть вся необходимая информация о подключении / отключении раздела, подключении / отключении дисков...

Ссылка / Источник: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example

К сожалению, на самом деле Micro$oft вполне правильно понял: удаление USB... И эта проблема будет продолжаться до тех пор, пока вы:

  1. Отключить автонастройку

    Если пользователям нужно монтировать вручную, будет проще обучить их демонтировать.

  2. Создайте правило udev, которое отключает кэширование на USB-дисках...

Другие вопросы по тегам