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

13

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

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

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

RenWal
источник
Итак, вы сказали, что авто-монтирование включено, но затем вы спрашиваете, «как я могу определить, было ли смонтировано правило usb, которое запускало udev?» , Теперь, я думаю, вы имеете в виду, что вам нужно определить состояние USB при удалении - подключен или отключен. Я лично подхожу к этому с помощью сценария запуска, который просто контролирует время монтирования / размонтирования usb с помощью df -a | grep 'sd[b-z]' команды. Правило udev может отправлять дату удаления в какой-либо журнал. Если время удаления, указанное сценарием, совпадает с временем удаления правила udev (хотя бы по минутам, с секундами, которые могут быть задержкой), то usb не был подключен.
Сергей Колодяжный
2
Вот также сценарий, который я написал для целей ведения журнала. paste.ubuntu.com/11748191 Если вам понравилась эта идея, я мог бы опубликовать ее как ответ, но лично я считаю эти два комментария скорее предложением, чем рабочим решением
Сергей Колодяжный

Ответы:

4

Мне нравится подход Фабби, но хорошо учить людей этой вредной привычке (они не все время работают на управляемых машинах). Это похоже на функцию 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), который подключается к udisksDBUS. В нем есть вся необходимая информация о подключении / отключении раздела, подключении / отключении дисков ...

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

user.dz
источник
1
Хотя мне нравится подход Фабби, это то, что я искал! Сейчас я планирую написать скрипт на python, который прослушивает udisksсобытия в DBUS, а затем обрабатывает отображение диалоговых окон сообщений и т. Д.
RenWal
8

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

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

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

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

Fabby
источник
2
+1 - отключение кеша помогает уменьшить проблему. Пока они не отключают устройство во время записи (что обычно приводит к тому, что светодиод на устройстве загорается / мигает), все будет в порядке.
Натан Осман
Хорошо, это будет хорошо работать на стороне компьютера. Но разве отключение кеша или установка флага синхронизации при монтировании довольно быстро сжигают флеш-чип? Все эти USB-накопители VFAT, и я слышал, что Linux довольно агрессивно обновляет таблицы FAT - изнашивая секторы, содержащие таблицу.
RenWal
Я покупаю только SLC- флешки и у меня еще не было
кубиков
@RenWal: Поскольку вы никогда не принимали ответ на этом сайте: не забудьте нажать на серый ☑ слева от этого текста, что означает Да, этот ответ действителен!
Fabby
1
FWIW, Windows по умолчанию отключает кэш записи на USB-накопителях в формате FAT по тем же причинам, поэтому я предполагаю, что любой дополнительный износ накопителя был воспринят как меньшее зло.
Томасруттер