Mesmo que os UUIDs não sejam acessíveis diretamente pelo udev, pelo menos no Fedora e 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, 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.
Correspondência contra UUIDs
Você pode combinar com ele ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Como primeiro filtro, comparo-me KERNEL=="sd?2"
para garantir que apenas manipule 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, verifique se a regra não contém nenhum erro de sintaxe udevadm test /dev/sdc2
. Seu arquivo de regras deve estar listado na saída e nenhuma mensagem de erro deve aparecer ao lado. Agora você pode acionar todas as regras para o seu dispositivo para verificar se a sua regra funciona como o planejado: sudo udevadm trigger /dev/sdc2
. Se sua regra corresponder, você encontrará a mensagem de log personalizada no log do sistema ( /var/log/syslog
ou via journalctl -b
).
Edit: ali_m indicou que as variáveis de ambiente são definidas pelas regras anteriores e, portanto, apenas acessíveis se o seu .rules
arquivo tiver uma ordem lexicográfica suficientemente alta . Começar com "60" deve ser suficiente. Pessoalmente, inicio minhas regras com "zz" (se possível) para distingui-las das regras predefinidas rapidamente.
Usando UUIDs no RUN
comando e em outros lugares
O Udev tem uma sintaxe de substituição de variável e atributo bastante poderosa . Especificamente, toda ocorrência de $env{ID_FS_UUID}
será substituída pelo UUID da unidade. Portanto, para montar um dispositivo, /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 udisks, no entanto, ele é especializado no espaço do problema que você deseja resolver. Veja https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia como ponto de partida.
Meu caso de uso real para montar dispositivos com udev em vez de /etc/fstab
ou com udisks é montar sistemas de arquivos zfs que possuem algumas idiossincrasias, tornando-os inadequados para as ferramentas usuais.