Certains systèmes ont plus de 26 périphériques (blocs) (comme les disques durs), que le noyau nomme comme suit :
/dev/sda
...
/dev/sdz
/dev/sdaa
/dev/sdab
/dev/sdac
...
La plupart des exemples de règles udev sont assez simples, ne correspondant qu'aux 26 premiers appareils, comme par exemple :
ACTION=="add|change", KERNEL=="sd[a-z]|sr[0-9]", SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
Mais comment faire correspondre après le 26e appareil ?
On ne peut pas écrire sd*
parce que des partitions comme sda1
ne doit pas correspondre.
Je peux imaginer écrire un autre "ou" (symbole pipe :|
) pour faire la correspondance, comme :
KERNEL=="sd[a-z]|sd[a-z][a-z]|sr[0-9]"
Ou divisez le match en partie positive et négative, comme :
..., KERNEL=="sd[a-z]*|sr[0-9]", KERNEL!="sd[a-z]*[0-9]", ...
Existe-t-il un meilleur moyen d'écrire des règles udev lisibles, qui correspondent au périphérique n° 27 et supérieur, mais pas à n'importe quelle partition ?
Réponse acceptée :
KERNEL=="sd*[!0-9]|sr*"
Peut être trouvé dans les règles udev fournies par le système d'exploitation elles-mêmes.
Dans ce cas Arch Linux, jetez un œil au fichier :
/usr/lib/udev/rules.d/60-persistent-storage.rules
Section 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"