一部のシステムには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"