不知道从什么时候开始,我的PVE就时不时出现失去连接的情况,因为我是在PVE上安装的LEDE拨号的,导致我也上不了网,每次只能重启。这周找了个时间给机器连上了显示器,等了两天终于等到失去连接的情况,终于排查出了原因。今天就来教你怎么解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Jun 17 13:09:43 pve kernel: e1000e 0000:00:19.0 eno1: Detected Hardware Unit Hang: TDH <bd> TDT <eb> next_to_use <eb> next_to_clean <bd> buffer_info[next_to_clean]: time_stamp <102c22293> next_to_watch <be> jiffies <102c22440> next_to_watch.status <0> MAC Status <80083> PHY Status <796d> PHY 1000BASE-T Status <3800> PHY Extended Status <3000> PCI Status <10> Jun 17 13:09:45 pve kernel: e1000e 0000:00:19.0 eno1: Detected Hardware Unit Hang: TDH <bd> TDT <eb> next_to_use <eb> next_to_clean <bd> buffer_info[next_to_clean]: time_stamp <102c22293> next_to_watch <be> jiffies <102c22638> next_to_watch.status <0> MAC Status <80083> PHY Status <796d> PHY 1000BASE-T Status <3800> PHY Extended Status <3000> PCI Status <10> Jun 17 13:09:47 pve kernel: e1000e 0000:00:19.0 eno1: Detected Hardware Unit Hang: TDH <bd> TDT <eb> next_to_use <eb> next_to_clean <bd> buffer_info[next_to_clean]: time_stamp <102c22293> next_to_watch <be> jiffies <102c22828> next_to_watch.status <0> MAC Status <80083> PHY Status <796d> PHY 1000BASE-T Status <3800> PHY Extended Status <3000> PCI Status <10>
偶尔这个网卡能够自动重启成功,但是大多数时候都会启动失败,直接导致网卡失去响应。
这个问题是Intel网卡特有的问题,e1000e的driver在网络流量过大时就会出现这个问题。从内核3.10就有这种情况,一直到目前我的内核(5.4.41)仍然没有解决。
临时解决办法 输入
1 ethtool -K eno1 tso off gso off
如果没有安装ethtool请安装
将eno1换成出问题的那个网卡名称。
每次PVE重启后都需要重新执行这个命令。
查看是否生效 执行:
1 ethtool -k eno1 | grep offload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 root@pve:~# ethtool -k eno1 | grep offload tcp-segmentation-offload: off udp-fragmentation-offload: off generic-segmentation-offload: off generic-receive-offload: on large-receive-offload: off [fixed] rx-vlan-offload: on tx-vlan-offload: on l2-fwd-offload: off [fixed] hw-tc-offload: off [fixed] esp-hw-offload: off [fixed] esp-tx-csum-hw-offload: off [fixed] rx-udp_tunnel-port-offload: off [fixed] tls-hw-tx-offload: off [fixed] tls-hw-rx-offload: off [fixed]
可以看到tcp-segmentation-offload和udp-fragmentation-offload都是off,说明生效了。
临时永久解决办法 打开 /etc/network/interfaces
文件
在出问题的网卡那一行下面添加一句:
1 post-up /usr/sbin/ethtool -K eno1 tso off gso off
/usr/sbin/ethtool 在命令行下执行 which ethtool 即可找到。
1 2 root@pve:~# which ethtool /usr/sbin/ethtool
这样每次启动PVE后都会自动执行这个命令。
永久解决办法 等官方发patch吧。
其他心理安慰 如果你不放心,可以在桥接的网口(vmbr0)下也加上这句话。
如果还是不放心,那么将那句话改为:
1 post-up /usr/sbin/ethtool -K eno1 gso off gro off tso off tx off rx off
终极版:
1 post-up /usr/sbin/ethtool -K eno1 gso off gro off tso off tx off rx off rxvlan off txvlan off sg off
没有问题不建议执行上面的命令。
参考 https://forum.proxmox.com/threads/e1000-driver-hang.58284/page-5