Alerter l'utilisateur lorsqu'il débranche en toute sécurité une clé USB

13

Les utilisateurs se plaignent à plusieurs reprises de la perte de données sur des clés USB après les avoir débranchées sans démontage. Nous exécutons Ubuntu 14.04 LTS sur nos machines. Le montage automatique est activé.

Comme je suis fatigué de me souvenir de leur suppression avant de le débrancher, je veux que Ubuntu affiche une alerte chaque fois qu'un lecteur USB monté est débranché.

J'ai pensé à ajouter une udevrègle qui s'exécute notify-sendlors de la suppression au cas où le lecteur serait toujours monté. Comment puis-je déterminer si la clé USB a été montée lors du retrait?

Renouvellement
la source
Vous avez donc dit que le montage automatique est activé, mais vous demandez ensuite "comment puis-je déterminer si la clé USB qui a déclenché udev a été montée?" . Maintenant, je pense que vous voulez dire que vous devez déterminer l'état de l'USB lors du retrait - monté ou démonté. J'aborderais personnellement cela avec un script de démarrage qui surveille simplement le temps de montage / démontage de l'USB avec la df -a | grep 'sd[b-z]' commande. Une règle udev peut envoyer la date de suppression à un journal quelconque. Si le temps de suppression donné par le script correspond à celui de la règle udev (au moins en minutes, avec les secondes il peut y avoir un délai), alors usb n'a pas été monté.
Sergiy Kolodyazhnyy
2
Voici également un script que j'ai écrit à des fins de journalisation. paste.ubuntu.com/11748191 Si vous aimez cette idée, je pourrais poster ceci comme une réponse, mais je considère personnellement ces deux commentaires comme une suggestion, plutôt qu'une solution de travail
Sergiy Kolodyazhnyy

Réponses:

4

J'aime l'approche de Fabby, mais il est bon d'enseigner aux gens cette mauvaise habitude (ils ne travaillent pas tout le temps sur des machines contrôlées). Ceci est similaire à une fonctionnalité OSX, comme décrit ici .

Il y a une petite différence que vous pouvez l'utiliser pour savoir s'il s'agissait d'un retrait sûr:

  • La variable udev ID_PART_TABLE_TYPE=dosest définie pour sdxle nœud de disque ( PAS le nœud de partitionsdxY ) dans une suppression non sécurisée.

  • Où il n'est pas mis en sécurité

Remarqué par la surveillance des événements udev:

udevadm monitor -u --environment
  • Retirer en toute sécurité

    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
    
  • Suppression non sécurisée

    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. Créer une règle udev (modifier 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. Règles de rechargement

    sudo udevadm control --reload-rules
    

Vous pouvez également utiliser un script (python) qui se connecte à udisksDBUS. Il contient toutes les informations dont vous avez besoin sur le montage / démontage de la partition, le branchement / débranchement des disques ...

Référence / Source: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example

user.dz
la source
1
Bien que j'aime l'approche de Fabby, c'est ce que je cherchais! Je prévois maintenant d'écrire un script python qui écoute les udisksévénements sur DBUS et gère ensuite l'affichage des boîtes de dialogue de messages, etc.
RenWal
8

Malheureusement, c'est une chose que Micro $ oft a vraiment bien fait: la suppression USB ... Et vous continuerez à avoir ce problème jusqu'à ce que vous:

  1. Désactiver le montage automatique

    Si les utilisateurs doivent monter manuellement, il sera plus facile de les entraîner à démonter également.

  2. Créez une règle udev qui désactive toute mise en cache sur les disques USB ...

Fabby
la source
2
+1 - la désactivation du cache permet de réduire le problème. Tant qu'ils ne débrancheront pas l'appareil pendant une écriture (ce qui fait généralement allumer / clignoter une LED sur l'appareil), ils iront bien.
Nathan Osman
D'accord, cela fonctionnerait bien du côté de l'ordinateur. Mais la désactivation du cache ou la définition de l'indicateur de synchronisation sur le montage ne brûlent-elles pas la puce flash assez rapidement? Ces clés USB sont toutes VFAT et j'ai entendu dire que Linux est assez agressif pour mettre à jour les tables FAT - usant les secteurs contenant la table.
RenWal
Je n'achète que des sticks SLC et je n'ai pas encore eu de matrice sur moi quel que soit le système de fichiers ... (et j'en ai seulement 2)
Fabby
@RenWal: Comme vous n'avez jamais accepté de réponse sur ce site: n'oubliez pas de cliquer sur le gris ☑ à gauche de ce texte, ce qui signifie Oui, cette réponse est valable!
Fabby
1
FWIW, Windows désactive le cache d'écriture sur les lecteurs USB au format FAT par défaut, pour les mêmes raisons, donc je suppose que toute usure supplémentaire sur le lecteur a été considérée comme un moindre mal.
thomasrutter