解决方案:e1000e eno1 Detected Hardware Unit Hang

fjy89

在 Proxmox 6.5.11-8 中,偶发性会出现以下报错,尤其是在进行大文件传输后:

[97377.240263] e1000e 0000:00:1f eno1: Detected Hardware Unit Hang:
                 TDH                  <22>
                 TDT                  <2f>
                 next_to_use          <2f>
                 next_to_clean        <21>
               buffer_info[next_to_clean]:
                 time_stamp           <101725292>
                 next_to_watch        <22>
                 jiffies              <1017253e0>
                 next_to_watch.status <0>
               MAC Status             <40080083>
               PHY Status             <796d>
               PHY 1000BASE-T Status  <3800>
               PHY Extended Status    <3000>
               PCI Status             <10>

1.1 Intel 网卡驱动问题,特别是 e1000e

错误信息表明网络接口卡(NIC)在进行数据传输时遇到了硬件单元挂起的问题。这种情况在重网络负载时更容易发生。

这是多年来 I219-V、I218-V… 网卡型号及其驱动程序的一个已知错误。不仅在 proxmox 上,在 xcp-ng 上也是如此。

这个问题,截止 Proxmox 6.5.11-8 仍未被彻底解决,只能通过禁用 TCP 校验和卸载。

1.2 解决方案

通过执行命令:ethtool -K eno1 tso off gso off gro off 即可解决,但是每次重启机器或者网卡,都会失效。具体含义下方会说明。

如何长期解决?

/etc/network/interfaces 中,添加以下代码:

iface eno1 inet manual
    post-up /usr/bin/logger -p debug -t ifup "Disabling offload for eno1" && /sbin/ethtool -K $IFACE tso off gso off gro off && /usr/bin/logger -p debug -t ifup "Disabled offload for eno1"
  • post-up:这是一个钩子命令,它会在接口被成功激活(“up”状态)后执行。这里的命令会在 eno1 接口启动之后执行一系列动作。
  • /usr/bin/logger -p debug -t ifup “Disabling offload for eno1”:这条命令使用 logger 程序,将一条调试级别(debug)的信息写入系统日志。日志内容为 "Disabling offload for eno1",标记为 ifup。这样做的目的是记录接口启动时禁用某些功能的动作,方便日后查看系统日志,了解配置是否按预期执行。(可通过 journalctl -t ifup -p debug 查看日志)
  • /sbin/ethtool -K $IFACE tso off gso off gro off tx off rx off:这里使用 ethtool 工具来关闭网络接口的一些“硬件卸载(offload)”功能。具体地:
    • tso(TCP Segmentation Offload):关闭 TCP 分段卸载。TSO 允许网卡将大型 TCP 数据包分段,减轻 CPU 负担。如果关闭,系统会由 CPU 进行 TCP 分段。
    • gso(Generic Segmentation Offload):关闭通用分段卸载。GSO 是一种将不同协议的数据分段处理的技术,关闭它会让系统自己处理分段。
    • gro(Generic Receive Offload):关闭通用接收卸载。GRO 是一种接收数据包处理优化技术。关闭它意味着数据包接收将完全交由 CPU 处理。
    • tx(Transmit Checksum Offload):完全关闭传输时的校验和卸载。网卡不会自动处理数据包的校验和,而是让系统自行处理。
    • rx(Receive Checksum Offload):完全关闭接收时的校验和卸载,网卡不会校验接收到的数据包,需要系统来进行检查。

[!info] 信息

  • TSOGSOGRO 分别用于控制 TCP 分段、通用分段和接收卸载,这三个是针对传输层和网络层的优化。
  • tx offrx off 是更通用的选项,用于关闭整个发送(TX)和接收(RX)的卸载功能。

如果已经关闭了 TSO、GSO 和 GRO,那么 tx offrx off 可能会显得多余,因为这些设置会影响整个数据包的处理,而不只是特定的卸载功能。

在大多数情况下,只需关闭 TSO、GSO 和 GRO 就可以了,tx offrx off 可以根据需要选择是否使用。如果需要彻底禁用卸载功能,可以使用它们,但通常只关闭 TSO、GSO 和 GRO 是足够的。

[!note] 注意
这对于一些系统可能没有生效,那么可以尝试通过注册 Service 的方式执行。这里不赘述。

如何查看 tso、gso、gro 是否已经关闭:ethtool -k eno1 | grep -E 'tso|gso|gro'

yp93w

均为 off,说明已经关闭。

如何查看 TCP 校验和卸载是否开启:ethtool -a eno1

qegq7

些参数主要用于控制网络接口的流量控制,以减少数据包丢失,确保在网络拥堵时网络的稳定性。

  • Autonegotiate:开启表示接口支持自动协商功能,允许网络接口和连接到的设备协商最佳的传输模式(如全双工或半双工)和流量控制。
  • RX(Receive):此项“on”表示接收暂停帧的能力已开启。也就是说,网络接口在接收到暂停帧时会暂停接收数据。这在数据接收方无法及时处理流量时非常有用。
  • TX(Transmit):此项“on”表示发送暂停帧的能力已开启。网络接口可以在需要的时候发送暂停帧,指示对方暂停发送数据。这在本设备负载过高时很有帮助。
  • RX negotiated:表示接收暂停帧的能力已协商开启,表明两端设备在连接时已协商启用了接收流量控制。
  • TX negotiated:表示发送暂停帧的能力已协商开启,表明两端设备在连接时已协商启用了发送流量控制。

1.3 参考文献

<think>我们正在处理用户关于CentOS 9中检测到未维护的驱动程序e1000_init_module的问题。根据用户提供的引用,我们可以参考一些解决方案,但需要针对CentOS 9进行适配。 引用[1]中提到了一种更新e1000网卡驱动的方法,包括下载最新驱动、编译RPM包、安装并配置忽略64位DMA选项。但需要注意的是,用户使用的是CentOS 9,而引用中的步骤是针对较旧版本(如e1000-8.0.25)的,因此我们需要确认是否有适用于CentOS 9的更新版本。 引用[2]提到的是关于CUDA驱动版本不匹配的问题,与当前问题关系不大。 引用[3]是关于在虚拟机中安装CentOS 6.5时出现“unsupported hardware detected”的解决方法,涉及启用VT(虚拟化技术)。虽然与当前问题不直接相关,但考虑到用户可能是在虚拟机环境中运行,可以建议检查虚拟化设置。 然而,用户的问题核心是“Unmaintained driver detected e1000_init_module”,这表明系统检测到e1000驱动已不再维护。在CentOS 9中,e1000驱动可能已被更新的驱动替代(如e1000e),或者需要升级到更新的驱动版本。 解决方案思路: 1. 确认当前安装的e1000驱动版本。 2. 尝试更新到最新的e1000驱动(如果可用)。 3. 如果e1000驱动已弃用,考虑切换到内核自带的驱动(如e1000e)或者使用兼容的替代驱动。 4. 检查是否在虚拟机中,如果是,确保虚拟化设置正确,并考虑安装虚拟机增强工具(如VMware Tools或VirtualBox Guest Additions)以提供更好的驱动支持。 具体步骤: **步骤1:检查当前驱动状态** ```bash modinfo e1000 ``` **步骤2:查看系统日志以获取更多错误信息** ```bash dmesg | grep e1000 ``` **步骤3:尝试更新e1000驱动(如果存在更新版本)** - 访问e1000驱动的SourceForge页面(如引用[1]所述):http://sourceforge.net/projects/e1000/files/e1000%20stable/ - 下载最新版本的源代码(例如e1000-8.0.35.tar.gz,注意版本号可能已更新) - 编译并安装(注意:CentOS 9使用较新的内核,需要确保驱动兼容) 编译步骤: ```bash tar -xvf e1000-8.0.35.tar.gz cd e1000-8.0.35/src make make install ``` **步骤4:如果更新驱动后问题依旧,考虑使用e1000e驱动(如果适用)** e1000e是e1000的增强版,支持较新的硬件。首先检查是否已加载e1000e驱动: ```bash modprobe e1000e ``` 如果该驱动可用,可以将其设为默认驱动,并移除e1000驱动: ```bash echo "blacklist e1000" >> /etc/modprobe.d/blacklist.conf ``` **步骤5:如果是在虚拟机中,安装虚拟机增强工具** - VMware虚拟机:安装open-vm-tools ```bash dnf install open-vm-tools ``` - VirtualBox:安装VirtualBox Guest Additions **步骤6:配置忽略64位DMA选项(如果更新驱动后仍出现DMA错误)** 编辑`/etc/modprobe.d/e1000.conf`(或新建),添加: ``` options e1000 ignore_64bit_dma=1 ``` 然后更新initramfs并重启: ```bash dracut -f reboot ``` **注意事项**: - CentOS 9基于较新的内核,可能已经内置了更新的网络驱动。因此,如果e1000驱动被标记为未维护,更推荐使用系统自带的替代驱动(如e1000e)。 - 如果更新驱动后问题解决,建议监控系统稳定性。 相关问题: 1. 如何检查CentOS 9中已安装的驱动版本? 2. 在CentOS 9中如何禁用旧驱动并启用新驱动? 3. 虚拟机中安装CentOS 9需要注意哪些硬件兼容性问题?</think>### CentOS 9 "Unmaintained driver detected e1000_init_module" 解决方案 #### 问题分析 在 CentOS 9 中出现 `e1000_init_module` 未维护驱动警告,通常是因为: 1. **驱动兼容性问题**:e1000 驱动已弃用或与 CentOS 9 内核不兼容 2. **虚拟机环境限制**:虚拟化平台(如 VMware/VirtualBox)的虚拟网卡驱动需更新 3. **硬件支持终止**:Intel 官方已停止维护旧版 e1000 驱动[^1] #### 解决方案 **方法 1:更新 e1000 驱动(推荐)** ```bash # 下载最新驱动 (当前最新版 8.0.35) wget https://downloadmirror.intel.com/15817/eng/e1000e-8.0.35.tar.gz # 编译安装 tar -xvf e1000e-8.0.35.tar.gz cd e1000e-8.0.35/src/ make install # 加载新驱动 modprobe -r e1000e && modprobe e1000e ``` **方法 2:添加 DMA 兼容参数** ```bash # 创建驱动配置 echo "options e1000 ignore_64bit_dma=1" > /etc/modprobe.d/e1000.conf # 更新 initramfs dracut -f # 重启系统 reboot ``` **方法 3:虚拟机专用方案** ```bash # 安装 VMware Tools (VMware 环境) dnf install open-vm-tools # 或安装 VirtualBox 增强功能 (VirtualBox) dnf install kernel-devel gcc make mount /dev/cdrom /mnt sh /mnt/VBoxLinuxAdditions.run ``` **方法 4:启用虚拟化支持(BIOS 级修复)** 1. 重启进入 BIOS/UEFI 2. 开启 `Intel Virtualization Technology (VT-x)` 或 `AMD-V`[^3] 3. 保存设置后重启系统 #### 验证步骤 ```bash # 检查驱动状态 dmesg | grep e1000 # 确认驱动版本 modinfo e1000 | grep version ``` #### 注意事项 1. **驱动兼容性**:CentOS 9 推荐使用 `e1000e`(增强版驱动)替代旧版 e1000 2. **内核更新**:运行 `dnf update kernel` 确保内核为最新版 3. **硬件检查**:物理服务器建议确认网卡型号是否支持 CentOS 9 > **关键提示**:若问题仍存在,建议迁移到 virtio 网络驱动(虚拟机环境)或升级物理网卡固件[^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值