새로운 기본 규칙을 만들고 있습니다
/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 ...
규칙이 이벤트를 처리하는 확인합니다. -
스크립트 내부에는 반환 값
stdout
과stderr
메시지를 저장하여 디버그 로그를 작성하고 실패한 명령을 잡을 수 있습니다.
최신 정보:
-
참조 : 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
. trigger
및 test
매개 변수를 사용하여 udev 이벤트의 재검색을 트리거하고 각각 특정 이벤트를 테스트합니다.
EL 7에서 명명 된 새로운 네트워크 장치를 사용하여이 문제를 해결하는 데 어려움을 겪었습니다. 행운을 빌어 요!
답변
-
udev 규칙 파일 작성
sudo nano /etc/udev/rules.d/99-removable-sd.rules
-
udisk에 자동 마운트를 지시하는 규칙 추가
SUBSYSTEM=="block", SUBSYSTEMS=="mmc", DRIVERS=="mmcblk", ATTRS{type}=="SD", ENV{UDISKS_AUTO}="1", ENV{UDISKS_SYSTEM}="0"
ATTRS{type}=="SD"
다른 유형을 사용하는 경우 필요하지 않을 수 있습니다. -
새로 고침 규칙
sudo udevadm control -R
-
꺼내서 다시 넣습니다.
참조 : 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에 대해 읽기 전용입니다.