Linux – Biosdevname & net.ifnames
参考链接:http://benjr.tw/93340
传统的Linux 下面看到的网路装置名称都是从eth0, eth1, eth2 …. 一直连续下去,一般我们使用的电脑只有1 , 2 个网路埠,所以在使用上不会遇到太大的难题,但是在多个网路装置的伺服器上就头大了,到底哪一个ethx 是对应到哪一个实体装置.
还好现在有新的装置命名规则,目前看到有两种方式Biosdevname & net.ifnames
Biosdevname
在讨论Biosdevname 这种一致性的网络设备命名规则device naming rule ,我们先来看看什么是udev.
但老实说这还是很麻烦, Dell 戴尔开发了一个udev 的协助工具– Biosdevname,这是一个以GNU General Public License(GPL)下所开发的工具,它提供了一个一致性的命名机制,实体网路装置的名称会依据BIOS 所建议的方式来命名,命名规则大致如下.
- Embedded network interface (LOM)
- PCI card network interface
- Virtual function
[For example: p3p4_1]
biosdevname 会依据系统的SMBIOS –
- RHEL (RedHat)
#yum install biosdevname
接着在Kernel 加入参数biosdevname=1
#vi /boot/grub/grub.conf
kernel /boot/vmlinuz biosdevname=1
initrd /boot/initrd.img
[root@localhost ~]# cat /etc/
default
/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=
"$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=
"console"
GRUB_CMDLINE_LINUX=
"crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY=
"true"
[root@localhost ~]# grub2-mkconfig
- 如果系统使用的是 Ubuntu
#apt-get install biosdevname
一样在append 加入参数biosdevname=1
#vi /boot/grub/grub.conf
kernel /boot/vmlinuz
append initrd=/boot/initrd.img biosdevname=1
如果要取消将biosdevname=0 即可.
或者是手动更改/etc/udev/rules.d/70-persistent-net.rules 改变其命名规则.下面示范列参考
# vi /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x14e4:0x1680 (tg3)
ACTION== "add" , SUBSYSTEM== "net" , DRIVER== "tg3" , ATTR{address}== "00:1A:64:22:04:83" , NAME= "em1"
|
只要修改NAME 的部分,如果系统没有/etc/udev/rules.d/70-persistent-net.rules 请自行创建.
这一篇就讨论到如何自行修改网路装置的命名规则.
net.ifnames
要查net.ifnames 请用这个关键字Predictable Network Interface Names,这个是预设的功能,除非你在开机的时候加入核心参数net.ifnames=0 ,前面介绍的biosdevname 也就没有再用了,先来看看Predictable Network Interface 的命名规则长怎样!!
装置名称由装置类型+ 装置位置+数字组成:
- en for Ethernet,
- wl for wireless LAN (WLAN),
- ww for wireless wide area network (WWAN).
装置位置+数字
- o
on-board device index number - s[f][d] hotplug slot index number
- x
MAC address - ps[f][d] PCI geographical location
- ps[f][u][..][i] USB port number chain
enp0s3 就代表Ethernet ,PCI bus 0,slot 3
Biosdevname & net.ifnames
问题来了,如果Biosdevname & net.ifnames 都用了,那名称会变成怎么样!!!
- No parameters (net.ifnames 为预设): NIC identified as “enp5s2”.
- Parameter biosdevname=0 (net.ifnames 为预设): NIC identified as “enp5s2”.
- Parameter net.ifnames=0 (采用biosdevname 规则): NIC identified as “em1”.
- Parameter net.ifnames=0 AND biosdevname=0 (最传统的方式,eth0 eth1 傻傻分不清): NIC identified as “eth0”.