尝试我们的虚拟代理 - 它可以帮助你快速识别和修复常见的 SMB 问题。
本文旨在帮助解决服务器消息块 (SMB) 问题。 大部分用户可使用下面提供的解决方法解决其问题。
SMB 术语
传达正确的术语是进行优质 SMB 问题解答的关键方面。 因此,应了解基本的 SMB 术语,以确保数据收集和分析的准确性。
- SMB 服务器(也称为文件服务器)始终是托管文件系统的系统。
- SMB 客户端 (CLI) 始终是尝试访问文件系统的系统。
无论操作系统版本或版本如何,这些术语都是一致的。 例如,如果基于 Windows Server 2016 的计算机尝试访问基于 Windows 10 的计算机上的 SMB 共享 \\MyWorkstation\Data ,则 Windows Server 2016 是 SMB 客户端,Windows 10 是 SMB 服务器。
故障排除清单
- 检查是否安装了正确的 SMB 网络协议。 默认情况下,不再安装 SMBv1 网络协议。
- 禁用 SMBv1。
- 如果在仅支持 SMBv1 的设备上禁用了 SMBv1,则无法访问该设备。 在这种情况下,请升级系统。
- 不能单独禁用 SMBv2 或 SMBv3,因为这些版本是同一驱动程序的一部分。
- 分析流量:SMB 是使用 TCP/IP 作为网络传输协议的应用程序级协议。 因此,与 SMB 相关的问题可能表明存在潜在的 TCP/IP 相关问题。
- 分析协议:要了解使用的确切命令和选项,请查看网络跟踪中的实际 SMB 协议详细信息。
- 更新与 SMB 相关的系统文件:使系统文件保持最新。 确保安装最新的更新汇总。
SMB 文件信息
%windir%\system32\Drivers 下列出的 SMB 客户端二进制文件:
- RDBSS.sys
- MRXSMB.sys
- MRXSMB10.sys
- MRXSMB20.sys
- MUP.sys
- SMBdirect.sys
%windir%\system32 下列出的 SMB 服务器二进制文件:
- Srvsvc.dll
%windir%\system32\Drivers 下列出的 SMB 服务器二进制文件:
- SRVNET.sys
- SRV.sys
- SRV2.sys
- SMBdirect.sys
建议在解决 SMB 问题之前更新以下组件:
- iSCSI:文件服务器需要文件存储。 如果存储包含 iSCSI 组件,请更新这些组件。
- 网络:更新网络组件。
- Windows Core:为了提高性能和稳定性,请更新 Windows Core。
断开所有共享资源与本地计算机的连接
可以使用 Net Use * /delete
该命令在本地计算机上断开活动或记住的共享资源的连接。
注意
还可以在远程计算机上使用此命令。 运行 Net help use
更多选项。
重要
本文的这一部分基于社区内容。
社区解决方案内容声明
Microsoft 公司和/或其供应商不对在这里所发布的信息和图片的适用性、可靠性或准确性负责。 所有此类信息和相关图形均按“原样”提供,不作任何形式的保证。 Microsoft 和/或其相应的供应商特此声明,不对本信息和相关图形提供任何保证和条件,包括所有暗示的保证和适销性条件、特定用途的适用性、工作人员的工作、所有权和非侵权。 你明确同意,在任何情况下,Microsoft 和/或其供应商都不对任何直接、间接、惩罚性、附带、特殊、后果性损害或任何损害负责,包括但不限于因以下原因或以任何方式造成的使用、数据或利润损失的损害负责:即使微软或其任何供应商已被告知有可能受到损害,但由于使用或无法使用本文所含信息和相关图形,无论是基于合同、侵权、疏忽、严格责任还是其他原因。
常见问题和解决方案
访问横向扩展文件服务器时,性能会受到限制
客户端访问网络使用高速远程直接内存访问(RDMA),但群集网络没有。 由于此行为,重定向仅在群集网络上发生。 群集网络通常连接到 1-GbE 网络适配器。
若要解决此问题,可以配置用于群集共享卷(CSV)的客户端访问网络的选项。 或者升级到 Windows Server 2012 R2 或更高版本。 该系统会自动将客户端重定向到群集节点,该节点对文件共享卷具有最佳访问权限。 有关详细信息,请参阅以下博客存档文章: Windows Server 2012 R2 中的自动 SMB 横向扩展重新均衡。
SMB 更倾向于使用速度较慢的物理网络适配器,而不是虚拟网络适配器
主机上的虚拟网络适配器不支持 RSS。 物理网络适配器支持 RSS。 SMB 始终使用支持 RSS 的网络适配器,而不是非 RSS 网络适配器,即使 RSS 网络适配器速度较慢。
若要解决此问题,请在物理网络适配器上禁用 RSS 功能,或使用 SMB 多通道约束将 SMB 通信限制为一个或多个定义的网络接口。 有关详细信息,请参阅 Windows PowerShell 中的 New-SmbMultichannelConstraint SMB 共享 cmdlet。
SMB 报告网络适配器不支持 RDMA,即使你认为它支持 RDMA
出现此问题的原因是,具有较旧驱动程序或固件的支持 RDMA 的网络适配器可能无法正确识别为支持 RDMA 的网络适配器。
若要解决此问题,请从制造商的网站更新网络适配器固件和驱动程序。
SMB 多通道启动前所需的网络流量量各不相同
SMB 多通道功能用于发现网络适配器的 RSS 和 RDMA 功能。 在服务器操作系统上,当初始读取或写入操作发生时,SMB 多通道将启动。 在客户端操作系统上,在发生一定数量的网络流量之前,SMB 多通道不会启动。
在服务器操作系统上,SMB 多通道在每个会话中仅快速启动一次。 在客户端操作系统上,可以配置注册表项以更快启动 SMB 多通道。 有关详细信息,请参阅以下博客存档博客文章:在多通道实际启动之前,SMB 客户端和服务器之间需要传递多少流量?
SMB 多通道不聚合多个 10-GbE 网络适配器
支持 RSS 的 10-GbE 网络适配器有时标识为支持非 RSS 的网络适配器。 出现此问题时,SMB 仅使用一个 TCP 连接。 当 SMB 多通道同时使用支持 RSS 和非 RSS 网络适配器时,它应仅使用支持 RSS 的网络适配器。
服务器类网络适配器应显示为支持 RSS。 如果没有,请从制造商的网站更新网络适配器驱动程序,然后重新检查 RSS 设置。
可能需要在两个网络适配器上禁用 RSS 才能聚合吞吐量。 有关详细信息,请参阅以下博客存档博客文章: Windows Server 2012 文件服务器提示:确保网络接口支持 RSS。
主机上的虚拟网络适配器性能不佳
主机上的虚拟网络适配器不支持 RSS。 如果没有支持 RSS 的网络适配器,SMB 仅使用一个 TCP 连接。 使用 10-GbE 网络适配器、支持 RSS 的网络适配器和 NIC 组合时,会发生此行为。
若要解决此问题,请使用多个虚拟网络适配器来确保有多个 TCP 连接。 有关详细信息,请参阅以下博客存档博客文章: Windows Server 2012 文件服务器提示:确保网络接口支持 RSS。
Windows Server 2012 R2 定期记录 SMBClient 事件 ID 30818
假设基于 Windows Server 2012 R2 的计算机使用 InfiniBand 网络适配器。 此适配器使用 SMB 直通功能支持群集节点与 Hyper-V 主机之间的远程直接内存访问(RDMA)通信。 重启 Hyper-V 主机后,Windows 可能会在 事件查看器 中的应用程序和服务日志/Microsoft/Windows/SmbClient 路径下记录事件 ID 30818。 发生这种情况时,可能还会遇到性能问题。
在 Windows Server 2012 R2 上,LanmanServer 服务会自动启动 SmbDirect 服务。 但是,如果 LanmanWorkstation 服务首先启动并尝试在 SmbDirect 服务加载之前打开 RDMA 连接,则 Windows 会记录事件 ID 30818。 当客户端最初通过 TCP/IP 与服务器通信时,它使用 RDMA 接口。 因此,无需用户操作即可恢复。
Microsoft正在考虑在未来版本的 Windows Server 中为此问题提供解决方案。
解决方法
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。
若要在 Windows Server 2012 R2 上解决此问题,请将 SmbDirect 服务配置为自动启动。 为此,请按照下列步骤进行操作:
打开注册表编辑器,然后导航到以下注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\smbdirect
右键单击 “开始 ”注册表项,然后选择“ 修改”。
在 “值”数据 框中,将值(默认值为 3,即按需)更改为 2 (自动)。
进行此更改后,应该能够重启计算机,而无需 Windows 日志记录事件 ID 30818 消息。 如果 Windows 继续记录这些事件,则其他一些问题可能会阻止 RDMA 接口初始化。
安装 Windows Server 时,Windows 会记录事件 ID 1
安装 Windows Server 2019、Windows Server 2016 或 Windows Server 2012 R2 时,Windows 日志事件 ID 1。 事件信息如下所示:
日志名称:Microsoft-Windows-SMBWitnessClient/Admin
来源:Microsoft-Windows-SMBWitnessClient
事件 ID:1
级别:错误
说明:见证客户端初始化失败并出现错误(系统找不到指定的文件)。
如果这是未启用任何角色或功能的 Windows Server 的全新部署,则可以安全地忽略此事件。
SMB 已知问题
- TCP 三向握手失败
- 文件传输速度缓慢
- 协商、会话设置和树连接故障
- TCP 连接在验证协商期间中止
- SMB 多通道问题解答
- SMB 服务器上 CPU 使用率过高的问题
- 事件 ID 50 错误消息问题解答
- 默认情况下不安装 SMBv1
- 访问 SMB 文件共享时被拒
数据收集
联系Microsoft 支持部门之前,可以收集有关问题的信息。
先决条件
- 在本地系统上具有管理员权限的帐户的安全上下文中运行 TSS。 首次运行它时,接受 EULA。 (接受 EULA 后,TSS 不会再次提示你。
- 建议在范围内使用
RemoteSigned
PowerShell 执行策略LocalMachine
。
注意
如果当前的 PowerShell 执行策略不允许运行 TSS,请执行以下操作:
- 通过运行
Set-ExecutionPolicy -scope Process -ExecutionPolicy RemoteSigned
cmdlet 为RemoteSigned
进程级别设置执行策略。 - 若要验证更改是否生效,请运行
Get-ExecutionPolicy -List
cmdlet。
这些进程级权限仅适用于当前的 PowerShell 会话。 关闭运行 TSS 的 PowerShell 窗口后,进程级别的分配权限将恢复为以前配置的状态。
在联系Microsoft支持人员之前收集关键信息
在所有节点上下载 TSS ,并将文件展开到 C:\tss 文件夹中。
在 提升的 PowerShell 命令提示符窗口中打开 C:\tss 文件夹。
通过运行以下 cmdlet 在客户端和服务器上启动跟踪:
Client:
TSS.ps1 -Scenario NET_SMBcli
服务器:
TSS.ps1 -Scenario NET_SMBsrv
如果跟踪首次在服务器或客户端上运行,请接受 EULA。
允许录制(PSR 或视频)。
注意
如果在客户端和服务器上收集日志,请在重现问题之前等待这两个节点上显示此消息。
重现此问题。
重现问题后,输入 Y 以完成日志记录数据。
TSS 将跟踪存储在 C:\MS_DATA 文件夹中的压缩文件中。 可以将文件上传到工作区进行分析。