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

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

일부 시스템에는 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"

관련 정보