Mesmo que os UUIDs não sejam diretamente acessíveis pelo udev, pelo menos no Fedora e no Ubuntu eles são definidos como variáveis de ambiente ( ENV
). Você pode ler todas as variáveis de ambiente de um dispositivo chamando udevadm info /dev/sdc
. Por exemplo. para um NTFS em uma unidade externa eu recebo:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
Tudo com um E:
na frente é definido como uma variável de ambiente.
Correspondendo com UUIDs
Você pode compará-lo com ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Como primeiro filtro, eu jogo com KERNEL=="sd?2"
para ter certeza de que estou lidando apenas com dispositivos de bloco com o número de partição correto. A regra completa ficaria assim:
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
O comando logger é útil para afirmar que a regra é realmente executada. Em seguida, você deve verificar se a regra não contém erros de sintaxe com udevadm test /dev/sdc2
. Seu arquivo de regras deve estar listado na saída e nenhuma mensagem de erro deve aparecer ao lado dele. Agora você pode acionar todas as regras do seu dispositivo para verificar se sua regra funciona conforme o planejado: sudo udevadm trigger /dev/sdc2
. Se a sua regra corresponder, você encontrará a mensagem de log personalizada no log do sistema ( /var/log/syslog
ou via journalctl -b
).
Editar: ali_m apontou que as variáveis de ambiente são definidas por regras anteriores e, portanto, apenas de forma acessível se o arquivo .rules
tiver um ordenação lexicográfica suficientemente alta . Começar com "60" deve ser o suficiente. Pessoalmente eu começo minhas regras com "zz" (se possível) para distingui-las de regras pré-definidas em um relance.
Usando UUIDs no comando RUN
e em outro lugar
O Udev tem uma variável bastante poderosa e atribui a sintaxe de substituição . Especificamente, todas as ocorrências de $env{ID_FS_UUID}
serão substituídas pelo UUID da unidade. Então, para montar um dispositivo em /media/
UUID
você pode usar esta regra:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Você provavelmente deseja configurar os udisks, porém, é especializado para o espaço do problema que você deseja resolver. Veja link como ponto de partida.
Meu caso de uso real para a montagem de dispositivos com udev em vez de /etc/fstab
ou udisks é montar sistemas de arquivos zfs que possuem algumas idiossincrasias, tornando-os inadequados às ferramentas usuais.