A maioria das chaves USB funciona no meu sistema: conecte uma 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 (um Sandisk Cruzer Micro 2Gb) que udev
não funciona bem. O arquivo de dispositivo da chave é criado, mas não da partição.
Se eu comparar a dmesg
saída entre uma chave funcional e a chave do problema, ela será idêntica, exceto por uma linha que está faltando ao usar a chave do problema: uba: uba1
. Parece que isso mknod
nunca cria um nó para a partição do disco.
O estranho é que eu posso fazer...
sudo sfdisk -R /dev/uba
... para forçar o reexame das partições da unidade e de repente a partição será reconhecida, mknod
criarei um arquivo de dispositivo e eu poderei acessar a chave perfeitamente e elegantemente. Algum tipo de problema de tempo?
EDITAR:
Regras USB de montagem automática:
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 como FAT16 ao ser reformatada. Forçá-lo para FAT32 resulta em udevadm monitor --property
exibir exatamente as mesmas propriedades para o dispositivo e partição que para uma chave funcional, 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?
Responder1
Apenas pela /dev/uba
estrutura de nomenclatura, parece que você criou sua própria regra UDEV e agora ela não está funcionando para você. Precisaremos ver esse código para ajudá-lo.
Tenho certeza que você já consultou isso, mas por precaução, consulte esta referência para criar regras UDEV.http://wiki.debian.org/udev
Feedback baseado na atualização
ACTION=="adicionar", KERNEL=="ub[az]*[1-9]*", PROGRAM="/sbin/blkid -o valores -s TYPE %N", RESULT=="vfat", RUN+= "/home/ubuntu/.mount_usb %k %n" ACTION=="remover", KERNEL=="ub[az]*", RUN+="/home/ubuntu/.unmount_usb"
Parece que seu antecessor não sabia sobre o usbmount
. Esta regra só funcionará em unidades formatadas em vfat, agora você pode expandir essa lista ou... você pode instalá-la
usbmount
e ajustá-la para criar os nomes de dispositivos desejados. Então você tem algo que é mantido para você com apenas pequenas alterações de configuração em comparação com uma solução caseira completa.
A propósito, há um erro de sintaxe aí, não é value
, values
executar isso a partir da CLI mostra.
sudo blkid -o valor -s TIPO /dev/sdb1 vfat
Portanto, %N
é a entrada, por exemplo, o dispositivo de bloco e RESULT é stdout. Isso está detalhado na página de manual do udev. Você pode fazer algo assim RESULT=="[vfat|fat16]"
ou encaminhar a saída para um script e fazer uma comparação mais rica lá. Uma rápida olhada no pacote usbmount mostra que comparações avançadas são feitas no script de texto explicativo para adicionar e remover. Eu recomendo fortemente que você migre para usbmount
.