udev cria um arquivo de dispositivo para uma chave USB, mas não para partições

2

A maioria das chaves USB funciona no meu sistema: conecte um em e udev criará um arquivo de dispositivo para a chave como um todo (por exemplo, /dev/uba ), bem como um arquivo de dispositivo para a partição (por exemplo, /dev/uba1 ).

Eu tenho uma chave USB específica (uma Sandisk Cruzer Micro 2Gb) com a qual udev se comporta mal. O arquivo do dispositivo para a chave é criado, mas não para a partição.

Se eu comparar a saída dmesg entre uma chave de trabalho e minha chave de problema, ela é idêntica, exceto por uma linha que está faltando ao usar a chave do problema: uba: uba1 . Parece que mknod nunca está criando um nó para a partição do disco.

O estranho é que eu posso fazer ...

sudo sfdisk -R /dev/uba

... para forçar as partições de disco a serem reexaminadas e, de repente, a partição será reconhecida, mknod criará um arquivo de dispositivo e eu poderei acessá-la da forma mais precisa e elegante. Algum tipo de problema de timing?

EDITAR:

Regras do automount USB:

ACTION=="add", KERNEL=="ub[a-z]*[1-9]*", PROGRAM="/sbin/blkid -o values -s TYPE %N", RESULT=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="remove", KERNEL=="ub[a-z]*", RUN+="/home/ubuntu/.unmount_usb"

Também: A chave do problema é padronizada para FAT16 ao ser reformatada. Forçá-lo a FAT32 resulta em udevadm monitor --property cuspindo exatamente as mesmas propriedades para o dispositivo e partição do que para uma chave de trabalho, mas o problema ainda permanece. Isso me leva a pensar que é menos provável que seja um problema com as regras de detecção de dispositivos e talvez um problema com o próprio dispositivo? Esta é uma conclusão lógica?

    
por sjwarner 16.04.2012 / 16:51

1 resposta

2

Apenas na estrutura de nomenclatura /dev/uba , parece que você criou sua própria regra UDEV e agora não está funcionando para você. Precisamos ver esse código para ajudá-lo.

Tenho certeza de que você já consultou isso, mas apenas por favor consulte esta referência para criar regras UDEV. link

Feedback com base na atualização

ACTION=="add", KERNEL=="ub[a-z]*[1-9]*", PROGRAM="/sbin/blkid -o values -s TYPE %N", RESULT=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="remove", KERNEL=="ub[a-z]*", RUN+="/home/ubuntu/.unmount_usb"

Parece que seu antecessor não sabia sobre usbmount . Esta regra será apenas trabalhar em unidades formatadas com vfat, agora você poderia expandir essa lista, ou ... você poderia instalar usbmount e ajuste-o para criar os nomes dos dispositivos desejados. Então você tem algo isso é mantido para você apenas com pequenas alterações de configuração em comparação a uma produção caseira completa solução.

BTW, há um erro de sintaxe lá, é value não values , rodando isso nos shows da CLI.

sudo blkid -o value -s TYPE /dev/sdb1
vfat

Portanto, o %N é a entrada, por exemplo o dispositivo de bloco e RESULT é stdout. Isso está detalhado na página do manual do udev. Você pode fazer algo parecido com isso com RESULT=="[vfat|fat16]" ou pode encaminhar a saída para um script e fazer uma comparação mais rica. Uma rápida olhada no pacote usbmount mostra que as comparações avançadas são feitas no script de callout para adicionar e remover. Eu recomendo strongmente que você migre para usbmount .

    
por ppetraki 16.04.2012 / 17:02