租约与目录缓存的作用
从 SMB2.1 起,客户端可以就一个文件向服务端申请租约,取得读缓存甚至写缓存的权利;SMB3 又把这种缓存扩展到了目录,允许客户端把整个目录的枚举结果缓存在本地。好处很直接:浏览含成千上万文件的目录、反复打开同一批文件时不必每次都走网络。代价是需要服务端在别的客户端请求同一对象时发起「中断」,把缓存收回,收回期间那一方的操作会短暂等待。
基本信息
| 适用平台 | Windows Server/客户端;Samba 4 部分支持 |
|---|---|
| 共享属性 | CachingMode:Manual、Documents、Programs、None、BranchCache |
| 查看命令 | Get-SmbShare、Get-SmbConnection |
| 客户端侧 | 离线文件功能与客户端缓存独立于服务端设置 |
| 影响面 | 浏览性能、打开延迟、多客户端写法一致性 |
缓存模式与行为
| 缓存模式 | 典型行为 | 适用场合 |
|---|---|---|
| Manual | 应用自行决定是否缓存 | 通用文件服务器默认值 |
| Documents | 自动缓存文档类访问模式 | 办公文档共享 |
| Programs | 面向程序文件的访问模式 | 只读程序分发 |
| None | 禁用客户端缓存 | 多写方共享、要求强一致 |
| BranchCache | 配合分支缓存加速 | 分支机构广域访问 |
查看与调整
查看与调整
# Windows:查看各共享的缓存模式
Get-SmbShare | Select-Object Name,CachingMode,ContinuouslyAvailable
# Windows:把多写方共享改为不做客户端缓存(需评估浏览性能影响)
Set-SmbShare -Name data -CachingMode None -Force
# 客户端侧核对是否存在离线缓存条目
Get-ChildItem $env:WINDIR\CSC | Select-Object -First 5
# Linux 客户端缓存行为主要受挂载参数控制,可对比 actimeo 参数的差异典型使用场景
- 超大目录频繁浏览:目录租约减少重复的枚举请求
- 只读程序或安装包分发:缓存带来的收益大且没有一致性风险
- 多台服务器写入同一共享目录:需要评估缓存收回带来的延迟
- 分支机构经广域网访问总部共享:配合分支缓存降低重复传输
「刚写完别人看不到」要在缓存这一层找原因:提供写缓存租约时,其他客户端要等租约被收回才能看到新内容。若业务要求写入后立即可见,应把该共享设为不做客户端缓存,而不是到处刷新客户端。
服务端发起租约中断但客户端响应缓慢时,请求方会表现为访问卡顿甚至超时。这类故障在服务端看不出异常,需要在客户端侧的事件日志与网络抓包中确认中断往返是否被拖慢。