前方差分と逆差分を使用する Windows Updates
Windows の毎月の品質更新プログラムは累積的であり、一貫性とシンプルさを確保するために、以前にリリースされたすべての修正プログラムが含まれています。 Windows のようなオペレーティング システム プラットフォームでは、複数の年のサポートが維持されるため、毎月の品質更新プログラムのサイズが急速に大きくなる可能性があるため、ネットワーク帯域幅の消費量に直接影響を与えます。
現在、この問題は高速ダウンロードを使用して解決されています。ここで、更新プログラム内のすべての変更されたファイルの差分ダウンロードは、選択した履歴リビジョンと基本バージョンに基づいて生成されます。 このホワイト ペーパーでは、基本バージョンのリビジョンに適用できるコンパクトなソフトウェア更新プログラム パッケージを構築する新しい手法を紹介し、Windows 品質更新プログラムがこの手法を使用する方法について説明します。
このドキュメント全体で、次の一般的な用語が適用されます。
- 基本バージョン: Windows 10 Version 1809 (ビルド 17763.1 Windows 10) などの大幅な変更を伴う主要なソフトウェア リリース
- リビジョン: KB4464330 (Windows 10 ビルド 17763.55) などのメジャー バージョン リリース間のマイナー リリース
- ベースレス パッチ ストレージ ファイル (ベースレス PSF): 完全なバイナリまたはファイルを含むパッチ ストレージ ファイル
このホワイト ペーパーでは、配信元と移行先のリビジョン ペアに合わせて最適化されたコンパクトなソフトウェア更新プログラムを生成できる新しい手法を紹介します。 これは、変更されたファイルの差分を基本バージョンから基本バージョンに戻し、逆差分を計算することによって行います。 その後、前方差分と逆差分の両方が更新プログラムとしてパッケージ化され、更新されるソフトウェアを実行しているエンドポイントに配布されます。 更新プログラム パッケージの内容は、次のようにシンボル表示できます。
ファイルの基本バージョン (V0) を持つエンドポイントは、単純な変換を適用してターゲット リビジョン (V N) をハイドレートします。
ファイルのリビジョン N (VN) を持つエンドポイントは、次の変換セットを適用してターゲット リビジョン (V R) をハイドレートします。
エンドポイントは、ソフトウェア リビジョンの逆差分を保持するため、次回のリビジョン更新プログラムのハイドレートと適用に使用できます。
共通のベースラインを使用することで、この手法では、多くの利点を持つ単一の更新パッケージが生成されます。
- コンパクトなサイズ
- すべてのベースラインに適用
- ビルドが簡単
- 効率的なインストール
- 再頒布可能パッケージ
これまで、Windows 品質更新プログラム (Windows 10、バージョン 1803 および以前のサポートされているバージョンのWindows 10) のダウンロード サイズは、高速ダウンロードを使用して最適化されていました。 高速ダウンロードは、Windows システムの更新によって最小バイト数がダウンロードされるように最適化されています。 これは、同じファイルの選択された履歴ベース リビジョンと、そのベースバージョンまたは RTM バージョンに基づいて、更新されたすべてのファイルの差分を生成することによって実現されます。
たとえば、10 月の品質更新プログラムが Notepad.exe 更新された場合、9 月から 10 月、8 月、10 月、7 月から 10 月、6 月から 10 月、および元の機能リリースから 10 月への Notepad.exe ファイルの差分が生成されます。 これらの差分はすべて、パッチ ストレージ ファイル (PSF、高速ダウンロード ファイルとも呼ばれます) に格納され、Windows Updateまたはその他の更新プログラム管理または配布サーバー (たとえば、Windows Server Update Services (WSUS)) でホストまたはキャッシュMicrosoft Configuration Manager、または Microsoft 以外の更新プログラム管理サーバー、または高速更新プログラムをサポートする配布サーバー)。 高速更新プログラムを適用するデバイスは、ネットワーク プロトコルを使用して最適な差分を判断し、更新プログラムの配布エンドポイントから必要なものだけをダウンロードします。
高速ダウンロードの裏返しは、差分が計算された履歴ベースラインの数によっては、PSF ファイルのサイズが大きくなる可能性があるということです。 大規模な PSF ファイルをオンプレミスまたはリモート更新プログラムの配布サーバーにダウンロードしてキャッシュすることは、ほとんどの組織にとって問題であるため、高速更新プログラムを使用して Windows を実行しているデバイスの群を最新の状態に保つことができません。 第 2 に、更新配布サーバーにキャッシュする必要がある高速ファイルの差分とサイズの生成が複雑であるため、最も一般的なベースラインの高速ダウンロード ファイルを生成することしかできないため、高速更新プログラムは選択したベースラインにのみ適用できます。 最後に、最適な差分の計算は、特に低コストのシステムでは、システム メモリ使用率の面でコストがかかり、更新プログラムをシームレスにダウンロードして適用する能力に影響します。
以降のセクションでは、Windows および Windows Server の新しいリリースで前方差分と逆差分に基づいて品質更新プログラムがこの手法を使用して、高速ダウンロードの課題を克服する方法について説明します。
Windows 品質更新プログラム パッケージには、品質更新プログラム RTM ベースライン (∆RTM→N) からの前方差分と、RTM 以降に変更された各ファイルの RTM (∆N→RTM) への逆引き差分が含まれています。 RTM バージョンをベースラインとして使用することで、すべてのデバイスが同じペイロードを持っていることを確認します。 パッケージのメタデータ、コンテンツ マニフェスト、および前方差分と逆差分は、キャビネット ファイル (.cab) にパッケージ化されます。 この .cab ファイルと適用ロジックも、Microsoft スタンドアロン更新プログラム (.msu) 形式でラップされます。
サービス中に新しいファイルがシステムに追加される場合があります。 これらのファイルには RTM ベースラインがないため、前方差分と逆差分は使用できません。 これらのシナリオでは、サービスの処理に null 差分が使用されます。 Null 差分は、完全なバイナリのわずかに圧縮および最適化されたバージョンです。 更新パッケージには、前方差分または逆差分、または特定のバイナリの null 差分を含めることができます。 次の図は、Windows 品質更新プログラムインストーラーの内容をシンボル表示しています。
更新プログラム パッケージに対して通常の適用性チェックが実行され、適用可能であると判断されると、Windows コンポーネント サービス インフラストラクチャはプレインストール中に完全なファイルをハイドレートしてから、通常のインストール プロセスに進みます。
更新プログラムのインストールを完了するために、コンポーネント サービス インフラストラクチャがトランザクションで実行するアクティビティの概要を次に示します。
- 更新プログラムのインストールに必要なすべてのファイルを特定します。
- ファイルの現在のバージョン (VN)、ファイルの逆差分 (VN--->RTM) を使用して、必要な各ファイルを品質更新 RTM/ベース バージョンに戻し、機能更新プログラム RTM/基本バージョンからターゲット バージョンに差分 (VRTM--->R) を転送します。 また、null 差分ハイドレートを使用して、null 圧縮ファイルをハイドレートします。
- コンポーネント ストア (%windir%\WinSxS フォルダー) 内のハイドレート されたファイル (フル ファイル)、前方差分 (
f
フォルダーの下) と逆引き差分 (r
フォルダーの下) または null 圧縮ファイル (n
フォルダーの下) をステージングします。 - 依存関係を解決し、コンポーネントをインストールします。
- 古い状態 (VN-1) をクリーンアップします。前の状態 VN はアンインストールと復元または修復のために保持されます。
ファイル システムの破損に対する特定の種類のハードウェアの影響を受けやすいために発生する可能性があるコンポーネント ストアの破損や不足しているファイルに対する回復性を確保するために、破損修復サービスは、従来、オンラインまたはローカルの修復ソースを使用して、コンポーネント ストアを自動的に (自動破損修復) またはオンデマンド (手動破損修復) を回復するために使用されてきました。 このサービスは、水分補給のためにコンテンツを修復および回復し、必要に応じて更新プログラムを正常にインストールする機能を引き続き提供します。
更新操作中に破損が検出されると、自動破損修復が通常どおりに開始され、発行されたベースレスパッチストレージファイルを使用して、各更新プログラムのWindows Updateを使用して、破損したマニフェスト、バイナリ差分、または水和または完全なファイルを修正します。 ベースレス パッチ ストレージ ファイルには、更新されたコンポーネントごとに逆差分ファイルと前方差分ファイルと完全ファイルが含まれます。 修復ファイルの整合性がハッシュ検証されます。
破損修復では、コンポーネント マニフェストを使用して不足しているファイルを検出し、破損検出用のハッシュを取得します。 更新プログラムのインストール中に、マシンでステージングされた差分ごとに新しいレジストリ フラグが設定されます。 自動破損修復が実行されると、マニフェストを使用してハイドレートされたファイルをスキャンし、フラグを使用して差分ファイルをスキャンします。 差分が見つからないか確認できない場合は、修復する破損の一覧に追加されます。
"遅延自動破損修復" は、更新操作中に実行され、破損したバイナリと差分を検出します。 更新プログラムの適用中に、ファイルのハイドレーションが失敗した場合、"遅延" 自動破損修復が自動的に開始され、破損したバイナリファイルまたは差分ファイルが識別され、破損リストに追加されます。 その後、更新操作は可能な限り継続されるため、"遅延" 自動破損修復では、できるだけ多くの破損したファイルを収集して修正できます。 ハイドレーション セクションの最後に、更新が失敗し、破損の自動修復が開始されます。 自動破損修復は、通常どおりに実行され、その操作の最後に、修復する新しいリストの上に"遅延"自動破損修復によって生成された破損リストを追加します。 自動破損修復その後、破損リスト上のファイルを修復し、更新プログラムのインストールは、次の試行に成功します。