systemd .link 文件不起作用

systemd .link 文件不起作用

我在 Odroid HC2 上运行 Armbian Buster。实际上,我的接口名称看起来像这样:enx001e0632c19dforeth0wlx503eaa4a712afor wlan0

我想不是使用预测接口名称改为获取 eth0 和 wlan0。

所以我在以下位置创建了 2 个文件/etc/systemd/network/

# ls -l /etc/systemd/network/
total 2
-rw-r--r-- 1 root root 54 Sep  2 00:32 10-eth.link
-rw-r--r-- 1 root root 55 Sep  2 00:32 10-wlan.link

这是 eth0 的内容:

# cat 10-eth.link
[Match]
MACAddress=00:1e:06:32:c1:9d
[Link]
Name=eth0

对于 wlan0 :

# cat 10-wlan.link
[Match]
MACAddress=50:3e:aa:4a:71:2a
[Link]
Name=wlan0

然后,我看到一个话题(为什么我的 systemd 链接文件被忽略?)我必须做的:

update-initramfs -u

然后我重新启动了。

但它仍然不起作用...

[编辑] systemd-networkd 服务未启用。所以我使用以下命令启用它:

systemctl enable systemd-networkd.service

然后我重新启动了。但它仍然无法正常工作,并且接口名称也没有更改为eth0wlan0

这是输出systemctl status systemd-networkd.service

# systemctl status systemd-networkd.service
* systemd-networkd.service - Network Service
   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor
   Active: active (running) since Mon 2019-09-02 00:59:54 UTC; 7min ago
     Docs: man:systemd-networkd.service(8)
 Main PID: 297 (systemd-network)
   Status: "Processing requests..."
   Memory: 2.3M
   CGroup: /system.slice/systemd-networkd.service
           `-297 /lib/systemd/systemd-networkd

Sep 02 00:59:54 ohc2 systemd[1]: Starting Network Service...
Sep 02 00:59:54 ohc2 systemd-networkd[297]: Enumeration completed
Sep 02 00:59:54 ohc2 systemd[1]: Started Network Service.
Sep 02 00:59:56 ohc2 systemd-networkd[297]: wlan0: Interface name change detecte
Sep 02 00:59:59 ohc2 systemd-networkd[297]: enx001e0632c19d: Gained carrier
Sep 02 01:00:01 ohc2 systemd-networkd[297]: enx001e0632c19d: Gained IPv6LL

它说wlan0: Interface name change detecte但是当我跑步时ip addr,没有任何改变:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enx001e0632c19d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:1e:06:32:c1:9d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::9b38:fe20:a87c:287/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: wlx503eaa4a712a: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 50:3e:aa:4a:71:2a brd ff:ff:ff:ff:ff:ff

谁能帮我 ?谢谢

答案1

对于一个接口,我遇到了完全相同的问题。如果有什么区别的话,那就是使用 asix 驱动程序的 USB 接口。

我的两个界面使用 .link 文件重命名,而这个则没有。仍然使用 udev 重命名的另一个(相同)设置成功重命名了所有三个接口。

Nov 23 22:12:16 xen17 vmunix: [ 7256.680568] asix 1-2:1.0 eth0: register 'asix' at usb-0000:00:14.0-2, ASIX AX88772 USB 
2.0 Ethernet, 00:0e:c6:b2:fb:30
Nov 23 22:12:16 xen17 vmunix: [ 7256.680691] usbcore: registered new interface driver asix
Nov 23 22:12:16 xen17 vmunix: [ 7256.684159] systemd-udevd[6406]: Using default interface naming scheme 'v240'.
Nov 23 22:12:16 xen17 vmunix: [ 7256.688004] systemd-udevd[6406]: link_config: autonegotiation is unset or enabled, the 
speed and duplex are not writable.
Nov 23 22:12:16 xen17 vmunix: [ 7256.688284] asix 1-2:1.0 enx000ec6b2fb30: renamed from eth0

但即使忽略 .link 文件,它也会得到错误的名称:

root@xen17:/var/log# udevadm test-builtin net_id /sys/class/net/enx000ec6b2fb30 2>/dev/null
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx000ec6b2fb30
ID_OUI_FROM_DATABASE=ASIX ELECTRONICS CORP.
ID_NET_NAME_PATH=enp0s20u2

应该被称为 enp0s20u2 因为 PATH 优先于 MAC

usbadm 测试表明它应该具有我的 .link 文件中的正确名称:

root@xen17:/var/log# udevadm test /sys/class/net/enx000ec6b2fb30 2>/dev/null
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/net/enx000ec6b2fb30
INTERFACE=enx000ec6b2fb30
IFINDEX=48
ACTION=add
SUBSYSTEM=net
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx000ec6b2fb30
ID_OUI_FROM_DATABASE=ASIX ELECTRONICS CORP.
ID_NET_NAME_PATH=enp0s20u2
ID_VENDOR=ASIX_Elec._Corp.
ID_VENDOR_ENC=ASIX\x20Elec.\x20Corp.
ID_VENDOR_ID=0b95
ID_MODEL=AX88772A
ID_MODEL_ENC=AX88772A
ID_MODEL_ID=7720
ID_REVISION=0001
ID_SERIAL=ASIX_Elec._Corp._AX88772A_000BAF
ID_SERIAL_SHORT=000BAF
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:ffff00:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=asix
ID_USB_CLASS_FROM_DATABASE=Vendor Specific Class
ID_USB_SUBCLASS_FROM_DATABASE=Vendor Specific Subclass
ID_VENDOR_FROM_DATABASE=ASIX Electronics Corp.
ID_MODEL_FROM_DATABASE=AX88772
ID_PATH=pci-0000:00:14.0-usb-0:2:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0
ID_NET_DRIVER=asix
ID_NET_LINK_FILE=/etc/systemd/network/10-persistent-net-usblan2.link
ID_NET_NAME=usblan2
USEC_INITIALIZED=7256957740
run: 'bridge-network-interface'
run: 'ifupdown-hotplug'

幸运的是,我在桥接口中使用这个设备,所以我可以告诉它通过所有三个名称导入(两个显然会失败),所以如果有什么变化并且这在将来开始工作,我将不会挠头尝试找出发生了什么变化以及我的网络损坏的原因。

我发现了我的问题:

我使用的是 debian,有:

/lib/udev/rules.d/73-usb-net-by-mac.rules

这似乎优先于 systemd 规则。将整个文件注释掉,现在 .link 文件可以正常工作了。

所以我建议OP在某个地方寻找一个类似的udev规则来击败systemd命名。

我想我会认为这是一个错误。我只是从 udev 规则切换,因为我看到的文档说它们将在下一个稳定版本中消失。但如果您使用 USB 网络设备,则似乎无法轻松切换。

答案2

可以使用以下命令更改接口名称udev:编辑/etc/udev/rules.d/70-persistent-net.rules:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1e:06:32:c1:9d", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="50:3e:aa:4a:71:2a", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="wlan0"

它可以工作,并且重新启动后,接口名称就改变了。

但我的问题没有解决。我仍然不知道为什么它不能与systemd-networkd.

答案3

我遇到了类似的问题,这是由于 .link 规则被/etc/systemd/network默认规则取代而引起的,/lib/systemd/network根据该规则,不应出现这种情况文档。具体来说,99-default.link正在取代我,所以我调用了我的文件98-something.link,它按预期工作。

相关内容