SMB の圧縮

適用対象: Windows Server 2022、Windows 11

SMB 圧縮を使用すると、管理者、ユーザー、またはアプリケーションは、ネットワーク経由での転送時にファイルの圧縮を要求できます。 これにより、最初にアプリケーションを使用してファイルを手動でデフレートし、コピーして、対象のコンピューターでインフレートする必要がなくなります。 圧縮されたファイルでは、使用されるネットワーク帯域幅と転送にかかる時間が節約されますが、転送中の CPU 使用率は若干増えます。 SMB 圧縮は、クライアントの 1 Gbps イーサネットや Wi-Fi ネットワークなど、帯域幅が小さいネットワークで最も効果的です。フラッシュ ストレージを使用した 2 台のサーバー間での輻輳のない 100 Gbps イーサネット ネットワーク経由でのファイル転送は、実際には SMB 圧縮なしと同じくらい高速ですが、他のアプリケーションの輻輳は小さくなります。

Windows での SMB 圧縮には次の特徴があります。

  • 圧縮アルゴリズム XPRESS (LZ77)、XPRESS Huffman (LZ77+Huffman)、LZNT1、または PATTERN_V1* をサポート。 XPRESS は自動的に使用されます
  • Windows Server 2025 で圧縮アルゴリズム LZ4 をサポート
  • SMB 署名と SMB 暗号化をサポート
  • SMB over QUIC をサポート
  • SMB マルチチャネルをサポート
  • RDMA 経由の SMB ダイレクトはサポートしていません

Note

Windows 11 Insider および Windows Server Insider Preview Builds 25997 以降では、LZ4.org で定義されている圧縮アルゴリズムもサポートされています。圧縮アルゴリズムの詳細については、「LZ4.org 圧縮アルゴリズムのドキュメント」を参照してください。

SMB 圧縮のデモンストレーションについては、次のビデオをご覧ください。

必要条件

従来のクライアントファイル サーバーのワークロードで SMB 圧縮を使用するには、次のものが必要です。

SMB 圧縮の構成

SMB 圧縮は、クライアントとサーバーの両方の観点から構成できます。 クライアントとサーバーは、Windows Server 2022 や Windows 11 Insider Preview などの特定のエディションを参照しませんが、2 台のコンピューター間のファイル転送のアーキテクチャを参照します。 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. 管理者特権で 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 圧縮が試行されるよう要求できます。

注意

エクスプローラー、サードパーティ製コピー ツール、またはアプリケーションで圧縮を使用する場合は、ドライブを圧縮でマップするか、共有で圧縮を有効にするか、SMB クライアントを常に圧縮するように設定します。

  1. CMD プロンプトまたは PowerShell コマンド プロンプトを開きます。

  2. /COMPRESS フラグを使用してコピーします。 次に例を示します。

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

圧縮要求を常に要求するか、常に拒否する

更新プログラム KB5016693 をインストールした Windows Server 2022 (OS ビルド 20348.946) と更新プログラム KB5016691 をインストールした Windows 11 (OS ビルド 22000.918) 以降、常に圧縮を要求することと、常に圧縮の要求を拒否することを SMB クライアントまたは SMB サーバーに構成できるようになりました。 グループ ポリシーまたは PowerShell を使用できるようになりました。Windows 11 と Windows Server 2022 の初期リリースでは、こうした大部分の動作を制御するにはレジストリ設定を使う必要がありました。また、共有設定がある場合でも常に圧縮を要求するように SMB サーバーを構成することはできませんでした。 SMB クライアントと SMB サーバーは、Windows エディションや SKU ではなく、SMB サービスを参照します。 これらの SMB の変更はすべて、再起動なしで直ちに有効になります。

常に圧縮を試行する (SMB クライアント)

  1. Active Directory ドメインのグループ ポリシー管理コンソールを実行し、グループ ポリシーを作成するか、移動します。
  2. ポリシーコンピューターの構成\ポリシー\管理用テンプレート\ネットワーク\Lanman Workstation を展開します。
  3. ポリシー [Use SMB Compression by Default] (既定で SMB 圧縮を使用する) を有効にします。
  4. ポリシー エディターを閉じます。

圧縮しない (SMB クライアント)

  1. Active Directory ドメインのグループ ポリシー管理コンソールを実行し、グループ ポリシーを作成するか、移動します。
  2. ポリシーコンピューターの構成\ポリシー\管理用テンプレート\ネットワーク\Lanman Workstation を展開します。
  3. ポリシー [Disable SMB Compression] (SMB 圧縮を無効にする) を有効にします。
  4. ポリシー エディターを閉じます。

常に圧縮を試行する (SMB サーバー)

  1. Active Directory ドメインのグループ ポリシー管理コンソールを実行し、グループ ポリシーを作成するか、移動します。
  2. ポリシーコンピューターの構成\ポリシー\管理用テンプレート\ネットワーク\Lanman Server を展開します。
  3. ポリシー [Request traffic compression for all shares] (すべての共有のトラフィック圧縮を必須にする) を有効にします。
  4. ポリシー エディターを閉じます。

圧縮しない (SMB サーバー)

  1. Active Directory ドメインのグループ ポリシー管理コンソールを実行し、グループ ポリシーを作成するか、移動します。
  2. ポリシーコンピューターの構成\ポリシー\管理用テンプレート\ネットワーク\Lanman Server を展開します。
  3. ポリシー [Disable SMB Compression] (SMB 圧縮を無効にする) を有効にします。
  4. ポリシー エディターを閉じます。

圧縮動作の理解と制御

Windows Server 2022 の更新プログラム KB5016693 (OS ビルド 20348.946) と Windows 11 の更新プログラム KB5016691 (OS ビルド 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 を右クリックし、[ディスクの初期化] をクリックして、[OK] をクリックします。 ディスクの未割り当てのセクションを右クリックし、[新しいシンプル ボリューム] をクリックし、すべてのメニュー プロンプトに [次へ] をクリックして、[完了] をクリックします。

  5. ファイル パスを指定し、サイズを "25 GB" に設定し、[VHDX][固定サイズ] 選択して、[OK] をクリックします。

    Windows Hyper-V の仮想ハード ディスクの作成とアタッチを示すスクリーンショット。

  6. ディスクを右クリックし、[VHD の切断] を選択して、[OK] をクリックします。

  7. エクスプローラーで、VHDX ファイルをダブルクリックしてマウントします。 JPG 形式などの圧縮できないファイルを数 MB コピーし、マウントされたディスクを右クリックして [取り出し] をクリックします。

これで、コンテンツが圧縮された大きなテスト ファイルが作成されました。

同じ Hyper-V ホスト上で実行されている VM のペア間で SMB 圧縮をテストすると、時間削減が実現されない場合があります。これは、仮想スイッチが 10 Gbps であり、輻輳がないのに加え、多くの場合、最新のハイパーバイザーでフラッシュ ストレージが使用されるためです。 使用する予定の実際のネットワークに対する圧縮をテストします。 たとえば、Set-VMNetworkAdapter-MaximumBandwidth1Gb に設定して使用して、テストの目的で Hyper-V VM でネットワーク帯域幅を減らすこともできます。

圧縮が上手く動作しているか確認するには、同じファイルをサーバーに 2 回 (/compress フラグを使用して 1 回、圧縮なしで 1 回) robocopy し、各テスト間でサーバー ファイルを削除します。 ファイルが圧縮されている場合は、タスク マネージャーでのネットワークの使用率の減少と、コピー時間の低下を確認できます。 また、SMB サーバーの パフォーマンス モニター オブジェクト "SMB サーバー共有" で、"圧縮された要求/秒" と "圧縮された応答/秒" カウンターも確認できます。

RDMA と SMB ダイレクト

SMB 圧縮では、SMB ダイレクトと RDMA はサポートされていません。 つまり、クライアントが圧縮を要求し、サーバーがそれをサポートしている場合でも、SMB ダイレクトと RDMA では圧縮は試行されません。 SMB ダイレクトと RDMA を使用した SMB 圧縮のサポートは、Windows Server 2022 および Windows 11 パブリック プレビューの後に提供される予定です。