[unix] udev 규칙을 디버깅하는 방법 (/etc/udev/rules.d/…)

새로운 기본 규칙을 만들고 있습니다

/etc/udev/rules.d/10-myrule.rules

포함 :

KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"

나는 다시 부팅하고 (인식 할 수있는 SD 카드를 삽입, 저장 /dev/sdb1나는 그것을 참조를 dmesg) 그러나 아무 일도 발생하지 않습니다. 수동으로 mount /dev/sdb1 /media하면 작동합니다.

이러한 udev규칙을 어떻게 문제 해결 / 디버그 할 수 있습니까?

참고 : ArchLinux를 사용하고 있지만 배포판에서 동일해야합니까?



답변

  • 10-jasonwryan이 언급했듯이 높은 번호 매기기 (90의 좋음)를 사용하십시오. 따라서 규칙은 다른 규칙에 우선하지 않습니다.
  • 필요한만큼 최소 키를 사용하십시오. 예를 들어, !=& GOTO/ LABEL대신 직접 사용하십시오.==

    ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
    
  • 당신의 목표는 sdb1고정 명령으로,KERNEL=="sdb1"

  • 섀도 디버깅 규칙을 만드는 것이 유용하다는 것을 알았습니다. 항상 같은 파일에 그대로두기 때문에 shadow라고했습니다. 그래서 필요할 때 사용합니다.

    ACTION=="add", KERNEL=="sdb*", RUN+="/bin/sh -c 'echo == >> /home/user/Desktop/udev-env.txt; env >> /home/user/Desktop/udev-env.txt'"
    #ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
    

    참고 : udev-env.txt 이 생성되면 규칙이 트리거됩니다. ==일치하는 하나의 노드에해당하는줄. 해당 파일에 기록 된 ENV는 2 노드 이상에서 혼합 될 수 있으며 거의 ​​동시에 생성되며stdout버퍼링 문제입니다.

  • 사용 udevadm monitor -u, udevadm test ...그리고 udevadm trigger ... 규칙이 이벤트를 처리하는 확인합니다.

  • 스크립트 내부에는 반환 값 stdoutstderr메시지를 저장하여 디버그 로그를 작성하고 실패한 명령을 잡을 수 있습니다.

최신 정보:

  • 참조 : udev_237- man udev (우분투 _18.04)

    RUN{type}

    Note that running programs that access the network or mount/unmount filesystems is not
    allowed inside of udev rules, due to the default sandbox that is enforced on
    systemd-udevd.service.
    

답변

나는 당신이 찾고있는 명령이 여기 있다고 생각합니다 udevadm. triggertest매개 변수를 사용하여 udev 이벤트의 재검색을 트리거하고 각각 특정 이벤트를 테스트합니다.

EL 7에서 명명 된 새로운 네트워크 장치를 사용하여이 문제를 해결하는 데 어려움을 겪었습니다. 행운을 빌어 요!


답변

  1. udev 규칙 파일 작성

    sudo nano /etc/udev/rules.d/99-removable-sd.rules
    
  2. udisk에 자동 마운트를 지시하는 규칙 추가

    SUBSYSTEM=="block", SUBSYSTEMS=="mmc", DRIVERS=="mmcblk", ATTRS{type}=="SD", ENV{UDISKS_AUTO}="1", ENV{UDISKS_SYSTEM}="0"
    

    ATTRS{type}=="SD" 다른 유형을 사용하는 경우 필요하지 않을 수 있습니다.

  3. 새로 고침 규칙

    sudo udevadm control -R
    
  4. 꺼내서 다시 넣습니다.

참조 : Archlinux Wiki : 이동식으로 처리해야하는 일부 장치는 그렇지 않습니다


답변

RASPBERRY PI 3 B +와 동일한 문제가 발생했습니다. 위의 명령이 도움이 될 수 있습니다. 그러나 그것은 도움이되지 않았습니다. USB 저장 장치를 삽입 할 때 스크립트를 호출하려고했습니다. 규칙은 syslog에 기록되지 않으므로 어떤 규칙이 작동했는지 또는 어떤 규칙이 실패했는지 이해하기가 매우 어려워집니다.

그래서 나는 다음을 수행했다.

(1) 나는 /etc/udev/rules.d/100-myrule.rules에 규칙 파일을 만들었습니다.

(2) 그런 다음 명령을 실행했습니다. sudo /etc/init.d/udev restart

그런 다음 작동하는지 확인했습니다. 정보는 유용 할 수도 있고 아닐 수도 있지만 파일 시스템은 (2)의 명령이 실행될 때까지 udev에 대해 읽기 전용입니다.


답변