SMB 压缩

适用范围:Windows Server 2022、Windows 11

使用 SMB 压缩,管理员、用户或应用程序能够在文件通过网络传输时请求压缩文件。 这样一来,将无需首先使用应用程序手动压缩文件、复制文件,然后在目标计算机上解压缩文件。 压缩文件将消耗更少的网络带宽并花费更少的时间进行传输,但在传输过程中 CPU 使用率会略微增加。 SMB 压缩在带宽较少的网络上最有效,例如客户端的 1 Gbps 以太网或 Wi-Fi 网络;在没有 SMB 压缩的实际应用中,通过无拥塞的 100 Gbps 以太网网络在具有闪存存储的两台服务器之间传输文件可能同样快,但仍会减少其他应用程序的拥塞。

Windows 中的 SMB 压缩具有以下特征:

  • 支持压缩算法 XPRESS (LZ77)、XPRESS Huffman (LZ77+Huffman)、LZNT1 或 PATTERN_V1*。 自动使用 XPRESS
  • 在 Windows Server 2025 上支持 LZ4 压缩算法
  • 支持 SMB 签名和 SMB 加密
  • 支持基于 QUIC 的 SMB
  • 支持 SMB 多通道
  • 不支持基于 RDMA 的 SMB 直通

注意

Windows 11 Insider 和 Windows Server Insider Preview 版本 25997 及更高版本还支持 LZ4.org 定义的压缩算法 LZ4。有关此压缩算法的详细信息,请参阅 LZ4 压缩文档

有关 SMB 压缩的演示,请观看此视频:

要求

若要在传统的客户端文件服务器工作负载中使用 SMB 压缩,需要以下各项:

配置 SMB 压缩

你可以从客户端和服务器角度配置 SMB 压缩。 客户端和服务器不是指特定版本(如 Windows Server 2022 或 Windows 11 Insider Preview),而是指两台计算机之间的文件传输架构。 Windows Server 2022 和 Windows 11 都支持作为 SMB 压缩的客户端或服务器。

请求对文件共享进行 SMB 压缩

可以将共享配置为在客户端连接时始终请求压缩。 可以使用 Windows Admin Center 或 PowerShell。

使用 Windows Admin Center

  1. 安装 Windows Admin Center 并连接到 Windows Server 2022 文件服务器。
  2. 单击“文件和文件共享”菜单项。
  3. 单击“文件共享”。
  4. 编辑现有共享或创建新共享。
  5. 选择“压缩数据”,然后单击“添加”或“编辑”。

Window Server 2022 文件服务器中Windows Admin Center 的屏幕截图。

使用 PowerShell

  1. 以管理员身份打开提升的 Azure PowerShell 命令提示符。

  2. 使用带有 -CompressData $true 形参和实参的 New-SMBShare 创建具有压缩的新共享。 例如:

    New-SmbShare -Name "Sales" -Path "C:\sales" -CompressData $true
    
  3. 使用带有 -CompressData $true 形参和实参的 Set-SMBShare 编辑具有压缩的现有共享。 例如:

    Set-SmbShare -Name "Sales" -CompressData $true
    

请求对映射驱动器进行 SMB 压缩

可以请求压缩通过映射驱动器复制的所有数据。 这可以作为登录脚本的一部分或在手动运行时完成。

  1. 打开 PowerShell 命令提示符。

  2. 使用带有 -CompressNetworkTraffic $true 形参和实参的 New-SMBMapping 映射驱动器。 例如:

    New-SmbMapping -LocalPath "Z:" -RemotePath "\\fs1.corp.contoso.com\sales" -CompressNetworkTraffic $true
    

请求使用复制工具进行 SMB 压缩

可以请求使用 robocopy 或 xcopy 对特定文件尝试进行 SMB 压缩。

注意

如果希望文件资源管理器、第三方复制工具或应用程序使用压缩,请映射具有压缩的驱动器,对共享启用压缩,或将 SMB 客户端设置为始终压缩。

  1. 打开 CMD 提示符或 PowerShell 命令提示符。

  2. 使用 /COMPRESS 标志进行复制。 例如:

    ROBOCOPY c:\hypervdisks \\hypervcluster21.corp.contoso.com\disks$ *.vhdx /COMPRESS
    

始终要求或始终拒绝压缩请求

从带有更新 KB5016693 的 Windows Server 2022(操作系统内部版本 20348.946)和带有更新 KB5016691 的 Windows 11(操作系统内部版本 22000.918)开始,可以将 SMB 客户端或 SMB 服务器配置为始终请求压缩和始终拒绝压缩请求。 现在可以使用组策略或 PowerShell;在 Windows 11 和 Windows Server 2022 的初始版本中,只能使用注册表设置来控制其中大多数行为,并且不能将 SMB 服务器配置为始终请求压缩,尽管其共享设置。 SMB 客户端和 SMB 服务器指的是 SMB 服务,而不是 Windows 版本或 SKU。 所有这些 SMB 更改都会立即生效,无需重新启动。

始终尝试压缩(SMB 客户端)

  1. 为你的 Active Directory 域运行组策略管理控制台,并创建或导航到组策略。
  2. 展开策略“计算机配置\策略\管理模板\网络\Lanman 工作站”。
  3. 启用“默认使用 SMB 压缩”策略。
  4. 关闭策略编辑器。

从不压缩(SMB 客户端)

  1. 为你的 Active Directory 域运行组策略管理控制台,并创建或导航到组策略。
  2. 展开策略“计算机配置\策略\管理模板\网络\Lanman 工作站”。
  3. 启用“禁用 SMB 压缩”策略。
  4. 关闭策略编辑器。

始终尝试压缩(SMB 服务器)

  1. 为你的 Active Directory 域运行组策略管理控制台,并创建或导航到组策略。
  2. 展开策略“计算机配置\策略\管理模板\网络\Lanman 服务器”。
  3. 启用“请求所有共享的流量压缩”策略。
  4. 关闭策略编辑器。

从不压缩(SMB 服务器)

  1. 为你的 Active Directory 域运行组策略管理控制台,并创建或导航到组策略。
  2. 展开策略“计算机配置\策略\管理模板\网络\Lanman 服务器”。
  3. 启用“禁用 SMB 压缩”策略。
  4. 关闭策略编辑器。

了解和控制压缩行为

从带有更新 KB5016693 的 Windows Server 2022(操作系统内部版本 20348.946)和带有更新 KB5016691 的 Windows 11(操作系统内部版本 22000.918)开始,默认情况下,SMB 总是在客户端或服务器请求时尝试压缩文件,而不使用压缩采样。

注意

在 Windows Server 2022 和 Windows 11 的原始版本中,SMB 压缩默认使用以下算法:尝试在传输期间压缩文件的前 524,288,000 字节 (500 MiB) 并跟踪在该 500 MiB 范围内压缩的至少 104,857,600 字节 (100 MiB)。 如果小于 100 MiB 是可压缩的,SMB 压缩会停止尝试压缩文件的其余部分。 如果至少压缩 100 MiB,SMB 压缩会尝试压缩文件的其余部分。 通过此行为更改,现在默认情况下禁用采样,在客户端或服务器请求的情况下,SMB 始终尝试压缩整个文件。

测试 SMB 压缩

测试压缩配置的一种简单方法是使用 VHDX 文件。 可以创建并装载 VHDX,向其中添加一些文件,然后卸载 VHDX 并将其复制为文件。 或者,可以只复制现有的已卸载虚拟机 VHDX 文件,因为其大部分文件内容将被压缩。 有关创建 VHDX 测试文件的示例:

  1. 启动 Diskmgmt.msc。

  2. 单击选择“本地磁盘(C:)”。

  3. 单击“操作”,然后单击“创建 VHD”。

  4. 在 Diskmgmt 中,右键单击现在显示为“未初始化”的 VHDX,然后依次单击“初始化磁盘”和“确定”。 右键单击磁盘的“未分配”部分,然后单击“新建简单卷”,然后针对所有菜单提示单击“下一步”,最后单击“完成”。

  5. 指定文件路径,将大小设置为“25 GB”,选择 VHDX 和“固定大小”,然后单击“确定”。

    为 Windows Hyper-V 创建和附加虚拟硬盘的屏幕截图。

  6. 右键单击磁盘,并单击“分离 VHD”,然后单击“确定”。

  7. 在文件资源管理器中,双击该 VHDX 文件以装载。 复制几 MB 的不可压缩文件(例如 JPG 格式),然后在装载的磁盘上进行右键单击,然后单击“弹出”。

现在,你有一个包含压缩内容的大型测试文件。

在同一 Hyper-V 主机上运行的一对 VM 之间测试 SMB 压缩可能不会节省时间,因为虚拟交换机是 10 Gbps 并且没有拥塞,而且新式虚拟机监控程序通常使用闪存存储。 在计划使用的真实网络上测试压缩。 例如,还可以使用 Set-VMNetworkAdapter(将 -MaximumBandwidth 设置为 1Gb)来减少 Hyper-V VM 上的网络带宽以进行测试。

要查看压缩效果,可以将同一文件 robocopy 到服务器两次,一次使用 /compress 标志,另一次不压缩,在每次测试之间删除服务器文件。 如果文件正在压缩,应该会在任务管理器中看到较少的网络利用率和较短的复制时间。 还可以观察 SMB 服务器的性能监视器对象“SMB 服务器共享”的“压缩请求/秒”和“压缩响应/秒”计数器。

RDMA 和 SMB 直通

SMB 压缩不支持 SMB 直通和 RDMA。 这意味着,即使客户端请求压缩且服务器支持压缩,也不会尝试通过 SMB 直通和 RDMA 进行压缩。 在 Windows Server 2022 和 Windows 11 公共预览版之后,将支持使用 SMB 直通和 RDMA 进行 SMB 压缩。