udev
지금까지 내가 만든 규칙은 추가되거나 제거되는 장치만 처리합니다. 즉 :
ACTION=="add"...
또는ACTION=="remove"...
나는 우연히 만났다예장치를 다루는 것처럼 보이는 규칙상태 변화또한:
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"
나는 일치하는 장치가 있을 때마다 위의 규칙이 적용된다고 생각합니다.추가됨또는 상태변화.
질문:어떤 종류의 상태 변경이 가능합니까(일반적으로 USB 하드 드라이브에만 해당)?
제가 찾을 수 있는 모든 udev 문서를 확인했는데 장치 상태 변경이나 구체적으로 ACTION="change"
.
답변1
예를 들어 "변경"은 sd카드 리더기에서 sd카드를 제거 또는 삽입하거나 USB-SATA 인클로저 내부의 하드 디스크를 변경하는 것에 해당합니다. 장치 자체는 추가되거나 제거되지 않지만 미디어는 더 이상 동일하지 않습니다.
답변2
udev 변경 이벤트는 미디어 체인저(테이프 관련 - Netbackup과 같은 환경) 또는 SD 카드 리더가 다른 미디어 또는 SD 카드와 함께 연속적으로 사용될 때 트리거됩니다. 동일한 장치가 다시 추가되는 경우(San 디스크가 다시 추가되거나 스위치 측에서 스위치 비활성화/활성화를 수행하거나 대상 측에서 대상 포트 비활성화/활성화를 수행함)
다음은 기존 san lun에 대해 대상 포트 비활성화(Vexata VX100 어레이에서)를 수행했을 때 호스트 측에서 볼 수 있는 몇 가지 변경 udev 이벤트입니다.
KERNEL[34942.047543] change /devices/virtual/block/dm-0 (block)
KERNEL[34942.047596] change /devices/virtual/block/dm-1 (block)
KERNEL[34942.047613] change /devices/virtual/block/dm-2 (block)
KERNEL[34942.047631] change /devices/virtual/block/dm-3 (block)
KERNEL[34942.047678] change /devices/virtual/block/dm-4 (block)
UDEV [34942.053448] change /devices/virtual/block/dm-3 (block)
UDEV [34942.053486] change /devices/virtual/block/dm-4 (block)
UDEV [34942.053507] change /devices/virtual/block/dm-0 (block)
UDEV [34942.053536] change /devices/virtual/block/dm-2 (block)
답변3
ENV
이는 커널이 정확히 무엇인지 설명하기 위한 이벤트 속성( )과 ENV
컨텍스트를 제공하기 위한 장치 속성(또한 ) 과 함께 장치에 대한 변경 사항을 보고하기 위해 uevent를 방출했음을 의미합니다 . 이는 장치 속성( ATTR
sysfs의 파일 구조에 해당)과 다르며 를 실행하면 이러한 속성이 무엇인지 확인할 수 있습니다 sudo udevadm monitor --kernel --udev -p --subsystem-match=usb
.
이러한 uevent는 장치를 관리하는 특정 커널 모듈에 의해 발생하므로 전체 목록이나 보장된 이벤트 집합이 없습니다. 문서를 확인하거나 문제가 있는 모듈의 소스 코드를 살펴보고 호출을 확인 kobject_uevent
하거나 kobject_uevent_env
이벤트가 발생하는 원인을 알아야 합니다.