和 Windows 更新打了这么多交道,这些事你可能还不知道
2021-09-24 18:02:08 Author: sspai.com(查看原文) 阅读量:33 收藏

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


本文将介绍 Windows 10 及以上版本的系统更新功能,涵盖 Windows 更新的设计、四种更新的类型、执行更新的步骤、可能出现的部分错误及相应的解决方法。

文章旨在帮助读者全面认识 Windows 更新这一和系统安全关系密切的功能,面向 Windows 家庭版、专业版的个人 PC 用户,特殊硬件及局域网中的 Windows 不在本文讨论范围内。由于内测通道分发更新的目的是帮助微软发现漏洞,其频率、内容和正常通道有很大的不同,因此本文也不会涉及。

Windows 更新的设计

从 Windows 10 开始,位于设置面板中的 Windows 更新成为了集 Windows 系统本体、微软应用和硬件驱动分发补丁和新功能的统一途径。Windows 作为操作系统级别软件,既要及时推送安全补丁和新功能以保障系统的安全可靠,也要将更新流程对用户的影响最小化。

为了及时推送更新,Windows 被设定为自动下载安装大部分更新。用户可以延迟但不能用正常手段关闭这一策略。这些更新要么非常紧急,用于修补不久前被公布的安全漏洞,要么已经经过三重公开内测,没有大的稳定性问题。

而为了减少对日常使用的影响,Windows 更新有三种设计:模块化、累积式和分类管理。

操作系统决不能像小型应用那样安装更新必须下载完整的安装包再重启,Windows 因而采用了模块化的更新方案。从 Windows 10 开始,PC,Xbox、HoloLens 等设备上的各种 Windows 共享内核、部分 API 和驱动,微软称之为 OneCore。OneCore 可单独进行维护。此外,系统中随处可见的 DLL 文件也有助于模块化的实现。不同的 DLL 有其不同的职责,它们可供系统或第三方应用调用,实现某些效果。例如,kernel32.dll提供了 Windows 子系统相关功能。这些设计让微软想要更新 Windows 内核,或更新系统中对话框,只需要提供一部分文件即可。如果这部分文件暂时没有应用调用,那么用户不需要重启即可安装更新。

在用户可感知的层面,微软还期望借助一些独立的包和 Microsoft Store 更新某些应用。打开设置面板中的系统信息界面,读者可能会发现在Windows 规格 > 体验一栏中有 Windows Feature Experience Pack 的版本信息,它包含一些独立的应用,如画图,微软可单独推送它的更新。同样的,系统的一些预装应用,如语言包,还能在 Microsoft Store 中进行更新。这些设计都有助于模块化管理和维护,优化用户的下载安装体验。

累积式更新的设计是为了解决如下问题:在 4 - 9 月有六个 Windows 更新,那么如果用户在 9 月安装了 Windows,岂不是要将六个更新逐一安装?实际情况则是用户只需要安装最后一个月的更新——因为 Windows 本体的更新是累积式的,我们能在更新历史记录中看到许多条目后面的「累积更新」或「Cumulative Update」字样,这些更新会包括上一次更新的全部内容。

举例来说,Windows 21H1 版本于 7 月 6 日获得的更新涉及了 52,750 个文件,而五天之后的更新则涉及了 53,196 个文件,从数量上不难发现,后一次更新建立在前一次的基础之上。

累积更新会导致另一个问题:对于及时安装了以往更新的用户而言,难道每一次都要下载所有更新的内容吗?当然不是这样,Windows 在下载更新时,会尝试使用增量安装的方式,仅下载上次更新以来更改的项目,这些项目被称为更新的快速版本(Express version)。当无法使用增量安装的方式时,Windows 才会下载全量更新版本(Full-file version)。

除了模块化和累积式的更新设计,将更新分门别类也是必要的。用于修复漏洞的安全更新需要立即推送,优先安装;一些微小的 UI 改动、不影响系统稳定性的 Bug 修复则适合在固定的时间统一推送;而对于系统重大更新和驱动的预览版本,还可以采用可选更新的方式,给用户时间选择的自由,等到时机成熟再以自动更新的方式推送给所有用户。Windows 更新的分类会在下一节中详细解释。

更新的四种主要类型

在设置面板的更新历史记录界面中,微软将更新分类为四种:定义更新、驱动程序更新、质量更新和功能更新。在这四种之外,还有一些更新被放在了其他类别中,恶意软件删除程序和前文提到的 Windows Feature Experience Pack 都在此之列,这些更新大多不涉及系统的关键功能,因此不做过多介绍。

下面从最简单的定义更新开始讲起。

定义更新和 KB 编码

定义更新是为 Windows 内置的安全软件 Windows Defender 而设计,Defender 借此升级最新的病毒库,维护系统安全。这和第三方防病毒程序的「自动更新病毒库」功能是类似的,只不过它被整合进了系统中。

值得注意的是,除了版本号之外,这些定义更新名称之后跟着一个以 KB 开头的编码。在后文要介绍的质量更新中,KB 编码会更加多变且重要。

KB 是微软知识库(Microsoft Knowledge Base)的缩写。微软知识库 即微软以Support开头的帮助网站,其中收录了微软产品的各种帮助文档,因而也不难猜出,KB 后面的数字是这些文档的代号。我们可以通过以通过https://support.microsoft.com/kb/<Number>/en-us或点击项目后的「了解详细信息」来访问某个更新项目的详细描述文档,重要更新配套的文档会给出本次更新的内容、警示、已知问题和影响的文件。

定义更新后的 KB 编码都是一样的,说明它们都共享同一个帮助文档。

驱动更新

像它的名字所揭示的那样,驱动更新可用于更新硬件的驱动程序。驱动程序由微软和设备制造商合作提供,并且经过微软的测试和签名。

在以往,这项任务一般由用户自己完成,因而会有设备制造商提供驱动下载页面,也有第三方的驱动商城。将驱动更新整合进系统显然安全方便了不少。

除了负责任的厂商定期推送外,用户能在以下两种情况下收到这类更新。其一是全新安装时,微软的 ISO 镜像仅提供基本的功能,显示器、CPU 等硬件的驱动会在 Windows 启动后通过系统更新自动安装。其二是检测到新设备时,例如插入数位板,在 Android Bootloader 模式下连接电脑,此时用户可手动点击「检查更新」,可选的驱动列表会出现在更新界面。

质量更新

质量更新是 Windows 最重要的一类更新,更新内容包括小的 Bug 和大的安全漏洞的修复,以及 UI、功能方面的微小改动。每一个质量更新都有单独的 KB 编码,也即,拥有一个单独的描述页面可供查阅。

质量更新是三类更新的统称:OOB 更新,月度累积更新和月度更新预览。前两种为自动安装的更新,最后一种为可选更新。三类更新都是累积式的。

OOB 是 Out of Band 的缩写,OOB 更新可以理解为主通道之外的更新方式。之所以设计在主通道之外,是因为它是对重大安全漏洞的及时修复,需要被立即推送并自动安装。OOB 更新没有固定的推送频率,但往往在微软公布某个重大安全漏洞之后的几天内推送。前文以 2021 年 7 月 6 日和 13 日的两次更新举过例子,这两次更新时间上离得如此之近,正是因为 7 月初微软公布了 PrintNightmare 安全漏洞,于是就有了 7 月 6 日的 OOB 更新。

OOB 更新的描述文档中,还会引用来自 微软安全响应中心 的另一份文档。该文档是对此次 OOB 更新修复的漏洞的具体描述、评级和临时解决方法。

和 OOB 更新不同,上述例子中 7 月 13 日推送的更新被称为月度累积更新,或 B 更新。B 的含义是此更新会在每个月的第二个星期二定时推送,具体时间为北京时间凌晨 1 点。月度累积更新内容为日常的软件维护和修复。这个从 2003 年就固定下来的更新推送时间也被称为「补丁星期二」。

月度更新预览和月度累积更新关系密切,它是下一个月的将要推送月度累积更新的提前释出版本,也叫 C 更新。月度更新预览是考虑到一些 IT 管理员需要提前测试更新内容,确认生产环境能够正确运行而设计的。因此它是可选更新,用户可以自行选择安装与否。

质量更新负责维护 Windows 大版本更新后的系统体验,这也是 Windows 即服务口号下微软对更新做出的重要改动——以每月推送的质量更新、半年或一年推送一次的功能更新,取代以往数年一次的大版本更新。质量更新介绍完后,我们来介绍功能更新。

功能更新

上一小节提到,质量更新也会涉及到系统功能,例如通知栏中的新闻与兴趣就是通过质量更新推送的。但功能更新影响的功能与设计更为重磅:1607 周年更新引入了暗色模式,1903 版本推出了 Windows Sandbox 和改进的游戏录制栏……

Windows 10 中,微软会在上半年 4 - 5 月,下半年 10 - 11 月,每半年推送一次功能更新,因此普通用户还被称为半年通道内的用户。功能更新显性的特点是拥有自己的代号,不展示 KB 编码但有专门的官方介绍文章和独立的 ISO 下载通道。在 Windows 11 中,功能更新频率被延缓为一年。

功能更新是一个新的开始,其更新内容并无规律可言,但一定拥有固定的支持周期。在一定时间内,微软会向某个版本推送质量功能直到其被之后的版本淘汰。这段提供安全维护的时间被称为支持周期。家庭版和专业版的支持周期一般为版本发行间隔加一年,也就是说,Windows 10 为 18 个月,Windows 11 为 24 个月。支持周期结束后,用户只有升级到新版本才能享受到质量更新。

这种升级并非强制的,是可选更新。新版本释出后,微软会为支持的设备推送新版本,用户有留在旧版本的自由。当然,这种推送是分批且有延迟的,如果想要提前升级到新版本,有 升级工具 可供选择。

执行更新的步骤

除可选更新需要用户手动操作外,Windows 会自动扫描、下载并安装更新内容。对于定义更新这类小型项目,用户一般不会感知到其存在。但当 Windows 更新需要访问正在运行的某些系统组件时,它会在一切准备完毕后,弹出重启选项,这可能是用户对 Windows 更新感知最强烈的时候。

此外,当出现错误,无法安装更新时,莫名奇妙的错误代码可能也会让一些用户抓狂。想要理解这两种情况,了解 Windows 执行更新的基本步骤是必要的。

一次完整的更新会经过四个流程:下层阶段,SafeOS 阶段,首次启动和全新启动阶段。大部分情况下更新会在第一阶段结束,只有功能更新这样的大版本升级才会完整走完这四个流程,也正因为这种情况下的复杂性,重启才有必要,错误才会发生。

一次完整更新需要经过哪些步骤,图片来自 微软

下层阶段

这一阶段在将要更新的旧系统中进行。首先,系统根据用户设定的更新策略,连接服务器,扫描并评估更新是否适用于设备。一些「优化」指南中使用组策略、服务的方式禁用自动更新实际上就是影响了这一步。

一旦确定有更新可用,Windows 会下载更新内容到临时文件夹。然后比较设备信息和下载的内容,确定如何安装这些更新。此时,更新程序会创建名为「操作列表」的文件,告诉安装程序如何处理这些更新。

对于大部分更新,安装将直接进行且不会对正在运行的程序有影响,更新到此结束。

而如果更新涉及了内核等重要组件,则必须要在 Windows 系统之外进行更新的部署。Windows 为此需要进入独立的 SafeOS。这种情况下,下层阶段最后的任务是准备好必要的文件,设定系统下一次重启的首选项为 SafeOS,然后等待用户确认重启操作以继续更新流程。

SafeOS 阶段

SafeOS 阶段会进入 Windows PE 环境,不过此阶段首先做的是准备系统回滚文件,以防更新出错。之后如果出现任何问题,系统都会卸载更新,然后使用 SafeOS 生成的回滚文件确保设备仍能正常开机。

留好后路之后,SafeOS 就会着手安装更新文件,替换旧系统的组件。并设定启动首选项为新的系统,再次重启。

首次启动和全新启动

告别 SafeOS 后,Windows 会在新环境中进行各种初始配置,识别设备的硬件。此过程称为首次启动。首次启动之后 Windows 会第三次重启,正式「开箱」进入新系统,所以此阶段还被称为 OOBE (Out of box experience)阶段。

经过这四个阶段,Windows 更新程序既完成了对旧系统的备份,也部署了新的更新。成功进入新系统之前,最多会重启三次。整个过程如果有任何意料之外的情况发生,更新就会失败:下层阶段出现的问题会导致更新无法继续,后面三个阶段发生的错误则会导致系统回滚。

更新的常见错误及解决方法

如果设备原来的 Windows 系统运行正常,用户没有安装意图不明的软件,也没有删改某些系统文件,那么 Windows 更新大概率不会失败。但由于 Windows 运行的硬件软件环境难以预料,遇到更新问题也并不罕见。本文将给出一些常见的错误及其解决方法。

网络问题

下载错误发生在执行更新的下层阶段,错误大概率可归咎于网络。用户需要做的是等到网络环境良好时再进行更新。之后可以先清除原先下载的更新文件,即手动删除C:\Windows\SoftwareDistribution\Download下的所有文件,再检查更新。

当然,如果由于各种原因无法通过内置的更新功能下载内容,微软提供了变通的方法。

Microsoft Update Catalog 是微软官方提供更新内容下载的平台。Windows 的所有更新历史都是可查的。前文提到,每一次质量更新都有独立的 KB 编码,从 Windows Update History 界面找到需要的更新后,在 Catelog 输入其 KB 编号,下载适合本设备的版本双击即可安装。

驱动程序更新则可通过设备制造商的官网获得。

系统组件损坏

此类错误经常表现在安装的下层阶段和最终的启动阶段。由于系统的某些组件损坏,Windows 无法找到或者修补原文件导致更新发生错误。至于系统组件损坏的原因,大概率是不知情的用户删除了某些关键系统文件,或者某些恶意软件作祟。

好在 Windows 自带了修复的工具,以管理员权限运行 PowerShell,键入DISM.exe /Online /Cleanup-Image /RestoreHealth,这会使用 Windows 更新作为源文件,尝试修复损坏的系统组件。如果手上有 Windows 镜像,也可以在命令后加/Source:C:\…… /LimitAccess告诉 DISM 使用该镜像作为源文件。

第三方加密软件问题

这类错误发生在重启至 SafeOS 阶段,原因大概率是第三方的磁盘加密软件阻止系统进入 SafeOS。解决方法是提前解密。

之所以 Windows 自身的加密不会导致类似的问题,是因为更新程序预先执行了 BitLocker 的解密步骤。

硬件及其驱动问题

在首次和全新启动阶段,新系统会进行配置的初始化,如果此时碰到没有驱动程序支持的硬件,更新也会出现错误。

如果在这两个阶段出现问题,那么用户可能需要提前清理一些不必要的外设,例如风扇、手柄等。在安装功能更新前总是保证驱动程序最新也是很好的习惯。

In-Place Upgrade 和 SetupDiag

如果确认更新失败并非由以上四种问题引发,那么下面这两个方法值得一试,它们能解决或定位绝大多数更新错误。

In-Place Upgrade 是解决各种由于系统组件和设置造成的更新问题的最好方式。它修复系统的方式是对原系统进行一次原地更新:用镜像设置替换原系统的组件和设置,还原系统纯净的环境。这会初始化所有的系统设置,但不会丢失任何的应用及文件。

详细的操作流程可以参考 TenForums 的教程。它和使用易升提前获取功能更新近似,简单来说包括三个关键步骤:

  1. 微软官方 获取和电脑运行系统同版本的 ISO 文件;
  2. 挂载 ISO 文件,双击其中的setup.exe
  3. 在之后的更新步骤中,选择保留应用和文件,等待更新完毕。
图片来自 TenForums

此方法本质上是不丢失文件和应用的还原操作,和设置面板中提供的「全新启动」类似。但当系统的某些问题已经导致无法安装更新时,「全新启动」功能很可能也会出现问题,采用镜像修复的方式更加稳妥。

更复杂的情况则需要考虑使用 SetupDiag。这是微软推出的一款更新日志分析工具,官方已经给出的详细的 使用教程。用户遇到升级问题时,下载并双击打开此工具,它会生成日志分析文件,通过比对生成的SetupDiagResults.log 和官方给出的 规则,即可准确定位错误发生的阶段及原因,工具同时会给出解决方案。

图片来自 SetupDiag 文档

总结

微软一直在优化 Windows 更新的体验。它如此耗费心力的目的很显然不是如一些「指南」所暗示的那样拖慢用户的系统,而是最大程度上保证自家产品的安全性,毕竟除了是市场占有率最高的桌面系统,Windows 也占有 20% 的服务器市场。

目前,排除 OOB 这类紧急更新,Windows 重要的(可能需要重启的)更新频率仅为每月一次,重启前会请求用户确认,用户亦可以择时自行重启,因而本文并不建议用户采用非正常手段关闭自动更新以减少这必要的打扰。即使需要延迟进行更新,也建议采用将某网络设置为按流量计费的方式,或使用暂停更新选项。

最后,祝愿读者 飞行愉快 ;)

参考资料

封面来自:freepik

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。


文章来源: https://sspai.com/post/68959
如有侵权请联系:admin#unsafe.sh