Benachrichtigen Sie den Benutzer, wenn ein USB-Stick nicht sicher abgezogen wird

13

Benutzer beschweren sich wiederholt über verlorene Daten auf USB-Sticks, nachdem sie diese vom Computer getrennt und nicht abgemeldet haben. Wir führen Ubuntu 14.04 LTS auf unseren Maschinen aus. Die automatische Montage ist aktiviert.

Da ich es leid bin, mich daran zu erinnern, dass sie vor dem Trennen eine sichere Entfernung durchführen sollen, möchte ich Ubuntu eine Warnung anzeigen lassen, wenn ein angeschlossenes USB-Laufwerk abgetrennt wird.

Ich dachte daran, eine udevRegel hinzuzufügen , die notify-sendbeim Entfernen ausgeführt wird, falls das Laufwerk noch gemountet ist. Wie kann ich feststellen, ob das USB-Laufwerk beim Entfernen aktiviert wurde?

RenWal
quelle
Sie haben also gesagt, dass die automatische Bereitstellung aktiviert ist, aber dann fragen Sie: "Wie kann ich feststellen, ob der USB-Stick, der die Udev-Regel ausgelöst hat, bereitgestellt wurde?" . Nun, ich denke, Sie meinen, Sie müssen den Status von USB nach dem Entfernen bestimmen - gemountet oder nicht gemountet. Ich würde dies persönlich mit einem Startskript angehen, das lediglich die Lade- / Lösezeit des USB mit dem df -a | grep 'sd[b-z]' Befehl überwacht . Eine udev-Regel kann das Datum der Entfernung an eine Art Protokoll senden. Wenn die vom Skript angegebene Zeit zum Entfernen mit der von udev-Regel übereinstimmt (mindestens um Minuten, wobei die Sekunden möglicherweise verzögert sind), wurde usb nicht eingehängt.
Sergiy Kolodyazhnyy
2
Hier ist auch ein Skript, das ich zu Protokollierungszwecken geschrieben habe. paste.ubuntu.com/11748191 Wenn Sie diese Idee mögen, könnte ich dies als Antwort posten, aber ich persönlich halte diese beiden Kommentare eher für einen Vorschlag als für eine funktionierende Lösung
Sergiy Kolodyazhnyy

Antworten:

4

Ich mag Fabbys Ansatz, aber es ist gut, den Leuten diese schlechte Angewohnheit beizubringen (sie arbeiten nicht die ganze Zeit an gesteuerten Maschinen). Dies ähnelt einer OSX-Funktion, wie hier beschrieben .

Es gibt einen kleinen Unterschied, mit dem Sie möglicherweise feststellen können, ob es sich um eine sichere Entfernung handelt:

  • udev-Variable ID_PART_TABLE_TYPE=dosist für sdxPlattenknoten ( NICHT PartitionsknotensdxY ) in unsicherem Entfernen festgelegt.

  • Wo es nicht in Sicherheit gebracht wird, entfernen Sie es

Beobachtung von udev-Ereignissen:

udevadm monitor -u --environment
  • Sicher entfernen

    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
    
  • Unsicher entfernen

    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-Regel erstellen (ändern 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. Regeln neu laden

    sudo udevadm control --reload-rules
    

Auf eine andere Weise können Sie ein Skript (Python) verwenden, das eine Verbindung zu udisksDBUS herstellt. Es enthält alle erforderlichen Informationen zum Ein- und Aushängen von Partitionen, zum Ein- und Ausstecken von Festplatten ...

Referenz / Quelle: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example

user.dz
quelle
1
Ich mag Fabbys Herangehensweise, aber das ist es, wonach ich gesucht habe! Ich plane jetzt, ein Python-Skript zu schreiben, das auf udisksEreignisse in DBUS wartet und dann die Anzeige von Nachrichtendialogen usw.
übernimmt
8

Leider hat Micro $ oft recht: USB-Entfernung ... Und Sie werden dieses Problem so lange haben, bis Sie:

  1. Deaktivieren Sie die automatische Bereitstellung

    Wenn Benutzer manuell einsteigen müssen, ist es einfacher, sie für das Aussteigen zu schulen.

  2. Erstellen Sie eine udev-Regel, mit der alle Caching-Vorgänge auf USB-Datenträgern deaktiviert werden.

Fabby
quelle
2
+1 - Durch Deaktivieren des Caches wird das Problem verringert. Solange sie das Gerät während eines Schreibvorgangs nicht vom Stromnetz trennen (was normalerweise dazu führt, dass eine LED am Gerät aufleuchtet / blinkt), sind sie in Ordnung.
Nathan Osman
Okay, das würde auf der Computerseite gut funktionieren. Aber brennt das Deaktivieren des Caches oder das Setzen des Synchronisierungsflags auf dem Mount den Flash-Chip nicht ziemlich schnell aus? Diese USB-Laufwerke sind allesamt VFAT, und ich habe gehört, Linux ist ziemlich aggressiv beim Aktualisieren von FAT-Tabellen - es nutzt die Sektoren ab, die die Tabelle enthalten.
RenWal
Ich kaufe nur SLC- Sticks und hatte noch keinen Würfel an mir, unabhängig vom Dateisystem ... (und ich habe nur 2)
Fabby
@RenWal: Da Sie auf dieser Site noch keine Antwort akzeptiert haben: Vergessen Sie nicht, auf das graue gray links neben diesem Text zu klicken, was bedeutet , dass diese Antwort gültig ist!
Fabby
1
Windows deaktiviert aus den gleichen Gründen standardmäßig den Schreibcache auf FAT-formatierten USB-Laufwerken. Daher wurde jede zusätzliche Abnutzung des Laufwerks als geringeres Übel angesehen.
Thomasrutter