外观
SMB 传输性能调优
SMB 共享「慢」,多数时候问题不在 SMB 的参数上,而是网线协商成了百兆、硬盘卡在 SMR 写入、CPU 被加密占满,或者客户端的杀毒软件在逐个扫描文件。读完这一篇,你能按顺序找出瓶颈在哪一层,并且只改那些有依据的 OMV 设置。
开始之前
- 先准备一个可重复的测试:同一个几 GiB 的大文件,加一个包含几千个小文件的文件夹,各传一次(上传和下载都要),把用时记下来。没有基线,就无法判断改动有没有用。
- 本文不给「应该达到多少 MB/s」的数字,因为这取决于你的网卡、硬盘和客户端。文中只给方法和判断依据。
- 测速工具的用法见 性能测试:fio 与 iperf3。已经确诊为传输慢的排查清单,见 SMB 传输慢。
改 SMB 设置会重启 SMB 服务
影响范围:保存并应用(Apply)后,smbd 会被重启,正在传输的文件会中断,客户端要重新连接。
前置条件:没有人正在向 NAS 写入重要文件;扩展选项里每一项的作用你都清楚。
怎么回退:把改过的选项改回原值,重新应用。OMV 在重启 SMB 之前会用 samba-tool testparm 检查生成的配置,检查不通过就不会重启服务,所以写错扩展选项一般不会让服务起不来,但改动不会生效,界面会报错。
第一步:看现象
| 现象 | 最可能的层 | 先查什么 |
|---|---|---|
| 大文件速度稳定在某个值,怎么传都差不多 | 网络 | 网卡协商速率、网线、交换机端口 |
| 开头很快,几秒后掉下来 | 缓存写满后落到磁盘 | 磁盘本地写入速度、是否 SMR 盘 |
| 大文件正常,大量小文件特别慢 | 协议往返与元数据 | 把小文件打包再传,对比差异;机械盘的随机读写能力 |
| 打开文件夹很慢 | 磁盘休眠后首次访问、目录项很多 | 硬盘是否刚被唤醒 |
| 时快时慢 | 后台任务或无线网络 | 是否正在 scrub、RAID 重建、备份或同步 |
| 只有某台电脑慢 | 客户端 | 换一台电脑、换一个系统对比 |
第二步:找出瓶颈在哪一层
一次传输的速度,不会超过网络、NAS 磁盘、NAS CPU 和客户端磁盘里最慢的那一个。依次排除:
1. 网络。 在 OMV 的 shell 里看网卡协商速率,网卡名可以在 网络 → 接口(Network → Interfaces)里看到:
sh
ethtool <网卡名> | grep -E "Speed|Duplex|Link detected"千兆网卡显示 Speed: 100Mb/s 说明链路降速了,常见原因是网线或交换机端口有问题。再用 iperf3 测纯网络吞吐,结果应该接近链路的理论上限;达不到时先排查线缆、交换机和网卡,不用去碰 SMB。
2. 磁盘。 在 NAS 本机对共享所在的文件系统做读写测试(方法见 性能测试:fio 与 iperf3)。同时在传输时看 top 里的 wa(I/O 等待),它长时间偏高说明磁盘跟不上。
3. CPU 和协议。 传输时在 NAS 上运行 top,按 1 展开每个核心。如果某个 smbd 进程占满了一个核,而网络和磁盘都没跑满,说明被单个连接的处理能力限制了,常见原因是加密或签名。Samba 对每个客户端使用一个进程,所以一个客户端的单次传输通常只能用到一个核心。
4. 客户端。 换另一台电脑、另一个系统、另一块硬盘对比。客户端的杀毒软件、网卡驱动、无线连接都会拖慢速度。
第三步:OMV 里与速度有关的设置
服务级别
入口是 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings),在页面下半部分的高级设置(Advanced settings)里:
| 设置 | 默认 | 对速度的影响 |
|---|---|---|
| 最低协议版本(Minimum protocol version) | SMB2 | 通常对吞吐影响不大。SMB1 是已被弃用的旧协议,不要为了「兼容」降到 SMB1。所有客户端都支持时可以提高到 SMB3,但老电视、打印机、播放器可能连不上 |
| 使用 sendfile(Use sendfile) | 开 | 界面提示它能更高效地使用 CPU,保持开启 |
| 异步 I/O(Asynchronous I/O) | 开 | 保持开启 |
| 日志级别(Log level) | 无 | 调到「完全」或「调试」会明显拖慢传输并产生大量日志,排查问题后马上改回「无」 |
| 启用 NetBIOS(Enable NetBIOS) | 关 | 只影响旧系统的名称解析,和速度无关 |
共享级别
入口是 服务 → SMB/CIFS → 共享(Services → SMB/CIFS → Shares),编辑某个共享。下面这些选项会给每一次文件操作增加额外的处理,不需要的不要开:
| 设置 | 默认 | 说明 |
|---|---|---|
| 传输加密(Transport encryption) | 关 | 开启后这个共享强制加密(smb encrypt = required),所有数据都要加解密,CPU 开销明显。只在数据要穿过不可信网络时开 |
| 审核文件操作(Audit file operations) | 关 | 开启后会为每次创建目录、重命名、删除和写入记一条日志,写入多的共享上开销很大 |
| 启用回收站(Enable recycle bin) | 关 | 删除变成移动到 .recycle 目录,大批量删除会变慢,还会占用空间 |
| macOS 兼容性(macOS compatibility)、支持时间胶囊 Time Machine(Time Machine support) | 关 | 会加载 catia、fruit、streams_xattr 这些 VFS 模块,只给需要的共享开 |
| 存储 DOS 属性(Store DOS attributes) | 关 | 把 DOS 属性存进扩展属性,多一次磁盘写 |
在 Btrfs 上的共享,OMV 还会自动加载 btrfs 和 shadow_copy2 模块,让 Windows 能显示「以前的版本」,这是自动的,不需要也不能在界面里关闭。
Samba 自带的行为
socket options
OMV 默认写入 socket options = TCP_NODELAY IPTOS_LOWDELAY。Samba 官方文档警告,现代服务器系统的网络参数已经自动调优,设置发送、接收缓冲区大小会关闭 Linux 的 TCP 自动调优,可能让网络栈变差。网上流传的 SO_RCVBUF、SO_SNDBUF 之类的「优化」写法大多已经过时,不要照抄。
多通道
SMB3 多通道(Multichannel)让一个会话同时走多条网络连接。Samba 从 4.15 开始默认启用 server multi channel support,Debian 13 带的 Samba 是 4.22,所以 OMV 8 上是默认开启的,不需要任何额外设置。
它是否真的在工作,取决于网络:NAS 和客户端之间有多条独立的链路,或者网卡支持 RSS,并且客户端也支持。链路聚合(Bond)不等于多通道:Bond 把几块网卡合成一个接口,单个连接仍然只走一条物理链路,见 链路聚合。在 Windows 客户端可以用 PowerShell 的 Get-SmbMultichannelConnection 查看。
签名与加密
- Windows 11 24H2 起,默认要求所有 SMB 连接签名,这是微软文档里写明的变化,见 SMB security hardening。签名要给每个数据包计算校验,会增加 CPU 开销。
- Samba 的
server signing默认值是default,SMB2 以上的签名无法在服务器端彻底关闭,客户端要求签名时就会签名。微软也明确建议不要为了解决兼容问题去关闭签名。 - 所以 CPU 很弱的 NAS 在新版 Windows 上变慢时,应该先在 NAS 上用
top看smbd的 CPU 占用,而不是去找关闭签名的办法。
用 smbstatus 可以看到每个连接协商出来的协议版本、加密和签名情况,需要机器可读的输出时加 -j:
sh
smbstatus扩展选项的取舍
服务 → SMB/CIFS → 设置 最下面和每个共享的编辑页里都有扩展选项(Extra options),内容会原样追加到生成的配置里。对待它们,只遵守三条:
- 有症状、有测量,才加。 没有证据的「优化参数合集」大概率没有效果,有的反而有害。
- 一次只改一项,改前改后各测一次,用同一个测试文件。
- 先看当前生效值。 下面这条是只读的,能看到 Samba 实际在用的值,包括默认值:
sh
testparm -sv 2>/dev/null | grep -E "socket options|aio read size|aio write size|server multi channel support|server signing|server smb encrypt"不要去手改 /etc/samba/smb.conf,它每次部署都会被重写。
客户端与网络上的常见因素
- Windows 客户端:杀毒软件对网络位置的实时扫描、资源管理器的缩略图和预览窗格、网卡驱动、无线连接。PowerShell 的
Get-SmbConnection能看到已协商的协议版本(Dialect)。 - macOS 客户端:Finder 处理大量小文件本来就慢,先打包再传;macOS 专用的共享才需要打开 macOS 兼容性。
- 无线网络:NAS 不要用 Wi-Fi 连接,客户端用 Wi-Fi 时速度由无线信号决定。
- 巨型帧(MTU 9000):需要 NAS、交换机、客户端所有设备一致,出问题很难排查,默认的 1500 对大多数家庭网络已经够用。
- 后台任务:scrub、RAID 重建、SnapRAID 同步、备份和 SMB 传输会争抢同一批磁盘,错开时间。
- 硬盘休眠:休眠的硬盘首次被访问时要等待旋转起来,见 低功耗与静音。
检查结果
调整之后,用同一个测试文件再传一次,和基线对比,并确认:
sh
smbstatus # 连接仍然正常,协议版本、加密和签名符合你的预期
omv-salt deploy list-dirty # 没有遗留的待应用更改如果速度没有变化,把改过的选项还原,回到第二步重新找瓶颈。
常见问题
复制开头很快,几秒后掉到很慢。 开头的速度是客户端和服务器的内存缓存,后面才是磁盘的真实写入速度。大量写入时 SMR 盘会明显掉速,见 数据盘怎么选:CMR、SMR 与 NAS 盘。
升级到 Windows 11 24H2 之后访问 NAS 变慢,或者匿名共享连不上。 24H2 默认要求签名,并且不再允许来宾回落。先检查 NAS 的 CPU,再检查共享是否依赖匿名访问。
加了扩展选项后,应用时报错。 删除新加的那一行,应用,再逐项排查。
参考资料
- Samba 官方文档:smb.conf(5)、smbstatus(1)
- OMV 源码中生成 SMB 配置的模板:
deploy/samba/files - 微软:SMB security hardening in Windows Server and Windows Client