모든 USB 저장 장치와 일치하는 Udev 규칙


10

udev특정 장치뿐만 아니라 연결된 USB 대용량 저장 장치에 대한 규칙을 어떻게 구현할 수 있습니까? 무엇에서 변경해야 idVendor하고, idProduct?

 ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
     RUN+="/home/workspace/bash_script.sh"

답변:


7

스토리지 장치는 block서브 시스템에 있으므로 다음 SUBSYSTEM=="block"과 같이 규칙을 원할 것 입니다.

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    RUN+="/path/to/script"

를 사용하는 경우 USB 저장 장치를 추가 할 때마다 장치를 systemd실행할 수 있습니다 systemd. 다음과 같이 단위 파일을 작성하십시오 /etc/systemd/system/my-usb-rule.service.

[Service]
Type=oneshot
ExecStart=/path/to/script

그리고 규칙, 예 /etc/udev/rules.d/85-my-usb-rule.rules:

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    ENV{SYSTEMD_WANTS}="my-usb-rule.service"

이제 모든 USB 저장 장치 추가 이벤트 에서 udev트리거됩니다 my-usb-rule.service(스크립트 실행) .


규칙 / 단위를 편집 한 후 구성을 다시로드하는 것을 잊지 마십시오.

udevadm control --reload
systemctl daemon-reload

USB 대용량 저장 장치를 추가 할 때 포함 된 파티션에서 작업하고 싶습니다. udev 레벨에서 usb, scsi, bdi 및 block (순서대로)의 4 가지 서브 시스템 이벤트를 볼 수 있습니다. 파티션을 아직 알 수 없기 때문에 처음 3 개는 사용할 수 없습니다. 블록 이벤트는 코드 예제와 같이 USB가 아닌 ID_BUS = scsi를 갖습니다. 블록 이벤트에 적합한 속성이 표시되지 않아 USB 대용량 저장 장치인지 아닌지를 알려줍니다. (udevadm 모니터 및 udevadm 정보를 사용하여 조사 완료). ID_BUS = scsi가 합리적으로 USB 대용량 저장 장치가 될 수 있다고 믿을 수 없다면.
Uwe Geuder

@UweGeuder- 프로그램에 대한 인수로 장치 이름을 사용 하고 파티션에 대한 동작을 기반으로하는 것을 막을 수있는 것은 없습니다 .
don_crissti

USB 이벤트에서 장치 이름은 / dev / bus / usb / 002 / 040과 같습니다. 내 프로그램에서 어떻게 해야할지 모르겠습니다. 차단 이벤트에서 장치 이름은 / dev / sdb 또는 / dev / sdb1과 같습니다. 그것이 내가 원하는 것이지만 이제는 ID_BUS = scsi라는 문제로 돌아 왔습니다. 조금 더 알아 보겠습니다. 규칙 파일 80-udisk2가 있으며 ID_DRIVE_THUMB 속성을 추가합니다. 얼마나 강력한 지 확실하지 않은 업체는 거의 없습니다. 내 규칙 파일의 이름은 70- *이므로 예상대로 / dev / sdb가 일치하지 않습니다. 내 규칙이 먼저 실행되지만 이상하게도 / dev / sdb1이 일치합니다.
Uwe Geuder

1
아 난 그냥 원래의 질문이었다주의 모든 USB 대용량 저장 드라이브. 그것은 규칙과 함께 작동해야합니다 SUBSYSTEM=="block", SUBSYSTEMS=="usb"( S 와의 차이점에 유의하십시오 ). ENV{ID_BUS}=="usb"scsi 값을 여기에서 볼 수 있기 때문에 항상 원래의 대답으로 작동 할 수 있는지 의심 스럽습니다 . 그러나 원래 요청한 것과 약간 다른 문제를 겪고 있습니다 .USB 스틱 (pendrive)을 원하지만 외부 드라이브는 없습니다.
Uwe Geuder

1
실제로 불쾌한 사실은 ENV{ID_BUS}모든 시스템에서 가치가 동일하지 않다는 것입니다. 어제 udev 210을 사용하는 구형 시스템에서 작업하고있었습니다 (인터넷에 있지 않기 때문에 지금 확인할 수 없습니다). 그 값은 scsi 입니다. 이제 udev 228이있는 최신 컴퓨터를 사용하고 있으며 값은 usb 입니다. 같은 USB 스틱을 가지고 다니고 있습니다. (여기서 udev 버전이 관련 요소인지 확실하지 않은 경우 udev 규칙을 설치하는 커널 또는 다른 패키지 일 수도 있습니다 SUBSYSTEM=="block", SUBSYSTEMS=="usb"( 예 : udisks2)) 여전히 (주 S ) 휴대용이며 안전 할 수 있습니다.
Uwe Geuder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.