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

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

我叫  Aditya,在微软 Windows 内核团队担任资深支持工程师。今天我想通过本文简要介绍一下 Windows 8.1 与 Windows Server 2012 R2 中有关 Windows 服务维护堆栈(Servicing Stack)的变化。这一话题包含四篇文章,本文是第一篇。

为了改善可靠性,降低磁盘空间占用,确保系统始终保持最新状态,Windows 8.1 中包含了大量新功能。这一系列文章将详细介绍上述各类功能,并介绍在解决有关服务维护问题时可以采取的排错方法。

服务维护与服务维护堆栈是什么:Windows Vista 之后的系统开始只用一种名为服务维护(Servicing)的机制管理操作系统组件,而不再使用老版本 Windows 中所用的基于 INF 的安装方法。在 Windows Vista 与 Windows Server 2008 中,基于组件的构建方式会使用映像将组件存储(Components Store)部署到目标计算机,已不再分别部署单个的文件。这种设计使得我们在安装额外的功能和修复损坏的系统文件时不再需要提供安装介质,并能轻松快速地构建不同版本的操作系统,同时让所有操作系统的服务维护工作变得更流畅。

在这种服务维护模式下,Vista 以后操作系统的系统更新过程也比老版本操作系统中所用的 update.exe 模式有了大幅改进。虽然 update.exe 提供了很多优势,但也存在不少问题,例如需要在每个补丁包中包含一个 update.exe 引擎。

通过以服务维护堆栈的方式提供更新引擎,并将其直接包含在操作系统中,服务维护工作也得以大幅简化。服务堆栈文件位于 C:\Windows\WINSxs 文件夹中。

01

该文件夹在 Windows 2008 与 Windows 2008 R2 系统中可能会变得异常巨大,原因在于:
Windows 2008 与 Windows Vista 中的 WINSXS 目录是什么,为什么会那么大?https://www.xieyidian.com/1425

Windows 8.1 与 Windows Server 2012 R2 有何改进:

1. 组件存储分析工具:

DISM 命令中增加了一个新功能,可供用户查看组件存储(WinSxS 文件夹)中所含内容的详细信息。

以往有很多用户,主要是高级用户和 Windows IT 管理员,他们很好奇为什么 WinSxS 文件夹会变得那么大,并占用那么多存储空间。这些用户还抱怨随着使用时间的延长,WinSxS 文件夹的体积会进一步增大,希望了解如何减少空间占用。很多用户还曾问过,如果将 WinSxS 完全删除又会怎样。我们过去曾多次尝试向大家解释 WinSxS 所包含的内容,以及 WinSxS 文件夹的实际空间占用。在新版操作系统中,我们为高级用户提供了一个报告工具,可用于查看 WinSxS 文件夹的实际空间占用量,并可用于查看其中所含内容的详细信息。除了该工具,我们还将用这一系列文章向大家介绍 WinSxS 文件夹的结构,以及相比老版本系统,该文件夹的实际空间占用情况。

这一系列文章的目的有两个。首先,向高级用户和 Windows IT 管理员介绍 WinSxS 到底是什么,其中包含哪些内容,以及该文件夹对整个操作系统的重要作用。其次将介绍 DISM 工具,告诉大家如何用 DISM 功能分析 WinSxS 文件夹的内容,并查看相关信息。
从各种论坛和博客文章中我们发现,用户在这方面主要会遇到两个问题:

  • WinSxS 为什么这么大?
  • 是否可以将 WinSxS 部分删除或彻底删除?

此外 OEM 厂商也想知道该如何从映像中清理不需要的程序包、服务维护日志等内容。

考虑到这些问题,我们认为,这一工具首先要解决的是该如何准确衡量 WinSxS 文件夹实际占用的存储空间。其次最好能够列出可回收的程序包,这样用户才能通过组件清理操作回收硬盘空间。最后,对于微软 Surface 这样的设备,由于支持联网待机(Connected standby),系统可能从来不会对映像进行清理。鉴于此,考虑到这类平板设备的磁盘容量较小,因此一定要让用户知道上次清理的时间,以及设备是否需要再次进行清理。

我们的计划是在运行中的系统上,完整的分析工作可以在 40-90 秒内完成。在这种情况下,还需要向用户展示操作进度条。我们将使用 DISM 现有的进度条界面向用户显示操作完成进度的百分率。用户还可以在进度界面下随时取消操作。

下文列出了使用组件存储分析工具的完整步骤:

  • 用户在开始界面输入“命令提示符”,并以管理员身份运行。
  • 用户输入 DISM 命令:Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

扫描结束后,用户可以看到类似下面的结果:

02

2. 组件存储清理:

组件存储清理功能的主要目的在于降低服务维护堆栈的整体空间占用,并降低空间占用的增长速度。降低 Windows 空间占用的原因有很多,例如为最终用户提供更多用于保存个人文档的磁盘空间,以及提高部署工作的速度。

Windows 8 中的组件存储清理工具已集成在磁盘清理向导中。该向导可执行一系列任务,包括删除仅包含已替换组件的系统更新程序包,压缩未被使用的文件(例如可选组件、服务维护堆栈组件等)。在 Windows 8.1 中,我们还提供了无需重启动即可执行深度清理的功能。

目前,组件存储清理工具必须由最终用户通过 DISM 或磁盘清理向导手工启动。为了让普通的最终用户也能顺利使用该工具,我们已经将其加入到维护任务中,可帮助最终用户自动节约硬盘空间。为了实现这样的功能,必须改动系统,使得系统无需重启动即可卸载不再使用的系统内建驱动(目前 CBS 所进行的全部驱动程序安装/卸载操作都需要重启动)。

深度清理功能中的已替换程序包删除操作会让经过长时间使用,定期进行服务维护的系统也能和全新安装并更新的系统一样,保持尽可能低的磁盘空间占用。

2.1. 如何发起组件储清理操作?

可通过下列三种方式发起组件存储清理操作:

1. Dism.exe /online /Cleanup-Image /StartComponentCleanup

03

2. 磁盘清理向导:

a. 要从桌面打开磁盘清理向导,请从屏幕右侧边缘向中心滑动,按下设置(或如果您使用键盘鼠标,可将鼠标指针指向屏幕右下角,向上移动鼠标指针,然后点击设置),按下或点击控制面板,在搜索框中输入管理,或点击管理工具,然后双击磁盘清理

b. 在驱动器列表中,选择要清理的驱动器,然后按下或点击确定

c. 在磁盘清理对话框中,选中要删除的文件类型对应的复选框,按下或点击确定,然后按下或点击删除文件

d. 要删除系统文件:

i. 在驱动器列表中,按下或点击要清理的驱动器,然后按下或点击确定

ii. 在磁盘清理对话框中,按下或点击清理系统文件,随后您可能需要输入管理员密码或进行确认。

04

c. 在驱动器列表中,选中要清理的驱动器,然后按下或点击确定

d. 在磁盘清理对话框中,选中要清理的文件类型对应的复选框,按下或点击确定,然后按下或点击删除文件

05

e. 通过计划任务自动进行:

i. 如果任务计划程序尚未打开,请启动任务计划程序。详情请参阅启动任务计划程序

ii. 展开控制台树,定位到任务计划程序库\Microsoft\Windows\Servicing\StartComponentCleanup

iii. 在所选项下点击运行

06

此外还可通过命令行启动 StartComponentCleanup 任务:

schtasks.exe /Run /TN “\Microsoft\Windows\Servicing\StartComponentCleanup”

对于上述三种方式,为了立刻减少空间占用,磁盘清理后还将自动执行空间回收。为了不延长执行操作所需的时间,当通过方式 1 执行回收时,将不使用 NTFS 压缩功能,不过此时将应用增量压缩(Delta Compression),该功能可加快整个操作的执行速度。在自动运行方式 3 时,为了不影响系统的响应速度,深度清理与回收功能被设计为可打断。

2.2. 组件存储清理工具能做什么?

在自动进行组件存储清理操作时,满足下列条件的程序包会被移除:

  • 程序包中的所有组件已被新版本取代。
  • 程序包不包含在排除类(permanent、LP、SP、foundation)中。
  • 程序包的寿命超出了预定义的阈值。

程序包只有处于废弃状态并保持一定天数(默认为 30 天)后才会被自动深入清理操作移除。为了维持响应速度,自动化的组件存储清理操作在执行程序包卸载操作时会一次卸载一个,并检查用户在两个程序包的卸载操作之间是否叫停。

组件存储清理维护任务将被包含到组件平台回收维护任务中。该任务每周运行一次,截止期限为 2 周。这样即可确保回收与深度清理操作能在每个周二补丁日安装更新后快速执行。

手工清理组件存储

在手工执行组件存储清理操作过程中,满足下列条件的程序包会被移除:

  • 程序包中的所有组件已被新版本取代。
  • 程序包不包含在排除类(permanent、LP、SP、foundation)中。

手工组件存储清理操作的功能早已包含在 Windows 8 中。为了改善性能,手工深度清理会在一个 KTM 事务中执行所有程序包的卸载操作,并且该过程是不可打断的。已废弃的程序包没有寿命限制,并且会立刻被移除。

本系列的下篇博客文章将详细介绍增量压缩(Delta Compression)与单实例…

Aditya
Senior Support Escalation Engineer
Microsoft Platforms Support

分享:

发表评论

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

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