Alerte al usuario cuando desconecte inseguramente una memoria USB

13

Los usuarios se quejan repetidamente de la pérdida de datos en las unidades de memoria USB después de desconectarlos sin desmontarlos. Ejecutamos Ubuntu 14.04 LTS en nuestras máquinas. El montaje automático está habilitado.

Como estoy cansado de recordar que hagan una extracción segura antes de desconectar, quiero que Ubuntu muestre una alerta cada vez que se desconecte una unidad USB montada.

Pensé en agregar una udevregla que se ejecuta notify-sendal quitar en caso de que la unidad aún esté montada. ¿Cómo puedo determinar si la unidad USB se montó al retirarla?

RenWal
fuente
Entonces ha dicho que el montaje automático está habilitado, pero luego pregunta "¿cómo puedo determinar si se montó el usb que activó la regla udev?" . Ahora, creo que quiere decir que necesita determinar el estado del USB al retirarlo, montado o desmontado. Personalmente, abordaría esto con un script de inicio que simplemente supervisa el tiempo de montaje / desmontaje del usb con el df -a | grep 'sd[b-z]' comando. Una regla de udev puede enviar la fecha de eliminación a un registro de algún tipo. Si el tiempo de eliminación dado por el script coincide con el de la regla udev (al menos por minutos, con los segundos puede haber demora), entonces el usb no se montó.
Sergiy Kolodyazhnyy
2
Aquí también hay un script que escribí para fines de registro. paste.ubuntu.com/11748191 Si le gusta esta idea, podría publicarla como respuesta, pero personalmente considero estos dos comentarios como una sugerencia, en lugar de una solución de trabajo
Sergiy Kolodyazhnyy

Respuestas:

4

Me gusta el enfoque de Fabby, pero es bueno enseñarle a la gente sobre este mal hábito (no trabajan todo el tiempo en máquinas controladas). Esto es similar a una función OSX, como se describe aquí .

Hay una pequeña diferencia que puede usar para saber si fue una extracción segura:

  • La variable udev ID_PART_TABLE_TYPE=dosse establece para sdxel nodo de disco ( NO el nodo de particiónsdxY ) en una eliminación no segura

  • Donde no esté en un lugar seguro, retire

Notado al monitorear eventos de udev:

udevadm monitor -u --environment
  • Retiro seguro

    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
    
  • Eliminación insegura

    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. Crear una regla de udev (cambiar 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. Reglas de recarga

    sudo udevadm control --reload-rules
    

Otra forma, puede usar un script (python) que se conecta a udisksDBUS. Tiene toda la información necesaria que necesita sobre el montaje / desmontaje de la partición, los discos se conectan / desconectan ...

Referencia / Fuente: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example

user.dz
fuente
1
Si bien me gusta el enfoque de Fabby, ¡esto es lo que estaba buscando! Ahora planeo escribir un script de Python que escuche udiskseventos en DBUS y luego maneje la visualización de diálogos de mensajes, etc.
RenWal
8

Desafortunadamente, eso es algo que Micro $ oft realmente tiene bastante razón: eliminación de USB ... Y continuará teniendo este problema hasta que:

  1. Deshabilitar el montaje automático

    Si los usuarios tienen que montar manualmente, también será más fácil entrenarlos para que desmonten.

  2. Cree una regla udev que apague todo el almacenamiento en caché en discos USB ...

Fabby
fuente
2
+1: deshabilitar el caché ayuda a reducir el problema. Siempre y cuando no desconecten el dispositivo durante una escritura (lo que generalmente hace que un LED en el dispositivo se encienda / parpadee) estarán bien.
Nathan Osman
Bien, eso funcionaría bien en el lado de la computadora. ¿Pero la desactivación de la memoria caché o la configuración del indicador de sincronización en el soporte no queman el chip flash con bastante rapidez? Esas unidades USB son todas VFAT y escuché que Linux es bastante agresivo al actualizar las tablas FAT, desgastando los sectores que contienen la tabla.
RenWal
Solo compro palos SLC y aún no he tenido ningún dado, independientemente del sistema de archivos ... (y solo tengo 2)
Fabby
@RenWal: Como nunca ha aceptado una respuesta en este sitio: no olvide hacer clic en el gris ☑ a la izquierda de este texto, lo que significa que sí, ¡esta respuesta es válida!
Fabby
1
FWIW, Windows deshabilita la memoria caché de escritura en unidades USB con formato FAT de forma predeterminada, por las mismas razones, por lo que supongo que cualquier desgaste adicional en la unidad se consideró como un mal menor.
thomasrutter