Ubuntu服务器休眠期间及休眠后以太网故障求助
各位大佬好,我最近碰到一个Ubuntu服务器休眠后的以太网故障问题,折腾了半天没搞定,来求助大家!
先给大家说下我的设备和环境情况:
- 设备是一台旧iMac,装的是Ubuntu Server 24.04 LTS(内核版本是GNU/Linux 6.8.0-35-generic x86_64)
- 之前它是通过以太网连路由器上网的,现在改成直接用以太网电缆连另一台同款的macOS系统iMac
- 另一台macOS在系统偏好设置里设的IP是192.168.0.33,子网掩码255.255.255.0
- 我的Ubuntu服务器在
/etc/network/interfaces里手动配置的IP是192.168.0.48,现在只要手动执行命令:
以太网就能正常工作,此时用sudo ifdown enp2s0 && sudo ifup -v enp2s0ifconfig查看网卡状态是这样的:enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.48 netmask 255.255.255.0 broadcast 192.168.0.255
ether 3c:07:54:59:5c:b4 txqueuelen 1000 (Ethernet)
RX packets 726 bytes 91026 (91.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 549 bytes 98547 (98.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16
但是问题来了:当服务器进入休眠状态后,再唤醒时以太网就彻底罢工了——要么和另一台macOS iMac完全连不上,要么网卡状态异常,必须重新执行上面的ifdown/ifup命令才能恢复正常。
我自己梳理了几个排查方向,也想请教大家有没有其他思路:
1. 网卡电源管理会不会是元凶?
我怀疑Ubuntu休眠时自动给网卡断了电,唤醒后没正常恢复。打算试试禁用网卡的电源管理:
- 编辑
/etc/network/interfaces,在enp2s0的配置段里加一行post-up ethtool -s enp2s0 wol g,启用Wake-on-LAN的同时阻止休眠断电 - 先手动执行
sudo ethtool -s enp2s0 wol g,测试下休眠唤醒后的状态
2. 能不能让系统唤醒后自动重启网卡?
如果电源管理的方法没用,我想能不能整个自动脚本,让系统一唤醒就重新加载网卡。比如整个systemd服务:
- 创建服务文件:
sudo nano /etc/systemd/system/network-restart.service - 写入以下内容:
[Unit] Description=Restart network interface on resume After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target [Service] Type=oneshot ExecStart=/usr/bin/sudo /sbin/ifdown enp2s0 ExecStart=/usr/bin/sudo /sbin/ifup -v enp2s0 [Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target - 然后执行
sudo systemctl daemon-reload和sudo systemctl enable network-restart.service,应该就能自动触发了
3. NetworkManager会不会在搞事情?
虽然我是用/etc/network/interfaces手动配置的,但听说Ubuntu Server 24.04默认开了NetworkManager,会不会它在休眠后覆盖了我的配置?打算:
- 先查下NetworkManager状态:
sudo systemctl status NetworkManager - 如果它在跑,要么直接禁用:
sudo systemctl disable --now NetworkManager,要么在NetworkManager里设置忽略enp2s0网卡,不让它干预手动配置
4. 会不会是内核驱动的兼容性问题?
毕竟是旧iMac的网卡,会不会休眠唤醒后内核驱动抽风了?打算:
- 先查下网卡对应的内核模块:
lspci -k | grep -A 2 Ethernet - 要么试试在唤醒时重新加载模块,要么直接升级内核到最新稳定版:
sudo apt update && sudo apt upgrade linux-generic
有没有大佬碰到过类似的问题?或者还有其他我没考虑到的排查方向?麻烦指点一下!
备注:内容来源于stack exchange,提问作者Langdon

