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.