Aunque udev no puede acceder directamente a los UUID, al menos en Fedora y Ubuntu se configuran como variables de entorno ( ENV
). Puede leer todas las variables de entorno de un dispositivo llamando udevadm info /dev/sdc
. Por ejemplo, para un NTFS en un disco externo obtengo:
$ 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
[…]
Todo con un E:
frente está configurado como una variable de entorno.
Coincidencia con UUID
Puedes igualarlo con ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Como primer filtro, comparo KERNEL=="sd?2"
para asegurarme de que solo estoy manejando dispositivos de bloque con el número de partición correcto. La regla completa se vería así:
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]"
El comando logger es útil para afirmar que la regla se ejecuta realmente. A continuación, debe verificar que la regla no contenga ningún error de sintaxis con udevadm test /dev/sdc2
. Su archivo de reglas debe aparecer en la salida y no debe aparecer ningún mensaje de error al lado. Ahora se puede activar todas las reglas para su dispositivo para comprobar si su regla funciona como estaba previsto: sudo udevadm trigger /dev/sdc2
. Si su regla coincide, encontrará el mensaje de registro personalizado en el registro del sistema ( /var/log/syslog
o mediante journalctl -b
).
Editar: ali_m ha señalado que las variables de entorno están establecidas por reglas anteriores y, por lo tanto, solo son accesibles si su .rules
archivo tiene un orden lexicográfico suficientemente alto . Comenzar con "60" debería ser suficiente. Personalmente comienzo mis reglas con "zz" (si es posible) para distinguirlas de las reglas predefinidas de un vistazo.
Usar UUID en el RUN
comando y en otros lugares
Udev tiene una sintaxis de sustitución de variables y atributos bastante poderosa . Específicamente, cada aparición de $env{ID_FS_UUID}
será reemplazada con el UUID de la unidad. Entonces, para montar un dispositivo debajo de /media/
UUID
usted, puede usar esta regla:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Sin embargo, es probable que desee configurar udiscos, ya que está especializado para el espacio del problema que desea resolver. Ver https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia como punto de partida.
Mi caso de uso real para el montaje de dispositivos con udev en lugar de /etc/fstab
o udisks es montar sistemas de archivos zfs que tienen algunas idiosincrasias que hacen que no se ajusten a las herramientas habituales.