Use UUID en las reglas de udev y monte la unidad usb en / media / $ UUID

13

Quiero montar la unidad usb en /mediafunción del UUID del disco. ¿Cómo puedo usar el UUID de una unidad usb en un archivo de reglas udev y qué es una regla udev para montar la unidad usb con el número UUID como nombre de la carpeta?

El blkidcomando genera el UUID de un disco, pero solo al montarlo.

Talespin_Kit
fuente
1
Advertencia 2019: en los sistemas Linux de escritorio modernos que usan systemd, las reglas de udev no montan sistemas de archivos en el espacio de nombres de usuario normal, es decir, no puede montar un sistema de archivos usando el comando de montaje en una regla de udev. Además, en estos sistemas, el sistema de fusibles (sistemas de archivos de usuario) está configurado para manejar montajes USB a través de un icono de escritorio, por lo que el montaje manual utilizando una regla fstab entra en conflicto hasta cierto punto con el sistema de fusibles. Para montar sistemas de archivos USB por UUID automáticamente en un servidor sin cabeza, sería mejor eliminar la configuración del fusible systemd y usar las reglas udev para activar los servicios de montaje de una sola vez.
Jonathan Ben-Avraham
Vea esta solución usando fstab, systemd y automount, probado en Debian reciente: unix.stackexchange.com/a/347007/31228
Jonathan Ben-Avraham

Respuestas:

14

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/syslogo 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 .rulesarchivo 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 RUNcomando 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/UUIDusted, 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/fstabo udisks es montar sistemas de archivos zfs que tienen algunas idiosincrasias que hacen que no se ajusten a las herramientas habituales.

Perseidas
fuente
1
Un punto crucial que me llevó un tiempo descubrir: para poder comparar con las variables de entorno, su regla debe aplicarse después de configurar esas variables. Para lograr esto, su .rulesnombre de archivo debe comenzar con un número> 60 .
ali_m
@ali_m: Gracias, agregué tu información a la respuesta.
Perseidas
Ubuntu 18.04, algunos comandos de udevadm pueden apuntar a / dev / sdXX (por ejemplo, udevadm info), otros deben apuntar a / sys / block / sdXX por alguna razón (por ejemplo, prueba de udevadm).
Greg Bell
0

Hay una solución aproximada en mi mente. Establezca la entrada fstab de respuesta conjunta identificada por UUID. Y en las reglas de udev, ejecute mount -acada vez que se agregue un nuevo dispositivo sd *.

agua
fuente