Windows使用向前和反向差异的更新

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

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

一般条款

以下一般条款适用于整个文档:

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

本文将介绍一种新技术,该技术可生成针对任何源/目标修订对优化的精简软件更新。 它通过计算更改文件的差异从基本版本及其反向差异向前计算回基版本来实现此目标。 然后,向前差异和反向差异打包为更新,并分发到运行要更新的软件的终结点。 更新包内容可以按如下方式进行显示:

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

具有文件基版本为 V 0 (的终结点) 应用简单转换, (V N) 对目标修订版本 进行损坏:

公式:V sub zero + delta sub zero transform to sub N = V sub n。

具有文件版本 N 的终结点 (V N) ,通过应用以下转换集来 ( V R ) 。

公式 1:V sub n + delta sub n transform to 0 = V sun 0;公式 2:V sub zero + delta sub 0 transform to R = V sub R。

终结点将保留它们所使用软件修订的反向差异,以便可用于对下一次修订更新进行连接和应用。

通过使用通用基线,此技术可生成具有诸多优势的单个更新包:

  • 尺寸紧凑
  • 适用于所有比较基准
  • 易于生成
  • 高效安装
  • 可再分发

过去,Windows 10 1803 (Windows 10版本 1803 和较旧版本的 Windows 10) 的更新质量更新的下载大小是使用快速下载进行优化的。 快速下载已经过优化,因此更新Windows 10系统将下载最少字节数。 这是通过基于同一文件的所选历史基本修订及其基本版本或 RTM 版本,针对每个更新文件生成差异实现的。

例如,如果 10 月每月质量更新已更新 Notepad.exe,则从 9 月到 10 月、8 月到 10 月、7 月到 10 月、6 月到 10 月以及从原始功能版本到 10 月,Notepad.exe 文件的差异会发生变化。 所有这些差异都存储在修补程序 存储 文件 (PSF 中,也称为"快速下载文件") ,托管或缓存在 Windows 更新或其他更新管理或分发服务器 (例如 Windows Server Update Services (WSUS) 、Microsoft Endpoint Configuration Manager 或支持快速更新) 的非 Microsoft 更新管理或分发服务器上。 利用快速更新的设备使用网络协议来确定最佳差异,然后仅从更新分发终结点下载所需的内容。

快速下载的另一方面是,PSF 文件的大小可能非常大,具体取决于根据哪些历史基线计算差异。 对于大多数组织来说,下载大型 PSF 文件并缓存到本地或远程更新分发服务器是一个问题,因此它们无法利用快速更新来保持运行 Windows 10 设备的最新状态。 其次,由于生成需要缓存在更新分发服务器上快速文件的差异和大小的复杂性,因此仅针对最常见的基线生成快速下载文件是可行的,因此快速更新仅适用于所选基线。 最后,在系统内存利用率方面,最佳差异的计算成本很高,特别是对于低成本系统,这会影响其无缝下载和应用更新的能力。

以下各节介绍了 Windows 10 质量更新如何针对较新版本的 Windows 10 和 Windows Server 利用基于向前和反向差异的技术克服快速下载的挑战。

高级设计

更新打包

Windows 10质量更新包将包含质量更新 RTM 基线 (∆RTM→N) 之间的前向差异,以及自 RTM 以来更改的每个文件的反向差异 (∆N→RTM) 。 通过使用 RTM 版本作为基线,我们确保所有设备都将具有相同的有效负载。 更新包元数据、内容清单以及转发和反向差异将打包到 cabinet 文件 (.cab) 。 此.cab文件以及适用性逻辑也将打包为 Microsoft 独立更新 (.msu) 格式。

在某些情况下,在服务期间向系统添加了新文件。 这些文件将没有 RTM 基线,因此不能使用向前和反向差异。 在这些情况下,空差异将用于处理服务。 Null 差异是完整二进制文件的稍微压缩和优化的版本。 更新包可以具有向前差异或反向差异,或其中任何给定二进制文件的 null 差异。 下图显示了 Windows 10更新安装程序的内容:

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

冻结和安装

在更新程序包上执行常规适用性检查并确定适用后,Windows 组件服务基础结构将在预安装过程中破坏整个文件,然后继续执行常规安装过程。

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

  • 标识安装更新所需的全部文件。
  • 使用文件的当前版本 (V N) ,将文件的差分 (V N --->RTM) 恢复为质量更新 RTM/基本版本,将差异 (V RTM --->R) 从功能更新 RTM/基本版本转发到目标版本。 此外,使用 null 差异冻结来冻结空压缩文件。
  • 将已冻结的文件 (完整文件) 、转发"f"文件夹) 下的差分 (以及组件存储 (%windir%\WinSxS 文件夹) 中"r"文件夹) 下的反向差异 (或空压缩文件 () 。
  • 解决所有依赖项并安装组件。
  • 清理旧状态 (V N-1 ) ;保留以前的状态 V N 以 用于卸载和还原或修复。

弹性冻结

为了确保恢复能力,防止组件存储损坏或由于某些类型的硬件对文件系统损坏的敏感性而丢失的文件,损坏修复服务通常用于使用联机或本地修复源自动恢复组件存储 ("自动损坏修复") 或按需 ("手动损坏修复") 。 该服务将继续提供修复和恢复内容以冻结并成功安装更新(如果需要)的能力。

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

损坏修复将使用组件清单检测缺失的文件并获取哈希值以用于损坏检测。 在更新安装过程中,将设置计算机上每个差异阶段的新注册表标志。 运行自动损坏修复后,它将使用清单和标志的差异文件扫描被冻结的文件。 如果找不到或验证差异,它将添加到要修复的损坏列表中。

延迟自动损坏修复

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