Avvisare l'utente quando scollegano in modo non sicuro una chiavetta USB


13

Gli utenti si lamentano ripetutamente dei dati persi sulle chiavette USB dopo averli scollegati senza smontare. Eseguiamo Ubuntu 14.04 LTS sui nostri computer. Il montaggio automatico è abilitato.

Dato che sono stanco di ricordarli di aver fatto una rimozione sicura prima di scollegare, voglio far visualizzare a Ubuntu un avviso ogni volta che viene scollegata un'unità USB montata.

Ho pensato di aggiungere una udevregola che funziona notify-sendalla rimozione nel caso in cui l'unità sia ancora montata. Come posso determinare se l'unità USB è stata montata al momento della rimozione?


Quindi hai detto che l'auto-mount è abilitato, ma poi chiedi "come posso determinare se l'USB che ha attivato la regola udev è stato montato?" . Ora, penso che tu intenda che devi determinare lo stato dell'USB al momento della rimozione - montato o smontato. Personalmente mi avvicinerei a questo con uno script di avvio che controlla semplicemente il tempo di montaggio / smontaggio dell'USB con df -a | grep 'sd[b-z]' comando. Una regola udev può inviare la data di rimozione a un registro di qualche tipo. Se il tempo di rimozione fornito dallo script corrisponde a quello della regola udev (almeno per minuti, con i secondi potrebbe esserci un ritardo), allora USB non è stata montata.
Sergiy Kolodyazhnyy,

2
Ecco anche uno script che ho scritto ai fini della registrazione. paste.ubuntu.com/11748191 Se ti piace questa idea, potrei pubblicare questo come una risposta, ma personalmente considero questi due commenti un suggerimento, piuttosto che una soluzione funzionante
Sergiy Kolodyazhnyy,

Risposte:


4

Mi piace l'approccio di Fabby, ma è bene insegnare alla gente questa cattiva abitudine (non lavorano sempre su macchine controllate). Questo è simile a una funzionalità OSX, come descritto qui .

C'è una piccola differenza che puoi usare per sapere se era una rimozione sicura:

  • La variabile udev ID_PART_TABLE_TYPE=dosè impostata per il sdxnodo del disco ( NON nodo di partizionesdxY ) in rimozione non sicura.

  • Dove non è impostato in modalità di rimozione sicura

Notato dal monitoraggio degli eventi udev:

udevadm monitor -u --environment
  • Rimozione sicura

    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
    
  • Rimozione non sicura

    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. Crea una regola udev (cambia 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. Ricarica le regole

    sudo udevadm control --reload-rules
    

Un altro modo, è possibile utilizzare uno script (python) che si connette a udisksDBUS. Ha tutte le informazioni necessarie per montare / smontare la partizione, collegare / scollegare i dischi ...

Riferimento / Fonte: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example


1
Mentre mi piace l'approccio di Fabby, questo è quello che stavo cercando! Ora ho intenzione di scrivere uno script Python che ascolta gli udiskseventi su DBUS e quindi gestisce la visualizzazione delle finestre di dialogo dei messaggi, ecc.
RenWal

8

Sfortunatamente, questa è una cosa che Micro $ spesso ha avuto proprio ragione: rimozione USB ... E continuerai ad avere questo problema fino a quando:

  1. Disabilita il montaggio automatico

    Se gli utenti devono montare manualmente, sarà anche più facile addestrarli a smontare.

  2. Crea una regola udev che disattiva tutta la memorizzazione nella cache sui dischi USB ...


2
+1: la disabilitazione della cache consente di ridurre il problema. Finché non scollegano il dispositivo durante una scrittura (che di solito fa accendere / lampeggiare un LED sul dispositivo), andranno bene.
Nathan Osman,

Va bene, funzionerebbe bene sul lato computer. Ma disabilitare la cache o impostare il flag di sincronizzazione sul mount non brucia il flash chip piuttosto rapidamente? Quelle unità USB sono tutte VFAT e ho sentito che Linux è piuttosto aggressivo nell'aggiornamento delle tabelle FAT - logorando i settori che contengono la tabella.
RenWal,

Compro solo stick SLC e non ho ancora avuto nessun dado a prescindere dal file system ... (e ne ho solo 2)
Fabby,

@RenWal: poiché non hai mai accettato una risposta su questo sito: non dimenticare di fare clic sul grigio ☑ a sinistra di questo testo, il che significa Sì, questa risposta è valida!
Fabby,

1
FWIW, Windows disabilita la cache di scrittura su unità USB in formato FAT per impostazione predefinita, per gli stessi motivi, quindi immagino che qualsiasi ulteriore usura sull'unità sia stata vista come un male minore.
thomasrutter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.