재부팅하지 않고 udev 규칙을 다시로드하는 방법은 무엇입니까? 작동 할 수 있도록 udev

새로 작성된 규칙이 작동 할 수 있도록 udev 규칙을 어떻게 다시로드해야합니까?

Arch Linux를 실행 중이며 udevstart여기 에는 명령 이 없습니다 .

또한 /etc/rc.dudev 서비스가 없습니다.



답변

# udevadm control --reload-rules && udevadm trigger

답변

Udev는 inotify 메커니즘을 사용하여 라이브러리와 로컬 구성 트리 (일반적으로 /lib/udev/rules.dand 에 위치)에서 rules 디렉토리의 변경 사항을 감시합니다 /etc/udev/rules.d. 따라서 대부분 규칙 파일을 변경할 때 아무 것도 할 필요가 없습니다.

다른 디렉토리에 파일을 포함하는 규칙이있는 경우와 같이 비정상적인 작업을 수행하는 경우 udev 데몬에 명시 적으로 알리면됩니다. 그런 다음 일반적인 규칙을 사용하여 데몬에게 구성을 다시로드하도록 요청하십시오. SIGHUP ( pkill -HUP udevd)을 보내십시오 . 또는 다음 udevadm명령을 사용할 수 있습니다 udevadm control --reload-rules..

그러나 udev의 버전마다 이전에 규칙을 자동으로 다시로드하기위한 트리거가 서로 다릅니다. 의심스러운 경우 전화하십시오 udevadm control --reload-rules: 어쨌든 아무런 해를 끼치 지 않습니다.

udev 규칙은 장치가 추가 된 경우에만 적용됩니다. 이미 연결된 장치에 규칙을 다시 적용하려면 udevadm trigger구성이 변경된 장치와 일치하는 올바른 옵션을 호출 하여 이를 명시 적으로 수행해야합니다 (예 🙂 udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.


답변

언젠가 필요하기 때문에 이것을 추가하고 있습니다 … 다시.

이더넷 장치 번호와 MAC 주소가 일치하지 않는 경우가 있습니다. VM에서 실행 중이고 각 장치가 다른 VLAN에 할당 된 경우와 같이 때때로 이것이 중요합니다.

  1. 네트워크 인터페이스를 중단 한 다음
  2. 수정 /etc/udev/rules.d/70-persistent-net.rules(또는 이에 상응하는 내용)
  3. 로 다시로드 udevadm control --reload-rules
  4. 다시 트리거 udevadm trigger --attr-match=subsystem=net
  5. 네트워크 인터페이스를 가동시킵니다.

이것이 얼마나 잘 작동하는지 놀랐습니다.


답변

이것이 적용되는지 확실하지 않으며, 이것은 확실히 오래된 게시물이지만 udev 정보에 대한 웹 검색이 상당히 높아서 지식을 공유 할 수 있다고 생각했습니다.

특정 장치에 대해 수동으로 udev 규칙을 트리거 할 수 있습니다. 이는 Redhat 관련 배포판 (centos fedora 등)에만 적용됩니다.

규칙 파일 ( /etc/udev/rules.d/whateveryoucalledyourrules) 에서 관련 사항을 변경 change하면 장치의 이벤트에 에코 할 수 있습니다 .

echo change > /sys/block/devname/partname1/uevent

이 장치에서만 udev 규칙을 읽습니다. 내 의견으로는 훨씬 더 좋았고 더 타겟팅되었습니다.


답변

나를 위해, 아래의 명령 순서는 원하는대로 작동했습니다.

번호 /etc/udev/rules.d/70-persistent-net.rules를 변경하고 eth재부팅하지 않고 다시로드하도록 수정했습니다 .

/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start

이 작업을 수행하면 시스템을 재부팅하지 않고 런타임에 성공적으로로드되었습니다.

매뉴얼 페이지를 읽음으로써 스스로 이것을 발견 했으므로 이것에 대한 제안이나 제안은 환영합니다.


답변

나는 추가 해요 올바른 가 @enthusiasticgeek에서 주석에 통지 걸 렸어요 때문에 여기에 대한 답을. 당신이해야 할 모든 것 (당신이 서버의 콘솔에 있다고 가정하면-분명히 당신이 ssh에 들어간 경우에는 나쁜 일입니다!) :

  1. 사용중인 인터페이스 모듈 목록을 가져옵니다.

cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq

제 경우에는 igb입니다. 그래서 그냥 인쇄합니다.

  1. 유형 sudo rmmod igb( igb1 단계에서 얻은 카드 드라이버로 교체 하십시오.

그런 다음 /etc/udev/rules.d/70-persistent-net.rules필요에 따라 편집 한 다음을 사용하여 모듈을 다시로드하고 사용자 모듈로 modprobe igb다시 교체 igb하십시오.


답변

여러 네트워크의 경우

cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet