Alertar o usuário quando ele desconectar com segurança um pen drive USB


13

Os usuários reclamam repetidamente sobre a perda de dados nos pen drives USB depois de desconectá-los sem desmontar. Executamos o Ubuntu 14.04 LTS em nossas máquinas. A montagem automática está ativada.

Como estou cansado de lembrar que eles fazem uma remoção segura antes de desconectar, quero fazer o Ubuntu exibir um alerta sempre que uma unidade USB montada for desconectada.

Pensei em adicionar uma udevregra que é executada notify-sendna remoção, caso a unidade ainda esteja montada. Como posso determinar se a unidade USB foi montada após a remoção?


Então você disse que a montagem automática está ativada, mas depois pergunta "como posso determinar se o usb que disparou a regra do udev foi montado?" . Agora, acho que você quer dizer que precisa determinar o estado do USB após a remoção - montada ou desmontada. Eu pessoalmente abordaria isso com um script de inicialização que apenas monitora o tempo de montagem / desmontagem do usb com o df -a | grep 'sd[b-z]' comando Uma regra do udev pode enviar a data da remoção para um log de algum tipo. Se o tempo de remoção fornecido pelo script corresponder ao da regra do udev (pelo menos por minutos, com os segundos, pode haver atraso), o usb não foi montado.
— Sergiy Kolodyazhnyy

2
Aqui também está um script que eu escrevi para fins de registro. paste.ubuntu.com/11748191 Se você gosta desta idéia, eu poderia postar isso como uma resposta, mas eu, pessoalmente, considero estes dois comentários uma sugestão, em vez de uma solução de trabalho
— Sergiy Kolodyazhnyy

Respostas:


4

Eu gosto da abordagem de Fabby, mas é bom ensinar às pessoas sobre esse mau hábito (elas não estão trabalhando o tempo todo em máquinas controladas). Isso é semelhante a um recurso OSX, conforme descrito aqui .

Há uma pequena diferença que você pode usá-lo para saber se foi uma remoção segura:

  • A variável udev ID_PART_TABLE_TYPE=dosé definida para sdxo nó do disco ( NÃO do nó da partiçãosdxY ) em remoção não segura.

  • Onde não estiver definido, remova com segurança

Notado pelo monitoramento de eventos do udev:

udevadm monitor -u --environment
  • Remoção segura

    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
    
  • Remoção não segura

    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. Criar uma regra do udev (alterar 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. Regras de recarga

    sudo udevadm control --reload-rules
    

Outra maneira, você pode usar um script (python) que se conecta ao udisksDBUS. Tem todas as informações necessárias que você precisa sobre montagem / desmontagem de partições, ...

Referência / Fonte: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example


1
Enquanto eu gosto da abordagem de Fabby, é isso que eu estava procurando! Eu agora planeja escrever um script python que escuta para udiskseventos DBUS e depois lida com a exibição de diálogos de mensagem, etc.
— RenWal

8

Infelizmente, isso é algo que a Micro $ realmente acertou: remoção de USB ... E você continuará tendo esse problema até que:

  1. Desativar montagem automática

    Se os usuários precisarem montar manualmente, será mais fácil treiná-los para desmontar também.

  2. Crie uma regra do udev que desative todo o cache em discos USB ...


2
+1 - desabilitar o cache ajuda a reduzir o problema. Contanto que eles não desconectem o dispositivo durante uma gravação (o que geralmente faz com que um LED acenda / pisque), eles ficarão bem.
— Nathan Osman

Ok, isso funcionaria bem no lado do computador. Mas a desativação do cache ou a configuração do sinalizador de sincronização na montagem queimam o chip flash rapidamente? Essas unidades USB são todas VFAT e ouvi dizer que o Linux é bastante agressivo na atualização de tabelas FAT - desgastando os setores que contêm a tabela.
— Re

Eu só compro SLC varas e não tive qualquer morre em mim ainda, independentemente do sistema de arquivos ... (e eu só tenho 2)
— Fabby

@RenWal: Como você nunca aceitou uma resposta neste site: não se esqueça de clicar no cinza ☑ à esquerda deste texto, o que significa Sim, esta resposta é válida!
— Fabby

1
FWIW, o Windows desabilita o cache de gravação em unidades USB formatadas por FAT, por padrão, pelos mesmos motivos, então acho que qualquer desgaste extra na unidade foi visto como um mal menor.
— thomasrutter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.