Оповещение пользователя, когда он небезопасно отключить флэш-накопитель 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
Создать правило 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"
Перезагрузить правила
sudo udevadm control --reload-rules
Другой способ, вы можете использовать скрипт (Python), который подключается к udisks
DBUS. В нем есть вся необходимая информация о подключении / отключении раздела, подключении / отключении дисков...
Ссылка / Источник: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example
К сожалению, на самом деле Micro$oft вполне правильно понял: удаление USB... И эта проблема будет продолжаться до тех пор, пока вы:
Отключить автонастройку
Если пользователям нужно монтировать вручную, будет проще обучить их демонтировать.
Создайте правило udev, которое отключает кэширование на USB-дисках...