udev 규칙이 작동하지 않습니다

udev 규칙이 작동하지 않습니다

udevUSB 장치를 마운트하고, 일부 데이터를 백업하고, 모든 것을 정리해야 하는 규칙을 만들었습니다 . 사실 저는 Debian서버에서 일하고 있어요.

내 USB 장치에 대한 정보는 다음과 같습니다.lsusb

버스 001 장치 003: ID 054c:0243 Sony Corp. MicroVault 플래시 드라이브

(실제로 lsusb더 많은 버스/장치가 반환되지만 데비안 컴퓨터에서 게시하지 않기 때문에 직접 작성해야 했습니다 :))

그런 다음 나는 규칙을 다음과 같이 썼습니다 udev.

10-usb_back.rules

입력하다:

/etc/udev/rules.d/

(백업 스크립트에 몇 초가 걸리기 때문에 95를 사용했고 다른 작업이 지연되지 않도록 최대한 늦게 실행하고 싶었습니다)

그리고 마지막으로 규칙 자체는 다음과 같습니다.

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTR{idProduct}=="0243", RUN+="/usr/local/bin/mount_usb"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTR{idProduct}=="0243", RUN+="/usr/local/bin/backup_database"

나는 또한 이것을 시도했습니다 :

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="0234", RUN+="bash /usr/local/bin/mount_usb"

실패:(

그런 다음 재부팅합니다.udev

sudo /etc/init.d/udev restart

USB 장치를 연결하면 다음과 같은 이상한 메시지가 나타납니다.

[1348.295280] sd 6:0:0:0: [sdc] 드라이브 캐시 가정: 연속 쓰기

두 배

그러나 아무 일도 일어나지 않았습니다. USB 장치가 설치되지 않았으며 데이터가 백업되지 않았습니다.

I looked with tail -f /var/log/message

USB 드라이브가 감지된 것 같습니다:

usb 1-3: Product Storage Media 
usb 1-3 Manufacturer Sony`
...

어딘가에 문제가 있는 게 틀림없지만, 무엇인지, 어디에 있는지 모르겠습니다 :(

편집: 서버의 모든 것을 다시 작성할 수 없기 때문에 조금 게으르기 때문에 필요한 경우 스크립트나 추가 로그 메시지와 같은 추가 정보를 요청하십시오. :)

답변1

핫플러그에서 백업을 수행하는 작업 udev 규칙은 다음과 같습니다.

SUBSYSTEM=="block" ACTION=="add" \
      ENV{DEVTYPE}=="partition" \
      ENV{ID_FS_UUID}=="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
      TAG+="store" \
      RUN+="/usr/bin/python3 /etc/systemd/autoback.py --udev"

/dev/sde1USB 장치와 일치하는 것이 아니라 해당 USB 장치의 대용량 저장 장치 끝점에 있는 파티션입니다. USB 핫플러그 후 디스크가 준비되고 파티션이 열거되는 데 몇 초가 걸리므로 이는 내 사용 사례에 "올바른" 이벤트이며 백업을 수행하려는 경우에도 마찬가지일 수 있습니다. 이 파티션에 대해 ID_FS_UUID보고된 것과 동일합니다 . blkid제 경우에는 luksUUID입니다.

내 시스템에서는 규칙을 편집할 때 udev가 자동으로 올바르게 다시 로드되지 않는 것 같지만 작동하는 것으로 확인된 사항(디버깅에도 유용함)은 다음과 같습니다.

udevadm test /sys/dev/block/8:65

udev 규칙을 강제로 다시 로드/재적용합니다. 나는 이것을 8:65통해 이것을 찾았습니다 ls -l /dev/block | grep sde1. 반품

udevadm info --query=property /dev/sde1

내 규칙이 적용되는지 확인하는 데 도움이 됩니다.

참고: OP가 게시한 지 5년 후에 이 답변을 게시하므로 당시와 지금 ​​상황이 다를 수 있습니다. 내 시스템은 arm64의 우분투 16.04.4(xenial)입니다.

답변2

ATTR의 철자를 잘못 입력했습니다. 이 경우에는 ATTRS여야 합니다.

답변3

출력을 살펴보면 udevadm info --path=path/to/device --attribute-walk장치에 유효한 모든 속성과 하위 시스템이 표시됩니다. 예를 들어, 내 USB 장치에는 SUBSYSTEM="tty"USB를 식별하기 위한 , 기호가 있습니다 SUBSYSTEMS=="usb"(참고: 복수의 하위 시스템*에스*). 나는 그것이 여기의 경우일지도 모른다고 생각한다. 어느 쪽이든 udevadm info --attribute-walkudev 문제를 디버깅하는 데 매우 유용한 도구입니다.

또한 ATTR{key}가 유효하지 않습니다. ATTRS{key}를 사용하세요. (앞서 언급했지만 일부 예시에서는 여전히 잘못된 형식을 사용합니다.)

답변4

idProduct규칙 섹션에 오타가 없나요?

당신은 이것을 가지고 있습니다 :

ATTR{idProduct}=="0234"

다음과 같아야 하지 않나요?

ATTR{idProduct}=="0243"

다음 줄을 기반으로 한 출력:

Bus 001 Device 003: ID 054c:0243 Sony Corp. MicroVault Flash Drive

관련 정보