折腾了几天,踩了不少坑,终于搞定了,来汇报一下。
首先,下面的方案只适合于 Debian 8 Jessie。从 Debian 9 开始,不确定下面的方法行不行,好象是 Debian 9 启用了 Predictable Network Interface Names,也叫 Consistent Network Device Naming,下面的方法不一定适用。
方法很简单,修改 /etc/udev/rules.d/70-persistent-net.rules 文件,如果这个文件没有,就 vim 或者 nano 创建这个文件。(网上说 70-persisten-net.rules 是运行 /lib/udev/write_net_rules 然后根据 /lib/udev/rules.d/75-persistent-net-generator-rules 自动创建出来的,the 70-persisten-net.rules file is (somehow) created by the /lib/udev/write_net_rules program, run by the /lib/udev/rules.d/75-persistent-net-generator-rules rules file. 我试了几次,不行,死活出不来这个文件,于是直接手动 create 了。)
在 70-persistent-net.rules 这个文件中,加入楼上说的:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}==MAC 地址, ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth9"
注意:这里有个巨坑!!!
ATTR{address}==MAC 地址 这里的 MAC 地址,必须小写!!!比如 E0:8D:B0:27:D0:32 这种是不行的,必须 ATTR{address}==“ e0:8d:b0:27:d0:32 ”
修改好之后,重启。
如果上面操作后没有反应,尝试 update-initramfs -u,重新生成启动镜像,然后重启。
启动完毕之后,执行 dmesg | grep eth,发现其实系统开机还是将 MAC 为“ e0:8d:b0:27:d0:32 ”识别成了 eth0,而不是一开始就是 eth9,在后续启动过程中,systemd 会根据规则对该网卡重命名。
参考:
( MAC 必须小写,我是找到这个地方才发现的,其实开始的方法就是对的,但是因为不知道这一点,折腾了很久。)
https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_network_interface_namehttp://www.reactivated.net/writing_udev_rules.html中文:
http://xiaoxuenotes.com/blog/2013/05/03/udev-update-interface-name-mac-mapping.html英文 StackExchange 高票答案是正确的,第一种永久方案我没试验。可惜也没说 MAC 小写:
https://unix.stackexchange.com/questions/396382/how-can-i-show-the-old-eth0-names-and-also-rename-network-interfaces-in-debian-9/396383另一个答案也是很好的,我开始没注意小写的问题,这里其实就是用的小写:
https://www.cyberciti.biz/faq/howto-linux-rename-ethernet-devices-named-using-udev/