使用正向和反向差异的 Windows 汇报

Windows 每月质量更新是累积更新,包含以前发布的所有修补程序,以确保一致性和简单性。 对于支持多年的操作系统平台(如 Windows),每月质量更新的大小可能会迅速增长,从而直接影响网络带宽消耗。

目前,此问题通过使用快速下载得到解决,其中更新中每个已更改的文件的差异下载都基于所选的历史修订和基本版本生成。 在本文中,我们将介绍一种新技术来生成适用于任何基本版本修订版的精简软件更新包,然后介绍 Windows 质量更新如何使用此技术。

常规术语

以下一般术语适用于整个本文档:

  • 基本版本:具有重大更改的主要软件版本,例如Windows 10 版本 1809 (Windows 10内部版本 17763.1)
  • 修订版:主要版本版本之间的次要版本,例如KB4464330 (Windows 10内部版本 17763.55)
  • 无基修补程序存储文件 (无基 PSF) :包含完整二进制文件或文件的修补程序存储文件

在本文中,我们介绍了一种新技术,该技术可以生成针对任何源/目标修订对优化的精简软件更新。 它通过计算已更改文件从基本版本及其反向差异返回基版本的差异来执行此操作。 然后,将正向和反向差异打包为更新,并分发到运行要更新的软件的终结点。 更新包内容可以按如下所示进行符号化:

更新包内容的符号表示形式。包含两个表达式的框:增量子零转换为子 N,后跟增量子 N 转换到子零。

具有文件基本版本 (V0 的终结点) 通过应用简单转换 (VN) 来解除目标修订:

公式:V 子零 + 增量子零转换为 sub N = V sub n。

具有文件修订版 N 的终结点 (VN) ,通过应用以下一组转换,将目标修订 (VR) 解除冻结:

公式 1:V sub n + delta sub n 转换为 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 更新或其他更新管理或分发服务器上, (例如,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 独立更新 (.msu) 格式。

在某些情况下,新文件在维护期间可能会添加到系统。 这些文件没有 RTM 基线,因此无法使用正向和反向差异。 在这些方案中,null 差异用于处理服务。 Null 差异是完整二进制文件的略微压缩和优化版本。 更新包可以具有正向或反向差异,也可以具有任何给定二进制文件的 null 差异。 下图对 Windows 质量更新安装程序的内容进行符号化:

标记为 .msu 的外部框包含两个子框:1 个) 适用性逻辑, 2 个标记为 .cab 的) 框,其中包含四个子框:1 个) 更新元数据,2 个) 内容清单,3 个) 增量子 RTM 转换到子 N (文件 1、file2 等 ) ,4) 增量子 N 转换为 RTM (文件 1、文件 2, 等 ) 。

水化和安装

对更新包执行常规适用性检查并确定适用后,Windows 组件服务基础结构会在预安装期间冻结完整文件,然后继续执行常规安装过程。

下面是组件服务基础结构在事务中运行以完成更新安装的高级活动序列:

  • 标识安装更新所需的所有文件。
  • 使用文件的当前版本 (VN) ,将文件的 V N---RTM) 反向差异 (VN--->RTM) 还原为质量更新 RTM/base 版本,并将差异 (VRTM--->R) 从功能更新 RTM/base 版本转发到目标版本。 此外,使用 null 差异水化来冻结 null 压缩文件。
  • 暂存 (完整文件) ,在文件夹) 下f转发差异 (,在组件存储) (%windir%\WinSxS 文件夹 () 的文件夹) 下 n (文件夹 r) 或 null 压缩文件。
  • 解析任何依赖项并安装组件。
  • 清理旧状态 (VN-1) ;保留先前状态 VN 以用于卸载和还原或修复。

弹性水化

为了确保组件存储损坏或丢失文件(由于某些类型的硬件容易导致文件系统损坏而发生),损坏修复服务传统上用于自动恢复组件存储 (自动损坏修复) 或按需 (手动损坏修复) 使用联机或本地修复源。 此服务将继续提供修复和恢复内容以解除冻结的功能,并在需要时成功安装更新。

在更新操作期间检测到损坏时,自动损坏修复将照常启动,并使用发布的无基修补程序存储文件为每个更新Windows 更新来修复损坏的清单、二进制差异、水合或完整文件。 无基修补程序存储文件包含每个更新组件的反向和正向差异以及完整文件。 修复文件的完整性将经过哈希验证。

损坏修复使用组件清单来检测缺少的文件并获取用于损坏检测的哈希。 在更新安装过程中,将设置计算机上每个暂存差异的新注册表标志。 运行自动损坏修复时,它会使用清单扫描已冻结的文件,并使用 标志扫描差异文件。 如果找不到或无法验证差异,则会将其添加到要修复的损坏列表中。

延迟自动损坏修复

“延迟自动损坏修复”在更新操作期间运行,以检测损坏的二进制文件和差异。 应用更新时,如果任何文件水化失败,“延迟”自动损坏修复会自动启动,识别损坏的二进制文件或差异文件,然后将其添加到损坏列表。 稍后,更新操作会尽可能继续,以便“延迟”自动损坏修复可以收集尽可能多的损坏文件进行修复。 在冻结部分结束时,更新失败,并启动自动损坏修复。 自动损坏修复像往常一样运行,在其操作结束时,将“惰性”自动损坏修复生成的损坏列表添加到要修复的新列表的顶部。 然后自动修复损坏列表中的文件,并在下次尝试时成功安装更新。