Ostrzegaj użytkownika, gdy nieoczekiwanie odłączy pendrive USB

13

Użytkownicy wielokrotnie skarżą się na utratę danych na dyskach USB po ich odłączeniu bez odłączania. Na naszych komputerach uruchamiamy Ubuntu 14.04 LTS. Automatyczne montowanie jest włączone.

Ponieważ mam dość pamiętania ich o bezpiecznym usunięciu przed odłączeniem, chcę, aby Ubuntu wyświetlał alert za każdym razem, gdy podłączony dysk USB zostanie odłączony.

Myślałem o dodaniu udevreguły, która działa notify-sendprzy usuwaniu na wypadek, gdyby dysk był nadal zamontowany. Jak mogę ustalić, czy napęd USB został zamontowany po usunięciu?

RenWal
źródło
Więc powiedziałeś, że automatyczne montowanie jest włączone, ale potem pytasz „jak mogę ustalić, czy zamontowana została zasada usb, która uruchomiła udev?” . Teraz myślę, że masz na myśli, że musisz określić stan USB po usunięciu - zamontowany lub odmontowany. Osobiście podchodzę do tego za pomocą skryptu startowego, który jedynie monitoruje czas montowania / odmontowywania USB za pomocą df -a | grep 'sd[b-z]' polecenia. Reguła udev może wysłać datę usunięcia do jakiegoś dziennika. Jeśli czas usunięcia podany przez skrypt jest zgodny z regułą udev (przynajmniej w minutach, z sekundami może wystąpić opóźnienie), to usb nie został zamontowany.
Sergiy Kolodyazhnyy
2
Oto także skrypt, który napisałem na potrzeby logowania. paste.ubuntu.com/11748191 Jeśli podoba ci się ten pomysł, mógłbym opublikować to jako odpowiedź, ale osobiście uważam te dwa komentarze za sugestię, a nie za działające rozwiązanie
Sergiy Kolodyazhnyy

Odpowiedzi:

4

Lubię podejście Fabby'ego, ale dobrze jest uczyć ludzi o tym złym nawyku (nie pracują cały czas na kontrolowanych maszynach). Jest to podobne do funkcji OSX, jak opisano tutaj .

Istnieje niewielka różnica, którą możesz wykorzystać, aby dowiedzieć się, czy można to bezpiecznie usunąć:

  • Zmienna udev ID_PART_TABLE_TYPE=dosjest ustawiona dla sdxwęzła dysku ( NIE węzła partycjisdxY ) przy niebezpiecznym usuwaniu.

  • Jeśli nie jest ustawiony w bezpieczny sposób usuń

Zauważono, monitorując zdarzenia udev:

udevadm monitor -u --environment
  • Bezpieczne usunięcie

    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
    
  • Niebezpieczne usunięcie

    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. Utwórz regułę udev (zmień 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. Załaduj ponownie reguły

    sudo udevadm control --reload-rules
    

Innym sposobem jest użycie skryptu (python), który łączy się z udisksDBUS. Zawiera wszystkie potrzebne informacje na temat montowania / odmontowywania partycji, podłączania / odłączania dysków ...

Odniesienia / Źródło: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example

user.dz
źródło
1
Chociaż podoba mi się podejście Fabby'ego, tego właśnie szukałem! Teraz planuję napisać skrypt w języku Python, który nasłuchuje udiskszdarzeń w DBUS, a następnie obsługuje wyświetlanie okien dialogowych komunikatów itp.
RenWal,
8

Niestety, jest to coś, co Micro $ często ma rację: usunięcie USB ... I będziesz mieć ten problem, dopóki:

  1. Wyłącz automatyczne mocowanie

    Jeśli użytkownicy będą musieli montować ręcznie, łatwiej będzie je wyszkolić również w zakresie demontażu.

  2. Utwórz regułę udev, która wyłącza wszystkie buforowanie na dyskach USB ...

Fabby
źródło
2
+1 - wyłączenie pamięci podręcznej pomaga zmniejszyć problem. Dopóki nie odłączą urządzenia podczas zapisu (co zwykle powoduje, że dioda LED urządzenia zapala się / miga), wszystko będzie w porządku.
Nathan Osman
Ok, to by działało dobrze po stronie komputera. Ale czy wyłączenie pamięci podręcznej lub ustawienie flagi synchronizacji na górze nie powoduje wypalenia układu pamięci flash? Te dyski USB są VFAT i słyszałem, że Linux jest dość agresywny w aktualizowaniu tabel FAT - zużywając sektory zawierające tabelę.
RenWal
Kupuję tylko patyki SLC i nie mam jeszcze na sobie żadnej
kości,
@RenWal: Ponieważ nigdy nie zaakceptowałeś odpowiedzi na tej stronie: nie zapomnij kliknąć szarego ☑ po lewej stronie tego tekstu, co oznacza ,
Fabby
1
FWIW, Windows domyślnie wyłącza pamięć podręczną zapisu na dyskach USB w formacie FAT, z tych samych powodów, więc wydaje mi się, że każde dodatkowe zużycie dysku było postrzegane jako mniejsze zło.
thomasrutter