SMB 壓縮

適用於:Windows Server 2022、Windows 11

SMB 壓縮允許管理員、使用者或應用程式在網路傳輸檔案時請求壓縮檔案。 這樣就無需先使用應用程式手動壓縮文件、複製文件,然後在目標電腦上解壓縮。 壓縮檔案可消耗較少的網路頻寬並縮短傳輸時間,但代價是傳輸期間 CPU 使用率略有增加。 SMB 壓縮在頻寬較小的網路上最有效,例如用戶端的 1 Gbps 乙太網路或 Wi-Fi 網路; 實際上,在兩台具有快閃儲存的伺服器之間,透過不擁塞的 100 Gbps 乙太網路進行檔案傳輸可能會在沒有 SMB 壓縮的情況下同樣快速,但仍會減少其他應用程式的擁塞情況。

Windows 中的 SMB 壓縮有以下特點:

  • 支援壓縮演算法 XPRESS (LZ77)、XPRESS Huffman (LZ77+Huffman)、LZNT1 或 PATTERN_V1*。 自動使用 XPRESS
  • 在 Windows Server 2025 上支援壓縮演算法 LZ4
  • 支援 SMB 簽章和 SMB 加密
  • 透過 QUIC 支援 SMB
  • 支援 SMB Multichannel
  • 不透過 RDMA 支援 SMB Direct

有關 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. 選擇 壓縮資料 然後點選 AddEdit.

Screenshot of Windows Admin Center in Window Server 2022 file server.

使用 PowerShell

  1. 以管理員身分開啟提升的 PowerShell 命令提示字元。

  2. 使用New-SMBShare參數和自變數-CompressData $true建立新的壓縮共用。 例如:

    New-SmbShare -Name "Sales" -Path "C:\sales" -CompressData $true
    
  3. 使用Set-SMBShare參數和自變數-CompressData $true來編輯現有的壓縮共用。 例如:

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

請求在對應驅動器上執行 SMB 壓縮

您可以請求壓縮所有複製到對應磁碟機的資料。 這可以作為登入腳本的一部分或手動執行時完成。

  1. 開啟 PowerShell 命令提示字元。

  2. 使用New-SMBMapping變數和自變數-CompressNetworkTraffic $true來對應磁碟機。 例如:

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

使用複製工具請求執行 SMB 壓縮

您可以要求使用 robocopy 或 xcopy 對特定檔案嘗試 SMB 壓縮。

注意

如果您希望 File Explorer、第三方複製工具或應用程式使用壓縮,對應具有壓縮功能的磁碟機、啟用共用壓縮或將 SMB 用戶端設定為永遠壓縮。

  1. 開啟 CMD 提示字元或 PowerShell 命令提示字元。

  2. 使用 /COMPRESS 標誌進行複製。 例如:

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

永遠要求或永遠拒絕壓縮請求

從 Windows Server 2022 的KB5016693 更新 (OS Build 20348.946) 和 Windows 11 的 KB5016691 更新 (OS Build 22000.918) 開始,您可以將SMB 用戶端或SMB 伺服器配置為永遠請求壓縮和永遠拒絕壓縮請求。 現在您可以使用 Group Policy 或 PowerShell; 在 Windows 11 和 Windows Server 2022 的初始版本中,您只能使用登錄設定來控制大多數行為,並且無法將 SMB 伺服器設定為永遠請求壓縮(儘管它有共用設定)。 SMB 用戶端和 SMB 伺服器是指 SMB 服務,而不是 Windows 版本或 SKU。 所有這些 SMB 變更都會立即生效,無需重新啟動。

永遠嘗試壓縮(SMB 用戶端)

  1. 為您的 Active Directory 網域執行 Group Policy Management Console 並建立或導覽至群組原則。
  2. 展開策略Computer Configuration\Policies\Administrative Templates\Network\Lanman Workstation
  3. 啟用策略使用 SMB Compression by Default
  4. 關閉策略編輯器。

永不壓縮(SMB 用戶端)

  1. 為您的 Active Directory 網域執行 Group Policy Management Console 並建立或導覽至群組原則。
  2. 展開策略Computer Configuration\Policies\Administrative Templates\Network\Lanman Workstation
  3. 啟用政策Disable SMB Compression
  4. 關閉策略編輯器。

永遠嘗試壓縮(SMB 伺服器)

  1. 為您的 Active Directory 網域執行 Group Policy Management Console 並建立或導覽至群組原則。
  2. 展開策略Computer Configuration\Policies\Administrative Templates\Network\Lanman Server
  3. 啟用政策請求壓縮所有共享流量
  4. 關閉策略編輯器。

永不壓縮(SMB 伺服器)

  1. 為您的 Active Directory 網域執行 Group Policy Management Console 並建立或導覽至群組原則。
  2. 展開策略Computer Configuration\Policies\Administrative Templates\Network\Lanman Server
  3. 啟用政策Disable SMB Compression
  4. 關閉策略編輯器。

了解並控制壓縮行為

從 Windows Server 2022 KB5016693 版更新 (OS Build 20348.946) 以及 Windows 11 KB5016691 版更新 (OS Build 22000.918) 開始,預設情況下,當用戶端或伺服器請求文件時,SMB 都會嘗試壓縮文件,而不使用壓縮取樣。

注意

在 Windows Server 2022 和 Windows 11 的原始版本中,SMB 壓縮預設使用演算法,在傳輸過程中嘗試壓縮檔案的前 524,288,000 位元組 (500 MiB),並追蹤至少壓縮的 104,857,600 位元組 (100 MiB) 500 MiB 範圍內。 如果可壓縮的大小少於 100 MiB,SMB 壓縮將停止嘗試壓縮檔案的其餘部分。 如果至少壓縮了 100 MiB,SMB 壓縮會嘗試壓縮檔案的其餘部分。 透過此行為變化,預設會停用取樣,並且當用戶端或伺服器請求時,SMB 都會嘗試壓縮整個檔案。

測試 SMB 壓縮

測試壓縮配置的簡單方法是使用 VHDX 檔案。 您可以建立並載入 VHDX,向其中添加一些文件,然後卸載 VHDX 並將其複製為文件。 或者,您可以只複製現有的已卸載虛擬機器 VHDX 文件,因為其大部分文件內容都會被壓縮。 有關建立 VHDX 測試檔案的範例:

  1. 啟動 Diskmgmt.msc。

  2. 點擊選擇Local Disk (C:)

  3. 點擊 Action,然後點擊Create VHD

  4. 在 Diskmgmt 中,以滑鼠右鍵點擊現在顯示為「未初始化」的 VHDX,然後點擊初始化磁碟,然後點擊OK。 滑鼠右鍵點選磁碟未指派區域然後點擊 New Simple Volume,然後對所有選單提示點選下一步,然後點擊完成

  5. 指定檔案路徑,將大小設為“25 GB”,選擇 VHDX固定大小,然後點擊OK

    Screenshot of create and attach virtual hard disk for Windows Hyper-V.

  6. 滑鼠右鍵點選該磁碟,然後點擊 Detach VHD,,然後點選OK

  7. 在 File Explorer 中,按兩下該 VHDX 檔案來進行安裝。 複製幾 MB 的不可壓縮文件,例如JPG格式,然後滑鼠右鍵單擊已安裝的磁碟,然後按一下退出

您現在擁有一個包含壓縮內容的大型測試檔案。

在同一台 Hyper-V 主機上執行的一對虛擬機器之間的 SMB 壓縮測試可能不會節省時間,因為虛擬交換器為 10 Gbps 並且沒有擁塞,而且現代管理程式通常使用快閃記憶體。 在您計劃使用的真實網路上測試您的壓縮。 例如,您也可以使用 Set-VMNetworkAdapter -MaximumBandwidth 設定設為1Gb來減少 Hyper-V 虛擬機器上的網路頻寬以進行測試。

要查看壓縮效果如何,您可以將相同檔案自動複製到伺服器兩次,一次使用/compress 標誌,另一次不進行壓縮,並在每次測試之間刪除伺服器檔案。 如果檔案正在壓縮,您應該會在 Task Manager 中看到較少的網路利用率和較短的複製時間。 您也可以觀察 SMB 伺服器的 Performance Monitor 物件「SMB Server Shares」的「Compressed Requests / 秒」和「Compressed Responses / 秒」計數器。

RDMA 和 SMB Direct

SMB 壓縮不支援 SMB Direct 和 RDMA。 這表示即使用戶端請求壓縮並且伺服器支援它,SMB Direct 和 RDMA 也不會嘗試進行壓縮。 對 SMB Direct 和 RDMA 的 SMB 壓縮的支援將在 Windows Server 2022 和 Windows 11 公共預覽版之後提供。