The Dell system does not use the `biosdevname` scheme by default in RHEL 8 and 9

Solution Verified - Updated

Environment

  • Red Hat Enterprise Linux 9
  • Red Hat Enterprise Linux 8
  • leapp upgrade
  • biosdevname

Issue

  • After upgrade the system from RHEL 7 to RHEL 8 using leapp the biosdevname scheme is ignored and the interfaces use the systemd scheme.
  • In RHEL 8 the biosdevname package is installed and the file /usr/lib/udev/rules.d/71-biosdevname.rules is 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:

Category

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.