Linux 시스템 운영 체제 네트워크 카드 드리프트 솔루션 및 문제 원인

1. 문제 설명

이 회사는 RHEL7.4 & Kirin 7.4 시스템과 함께 설치된 100-150 개의 서버를 보유하고 있습니다. 네트워크 카드의 편집 및 구성을 용이하게하려면 스크립트를 사용하여 biosname = 0, ifname = 0을 구성하십시오. 목적은 en1o2p의 긴 문자 네트워크 카드 이름을 기존으로 표준화하는 것입니다. eth *, 기존 네트워크 카드 식별 방법을 사용하지만 설치가 완료된 후 IP를 구성하면 BOND 듀얼 네트워크 카드에 네트워크 드리프트 현상이 있습니다. 현상은 네트워크 카드를 다시 시작한 후 모든 네트워크 포트가 변경되고 네트워크가 차단되는 것입니다.

2. 원리 설명

  • /usr/lib/udev/rules.d/60-net.rules에는 모든 / etc / sysconfig / network-scripts / ifcfg 접미사 파일을 보도록 udev 보조 유틸리티 / lib / udev / rename_device에 지시하는 규칙이 있습니다. HWADDR 항목이있는 ifcfg 파일이 인터페이스의 MAC 주소와 일치하는 것을 발견하면 인터페이스의 이름을 ifcfg 파일의 DEVICE 명령에 지정된 이름으로 바꿉니다.
  • /usr/lib/udev/rules.d/71-biosdevname.rules에서 biosdevname에 지시하여 이름 지정 전략에 따라 인터페이스 이름을 변경합니다. 단, 인터페이스 이름이 이전 단계에서 변경되지 않고 biosdevname이 설치되어 있고 부팅 명령 줄에있는 경우 커널 명령으로 biosdevname = 0이 제공되지 않습니다.
  • /lib/udev/rules.d/75-net-description.rules의 규칙은 네트워크 인터페이스 장치를 확인하여 udev가 내부 udev 장치 속성 값 id_net_name_board, ID_NET_NAME_SLOT, ID_NET_NAME_PATH, ID_NET_NAME_MAC을 채우도록 지시합니다. 일부 장치 속성은 정의되지 않을 수 있습니다.
  • /usr/lib/udev/rules.d/80-net-name-slot.rules에는 udev가 인터페이스 이름을 바꾸도록 지시하는 규칙이 있습니다 (인터페이스가 1 단계 또는 2 단계에서 이름이 바뀌지 않은 경우) 및 커널 매개 변수 그물. 다음 우선 순위에 따라 : id_net_name_board, ID_NET_NAME _SLOT, ID_NET_NAME_PATH, ifnames = 0이 지정되지 않았습니다. 그중 하나가 설정되지 않은 경우 목록의 다음 항목으로 이동합니다. 이러한 매개 변수를 설정하지 않으면 인터페이스 이름이 변경되지 않습니다.
    2 단계는 실제로 biosdevname의 정책을 실행합니다. 3 단계와 4 단계는 실제로 Scheme 1, 2, 3을 실행합니다.

3. 처리 단계

실제 시나리오에서는 biosdevname = 0 ifname = 0의 구성이 사용되므로 실제 영향을받는 파일은 /usr/lib/udev/rules.d/60-net.rules 파일이며 구성 파일에서 사용됩니다. 다음 설정 :
Linux 시스템 운영 체제 네트워크 카드 드리프트 솔루션 및 문제 원인

이 설정을 사용하면 RHEL7.4 시스템 문제가 완전히 해결되며 거의 20 번의 테스트를 거친 후 네트워크 포트가 드리프트되지 않습니다. 그러나 입찰에 성공한 Kylin 7.4 시스템에서 보조 구성을 사용한 후 네트워크 포트 상태가 변경되지 않은 경우 드리프트가 발생하지 않지만 네트워크 포트 중 하나가 무작위로 분리되면 모든 네트워크 포트가 변경된
다음 udevadm test 명령을 사용합니다. 테스트,이 명령은 네트워크 카드의 이름에 따라 어떤 전략이 효과적인지 역 추적 할 수 있습니다. 출력 결과에서 RHEL7.4 & Successful Kylin 7.4 시스템은 모두 60 규칙 규칙이 적용되었음을 보여 주지만 우승 Kylin에 여전히 드리프트 문제가 있습니다. 문서 조회 및 추가 교체 테스트 후 기본적으로 시스템 차이에 의한 것으로 판단

4. 솔루션

시스템 명명 규칙을 사용하는 경우 네트워크 카드 이름은 en1o2p3과 유사합니다.이 명령은 네트워크 카드가 나오는 마더 보드의 PCI 슬롯과 버스 및 특정 포트를 정확하게 나타낼 수 있습니다. systemd 이름 지정 방법은 읽을 수 없지만이 문제를 해결하기 위해 변경 한 것이므로 동일한 systemd 방법에서 긴 형식의 네트워크 카드 이름을 사용하는 것이 좋습니다.
복원 스크립트는 다음과 같습니다.

#! /bin/bash
#  redhat还原脚本
cd /etc/sysconfig/network-scripts/
mv ifcfg- bak/
mv ifcfg-eth* bak/
mv ifcfg-bond0 bak/
cd /etc/sysconfig
cp grub  /home/grub.bak
sed -i "s/ net.ifnames=0/ /g" grub
sed -i "s/ biosdevname=0/ /g" grub
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
cd /boot/efi/EFI/redhat/
cp grub.cfg /home/grub.cfg.bak
sed -i "s/ net.ifnames=0/ /g" grub.cfg
sed -i "s/ biosdevname=0/ /g" grub.cfg
sleep 5
sync
sync
sync
reboot
#! /bin/bash
# 中标麒麟还原脚本
cd /etc/sysconfig/network-scripts/
mv ifcfg- bak/
mv ifcfg-eth* bak/
mv ifcfg-bond0 bak/
cd /etc/sysconfig
cp grub  /home/grub.bak
sed -i "s/net.ifnames=0/ /g" grub
sed -i "s/biosdevname=0/ /g" grub
grub2-mkconfig -o /boot/efi/EFI/neokylin/grub.cfg
cd /boot/efi/EFI/neokylin/
cp grub.cfg /home/grub.cfg.bak
sed -i "s/ net.ifnames=0/ /g" grub.cfg
sed -i "s/ biosdevname=0/ /g" grub.cfg
sleep 5
sync
sync
sync
reboot

전재의 소스를 표시하시기 바랍니다 :
1. 블로그에 표시된 원래 기사의 저작권은 heardic 원래 저자에 소유하여,
그렇지 않으면 침해로 간주됩니다, 2.이 문서의 내용은 원저자의 허락없이 재 인쇄 할 수 없습니다;
3.이 문서의 무단 전재 또는 인용의 출처를 표시해야 그리고 원저자
4. 본인은이 진술을 준수하지 않거나이 기사의 내용을 불법적으로 사용하는 사람들을 위해 조사를 진행할 권리가 있습니다.

추천

출처blog.51cto.com/13906754/2595685