关键词:
螃蟹网卡,R8169,R8168,RTL8111/8168/8411,SMB,速率,驱动
前情提要:
我的飞牛是运行在一台矿渣上面的,cpu是4125,8gb内存,搭载了一块螃蟹的RTL8111/8168/8411网卡。
在某一次飞牛更新之后,我发现我的飞牛的SMB接受速率跑不满了,固定只有16MB/s,但是从飞牛发出的速率依旧是千兆级别,打开FTP协议测试,收发都可以稳定千兆。当初盲猜是SMB协议问题,一顿操作猛如虎,关闭/etc/samba 配置的aio审计,关掉加密,强制SMB握手协议,但是一直都是只能16MB接收。
后面在飞牛Docker部署了一个OpenSpeedTest测试,http速率测试飞牛发出可以稳定千兆,但是飞牛接受大概有十分之一的次数是只有130Mb/s,于是开始怀疑是网卡问题,细究发现飞牛镜像搭载的是r8169的通用驱动,对于一些高速率网卡有时候会有bug导致掉速卡速,论坛里面有好多2.5G网卡的帖子,但是好像我没有见到过关于千兆网卡的。
于是自己着手自己照猫画虎,折腾一晚上已弄好,来跟大伙分享一下路,避免采坑。
动手操作:
以下内容是实际操作结合当时咨询的AI回复的结果:
P0:确认状态
使用ssh连接飞牛,确认当前驱动状态
sudo ethtool -i <网卡名>(一般是enp1s0)
此处得到返回driver:r8169,基本就是问题所在了

此处AI建议看一下系统内核版本和记录网卡PCI地址,但是感觉没什么用因为后面是直接引用的无需手动抄写,但是也写上来吧
# 也看一下内核版本(后面装 headers 要用)
uname -r
# 记一下你的网卡 PCI 地址(方便最后验证)
lspci -nnk | grep -A3 -i realtek
顺带准备一套键鼠或者准备一张USB网卡之类的,因为驱动安装的时候当前使用8169的网卡会断网,所以建议使用键鼠或者从usb网卡连接ssh,这样全程几乎不会受到影响
P1:安装编译依赖
切换root
sudo -i
更新软件源,安装编译工具
apt update
apt install -y build-essential libelf-dev curl wget
安装匹配当前内核的 linux-headers
apt install -y linux-headers-$(uname -r)
精简牛可能会报错,因为精简牛的仓库缺失了某些源码所以没法完成,需要手动下载headers的deb包
验证安装到位
ls /lib/modules/$(uname -r)/build/Makefile
# 不报错就 OK
P2:下载螃蟹r8168驱动源码
螃蟹的驱动搜索真的很烦很烦,网址又不固定,建议手动搜索然后下载
Realtek
官网左侧三道杠,下载中心,通讯网络ICS
选择“Realtek PCIe FE / GbE / 2.5GbE / 5G / 10G Family Controller Software”
可以使用页内搜索定位8168,找到Unix的8168驱动,点击下载

此处会得到一个.tar.bz2包,使用ssh文件管理或者U盘传到飞牛的某个路径,此处选择了/tmp
cd /tmp
tar -jxvf r8168-*.tar.bz2
cd r8168-*/ # 进入解压后的目录
ls # 你应该能看到 autorun.sh src/ Makefile 等
P3:编译,安装
懒人操作,使用官方脚本,简单便捷
chmod +x autorun.sh
./autorun.sh
AI提示,这个脚本会:
make编译 r8168.ko
make install把模块装进 /lib/modules/$(uname -r)/...
把 r8169加入黑名单(/etc/modprobe.d/里写 blacklist)
depmod -a && update-initramfs -u
加载 r8168 并卸载 r8169 → 此时网口会闪断再恢复
如果是 SSH 会话,./autorun.sh跑完网络一般会自己恢复(约 30~90 秒);但如果它没回来,就去接显示器看控制台,多半是 DHCP 没续上,手动 dhclient enp1s0(接口名按你的改)即可。
AI还介绍了高手操作,享受过程,步步掌握,我没实操,没法反馈会发生什么
cd src/
make clean
make all
make install
#成功之后
# blacklist 掉内核自带的 r8169
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf
echo "install r8169 /bin/false" >> /etc/modprobe.d/blacklist-r8169.conf
# 更新 initramfs 让黑名单持久化
update-initramfs -u
# 立刻切换(⚠️ 这里会断网)
modprobe -r r8169
modprobe r8168
# 如果 IP 丢了就续一下 DHCP
dhclient $(ip -br link | awk '/DOWN|UNKNOWN/{print $1; exit}') 2>/dev/null || echo "请手动 dhclient 你的网卡名"
P4:验证驱动,验证持久化
ethtool -i <网卡名>
此处会输出driver:r8168
version:<你从官网下载到的版本号>
假如你的root因为连接掉了,就使用sudo
lspci -nnk | grep -A3 -i realtek
验证正在用哪个驱动
应该可以发现网卡在使用r8168
reboot
重启机器,验证持久化,开机后ssh机器,重新执行P4,应输出r8168
再然后,因为网卡驱动导致的smb就可以满速运行了

P5:断网抢救
如果使用r8169的网卡ssh安装过程中联系不上机器了,就需要用到P0准备的键鼠了
rm -f /etc/modprobe.d/blacklist-r8169.conf
modprobe r8169
dhclient $(ip -br link | awk '/UP/{print $1; exit}')
清理掉装的模块,重新回到P3
rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8168.ko 2>/dev/null
depmod -a && update-initramfs -u
reboot
P6:飞牛SMB可能存在的一些坑
有说是/etc/samba 的smb.conf和smb.custom.conf里面的
aio read size = 0
aio write size = 0
当这两个值=1的时候会触发异步写入吃掉巨量的SMB性能,这个可以在网页设置里面快速关掉,或者ssh之后使用sudo vim强制修改,各位自己品鉴。
还有一个就是上面提到的两个文件里面的
vfs objects = trim_perms full_audit
这行会触发smb传输审计,会吃掉cpu的性能导致跟不上传输,实测下来J4125面对千兆传输,几乎不占用什么性能,这个也是各位自己品鉴吧。
后话
这件事本身不难,慢慢尝试,认真看各行命令的输出,注意细节就好,祝各位成功。