KERNEL=="sd*[!0-9]|sr*"

KERNEL==

一部のシステムには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一致してはいけないため、書き込めません。

|次のように一致を実行するために別の「or」(パイプ記号:)を作成することを想像できます。

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ルールを作成するより良い方法はありますか?

ベストアンサー1

KERNEL=="sd*[!0-9]|sr*"

これは、オペレーティングシステム自体が提供するudevルールにあります。

このArch Linuxのケースでは、次のファイルを見てください。

/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"

おすすめ記事