Einige Systeme haben mehr als 26 (Block-)Geräte (wie Festplattenlaufwerke), die der Kernel wie folgt benennt:
/dev/sda
...
/dev/sdz
/dev/sdaa
/dev/sdab
/dev/sdac
...
Die meisten Beispiele für udev-Regeln sind recht einfach und passen nur zu den ersten 26 Geräten, wie zum Beispiel:
ACTION=="add|change", KERNEL=="sd[a-z]|sr[0-9]", SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
Aber wie passt man nach dem 26. Gerät zusammen?
Man kann nicht sd*
schreiben weil Partitionen wie sda1
sollte nicht übereinstimmen.
Ich kann mir vorstellen, noch ein „oder“ zu schreiben (Pipe-Symbol:|
), um die Übereinstimmung herzustellen, wie:
KERNEL=="sd[a-z]|sd[a-z][a-z]|sr[0-9]"
Oder teilen Sie die Übereinstimmung in einen positiven und einen negativen Teil auf, wie:
..., KERNEL=="sd[a-z]*|sr[0-9]", KERNEL!="sd[a-z]*[0-9]", ...
Gibt es einen besseren Weg, udev-Regeln zu schreiben, die lesbar sind und mit Gerät Nr. 27 und höher übereinstimmen, aber nicht mit irgendeiner Partition?
Akzeptierte Antwort:
KERNEL=="sd*[!0-9]|sr*"
Zu finden sind die vom Betriebssystem bereitgestellten udev-Regeln selbst.
Sehen Sie sich in diesem Arch-Linux-Fall die Datei an:
/usr/lib/udev/rules.d/60-persistent-storage.rules
Abschnitt 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"