하드 디스크를 추가할 때 Udev 규칙이 트리거되지 않습니다.

하드 디스크를 추가할 때 Udev 규칙이 트리거되지 않습니다.

우분투 20.04를 사용하고 있습니다.

UUID로 드라이브를 식별하는 udev 규칙을 사용하여 특정 하드 드라이브를 연결할 때 작업을 수행하려고 합니다. 스크립트는 결국 드라이브를 마운트하고 rsync를 실행하는 루틴을 실행합니다. 프로세스의 오류를 배제하기 위해 지금은 테스트 명령을 시도하고 있습니다.

드라이브가 SATA 핫스왑을 통해 연결되었으며 올바른 UUID가 확인되었습니다. 나는 이 정확한 구문을 사용하는 것으로 보이는 여러 가이드를 따랐지만, 무엇을 시도해도 아무 일도 일어나지 않습니다.

내가 완료한 단계는 다음과 같습니다.

  • 90-backup.rules라는 파일이 생성됩니다 /etc/udev/rules.d. 내용은 다음과 같습니다:

ACTION=="add", ENV{ID_FS_UUID}=="b527aadc-9dce-4ead-8937-e53ca2cfac84", RUN+="/bin/echo 1 >> /rule.test"

  • 시험을 마친 udevadm control --reload-rules && udevadm trigger

  • 시험을 마친systemctl reload udev

  • 실행하면 udevadm test /dev/sdX규칙 파일이 나열되어 있는 것을 볼 수 있습니다.

Reading rules file: /etc/udev/rules.d/90-backup.rules

  • udevadm info /dev/sdXID_FS_UUID 환경 변수가 올바르고 읽을 수 있는지 확인하는 데 사용됩니다 .

  • KERNEL=='sd?'매개변수 앞에 추가해 보세요 ACTION.

현재 서버를 사용 중이라 아직 재시작을 시도하지 않았습니다. 적절한 디버깅을 위해 재부팅하지 않고 udev가 규칙을 올바르게 다시 로드할 수 있도록 하는 데 필요한 것이 무엇인지 한 번에 결정하는 것이 가장 좋습니다.

도움을 주시면 감사하겠습니다.

최선을 다하세요, 안드레아스

답변1

RUN+="/bin/echo 1 >> /rule.test

udev출력을 리디렉션하려고 시도하지 마십시오(규칙 프로세스에서 완료되면 실제로 작동하지 않는 것 같습니다 RUN). 대신 RUN프로세스가 쉘 스크립트를 사용하여 필요한 명령을 실행하도록 하십시오.

디버깅하는 동안 스크립트가 작동하는 시기를 추적하는 것이 유용할 수 있으므로 /usr/local/bin/myscript.sh다음 코드를 저장하여 셸 스크립트를 만듭니다(물론 원하는 이름을 지정).

#!/bin/sh
printf '%s\n' "Script run by udev $( date +%c )" > /tmp/rule-test

위 스크립트는 스크립트가 실행될 때마다 디렉토리 rule-test의 파일 에 현재 시간을 씁니다. /tmp하지만 스크립트 실행 권한을 부여해야 합니다.

sudo chmod +x /usr/local/bin/myscript.sh

이제 RUN 섹션에 스크립트의 전체 경로가 포함되도록 udev 규칙을 변경하세요.

ACTION=="add", ENV{ID_FS_UUID}=="b527aadc-9dce-4ead-8937-e53ca2cfac84", RUN+="/usr/local/bin/myscript.sh"

마지막으로 udev규칙을 다시 로드합니다.

sudo udevadm control --reload

이제 하드 드라이브를 연결하고 시간이 기록되었는지 확인하세요 /tmp/rule-test.

myscript.sh일단 작동하면 원하는 다른 작업(예: 실행)을 수행하도록 설정할 수 rsync있으며 udev 규칙을 계속 변경할 필요가 없습니다. 단지 쉘 스크립트만 변경하면 됩니다.

udev재부팅하지 않고 규칙을 올바르게 다시 로드하는 데 필요한 것

사용 sudo udevadm control --reload.

관련 정보