재부팅하지 않고 udev 규칙을 다시로드하는 방법은 무엇입니까?


209

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

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

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


1
최신 버전의 udev는 inotify 지원을 중단 했으므로 요즘에는 변경시 규칙을 다시로드해야합니다.
콜린 거스리

무엇입니까 udev? 의 관리자 /dev입니까?
Sandburg

1
@Sandburg 예, Linux 시스템에서 플러그 앤 플레이를 처리합니다.
Aaron D. Marasco

답변:


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

4
udevtrigger나중에 필요 합니까?
Nils

38
@Nils 실제로, udevtrigger대신 (또는 udevadm trigger대부분의 배포판에서) 대신 (또는 장치를 꽂았다가 다시 꽂아야 할) 수도 있습니다. --reload-rules자동으로 발생하므로 거의 항상 쓸모가 없습니다.
Gilles

12
udevadm triggerCentOS 6에서 트릭을 수행했습니다.
astrostl

3
udevtrigger또는 udevadm trigger나를 위해 일하지 않았다. 모듈을 언로드하고로드 한 후 일부 장치가 작동한다는 것을 알았습니다 (로드 가능한 모듈이라고 가정). 내가 알게 된 것은 반드시 시스템을 재부팅 할 필요는 없다는 것입니다. 네트워크 디바이스의 예, 내가 rmmod ixgbe, rmmod tg3, rmmod e1000다음 modprobe ixgbe, modprobe tg3, modprobe e1000네트워크 드라이버의 종류에 따라.
enthusiasticgeek

1
답변 중 언급 된 것은 데비안 Jessie (8.0)에서 나에게 도움이되지 않았습니다. 일한 것은 여기ip link set $oldname name $newname언급되어 있습니다 . 필자의 경우, iface라는 이름 lan의 브리지 된 iface (KVM 용) 로 교체해야 했기 때문에 원래의 기본 iface는 이전 이름 ​​인을 가져와야했습니다 eth1. 그래서 트릭은 : 1) iface를 내립니다. 2) 네트워크 설정을 수정하십시오. 3) udev 이름 지정 규칙 파일을 업데이트하십시오. 4) ip link...;를 사용하여 iface의 이름을 바꿉니다 . 5) 다리를 들어 올리십시오.
kostix

69

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'.


1
systemd udev는 inotify를 사용하여 규칙 변경을 감시합니까?
Craig McQueen

inotify메커니즘은 항상 udev 규칙 파일의 변경 사항을 포착하지는 않습니다. 예를 들어 cat > 10-name.rules내용을 붙여 규칙 파일을 변경하는 데 사용 하는 경우을 사용하여 규칙을 수동으로 다시로드해야 udevadm합니다. Raspbian Stretch에서 테스트되었습니다.
다니엘 K.

@DanielK. 최근에 변경 되었습니까? IIRC 나는이 답변을 게시 할 때 systemd udev와 non-systemd udev를 모두 확인했으며 둘 다 inotify를 사용했기 때문에 --reload-rules드문 경우에만 필요했습니다.
Gilles

@Gilles : 어쩌면 위의 예제 (셸 리디렉션을 사용하여 기존 규칙 파일을 덮어 쓰는 것)를 "흔하지 않은 경우"로 간주 할 수 있습니다. vi와 같은 편집기로이 파일을 수정했을 때 inotify메커니즘이 작동했습니다.
Daniel K.

@DanielK. 아, 그거 알아요. 드문 일이 아닙니다. 일부 편집자는 파일을 다시 작성하여 파일을 저장합니다 (Vim 및 Emacs에서는 구성 방법에 따라 다름). udev는 사례 중 하나만 처리한다는 사실이 이상합니다. 버그를 다르게 처리해야 할 이유를 생각할 수 없기 때문에 버그처럼 보입니다.
Gilles

19

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

이더넷 장치 번호와 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. 네트워크 인터페이스를 가동시킵니다.

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


6
Red Hat에 :service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Alexander Torstling

1
데비안 테스트에서 'udevadm trigger --attr-match = subsystem = net'이 작동하지 않습니다. 나는 USB 이더넷 카드를 뽑고 꽂아야 만 udev가 새로운 규칙을 촉발했습니다.
Trismegistos 2016

클레이튼 듀크스의 답변에 따라 언 플러그 / 플러그가 네트워크 드라이버를 제거하고 다시로드하는 것과 비슷하다고 Trismegistos에 베팅하고 싶습니다.
Mike S

12

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

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

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

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

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


4

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

번호 /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

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

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


2

나는 추가 해요 올바른 가 @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하십시오.


이것은 Otheus의 답변과 결합하여 기계 재부팅없이 Mellanox 네트워크 카드 구성을 수정할 수있는 비밀 소스였습니다. 드라이버로드와 persist-net.rules 파일의 udevadm 읽기는 시스템 부팅시와 거의 비슷하다고 생각합니다.
Mike S

0

여러 네트워크의 경우

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.