NFS 루트와 예측 가능한 네트워크 인터페이스를 사용하여 이더넷 인터페이스 이름이 다르다는 것을 발견했습니다. 커널에 의해 구성된 인터페이스 중 하나는 eth0으로 명명되었고, 다른 인터페이스는 네트워크 장치 명명 체계에 따라 명명되었습니다. 따라서 동일한 Image가 로컬에서 시작되고 네트워크를 통해 시작되면 동일한 인터페이스의 최종 이름이 다릅니다. 이는 일부 구성을 방해하는 것 같습니다. 예를 들어 [eth0]을 사용하는 ptp4l.service 구성이 있으므로 로컬 및 네트워크 부팅을 위해 [end0] 및 [eth0]을 사용하여 별도의 구성을 만들어야 하는데 이는 불편한 것 같습니다.
NFS 루트를 사용하는 경우 NFS 루트가 의존하는 이더넷 인터페이스가 있습니다. 따라서 커널에 의해 구성되고 이름이 지정되며 설정할 수 없습니다.
NFS 루트 systemd-udevd.service를 사용하면 eth0의 이름을 바꿀 수 없음이 표시됩니다.
systemd-udevd[180]: eth0: Network interface 'eth0' is already up, refusing to rename to 'end0'.
하지만 eth0에는 이미 ID_NET_NAME_ONBOARD가 있습니다.
# udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null
ID_NET_NAMING_SCHEME=v252
ID_NET_NAME_MAC=xxxxxxxxxxxxx
ID_NET_NAME_ONBOARD=end0
예측 가능한 네트워크 인터페이스 이름을 비활성화하는 것은 고려하지 않습니다.
그렇다면 커널 부팅 중에 이더넷 인터페이스 이름을 설정하거나 systemd-udevd가 ID_NET_NAME_ONBOARD를 사용하여 구성된 인터페이스의 이름을 바꾸도록 강제하는 방법이 있습니까?
답변1
또는 ID_NET_NAME_ONBOARD를 사용하여 systemd-udevd가 구성된 인터페이스의 이름을 바꾸도록 강제합니다.
이 작업은 매우 쉽게 수행할 수 있지만 나중에 보면핵심이름 변경을 거부하고 systemd-udevd가 잘못된 당사자가 아닌 경우 systemd-udevd를 물리치려는 시도는 의미가 없습니다.
"예측 가능한 네트워크 인터페이스 이름"에는 마법 같은 것이 없습니다. 이것은 단지 udev 규칙일 뿐이며, udev는 ip link set
인터페이스 이름을 바꾸는 데 동일한 방법을 사용합니다.
예측 가능한 네트워크 인터페이스 이름이 NFS 루트로 테스트되었으며 이 상황에 대한 올바른 솔루션이 있을 수 있습니다.
systemd/udev에서 권장하는 일반적인 솔루션은 initramfs를 사용하여 시작하는 것입니다. initramfs는 프로세스가 시작되기 전에 커널이 네트워크를 구성하도록 하는 대신 사용자 공간에서 이 작업을 수행합니다(그러면 NFS 루트도 마운트됩니다). initramfs는 네트워크 구성을 진행하기 전에 systemd-udevd를 시작하거나 다른 이름 바꾸기를 수행할 수 있습니다.
systemd-networkd의 최신 버전은 커널 명령줄 네트워크 매개변수도 인식하므로 해당 매개변수를 initramfs에 더 쉽게 포함할 수 있습니다.