刚刚花小时诊断为什么我的 18.04 VM 从 VirtualBox 转移到 qemu 后无法连接网络。
事实证明,由于“硬件更改”,NIC 从 enp0s4 重命名为 enp1s0。并且 - 自然 - /etc/netplan/01-netcfg.yaml 指定明确地enp0s4 应该获取 DHCP 配置,但不能获取其他任何配置。
将其与新安装且正常运行的 19.04 进行比较并没有真正的帮助,因为 19.04 使用其他东西来配置网络。呃......
无论如何 - 这是为什么?我以前就注意到过这种变化,例如当我在主板上升级 BIOS 时。但每次发生这种情况时,我都会花很多时间来诊断此类问题。尤其是因为这种情况很少发生……
那么,是什么原因导致了这个重命名以及我该如何配置我的 Ubuntu VM 以使其不再成为问题?
答案1
关于如何创建名称的解释,请参见src/udev/udev-builtin-net_id.c:
* Two character prefixes based on the type of interface:
* en -- ethernet
* sl -- serial line IP (slip)
* wl -- wlan
* ww -- wwan
*
* Type of names:
* b<number> -- BCMA bus core number
* ccw<name> -- CCW bus group name
* o<index>[d<dev_port>] -- on-board device index number
* s<slot>[f<function>][d<dev_port>] -- hotplug slot index number
* x<MAC> -- MAC address
* [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
* -- PCI geographical location
* [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
* -- USB port number chain
enp0s4
表示以太网、总线 0、插槽 4。enp1s0
表示以太网、总线 1、插槽 0。- (如果有一个 f 指的是“功能”。设备的第三个子集)
因此,当总线或插槽发生变化时,名称也会发生变化。它指的是 PCI 设备。请参阅...
$ for i in `seq 2 5`; do lspci -s 0${i}:; done
03:00.0 Network controller: Qualcomm Atheros AR9462 Wireless Network Adapter (rev 01)
04:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)
04:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)
PCI 设备列表。在我的例子中,以太网为:端口 4、插槽 0、功能 1。无线为:端口 3、插槽 0。参见...
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback n/a unmanaged
2 enp4s0f1 ether n/a unmanaged
3 wlp3s0 wlan n/a unmanaged
我该如何配置我的 Ubuntu VM 以便不再出现这个问题?
有 4 种方法; 其中 2 个是使用您自己的名称(请参阅/etc/udev/rules.d/70-my-net-names.rules
)或使用 MAC 地址(cp /usr/lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules
并根据您的情况编辑文件)。 两者都让您设置一个通常不会更改的接口名称(当然,您可以更改某些 NIC 上的 MAC 地址 ;) )