01 febrero 2010

Administración de dispositivos con udev II

Para poder utilizar udev en nuestro sistema, además de tenerlo instalado, tenemos que escribir una serie de reglas que tenemos que guardar en un fichero. El fichero tiene que tener extensión ".rules" y se debe guardar en el directorio /etc/udev/rules.d.

Escribiremos una configuración de ejemplo, con dispositivos creados al añadir discos de fibra al sistema, que guardaremos en el fichero 25-names.rules.

En el directorio /etc/udev/rules.d podemos encontrarnos con el fichero 50-udev.rules. Este fichero no se debería editar, puesto que lo crea el sistema, aunque sí que podemos (debemos) echarle un ojo para ver la sintaxis general de udev.

Las reglas en el fichero /etc/udev/rules.d se leen en orden, las líneas se comentan con almohadilla, como si estuviéramos comentando un fichero de shell. Los ficheros se ejecutan de menor número a mayor número, de ahí nuestro fichero "25-names.rules".

En nuestro ejemplo tendríamos una entrada así:

KERNEL="sd*", BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="3600a0b8000199a9400002cdf4a3199ca", NAME="disco1%n"

  • KERNEL es el nombre que el kernel le da al dispositivo, en nuestro caso tenemos "sd*" porque también funcionan los comodines.
  • BUS es el subsistema, en este caso es el subsistema scsi.
  • PROGRAM es el programa que se va a ejecutar cuando se ejecute udev
  • RESULT es el resultado que nos tiene que dar el programa para que validemos esta entrada, en nuestro caso es el wwn del disco.
  • NAME es el nombre que le vamos a dar al dispositivo; el %n significa que si tiene números de partición también los va asignar.

En realidad podemos crear condiciones extraídas de un programa como en nuestro ejemplo, o bien podemos indicar atributos del dispositivo.

Aunque hay documentación es un poco confusa. Si leemos la documentación que encontramos en el enlace de kernel.org, podemos leer que nos indican que utilicemos "==" para filtrar los dispositivos y "=" para asignar (el nombre por ejemplo), pues bien utilizando esta sintaxis a mi no me estaba funcionando udev en versiones 4 y 5 de redhat.
Finalmente me funcionó utilizando siempre "=", la asignación.

Buscando información por internet de cómo combinar "scsi_id" y "udev" nos hemos encontrado con indicaciones en las que se escribía que había que escribir "scsi_id -s" directamente en el apartado PROGRAM. Más tarde hemos descubierto que no hacía falta que lo hiciéramos, puesto que "udev" lo hacía por nosotros.

Lo bueno de udev es que si no reiniciamos el sistema no va a borrar nuestros dispositivos originales, con lo cual podemos ejecutar "udevstart" y observar si nuestros cambios funcionan. Una vez hayamos comprobado podemos reiniciar el sistema para que se vean sólo los nuevos dispositivos. Otra opción es crear enlaces simbólicos en lugar de renombrar los dispositivos, pero esto ya queda "a gusto del consumidor".

Asignación de dispositivos con udev: Parte I, Parte 2

No hay comentarios: