前言

有一天我打算折腾一下显卡直通,插上显卡之后,嘿,您猜怎么着?我的网口居然不亮了。

那真是老北京人出门不走地道——中了邪了。

原理

一张显卡居然能影响到网口?是的,这里是混沌邪恶的 Linux。

Linux 插拔显卡或 PCIE 网卡等 PCI 设备会导致网卡的物理位置变更,而网卡名又是根据设备物理位置而定的,所以这就会导致 PCI 设备变更后网口名改变导致系统没网。

其实早期linux设备名是不会变的,后来的“可预测设备名”,本质上是为了让每个设备的命名方式根据其在硬件通道上的真实位置进行。

不论怎么样,本篇文章来讲解 PVE 固定网卡名的方法。本文的原理是绑定网卡名与 MAC 地址,这样网卡名就不会因物理位置变动而改变了。

获取网卡名与 MAC 地址

在 PVE 终端执行 ip a,得到类似如下输出:

......
2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
    link/ether 10:ff:e0:83:88:de brd ff:ff:ff:ff:ff:ff
    altname enx10ffe08388de
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 10:ff:e0:83:88:de brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.99/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::12ff:e0ff:fe83:88de/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
......

其中,enp6s0 是网卡名,也是我们一会需要用到的。而 vmbr0 只是网桥,忽略即可,这里放出来是为了方便你们定位。

我这里的情况如下,请你更具你的实际情况为准:

  • 网卡名:enp6s0
  • MAC 地址:10:ff:e0:83:88:de

注意 MAC 地址别记错成 IPv6 地址了。两样信息记录下来一会用。

注:如果您的网口名是 eno1 等形式也是正常现象,这个是 bios 内定义的板上网卡。这个在逻辑上是板上网卡,但也有可能是插入的网卡。纯粹是 bios 定义。总之,继续进行之后的步骤即可。

创建 MAC 与网卡名的绑定文件

使用以下命令编辑文件:

nano /usr/lib/systemd/network/50-custom-net0.link

在其中粘贴以下内容:

[Match]
MACAddress=10:ff:e0:83:88:de
[Link]
Name=enp6s0

上方是刚刚的 MAC 地址,下方则是网卡名。

ctrl+o 保存文件,ctrl+x 退出编辑。

后记

至此,你的网卡名应当就不会因为插拔显卡、网卡等 PCI 设备而再次变动了,失联率也会大大降低。

巨人的肩膀

参考:

【ProxmoxVE必备技能:固定网卡名称防止增减PCIE设备失联】