四个步骤与对应工具
第一步确认连接:能不能连到 445 端口、协商到什么版本与是否加密。第二步确认身份:用哪个账号登录、是否通过域认证。第三步确认权限:共享层与文件系统层分别放行了什么。第四步才看性能:吞吐、时延与重传。顺序不能颠倒,否则很容易在权限正确的情况下反复调整传输参数。
基本信息
| 适用平台 | Windows Server/客户端、Linux cifs 客户端与 Samba 服务端 |
|---|---|
| Windows 命令 | Get-SmbConnection、Get-SmbSession、Get-SmbOpenFile、net use |
| Windows 日志 | 事件查看器中的 SMB 客户端与服务端通道 |
| Linux 客户端 | mount、smbclient、dmesg |
| Linux 服务端 | smbstatus、testparm |
工具与用途
| 工具 | 看什么 | 平台 |
|---|---|---|
| Get-SmbConnection | 版本、加密、签名、打开数 | Windows 客户端 |
| Get-SmbSession | 在线会话与来源主机 | Windows 服务端 |
| Get-SmbOpenFile | 被占用文件与持有者 | Windows 服务端 |
| smbclient -L | 服务端共享列表与协议探测 | Linux 客户端 |
| smbstatus | 会话与文件锁 | Samba 服务端 |
| testparm | 配置语法与生效参数 | Samba 服务端 |
| 抓包分析 | 协商过程、错误状态码 | 两端通用 |
一次典型排查
一次典型排查
Test-NetConnection 10.0.0.20 -Port 445 # 第一步:445 是否可达
Get-SmbConnection | Select-Object ServerName,Dialect,Encrypted # 第二步:协商结果
net use \\10.0.0.20\data /user:EXAMPLE\svc # 第三步:换账号复现验证权限
Get-SmbOpenFile | Where-Object Path -like '*data*' # 第四步:看句柄与占用情况Linux 侧对照
Linux 侧对照
smbclient -L //10.0.0.20 -U svc # 列出共享,同时验证协议可用性
smbclient //10.0.0.20/data -U svc -c 'ls' # 进入共享并列目录
mount -t cifs -o vers=3.1.1,username=svc //10.0.0.20/data /mnt/data # 挂载测试
dmesg | tail -n 30 # cifs 的内核报错通常更具体
testparm -s /etc/samba/smb.conf # 服务端确认配置已生效抓包在加密连接上只能看到协商过程与状态码,看不到文件内容与文件名。所以分析前先用连接视图确认是否加密:报错状态码仍有价值,但对「哪个文件失败」这类问题无能为力,需要结合服务端日志。
把日志级别或调试开关调到最详细会显著增加磁盘写入与 CPU 开销,在繁忙文件服务器上可能直接影响业务。应限定时间窗与范围,排查结束后立刻恢复默认级别。