一部のシステムには、26を超える(ブロック)デバイス(ハードディスクドライブなど)があり、カーネル名は次のとおりです。
/dev/sda
...
/dev/sdz
/dev/sdaa
/dev/sdab
/dev/sdac
...
ほとんどのudevルールの例は非常に単純で、たとえば次のように最初の26個のデバイスにのみ一致します。
ACTION=="add|change", KERNEL=="sd[a-z]|sr[0-9]", SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
しかし、26番目のデバイスの後でどのように一致させるのですか?
sd*
を書くことはできません sda1
のようなパーティションがあるため 一致させないでください。
別の「または」(パイプ記号:|
)を書くことを想像できます。 )次のように一致させます:
KERNEL=="sd[a-z]|sd[a-z][a-z]|sr[0-9]"
または、次のように、一致を正と負の部分に分割します。
..., KERNEL=="sd[a-z]*|sr[0-9]", KERNEL!="sd[a-z]*[0-9]", ...
読み取り可能で、デバイス#27以降と一致するが、パーティションとは一致しないudevルールを作成するためのより良い方法はありますか?
承認された回答:
KERNEL=="sd*[!0-9]|sr*"
udevルール自体が提供するオペレーティングシステムで見つけることができます。
このArchLinuxの場合、ファイルを見てください:
/usr/lib/udev/rules.d/60-persistent-storage.rules
セクション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"