我的 Ubuntu 桌面 16.04 机器有 udev 规则:
user@desktop:~$ sudo tree /etc/udev/
/etc/udev/
├── hwdb.d
├── rules.d
│ ├── 48-adwits.rules
│ ├── 49-stlinkv1.rules
│ ├── 49-stlinkv2-1.rules
│ ├── 49-stlinkv2.rules
│ ├── 49-stlinkv3.rules
│ ├── 51-android.rules
│ ├── 60-uv4l.rules
│ ├── 65-uv4l_uvc.rules
│ ├── 70-persistent-net.rules
│ └── 85-lpcxpresso.rules
└── udev.conf
2 directories, 11 files
user@desktop:~$ cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f8:b1:56:e8:1b:f4", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
但是我有两台没有规则的 Ubuntu 16.04 服务器机器:
user@server1:~$ sudo tree /etc/udev/
/etc/udev/
├── hwdb.d
├── rules.d
└── udev.conf
2 directories, 1 file
这些服务器各有四个以太网接口,但其枚举顺序不同:
服务器 1:
user@server1:~$ cat /proc/net/bonding/bond* | egrep '(Interface|HW addr)'
Slave Interface: eth0
Permanent HW addr: 34:17:eb:eb:d7:32
Slave Interface: eth1
Permanent HW addr: 6c:b3:11:1b:b5:76
Slave Interface: eth2
Permanent HW addr: 34:17:eb:eb:d7:33
Slave Interface: eth3
Permanent HW addr: 6c:b3:11:1b:b5:77
服务器2:
user@server2:/etc/udev$ cat /proc/net/bonding/bond* | egrep '(Interface|HW addr)'
Slave Interface: eth0
Permanent HW addr: 34:17:eb:ea:f3:3e
Slave Interface: eth1
Permanent HW addr: 34:17:eb:ea:f3:3f
Slave Interface: eth2
Permanent HW addr: 6c:b3:11:1c:ac:68
Slave Interface: eth3
Permanent HW addr: 6c:b3:11:1c:ac:69
两台服务器枚举的 eth 接口不同。在服务器一上,eth0/eth2 和 eth1/eth3 是双网卡的名称,而在服务器二上,eth0/eth1 和 eth2/eth3 是双网卡的名称。
我怎样才能让这些服务器生成 70-persistent-net.rules 文件,以便我可以编辑这些文件,让两个服务器在相同的 rj45 插座位置具有相同的接口名称?
桌面版本中是否存在某个特定的 udev 包,而服务器版本中却缺少该包,并且该包导致 /etc/udev 树几乎为空?
PS:所有 mac 地址的第四和第五个字节都已出于安全考虑进行了更改,但是前导(制造商)字节和最后一个字节保持不变。
答案1
嗯,系统中的 Udev 规则在 中/lib/udev/rules.d/
。否则您将无法启动。
dpkg -L udev
其中一个服务器是从 trusty 升级的吗?自 systemd 版本 204 以来,cannonical 删除了 75-persistent-net-generator.rules 和其他规则。systemd 204
但是自己的规则/etc/udev/rules.d
是由 udev 读取的。