Algunos sistemas tienen más de 26 dispositivos (de bloque) (como unidades de disco duro), que el kernel nombra de la siguiente manera:
/dev/sda
...
/dev/sdz
/dev/sdaa
/dev/sdab
/dev/sdac
...
La mayoría de los ejemplos de reglas de udev son bastante simples, solo coinciden con los primeros 26 dispositivos, como por ejemplo:
ACTION=="add|change", KERNEL=="sd[a-z]|sr[0-9]", SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
Pero, ¿cómo hacer coincidir después del dispositivo 26?
No se puede escribir sd*
porque particiones como sda1
no debe coincidir.
Me imagino escribiendo otro "o" (símbolo de tubo:|
) para hacer la coincidencia, como:
KERNEL=="sd[a-z]|sd[a-z][a-z]|sr[0-9]"
O divide el partido en una parte positiva y negativa, como:
..., KERNEL=="sd[a-z]*|sr[0-9]", KERNEL!="sd[a-z]*[0-9]", ...
¿Hay una mejor manera de escribir reglas de udev que sean legibles, que coincidan con el dispositivo n.º 27 en adelante, pero no con ninguna partición?
Respuesta aceptada:
KERNEL=="sd*[!0-9]|sr*"
Se puede encontrar en las propias reglas udev proporcionadas por el sistema operativo.
En este caso de Arch Linux, eche un vistazo al archivo:
/usr/lib/udev/rules.d/60-persistent-storage.rules
Sección ATA:
$ grep /usr/lib/udev/rules.d/60-persistent-storage.rules -e \"ATA\"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", IMPORT{program}="ata_id --export $devnode"