![udev 규칙이 작동하지 않습니다](https://linux55.com/image/31934/udev%20%EA%B7%9C%EC%B9%99%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
udev
USB 장치를 마운트하고, 일부 데이터를 백업하고, 모든 것을 정리해야 하는 규칙을 만들었습니다 . 사실 저는 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/sde1
USB 장치와 일치하는 것이 아니라 해당 USB 장치의 대용량 저장 장치 끝점에 있는 파티션입니다. USB 핫플러그 후 디스크가 준비되고 파티션이 열거되는 데 몇 초가 걸리므로 이는 내 사용 사례에 "올바른" 이벤트이며 백업을 수행하려는 경우에도 마찬가지일 수 있습니다. 이 파티션에 대해 ID_FS_UUID
보고된 것과 동일합니다 . blkid
제 경우에는 luks
UUID입니다.
내 시스템에서는 규칙을 편집할 때 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-walk
udev 문제를 디버깅하는 데 매우 유용한 도구입니다.
또한 ATTR{key}가 유효하지 않습니다. ATTRS{key}를 사용하세요. (앞서 언급했지만 일부 예시에서는 여전히 잘못된 형식을 사용합니다.)
답변4
idProduct
규칙 섹션에 오타가 없나요?
당신은 이것을 가지고 있습니다 :
ATTR{idProduct}=="0234"
다음과 같아야 하지 않나요?
ATTR{idProduct}=="0243"
다음 줄을 기반으로 한 출력:
Bus 001 Device 003: ID 054c:0243 Sony Corp. MicroVault Flash Drive