核心是调整客户端行为:macos通过修改/etc/nsmb.conf设置dir_cache_max_cnt=0停用目录枚举缓存、signing_required=no禁用强制签名;windows则用powershell执行set-smbclientconfiguration命令调优缓存参数。
修改 smb 共享的默认网络缓存,核心是调整客户端行为,而非服务器端设置。macos 和 windows 的缓存机制不同,但都可通过配置文件或系统参数控制缓存大小、有效期和签名策略。
macOS:关闭本地目录枚举缓存
macOS 使用 dir_cache_max_cnt 控制 SMB 目录列表缓存数量,默认启用且可能造成“断连后仍显示旧内容”或“列表一闪而逝”。停用方法如下:
- 若已有
/etc/nsmb.conf:用管理员权限打开,在文件末尾添加两行:[default]dir_cache_max_cnt=0 - 若无该文件:在终端依次执行:
sudo touch /etc/nsmb.confecho "[default]" | sudo tee -a /etc/nsmb.confecho "dir_cache_max_cnt=0" | sudo tee -a /etc/nsmb.conf - 保存后,需手动卸载并重新挂载所有 SMB 共享(Finder 中右键弹出,或终端运行
umount /Volumes/xxx后重连)
macOS:禁用 SMB 客户端强制签名(提升响应速度)
签名验证虽增强安全,但在可信局域网中会显著拖慢响应。macOS 10.11.5+ 默认开启 signing_required=yes,实测可将千兆内网吞吐压至 20–40 MB/s。
- 终端执行:
sudo nano /etc/nsmb.conf - 写入以下两行:
[default]signing_required=no - 保存退出(Ctrl+O → Enter → Ctrl+X),重启 Mac 或至少重启 Finder(Option+右键 Dock 中 Finder → 重新启动)
Windows:调整 SMB 客户端缓存策略
Windows 本身不提供图形界面开关来直接修改 SMB 缓存大小,但可通过注册表或 PowerShell 间接影响缓存行为:
- 禁用客户端缓存(适用于频繁变动的共享):
以管理员身份运行 PowerShell,执行:Set-SmbClientConfiguration -DirectoryCacheEntriesMax 0 -FileInfoCacheEntriesMax 0 -DurableHandleCacheEntriesMax 0 - 禁用脱机文件缓存(避免自动同步干扰):
进入「控制面板 → 同步中心 → 管理脱机文件」→ 点击「禁用脱机文件」 - 如需恢复默认缓存值,可运行:
Set-SmbClientConfiguration -ResetAll
通用建议:避免缓存干扰的实用操作
即使已修改配置,某些行为仍会触发意外缓存残留:
- 不要依赖 Finder 或资源管理器的“重新连接”功能——它常复用旧会话;应先完全断开,再新建连接
- Wi-Fi 与有线网卡同时启用时,SMB 可能走错路径;临时禁用 Wi-Fi 可排除干扰
- macOS 上远程共享断开后,
/private/var/folders/xx/xx/C/com.apple.smbclient下的协议缓存可能未清空,可手动删除对应文件夹(需先断开所有 SMB 连接)











