这次折腾的背景是新搞了台小主机,然后计划拿来当软路由使用,因其还有个闲置的 NVME 插槽以及一块闲置的 NVME 盘,就顺便就想把它当 NAS 用。

但是配置好之后,发现从 Mac 拖拽大文件到 Samba 共享目录时,传输会在几十秒后突然中断,Mac 弹窗报错:“操作无法完成,因为发生意外错误 (错误代码 -8062)” 或 (-36) 错误。
起初怀疑是 NVMe 固态硬盘缓外掉速或 2.5G 网卡断流。但在服务端使用 iostat -x 1 监控发现,写入延迟 (w_await) 仅为两位数(几十毫秒),底层 I/O 非常健康,网络链路也没有掉线。
最终,通过将 Samba 日志级别调至 log level = 3,给大模型分析了下得知是 Mac 的 Finder 在拷贝大文件时,每隔 3 秒就会向 Samba 服务器发送一次 qfsinfo 查询磁盘空间的请求。而 Samba 默认开启了严格锁定 (strict locking = yes),导致 Mac 的多线程同时读写同一个文件时,触发了 Samba 的文件锁,进而导致主进程挂起。
所以,就根据原因编辑 /etc/samba/smb.conf,调整和应用以下核心配置:
[global]
# 删除旧时代写死的 SO_RCVBUF 参数,依靠现代 Linux 内核自动调优 TCP 窗口
socket options = TCP_NODELAY IPTOS_LOWDELAY
# 禁用强制同步,忽略 Mac 频繁的刷盘指令,大幅提升连续写入稳定性
strict sync = no
sync always = no
# 开启 sendfile 提升传输效率
use sendfile = yes
# 关闭全局 Posix 锁,防止 Mac 并发查询扩展属性时导致死锁
posix locking = no
# === macOS 专属兼容优化 (VFS Fruit) ===
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:model = MacPro
# 解决 Mac 产生的 .DS_Store 及零碎隐藏文件问题
fruit:veto_appledouble = no
fruit:metadata = stream
fruit:posix_rename = yes
fruit:zero_file_id = yes
fruit:wipe_intentionally_left_blank_rfork = yes
fruit:delete_empty_adfiles = yes
# 禁用 NFS ACLs 权限映射,降低 CPU 无谓开销
fruit:nfs_aces = no
# 在具体的共享文件夹下:
[Personal]
path = /opt/samba/personal/%U
read only = No
# 关键:关闭严格锁定!
strict locking = No总体来说,因为我的 Samba 是非常老的配置(从而起的我自己都不得而知了),所以不要盲目套用网上的老旧配置,而是要根据实际情况进行针对性调整。
经过上述配置后,重启 Samba 服务(systemctl restart smbd),在 2.5G 网络下,百 GB 的 4K 视频传输一气呵成,全程跑满 280MB/s,再无断流现象。