外观
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 退出
topsmbd的 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. 磁盘本身
- SMR 盘持续写入时速度会明显下降,见数据盘怎么选:CMR、SMR 与 NAS 盘。
- 阵列降级或重建,速度会受影响,见RAID 降级。
- 磁盘有坏扇区,读写会变慢并伴有错误,用 SMART 检查,见S.M.A.R.T.:监控硬盘健康。
- 第一次访问要等几秒,之后正常:很可能是磁盘从休眠中被唤醒,见硬盘不休眠。
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 的大文件)重复传输几次,记录前后的速度。没有效果就改回去。
确认恢复
- 用同一个大文件重复传输三次,速度稳定,并且接近链路或磁盘的上限。
- 传输期间,NAS 上
top里没有哪个核被占满,wa不高。 - 调高过的 SMB 日志级别,已经改回「无」并应用。
仍未解决
附上:NAS 的 CPU、内存、磁盘型号,文件系统类型(EXT4、Btrfs、RAID 等),网络拓扑(有线还是 Wi-Fi、速率),ethtool 的输出,iperf3 的结果,传输时的 top 快照,传输的方向和文件类型,以及客户端的系统。读如何有效求助。
参考资料
- OMV 官方文档的 Troubleshooting 里,「Samba is slow」一条只指向了论坛里的几篇旧帖,其中有些写于 OMV 2.x 时代,不适合直接照抄
- 本站:SMB/CIFS 共享:Windows 与 macOS 访问、SMB 进阶:回收站、隐藏文件、审计与扩展选项