새로 작성된 규칙이 작동 할 수 있도록 udev 규칙을 어떻게 다시로드해야합니까?
Arch Linux를 실행 중이며 udevstart
여기 에는 명령 이 없습니다 .
또한 /etc/rc.d
udev 서비스가 없습니다.
udev
? 의 관리자 /dev
입니까?
새로 작성된 규칙이 작동 할 수 있도록 udev 규칙을 어떻게 다시로드해야합니까?
Arch Linux를 실행 중이며 udevstart
여기 에는 명령 이 없습니다 .
또한 /etc/rc.d
udev 서비스가 없습니다.
udev
? 의 관리자 /dev
입니까?
답변:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
나중에 필요 합니까?
udevtrigger
대신 (또는 udevadm trigger
대부분의 배포판에서) 대신 (또는 장치를 꽂았다가 다시 꽂아야 할) 수도 있습니다. --reload-rules
자동으로 발생하므로 거의 항상 쓸모가 없습니다.
udevadm trigger
CentOS 6에서 트릭을 수행했습니다.
udevtrigger
또는 udevadm trigger
나를 위해 일하지 않았다. 모듈을 언로드하고로드 한 후 일부 장치가 작동한다는 것을 알았습니다 (로드 가능한 모듈이라고 가정). 내가 알게 된 것은 반드시 시스템을 재부팅 할 필요는 없다는 것입니다. 네트워크 디바이스의 예, 내가 rmmod ixgbe
, rmmod tg3
, rmmod e1000
다음 modprobe ixgbe
, modprobe tg3
, modprobe e1000
네트워크 드라이버의 종류에 따라.
ip link set $oldname name $newname
언급되어 있습니다 . 필자의 경우, iface라는 이름 lan
의 브리지 된 iface (KVM 용) 로 교체해야 했기 때문에 원래의 기본 iface는 이전 이름 인을 가져와야했습니다 eth1
. 그래서 트릭은 : 1) iface를 내립니다. 2) 네트워크 설정을 수정하십시오. 3) udev 이름 지정 규칙 파일을 업데이트하십시오. 4) ip link...
;를 사용하여 iface의 이름을 바꿉니다 . 5) 다리를 들어 올리십시오.
Udev는 inotify 메커니즘을 사용하여 라이브러리와 로컬 구성 트리 (일반적으로 /lib/udev/rules.d
and 에 위치)에서 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'
.
inotify
메커니즘은 항상 udev 규칙 파일의 변경 사항을 포착하지는 않습니다. 예를 들어 cat > 10-name.rules
내용을 붙여 규칙 파일을 변경하는 데 사용 하는 경우을 사용하여 규칙을 수동으로 다시로드해야 udevadm
합니다. Raspbian Stretch에서 테스트되었습니다.
--reload-rules
드문 경우에만 필요했습니다.
inotify
메커니즘이 작동했습니다.
언젠가 필요하기 때문에 이것을 추가하고 있습니다 ... 다시.
이더넷 장치 번호와 MAC 주소가 일치하지 않는 경우가 있습니다. VM에서 실행 중이고 각 장치가 다른 VLAN에 할당 된 경우와 같이 때때로 이것이 중요합니다.
/etc/udev/rules.d/70-persistent-net.rules
(또는 이에 상응하는 내용)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
이것이 얼마나 잘 작동하는지 놀랐습니다.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
이것이 적용되는지 확실하지 않으며, 이것은 확실히 오래된 게시물이지만 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에 들어간 경우에는 나쁜 일입니다!) :
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
제 경우에는 igb
입니다. 그래서 그냥 인쇄합니다.
sudo rmmod igb
( igb
1 단계에서 얻은 카드 드라이버로 교체 하십시오.그런 다음 /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