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 46 47 48 49 50
| #!/bin/bash
# ========================================== # 网卡 Offload 优化自动配置脚本 # 默认动作: 关闭 TSO, GSO / 开启 GRO # ==========================================
# 允许通过传参指定网卡,不传参则默认使用 eno1 INTERFACE=${1:-eno1} SERVICE_NAME="nic-offload-fix.service" SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}"
echo "=== 开始配置网卡 [${INTERFACE}] Offload 优化服务 ==="
# 1. 创建 systemd 服务文件 echo ">>> 正在写入 systemd 配置到 ${SERVICE_PATH}..." cat > "${SERVICE_PATH}" << EOF [Unit] Description=Disable NIC offload to fix ${INTERFACE} TX hang After=network.target
[Service] Type=oneshot ExecStart=/sbin/ethtool -K ${INTERFACE} tso off gso off gro on
[Install] WantedBy=multi-user.target EOF
# 2. 重载并启动服务 echo ">>> 正在重载 systemd 守护进程..." systemctl daemon-reload
echo ">>> 正在启用并启动服务..." systemctl enable --now ${SERVICE_NAME}
# 3. 验证与校验 echo "" echo "=== 验证配置结果 ===" echo "服务运行状态:" systemctl status ${SERVICE_NAME} --no-pager | grep -E "Active:|Loaded:"
echo "" echo "当前 [${INTERFACE}] 的 Offload 核心参数状态:" ethtool -k "${INTERFACE}" | grep -E 'tcp-segmentation|generic-segmentation|generic-receive'
echo "" echo "✅ 部署完成!" echo "💡 卸载提示: 如需移除此优化,可执行以下命令:" echo "systemctl disable --now ${SERVICE_NAME} && rm -f ${SERVICE_PATH} && systemctl daemon-reload"
|