Ubuntu Samba服务器传输速度过慢的优化求助
Ubuntu Samba服务器传输速度过慢的优化求助
看起来你遇到了Samba传输速度不达预期的问题,先理清楚你的现状:用搭载i5-7200U、4GB内存的笔记本运行Ubuntu 22.04.2 LTS做服务器,通过100MB/s网口直连路由器,哪怕换成SSD后读写速度还是只有11MB/s,当前Samba的共享配置是[ServerData]段的基础设置。咱们一步步来排查和优化:
一、先确认网络链路的实际瓶颈
你的网口是100Mbps(注意是Mbps,不是MB/s),理论上的传输上限大概是12.5MB/s(因为1Mbps=0.125MB/s),你现在的11MB/s其实已经很接近这个上限了,但还是要先验证是不是真的跑满了:
- 用
iperf3测试服务器和客户端之间的真实带宽:- 服务器端执行:
iperf3 -s - 客户端执行:
iperf3 -c <你的服务器IP>
如果测试结果接近100Mbps(也就是12.5MB/s左右),那说明你的网络链路已经到了硬件上限,要提升速度就得升级千兆网口、千兆路由器和Cat5e及以上的网线;如果测试结果远低于100Mbps,那要排查:- 是不是用了劣质网线,换一根Cat5e或Cat6的网线试试
- 路由器的LAN口是不是百兆规格的(很多老路由器LAN口是百兆)
- 网口协商速率是否正常:服务器端执行
ethtool <你的网卡名>(比如ethtool enp0s3),查看Speed字段是不是显示100Mb/s,如果是更低的数值(比如10Mb/s),那要检查网线和接口是否接触不良
- 服务器端执行:
二、优化Samba配置
你的当前smb.conf配置比较基础,给你加一些针对性的优化参数,修改后的配置如下:
[ServerData] path = /home/admins/ServerData/ writeable = yes guest ok = yes create mask = 0644 directory mask = 0755 # 新增的优化参数 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 min receivefile size = 16384 use sendfile = yes aio read size = 16384 aio write size = 16384 read raw = yes write raw = yes oplocks = yes level2 oplocks = yes deadtime = 15
简单解释下这些参数的作用:
socket options:减少网络传输延迟,调整收发缓冲区大小,提升数据传输效率use sendfile:让Samba直接调用系统的sendfile接口,跳过用户态到内核态的数据复制,大幅提升大文件传输速度read raw/write raw:启用原始读写模式,跳过不必要的缓存环节,适合大文件批量传输oplocks/level2 oplocks:启用文件锁优化,减少客户端和服务器之间的无效交互,提升并发和单连接效率deadtime:自动清理闲置超过15分钟的连接,释放服务器资源
修改后记得重启Samba服务生效:sudo systemctl restart smbd
三、系统层面的网络优化
调整系统的网络缓冲区参数,提升大文件传输的稳定性:
- 编辑
/etc/sysctl.conf文件,添加以下内容:
net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216
- 执行
sudo sysctl -p让配置立即生效
四、验证本地硬盘性能
虽然你换了SSD,但还是要确认本地IO不是瓶颈:
- 测试本地写速度:
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct - 测试本地读速度:
dd if=testfile of=/dev/null bs=1G iflag=direct
如果本地SSD的读写速度能达到几百MB/s,那说明硬盘没问题,问题还是出在网络或Samba配置上;如果本地速度也慢,那要检查SSD的挂载方式、是否开启TRIM等。
五、客户端侧的小调整
如果你是用Windows客户端访问,也可以检查下客户端的SMB设置:
- 确保客户端使用的是SMB3协议(Samba在Ubuntu 22.04默认支持SMB3,比SMB2更高效)
- 可以在Windows组策略里调整“SMB 2.0/3.0连接的缓冲区大小”,提升传输效率
备注:内容来源于stack exchange,提问作者Muhammad Bin Khalid




