跳转到内容

SMB 传输慢 ​

适用范围 ​

  • 向 NAS 或从 NAS 拷贝文件,速度明显低于预期。
  • 大文件还可以,大量小文件特别慢。
  • 开头速度正常,传一会儿之后掉下来。
  • 只有某一台客户端慢,或者原来正常、最近才变慢。

不适用:连接不上共享,见SMB 访问被拒绝或反复要密码和在网络里看不到共享。

开始排查前 ​

一次文件传输要经过:客户端 → 网络 → NAS 的 CPU 和 SMB 服务 → 文件系统 → 磁盘。慢的可能是其中任何一环,所以要先找瓶颈,不要一上来就改参数。

先把「慢」说具体:方向(读还是写)、文件类型(大文件还是小文件)、实际速度(MB/s)、哪台客户端、什么时候开始的。

估一个上限:千兆网络是 1000 Mbit/s,除以 8,理论上限约 125 MB/s,实际会更低一些;100 Mbit/s 的链路上限是 12.5 MB/s 左右。

现象先怀疑
速度卡在 10 MB/s 出头链路只协商到了 100 Mbit/s:网线、接口或交换机端口有问题
速度已经接近千兆网络的上限网络已经跑满,属于正常。想更快,需要整条链路都是 2.5G 或 10G
开头很快,随后掉到很低缓存用满之后,暴露了磁盘真实的写入速度(SMR 盘、阵列重建、校验)
大量小文件很慢每个文件都有固定开销,这是 SMB 的特点。改用压缩包,或者用 rsync 批量传
只有一台电脑慢客户端的问题:Wi-Fi、网卡、杀毒软件、网线
以前正常,突然变慢NAS 在做后台任务(RAID 同步、Btrfs 校验、媒体库扫描、备份),或磁盘在变坏
NAS 上 smbd 把一个核占满CPU 瓶颈:加密、签名,或 CPU 太弱

本页的检查都是只读的。

排查步骤 ​

1. 确认网络链路速率 ​

sh
# 在 OMV 的 shell 里执行(只读);<网卡> 用 ip -br link 查到的名字,例如 enp3s0
ip -br link
ethtool <网卡> | grep -E 'Speed|Duplex|Link detected'
ip -s link show <网卡>
  • Speed 应当与预期一致(1000Mb/s、2500Mb/s 等)。显示 100Mb/s 或 Duplex: Half,换线、换交换机端口试试。
  • ip -s link 里 errors、dropped 的数字在持续增长,说明线路质量有问题。
  • 客户端也要查:Windows 在网络适配器的状态里看速度,Wi-Fi 的「链路速度」只能作参考。
  • 想排除磁盘和 SMB,只测网络本身,用 iperf3,方法见性能测试:fio 与 iperf3。

2. 看 NAS 的 CPU 和磁盘忙不忙 ​

在传输进行的时候,在 NAS 上执行:

sh
# 在 OMV 的 shell 里执行(只读);看完按 q 退出
top
  • smbd 的 CPU 占用接近 100%(一个核),而磁盘并不忙:CPU 是瓶颈。
  • 顶部 CPU 一行里的 wa(等待 I/O)很高:磁盘是瓶颈。

诊断 → 进程(Diagnostics → Processes)页面也能看到负载、任务数和按 CPU 排序的进程列表,每 5 秒自动刷新。

再看有没有后台任务在抢资源:

sh
# 在 OMV 的 shell 里执行(只读)
cat /proc/mdstat
# 装了 Docker 才有这一条,看各容器占用了多少 CPU 和内存
docker stats --no-stream

/proc/mdstat 里有 resync、recovery、check,说明阵列正在同步或检查。Btrfs 的校验可以用 btrfs scrub status <挂载点> 查看。S.M.A.R.T. 的自检、媒体库扫描和备份任务,也会让传输变慢。

3. 磁盘本身 ​

4. OMV 里与 SMB 性能有关的选项 ​

下面这些选项在 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)和 服务 → SMB/CIFS → 共享(Shares)里。不要为了「提速」乱改,下面只告诉你哪些会拖慢,调试完要改回来。改动之后要点黄色提示条上的应用,Samba 会随之重启,已连接的客户端会短暂断开再重连,所以别在有人正在传大文件时操作。

选项默认对性能的影响
日志级别(Log level)无调高会写大量日志并拖慢传输,排查完改回「无」
使用 sendfile(Use sendfile)、异步 I/O(Asynchronous I/O)开启保持默认即可
共享的传输加密(Transport encryption)关闭开启后每个数据包都要加解密,弱 CPU 上会明显变慢
共享的审核文件操作(Audit file operations)关闭每次文件操作都要写审计日志,有额外开销
共享的启用回收站(Enable recycle bin)关闭删除和覆盖变成移动,开销更大
最低协议版本(Minimum protocol version)SMB2不要为了提速降到 SMB1,它更慢,也更不安全

想深入调优,见SMB 传输性能调优。不要直接修改 smb.conf,每次应用都会被重写;需要额外的参数时,用 SMB 页面里的扩展选项。

5. 客户端的因素 ​

  • Wi-Fi:信号、频段、省电模式都会影响速度。用网线对照测试一次。
  • Windows:杀毒软件对网络文件的实时扫描、资源管理器为媒体目录生成缩略图和预览,都会产生大量额外读取。
  • macOS:Finder 在网络共享上会生成缩略图和 .DS_Store 之类的文件。
  • 同时进行多个传输、备份任务。
  • 换一台客户端、换一个目录对比,分清是 NAS 的问题还是客户端的问题。

6. 改一次,测一次 ​

每次只改一个变量,改完用同一个测试文件(几个 GB 的大文件)重复传输几次,记录前后的速度。没有效果就改回去。

确认恢复 ​

  1. 用同一个大文件重复传输三次,速度稳定,并且接近链路或磁盘的上限。
  2. 传输期间,NAS 上 top 里没有哪个核被占满,wa 不高。
  3. 调高过的 SMB 日志级别,已经改回「无」并应用。

仍未解决 ​

附上:NAS 的 CPU、内存、磁盘型号,文件系统类型(EXT4、Btrfs、RAID 等),网络拓扑(有线还是 Wi-Fi、速率),ethtool 的输出,iperf3 的结果,传输时的 top 快照,传输的方向和文件类型,以及客户端的系统。读如何有效求助。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。