如何在 Red Hat Linux 7 中禁用一致的网络设备命名

在 Red Hat Enterprise Linux 7 中,他们引入了网络设备命名方案,其中提供了为网络接口命名一致且可预测的网络设备的方法。
这些功能会更改系统上网络接口的名称,以便更轻松地定位和区分接口。

尽管在很多情况下我们更愿意坚持传统的命名方案,其中接口名称是 eth[0123...]。
默认情况下,在 RHEL 7 节点上,将启用一致的网络设备命名,但如果我们希望禁用它,则有几种方法。

此命名方案是通过使用 udev 和/或者 biosdevname 的不同规则集启用的,具体取决于系统上启用的内核参数。
biosdevname 在除 DELL 之外的所有硬件上默认禁用,如果我们希望启用 biosdevname,那么我们必须在内核命令行参数中显式地添加 biosdevname=1.

重要说明:红帽强烈建议使用一致的网络设备命名。
在启动时(或者每当加载网络驱动程序时),内核总是为接口分配 ethX 样式名称,其中 X 是当前未使用的最低数字,从 0(零)开始。
内核无法确保驱动程序或者接口每次都以相同的顺序出现。
因此,每次系统启动时,某些操作系统功能必须确保给定的接口始终分配相同的名称,因此在启动过程中会看到接口的重命名。
在 RHEL 7 中,此 OS 功能由 systemd 的可预测网络接口功能提供。

如果没有可预测的网络接口功能,网络接口将保留其原始 ethX 样式名称。
但是,将没有 OS 功能确保特定接口在启动时始终具有相同的 ethX 样式名称,因此设备命名变得不可预测。
后续的引导可能会有相同的接口被赋予不同的 ethX 名称,这可能会导致许多问题。

要禁用一致的网络设备命名:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link/ether 08:00:27:b7:6e:24 brd ff:ff:ff:ff:ff:ff
     inet 192.168.1.5/24 brd 192.168.1.255 scope global dynamic enp0s3
        valid_lft 86256sec preferred_lft 86256sec
     inet6 fe80::a00:27ff:feb7:6e24/64 scope link
        valid_lft forever preferred_lft forever
# vim /etc/default/grub
 GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet net.ifnames=0"
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d6e5b9fa407542fcbcaa72e7e6b777e2
Found initrd image: /boot/initramfs-0-rescue-d6e5b9fa407542fcbcaa72e7e6b777e2.img
done

重启服务器,使设置生效:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link/ether 08:00:27:b7:6e:24 brd ff:ff:ff:ff:ff:ff
     inet 192.168.1.6/24 brd 192.168.1.255 scope global dynamic eth0
        valid_lft 86390sec preferred_lft 86390sec
     inet 192.168.1.5/24 brd 192.168.1.255 scope global secondary dynamic eth0
        valid_lft 86389sec preferred_lft 86389sec
     inet6 fe80::a00:27ff:feb7:6e24/64 scope link
        valid_lft forever preferred_lft forever

如果您的节点还启用了 biosdevname,那么您还必须禁用它才能使用传统接口名称,这可以通过在 GRUB_CMDLINE_LINUX 中添加 biosdevname=0 来完成

# vim /etc/default/grub
 GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet net.ifnames=0 biosdevname=0"
# grub2-mkconfig -o /boot/grub2/grub.cfg

重启服务器,使设置生效

如何在 kickstart 上禁用一致的网络设备命名?

要在 kickstart 上禁用此功能,我们必须在两个配置文件下工作

1.修改kickstart.conf中的“bootloader”部分
2.修改tftp cfg文件的default.cfg

在 kickstart 文件中查找带有引导加载程序(bootloader )的部分(如果没有,则添加新的1行):

bootloader --location=mbr --append="net.ifnames=0 biosdevname=0"

在 TFTP 配置文件下面附加(pxelinux.cfg 文件名可能因您的情况而异)

# vim /var/lib/tftp/linux-install/pxelinux.cfg
default autoinst
label autoinst
        IPAPPEND 2
        kernel rhel7_64/vmlinuz
        append initrd=rhel7_64/initrd.img ramdisk_size=65536  vga=no ksdevice=bootif ks=nfs:10.43.138.1:/myfile/kickstart.conf linux edd=off net.ifnames=0 biosdevname=0

这将确保当通过 initrd 将 IP 分配给接口时,接口是使用 eth0 创建的,并且 kickstart 文件将确保一旦安装了节点,目标节点上的所有接口都将具有 ethX 命名约定

日期:2020-06-02 22:18:30 来源:oir作者:oir