Windows 服务维护的变化:第二篇:降低 Windows 空间占用

这是一篇翻译文章,原文在这里

我叫 Aditya,在微软 Windows 内核团队担任资深支持工程师。本文是服务维护系列文章第一篇的后续内容。因此为了更好地理解本文,建议首先阅读上一篇文章。正如上文曾提到的,这系列有关 Windows 服务维护的文章共有四篇。

Windows 服务维护的变化:第一篇

Windows 服务维护的变化:第二篇:降低 Windows 空间占用

在进一步介绍单实例(Single Instancing)和增量压缩(Delta Compression)之前,我觉得首先应该简要介绍一下为什么要提到这些内容,以及老版本操作系统中这些功能是如何运作的。单实例与增量压缩技术的使用主要是为了降低 Windows(Windows 8.1 与 Windows Server 2012 R2)的磁盘空间占用。原理和原因如下:

Windows 中降低空间占用的功能:Windows 的磁盘空间占用将对用户产生直接影响,空间占用过大会直接减少用户用于存储音乐、视频、照片,以及其他内容的空间。虽然用户的大量内容已经开始迁往云端,但高分辨率照片与视频、有限且昂贵的带宽、针对云存储环境安全/隐私的担忧等因素导致在未来几年内,用户对本地存储依然存在不小的需求。

Windows 的空间占用还会对我们的 OEM 合作伙伴产生直接影响。最终用户在选择和购买设备时,可用存储容量是一种重要指标,OEM 厂商不得不提供越来越大的存储容量。目前有一种趋势:很多 OEM 厂商开始选择体积小巧(可安装到更小型的设备中)、能耗更低,噪音更低,性能更高的 SSD 存储设备。然而 SSD 存储设备的价格要比传统旋转式机械硬盘高十倍左右,为了不导致成本高得离谱,OEM 厂商只能为设备使用小容量 SSD。

如果 Windows 的空间占用能尽量小,同时依然提供出色的用户体验,最终用户就能用更多空间存储自己的内容,OEM 无需在存储方面付出太多成本,借此可降低设备售价。

为了实现回滚等操作,就算通过 Windows Update 安装了新版本,老版 Windows 组件有时也会保存在 WinSxS 文件夹中。Windows 7 与 Windows Server 2008 引入的 MUM Servicing 功能确保了在安装 Service Pack(SP)后,可通过手工运行磁盘清理工具将之前安装 GDR 补丁导致的磁盘空间占用增量重新回收。

在安装 SP 之前或之后,Windows 都会尽可能让 GDR 更新的安装不会额外占用太多存储空间。该功能还可在基于组件的维护(Component Based Servicing)层面上降低服务维护导致的空间使用量增加,尤其适合下列场景:

1. 客户在 Windows 8 设备上选择启用自动更新,注意到随着使用时间的延长,WinSxS 文件夹的空间占用量并未显著增加。

2. 客户注意到随着使用和逐渐安装各类更新,WinSxS 文件夹的体积增大,于是运行磁盘清理工具以降低 WinSxS 文件夹的体积,为设备释放出可用磁盘空间。

3. OEM 厂商在自己的实验室中卫黄金映像进行维护,使其保持最新状态并受到保护。在将映像提供给 ODM 并在工厂进行部署前,可以运行 DISM 对映像进行清理,通过移除被替代的组件回收空间,降低映像文件体积。

4. 同理,IT 管理员为自己映像库中的主映像进行维护,使其保持最新状态并受到保护。在将映像部署到客户端计算机之前,可以运行 DISM 对映像进行清理,通过移除被替代的组件回收空间,降低映像文件体积。

Windows 中降低磁盘空间用量的功能主要针对 Windows 组件。Windows Update 会定期安装补丁,但并不总是会将被补丁替换,已不再使用的原内容删除。该功能的目的是减小使用一段时间后的磁盘空间占用,并让高级用户能够自行降低 Windows 的空间占用。

通过检测系统中可移除的内容,将其卸载或删除,并对不能删除但尚未使用的内容进行压缩,该功能可显著降低长时间使用后的 Windows 空间占用。

降低 Windows 的空间占用还有助于提高部署速度,另客户、企业及 OEM 厂商获益。

1. 单实例编录:该功能通过为 CATROOT 与 Windows 服务维护堆栈存储提供单实例编录,可降低组件存储的空间占用。

术语 定义
根(Catroot) %windir%\system32\catroot
服务维护程序包(Servicing Stack Package) %windir%\servicing\packages
服务维护编录(Servicing Stack Catalog) %windir%\winsxs\catalogs

   
冗余编录通过跨越上述三个存储创建硬链接的方式实现单实例,借此可遏制 Windows Servicing Stack 空间占用量的增加。为了将对其他编录客户端的影响降到最低,这些改动被限制为仅应用给由服务维护堆栈安装的编录。

有关硬链接的效果及在 Windows 服务维护堆栈中工作原理的详细信息,请参阅 TechNet 文章:管理组件库

2. 已废弃组件的增量压缩:该功能可降低后续更新所取代文件的空间占用,大幅降低组件存储的空间占用,但这些文件依然会保留在计算机中,以便卸载最近安装的更新时使用。

最新组件最新组件

术语

定义

组件 体积最小的可维护单位,包括文件、注册表数据、元数据等。组件描述了一系列文件等内容的具体维护方式。
已安装的组件 – 使用中 这是组件族中“使用中”的组件版本,同时也是投射到 System32(或组件清单所指定其他位置)的有效版本。
已安装的组件 – 被废弃

这些组件虽然安装在系统中,但版本老于使用中的组件。虽然这样的组件也位于组件存储中,但并未投射到 System32。如果使用中的组件被卸载,则后续所有组件中版本最高的将重新成为使用中的组件。

已安装的组件 – 被废弃

这些组件虽然安装在系统中,但版本老于使用中的组件。虽然这样的组件也位于组件存储中,但并未投射到 System32。如果使用中的组件被卸载,则后续所有组件中版本最高的将重新成为使用中的组件。

最新组件 这些组件可在某些适用的情况下安装,但目前尚未安装。例如最常见的一种情况是,最新组件属于当前被禁用的某一可选功能。

       
被废弃组件也保存在组件存储中,这样用户才能卸载使用中的组件(例如卸载某一更新)。最终用户很少需要卸载更新,因此通过清理这些更新可有效节约空间占用。该功能将使用一种名为“增量压缩”的压缩技术降低被废弃组件和最新组件的空间占用。

增量压缩这种技术可对比两个类似文件的差异。其中一个版本被充当基准版,其他版本则以“基准版+增量”的方式进行保存。

增量压缩是针对执行压缩操作时使用中的组件版本进行的。这意味着不同计算机上,特定组件的增量内容并不一定相同,这主要取决于执行压缩操作时使用中的组件版本。

这个问题可以用图 1 中的实例来解释,其中 V1、V2 与 V3 是压缩前安装的三个组件。在压缩过程中,针对当前使用中版本,即 V3 对 V1 与 V2 进行压缩,创建必要的增量内容。

01

在下图的例子中,安装了 V1 与 V2,其中 V2 是使用中的版本。压缩后,使用 V2 作为基准版为 V1 创建增量。随后在安装 V3 后,下次压缩时将使用 V3 作为基准版为 V2 创建增量。

02

解压缩或还原(Rehydration):如果使用中版本的组件被卸载,Windows 服务维护堆栈会将使用被卸载版本作为基准创建了增量的组件版本解压缩,并将其中最新版本的组件作为使用中的版本。卸载的版本会标记为删除,随后在运行服务维护堆栈的维护任务时,被卸载的版本会被删除,其他废弃的文件将针对新的使用中版本,重新进行压缩。例如下图所示。

03

有时某个文件需要解压缩,但其基准版本文件也处于压缩状态。这种情况下,Windows 服务维护堆栈将对文件链上所有必要的文件进行解压缩,最终获得使用中的版本。

04

这种情况下,最重要的问题就是:何时对组件进行增量压缩?答案非常简单,对组件存储中被废弃内容和最新内容进行的增量压缩操作是在服务维护堆栈执行维护任务的时候进行的。这一过程可自动或手工触发。

手工维护:通过 Dism.exe 手工触发:Dism /online /cleanup-image /startcomponentcleanup

自动维护:系统空闲时通过安排好的计划任务触发:任务计划程序库 –> Microsoft –> Windows –> Servicing

自动触发的操作可中断,可恢复。如果计算机不再处于空闲状态,操作将自动停止,并在计算机重新处于空闲状态后恢复。

详细信息请参阅 Windows 服务维护的变化:第一篇

术语:

术语 定义
增量压缩 针对基准版文件记录其他文件的差异之处,借此对文件进行压缩。基准版文件必须处于未压缩状态。
备份目录 包含用于修复损坏文件所需重要引导文件副本的目录。
清单 描述组件内容的文件。Windows 实际上是由组件清单定义的,约有 15,000 个清单(amd64 架构)。

希望本文能帮你更好地理解 Windows 团队在降低 Windows 8.1 与 Windows Server 2012 R2 WinSxS 文件夹空间占用方面所做的努力。

本系列的下一篇文章将介绍 Windows 8 KB2821895 中有关服务维护堆栈的改进,以及该 KB 更新是如何帮助您顺利升级到 Windows 8.1 的。敬请期待….

Aditya
Senior Support Escalation Engineer
Microsoft Platforms Support

分享:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

发表评论前,先做个简单的数学题吧: * Time limit is exhausted. Please reload CAPTCHA.