使用正向和反向差異的 Windows 匯報

Windows 每月品質更新是累積的,包含所有先前發行的修正程式,以確保一致性和簡單性。 對於 Windows 這類持續支援數年的操作系統平臺,每月品質更新的大小可能會快速成長,進而直接影響網路頻寬耗用量。

目前,此問題是使用快速下載來解決,其中更新中每個已變更檔案的差異下載會根據選取的歷程記錄修訂加上基底版本來產生。 在本文中,我們引進了一項新技術來建置適用於基底版本任何修訂的精簡軟體更新套件,然後描述 Windows 品質更新如何使用這項技術。

一般詞彙

下列一般條款適用於本檔:

  • 基本版本:具有重大變更的主要軟體版本,例如 Windows 10 版本 1809 (Windows 10 組建 17763.1)
  • 修訂:主要版本之間的次要版本,例如KB4464330 (Windows 10組建 17763.55)
  • 無基礎修補程式記憶體檔案 (無基礎 PSF) :修補包含完整二進位檔或檔案的記憶體檔案

在本文中,我們引進了一項新技術,可產生針對任何原始/目的地修訂組優化的精簡軟體更新。 這麼做的方式是將已變更檔案的差異從基底版本及其反向差異向前計算回基底版本。 然後,轉送和反向差異會封裝為更新,並散發到執行要更新之軟體的端點。 更新套件內容可以符號化,如下所示:

更新套件內容的符號表示。包含兩個表達式的方塊:差異子零轉換為子 N,後接差異子 N 轉換為子零。

檔案基底版本 (V0 的端點) 套用簡單的轉換,將目標修訂 (VN) 串行化:

方程式:V 子零 + 差異子零轉換為子 N = V 子 n。

檔案修訂 N 的端點 (VN) ,藉由套用下列轉換集合,將目標修訂 (VR) 串行化:

方程式 1:V sub n + delta sub n transform to 0 = V sun 0;方程式 2:V 子零 + 差異子 0 轉換為 R = 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 保持在最新狀態。 其次,由於產生差異和需要在更新散發伺服器上快取之快速檔案大小的複雜性,因此,只有針對最常見的基準產生快速下載檔才可行,因此快速更新僅適用於選取的基準。 最後,就系統記憶體使用率而言,最佳差異的計算成本很高,特別是針對低成本系統,這會影響其下載和套用更新的能力。

在下列各節中,我們會說明品質更新如何根據較新版 Windows 和 Windows Server 的正向和反向差異來使用這項技術,以克服快速下載的挑戰。

高階設計

更新封裝

Windows 品質更新套件包含從品質更新 RTM 基準 (∆ RTM→N) 和反向差異往回 RTM (∆ N 的向前差異→RTM) 自 RTM 之後變更的每個檔案。 藉由使用 RTM 版本作為基準,我們確保所有裝置都有相同的承載。 更新套件元數據、內容指令清單,以及正向和反向差異會封裝到封包檔案 (.cab) 。 此 .cab 檔案和適用性邏輯也會包裝在 Microsoft Standalone Update (.msu) 格式中。

在某些情況下,會在服務期間將新檔案新增至系統。 這些檔案不會有 RTM 基準,因此無法使用正向和反向差異。 在這些案例中,會使用 Null 差異來處理服務。 Null 差異是完整二進位檔的稍微壓縮和優化版本。 更新套件可以有正向或反向差異,或其中任何指定二進位檔的 Null 差異。 下圖示示 Windows 品質更新安裝程式的內容:

標示為 .msu 的外部方塊包含兩個子方塊:1) 適用性邏輯、 2 個標示為 .cab 的) 框,包含四個子方塊:1 個) 更新元數據、2 個) 內容指令清單、3 個) 差異子 RTM 轉換為子 N (檔案 1、file2 等 ) ,以及 4 個) 差異子 N 轉換為 RTM (檔案 1、檔案 2、 etc.) 。

串行化和安裝

一旦在更新套件上執行一般適用性檢查並判斷為適用之後,Windows 元件服務基礎結構就會在預安裝期間將完整檔案串行化,然後繼續進行一般的安裝程式。

以下是元件維護基礎結構在交易中執行以完成更新安裝的高階活動順序:

  • 識別安裝更新所需的所有檔案。
  • 使用檔案的目前版本 (VN) 、檔案的反向差異 (VN--->RTM) ,將每個必要檔案串行化,以品質更新 RTM/基底版本,並將差異 (VRTM--->R) 從功能更新 RTM/基底版本轉送到目標版本。 此外,使用 Null 差異串行化來將 Null 壓縮的檔案串行化。
  • 在元件存放區 (%windir%\WinSxS 資料夾) 的資料夾底下 f ,暫存 (完整檔案) 、資料夾下 () 和反向差異 r () 或 null 壓縮檔 n () 下方的差異。
  • 解析任何相依性並安裝元件。
  • 清除 VN-1) (舊狀態;先前的狀態 VN 會保留以進行卸載和還原或修復。

復原串行化

為了確保元件存放區損毀的復原能力,或因特定類型的硬體對文件系統損毀的敏感性而遺失的檔案,傳統上會使用損毀修復服務來自動復原元件存放區, (自動損毀修復) ,或視需要使用在線或本機修復來源 (手動損毀修復) 。 此服務會繼續提供修復和復原串行化內容的能力,並視需要成功安裝更新。

在更新作業期間偵測到損毀時,自動損毀修復會像往常一樣開始,並使用發行給每個更新 Windows Update的無基礎修補程式記憶體檔案,來修正損毀的指令清單、二進位差異或串行化或完整檔案。 無基礎修補程式記憶體檔案包含每個更新元件的反向和轉送差異和完整檔案。 修復檔案的完整性將會經過哈希驗證。

損毀修復會使用元件指令清單來偵測遺漏的檔案,並取得損毀偵測的哈希。 在更新安裝期間,系統會設定計算機上每個分段的新登錄旗標。 當自動損毀修復執行時,它會使用旗標使用指令清單和差異檔案來掃描串行化檔案。 如果找不到或無法驗證差異,則會將其新增至要修復的損毀清單。

延遲自動損毀修復

更新作業期間會執行「延遲自動損毀修復」,以偵測損毀的二進位檔和差異。 套用更新時,如果任何檔案的串行化失敗,就會自動啟動「延遲」自動損毀修復、識別損毀的二進制檔或差異檔案,然後將它新增至損毀清單。 稍後,更新作業會盡可能地繼續進行,讓「延遲」自動損毀修復可以收集更多損毀的檔案以盡可能修正。 在 [串行化] 區段的結尾,更新會失敗,並開始自動修復損毀。 自動損毀修復會如往常般執行,並在作業結束時,將「延遲」自動損毀修復所產生的損毀清單新增至要修復的新清單之上。 自動損毀修復接著會修復損毀清單上的檔案,而更新安裝將會在下一次嘗試時成功。