PCI 주소를 기반으로 NIC 이름 결정

PCI 주소를 기반으로 NIC 이름 결정

이전 시스템을 RHEL 5.4에서 5.8로 업그레이드하고 있습니다. 3개의 NIC가 설치되어 있으며 각각 정의된 IP 주소와 연결된 배선이 있습니다.

업그레이드 후 카드는 동일한 PCI 주소에 있지만 운영 체제에서 NIC 이름이 잘못되었습니다.

network old  new
net A   eth0 eth1
net B   eth1 eth2
net C   eth2 eth0

사용되는 PCI 주소는 05.03.0이고 Net C나머지 두 개는 03.03.0이고 입니다 03.03.1.

파일이 없습니다 /etc/udev/rules.d/70-persistent-net.rules.

각 인터페이스가 사용하는 PCI 주소를 지정하는 방법이 있습니까?

고쳐 쓰다

IP와 MAC 주소 값이 포함된 파일을 찾았습니다 /etc/sysconfig/hwconf. /etc/sysconfig/network-scripts/ifcfg-eth?hwconf는 PCI 주소도 지정하지만 시작 시 무시되는 것 같습니다.

다른 카드를 사용할 때 변경되는 MAC 주소가 아닌 동작을 결정하는 데 실제로 사용되는 PCI 위치로 NIC를 지정할 수 있기를 바랍니다.

답변1

이는 일반적으로 PCI 주소가 아닌 MAC 주소를 사용하여 수행됩니다.

  1. RHEL 5.8이 /etc/udev/rules.d/70-pertant-net.rules 파일을 지원하는 경우 해당 파일을 생성할 수 있습니다.

    다른 컴퓨터에서 복사하여 MAC 주소를 기반으로 올바른 장치 이름이 할당되도록 편집하세요.

    해당 파일에서 실제로 필요한 것은 다음과 같은 3줄입니다. (새 줄을 무시하면 모두 한 줄입니다.)

    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:23:cd:b0:23:b9", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

    NIC 및 요구 사항에 맞게 ATTR{addresss} 및 NAME="eth[012]"를 변경합니다.

    RHEL 5.4 또는 5.8에 있는지는 확실하지 않지만 /lib/udev/write_net_rules라는 스크립트가 있는지 확인하는 것이 좋습니다. 있는 경우 실행하면 70-percious-net이 생성됩니다. 규칙 파일이므로 각 네트워크 카드의 이름을 편집하면 됩니다.

    를 사용하여 MAC 주소를 가져온 ifconfig | grep 'eth.*HWaddr'다음 이를 복사하여 70-pertant-net.rules 파일에 붙여넣을 수 있습니다.

    완료되면 모든 인터페이스를 다시 시작하거나 종료하고, 커널 드라이버 모듈을 언로드하고, 모듈을 다시 로드한 다음(이제 인터페이스에 장치 이름이 할당됨) 인터페이스를 복원할 수 있습니다.

  2. udev 및 70-pertant-net.rules 파일을 사용하기 전에는 wireless-tools 패키지에서 호출되는 프로그램을 사용했습니다 ifrename(무선뿐만 아니라 모든 NIC에서 작동함). /etc/iftab 파일을 사용하여 MAC 주소로 네트워크 인터페이스의 이름을 바꿉니다. 대부분 작동하지만 udev 방법만큼 안정적이지는 않습니다.

    RHEL용으로 패키지되어 있는지는 모르겠지만 다음에서 찾을 수 있습니다.http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html

  3. 나는 NIC에서 이 방법을 직접 사용하지 않았지만 udev를 사용하여 PCI 주소를 기반으로 장치 이름을 지속적으로 지정할 수도 있습니다. 먼저 /etc/udev/rules/70-percious-net.rules가 있으면 삭제합니다. 그런 다음 /etc/udev/rules에 새 파일을 만듭니다. 이름을 70-pertant-net-by-pci.rules로 지정할 수도 있습니다.

    다음 줄을 추가합니다.

    작업 == "추가", 하위 시스템 == "네트워크", 버스 == "pci", 코어 == "0000:03:03.0", 이름 = "eth0"
    작업 == "추가", 하위 시스템 == "네트워크", 버스 == "pci", 코어 == "0000:03:03.1", 이름 = "eth1"
    작업 == "추가", 하위 시스템 == "네트워크", 버스 == "pci", 코어 == "0000:05:03.0", 이름 = "eth2"
    

    일부 최신 Linux(예: Ubuntu 13.04 이상)에서는 BUS 한정자를 제거해야 하므로 규칙은 다음과 같습니다.

    작업 == "추가", 하위 시스템 == "네트워크", 커널 == "0000:03:03.0", 이름 == "eth0"
    

    그런 다음 위에 설명된 대로 드라이버 모듈을 재부팅하거나 제거하고 다시 로드하십시오.

    자세한 내용은 다음에서 확인할 수 있습니다.http://linux-tips.org/article/73/pertant-device-naming-with-udev- 하지만 페이지가 꽤 오래되었고 오래된 udevinfo명령을 참조하고 있습니다. udevadm info대신 사용

답변2

RedHat 5에서는 MAC 및 인터페이스 이름이면 충분합니다. 나는 거기에서 udev 또는 PCI 지정자를 조작한 적이 없습니다.

HWADDR을 MAC으로, DEVICE를 대상 장치 이름으로 설정합니다.

이름에 관해서는/etc/sysconfig/네트워크*구성 이름에 의미 있는 별칭을 사용할 수 있습니다.ifcfg-별칭.

관련 정보