跳转到内容

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),内容会原样追加到生成的配置里。对待它们,只遵守三条:

  1. 有症状、有测量,才加。 没有证据的「优化参数合集」大概率没有效果,有的反而有害。
  2. 一次只改一项,改前改后各测一次,用同一个测试文件。
  3. 先看当前生效值。 下面这条是只读的,能看到 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,再检查共享是否依赖匿名访问。

加了扩展选项后,应用时报错。 删除新加的那一行,应用,再逐项排查。

参考资料 ​

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