必须先用ethtool临时设置速率(如sudo ethtool -s ens33 autoneg off speed 1000 duplex full),再通过配置文件(如ifcfg-ens33中ethtool_opts)持久化,否则重启失效;设速前需确认网卡名、支持模式及对端匹配。

不能直接靠改配置文件就生效,必须用 ethtool 临时设置 + 配置文件持久化双步骤,否则重启后还原。
怎么用 ethtool 临时修改速率
先确认网卡名(比如 ens33、eno1 或 eth0),再执行:
-
ethtool ens33查看当前速率、支持模式和是否支持手动设速(关键看Speed和Supported link modes) -
ethtool -s ens33 speed 100 duplex full autoneg off设为百兆全双工(注意:关掉自动协商autoneg off是强制设速的前提) - 设千兆:把
speed 100换成speed 1000;万兆网卡支持speed 10000,但需硬件和对端设备同时支持 - 执行后立刻生效,
ethtool ens33再查,Speed行应显示新值,Link detected必须为yes,否则物理链路或对端不匹配
为什么加了 ethtool_opts 还不生效
常见失效原因不是语法错,而是启动顺序和依赖冲突:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
- 配置项必须写在网卡配置文件(如
/etc/sysconfig/network-scripts/ifcfg-ens33)里,且只能用ethtool_opts="speed 1000 duplex full autoneg off"—— 不能换行、不能带多余空格、不能用单引号 - NetworkManager 服务会覆盖该设置,务必关闭:
systemctl stop NetworkManager && systemctl disable NetworkManager - 如果系统启用了 systemd-networkd 或 cloud-init,它们可能绕过 ifcfg 文件,此时
ethtool_opts完全无效 - 某些万兆卡(如 Intel XXV710)需要先用
ethtool -s advertise检查并手动启用对应速率比特位,否则speed参数被忽略
网卡名是 ens33 却想叫 eth0 怎么办
CentOS 7 默认用可预测命名(ens33、enp0s3),强行改名容易引发配置错位:
- 不推荐直接
mv ifcfg-ens33 ifcfg-eth0,因为内核加载驱动时仍按原名识别设备 - 正确做法是:在
/etc/default/grub的GRUB_CMDLINE_LINUX行末尾加net.ifnames=0 biosdevname=0,再运行grub2-mkconfig -o /boot/grub2/grub.cfg并重启 - 重启后网卡名变为
eth0,此时再配ethtool_opts才能对得上 - 若已删
UUID和HWADDR,却仍出现“device not found”错误,说明 udev 规则残留,需清空/etc/udev/rules.d/70-persistent-net.rules(如有)
设速失败的典型报错和应对
遇到这些提示别硬试,先排查物理层:
-
Cannot set new settings: Invalid argument→ 对端设备不支持该速率,或没关autoneg;检查交换机端口是否锁定速率 -
No such device→ 网卡名输错,或驱动未加载(lsmod | grep e1000或igb看对应模块) -
Link is not detected→ 网线没插牢、光纤收发器异常、SFP 模块不兼容(尤其万兆光口) - 设速后 ping 通但吞吐极低 → 可能 MTU 不匹配,用
ifconfig ens33 mtu 9000同步调大(仅限同网段直连且两端支持 jumbo frame)
真正麻烦的从来不是命令怎么写,而是你设的速率,对端根本不想接——交换机端口配置、SFP 模块型号、甚至网线类别(Cat5e 压根跑不了稳定千兆),都得一一对齐。动手前先拿 ethtool -i 和 ethtool -s advertise 看清楚卡的能力边界,比反复重启网络服务有用得多。










