常见问题

飞牛NAS SMB传输速度慢:一步步排查优化

在日常使用飞牛NAS的过程中,不少朋友会遇到一个让人头疼的问题:明明千兆网络、硬盘也没坏,但通过SMB协议拷贝文件时速度始终上不去,甚至只有个位数MB/s。这通常不是硬件故障,而是配置或环境因素导致的。今天我们就从网络、协议、系统设置三个层面,手把手带你排查并优化SMB传输速度。

第一步:确认瓶颈在哪个环节

在动手改配置之前,先要判断速度慢是出在网络、NAS本身,还是客户端。最简单的办法是进行本机读写测试。

登录飞牛NAS的SSH终端(默认端口22),执行以下命令测试硬盘的裸读写速度(以 /vol1 为例):

dd if=/dev/zero of=/vol1/test.bin bs=1M count=1024 conv=fdatasync
dd if=/vol1/test.bin of=/dev/null bs=1M count=1024

第一条命令写入1GB文件,第二条读取。如果写入速度能达到500MB/s以上(机械硬盘)或接近内存速度(SSD),说明硬盘没问题。测试完记得删除测试文件:rm /vol1/test.bin

如果硬盘速度正常,再测试网络。在NAS上执行:

iperf3 -s

然后在同一局域网内的电脑上执行:

iperf3 -c NAS的IP地址

如果测试结果能达到900Mbps以上,说明物理链路没问题。此时瓶颈大概率出在SMB协议参数或客户端设置上。

第二步:优化SMB协议版本和参数

飞牛NAS默认SMB配置为了兼容性,可能启用了较老的SMB1协议或保守的参数。我们可以通过修改配置文件来强制使用SMB3并提升吞吐量。

首先备份原配置:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

然后用编辑器打开配置文件:

sudo nano /etc/samba/smb.conf

[global] 段落中添加或修改以下内容:

[global]
   server min protocol = SMB2_10
   server max protocol = SMB3_11
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
   read raw = yes
   write raw = yes
   aio read size = 1
   aio write size = 1
   use sendfile = yes
   strict locking = no

关键点解释:server min protocol 禁止了老旧的SMB1,避免兼容性拖慢速度;read rawwrite raw 允许大块数据传输;aio 参数开启异步IO;sendfile 减少内核与用户空间的数据拷贝。

保存退出后重启SMB服务:

sudo systemctl restart smbd

注意:如果你的客户端是Windows 7或更老系统,可能不支持SMB3,此时可将 server min protocol 改为 SMB2_10 以保持兼容。

第三步:调整飞牛NAS系统层面的网络缓冲

SMB性能很大程度依赖TCP缓冲区大小。飞牛NAS基于Linux,我们可以通过sysctl调整内核参数。

创建优化配置文件:

sudo nano /etc/sysctl.d/99-smb-tuning.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
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 0

保存后生效:

sudo sysctl --system

这些参数扩大了TCP接收和发送窗口,让高速局域网能充分利用带宽。尤其对于千兆网络,默认的64KB窗口可能成为瓶颈。

第四步:检查客户端侧设置(Windows/macOS)

如果你的NAS配置没问题,但Windows拷贝速度仍慢,尝试调整客户端。

在Windows的“启用或关闭Windows功能”中,确保勾选了“SMB 1.0/CIFS文件共享支持”(虽然不建议,但有些老设备需要)。更重要的步骤是:

打开“控制面板” → “程序和功能” → “启用或关闭Windows功能”,找到“SMB直通”(SMB Direct)并启用(如果你的网卡支持RDMA)。普通千兆网卡无此选项,但可以尝试以下注册表优化:

按 Win+R 输入 regedit 打开注册表编辑器,定位到:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer

新建一个DWORD值,名为 MaximumAllowedCompatMode,设为 1。这能让Windows使用更现代的文件复制引擎。

对于macOS用户,在访达中连接SMB时,尝试在“连接身份”中选择“注册用户”,并勾选“在钥匙串中记住密码”。然后在终端中挂载时增加参数:

mount_smbfs -o rsize=131072,wsize=131072 //用户名@NAS_IP/共享名 /mnt/mountpoint

第五步:关闭狂野的实时病毒扫描或索引服务

飞牛NAS默认开启了文件索引和实时防病毒(如果安装了)。这些服务会在拷贝时扫描每个文件,极大拖慢速度。

进入飞牛NAS的“应用中心”,找到文件索引服务(如“极空间”或“Video Info”),暂时停用。或者如果你是SSH操作,可以查看哪个进程占用CPU:

top -b -n1 | grep -E 'smbd|clamd|find|python'

如果发现 clamd(ClamAV防病毒)占用高,可以临时停止:

sudo systemctl stop clamav-daemon
sudo systemctl disable clamav-daemon

但注意,关闭后NAS将失去病毒防护,建议仅临时测试,确认速度恢复后再决定是否永久关闭。

第六步:排除网线、交换机与巨型帧问题

最后检查物理层。很多用户忽略了网线质量——超五类线跑千兆需要8芯全通,劣质线或水晶头接触不良会导致降速或重传。

登录NAS后台,查看网卡当前连接速率:

ethtool eth0

如果你看到 Speed: 100Mb/s,说明网线或交换机协商成了百兆,请更换网线或检查端口。如果协商为1000Mb/s,可以尝试开启巨型帧(Jumbo Frame),但需要NAS和客户端网卡都支持且统一MTU为9000。

开启巨型帧的命令(以eth0为例):

sudo ifconfig eth0 mtu 9000

但注意,如果交换机不支持或客户端未设置,反而会无法通信。建议先小范围测试。

总结

SMB传输慢很少是单一原因造成的,通常需要从协议版本、内核缓冲、客户端配置和物理链路四个方面综合排查。按照本文的步骤,先测硬盘和网络确认瓶颈,再调整Samba参数,然后优化系统内核,最后检查客户端和网线。优化后,千兆环境下通常能稳定跑满110MB/s左右。记住,每次修改后都要重启相关服务或重新挂载,用实际大文件拷贝(比如10GB的ISO)来验证速度。如果问题依旧,可以查看飞牛NAS的日志 sudo journalctl -u smbd | tail -50,里面往往会有具体的错误提示。

💬 评论区
发表评论

暂无评论,来说两句吧