Повідомте користувача, коли він небезпечно відключить USB-накопичувач


13

Користувачі неодноразово скаржаться на втрачені дані на USB-накопичувачах після відключення їх від мережі, не відключаючи їх. Ми запускаємо Ubuntu 14.04 LTS на своїх машинах. Автоматичний монтаж увімкнено.

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

Я подумав додати udevправило, яке працює notify-sendна видаленні, якщо диск все-таки встановлений. Як я можу визначити, чи був USB привід встановлений після видалення?


Отже, ви сказали, що ввімкнено функцію автоматичного монтажу, але тоді ви запитуєте "як я можу визначити, чи встановлено usb, який запускає правило udev?" . Тепер я думаю, ви маєте на увазі, що вам потрібно визначити стан USB після видалення, встановленого чи відключеного. Я особисто підходив до цього за допомогою сценарію запуску, який просто відстежує час монтажу / відключення usb за допомогою df -a | grep 'sd[b-z]' команди. Правило udev може надсилати дату видалення в якийсь журнал. Якщо час видалення, заданий сценарієм, відповідає правилу udev (принаймні хвилини, з секундами може бути затримка), тоді usb wasnt змонтований.
Сергій Колодяжний

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


1
Хоча мені подобається підхід Фаббі, саме це я шукав! Зараз я планую написати сценарій python, який слухає udisksподії в DBUS, а потім обробляє показ діалогів повідомлень тощо.
RenWal

8

На жаль, це справді Micro $ часто насправді правильно: видалення USB ... І ви продовжуватимете цю проблему, поки не:

  1. Вимкнення автоматичного монтажу

    Якщо користувачам доведеться монтувати вручну, їх буде легше навчити також демонтувати.

  2. Створіть правило udev, яке вимикає всі кешування на USB-дисках ...


2
+1 - відключення кешу допомагає зменшити проблему. Поки вони не відключать пристрій під час запису (що зазвичай призводить до того, що світлодіод на пристрої загоряється / спалахує), вони будуть добре.
Натан Осман

Гаразд, це буде добре працювати на комп'ютері. Але чи не відключення кешу чи встановлення прапор синхронізації на горінні спалити мікросхему досить швидко? Ці USB-накопичувачі - це VFAT, і я чув, що Linux досить агресивно налаштовує таблиці FAT - зношує сектори, що містять таблицю.
RenWal

Я купую лише палички SLC і ще не вмирав на мене, незалежно від файлової системи ... (а у мене є лише 2)
Fabby

@RenWal: Оскільки ви ніколи не приймали відповідь на цьому веб-сайті: не забудьте натиснути сіру ☑ зліва від цього тексту, що означає , що ця відповідь є дійсною!
Фабі

1
FWIW, Windows відключає кеш запису на USB-накопичувачі у форматі FAT, з тих же причин, тому я гадаю, що будь-який додатковий знос на накопичувачі сприймався як менший зло.
thomasrutter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.