The Dell system does not use the `biosdevname` scheme by default in RHEL 8 and 9
Environment
- Red Hat Enterprise Linux 9
- Red Hat Enterprise Linux 8
leapp upgradebiosdevname
Issue
- After upgrade the system from RHEL 7 to RHEL 8 using leapp the
biosdevnamescheme is ignored and the interfaces use thesystemdscheme. - In RHEL 8 the
biosdevnamepackage is installed and the file/usr/lib/udev/rules.d/71-biosdevname.rulesis present, however the rule is ignored.
Resolution
Add the parameter biosdevname=1 to the kernel command line.
# grubby --info=ALL | grep args
args="console=tty0 console=ttyS0,115200n8 no_timer_check crashkernel=auto $tuned_params"
# grubby --update-kernel=ALL --args="biosdevname=1"
# grubby --info=ALL | grep args
args="console=tty0 console=ttyS0,115200n8 no_timer_check crashkernel=auto biosdevname=1 $tuned_params"
# systemctl reboot
For more information on how to add the parameter check the article:
Root Cause
The rule in RHEL 7 force the system to use the biosdevname=1 even if it's not specified in the kernel command line:
# cat /usr/lib/udev/rules.d/71-biosdevname.rules | grep Dell
# whitelist all Dell systems
ATTR{[dmi/id]sys_vendor}=="Dell*", ENV{UDEV_BIOSDEVNAME}="1"
This line is not present in the RHEL 8 rule:
# cat /usr/lib/udev/rules.d/71-biosdevname.rules | grep Dell
For RHEL 8 and RHEL 9 running on Dell hardware the biosdevname=1 must be specified in the kernel command line.
Diagnostic Steps
The biosdevname package is installed and the file /usr/lib/udev/rules.d/71-biosdevname.rules is created correctly. The system does not show biosdevname=1 on the kernel command line.
# cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-4.18.0-513.5.1.el8_9.x86_64 root=UUID=f7c93964-da54-4efa-8af3-f16616c286ad console=tty0 console=ttyS0,115200n8 no_timer_check crashkernel=auto
# rpm -qa | grep bios
biosdevname-0.7.3-2.el8.x86_64
# ll /usr/lib/udev/rules.d/ | grep biosdev
-rw-r--r--. 1 root root 995 Dec 18 2018 71-biosdevname.rules
However the rule/usr/lib/udev/rules.d/71-biosdevname.rules is ignored and interfaces are renamed using the systemd scheme.
# for i in eno3 eno4 eno1 ens2f0 ens2f1 ens7f0 ens7f1; do echo -n "$i : ";biosdevname -i $i; done
eno3 : em3
eno4 : em4
eno1 : em1
ens2f0 : p2p1
ens2f1 : p2p2
ens7f0 : p7p1
ens7f1 : p7p2
For information on how RHEL assigns network interface names using systemd's Predictable Network Interface naming scheme please check the documentation below:
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.