Windows 8.1 有一个新的计划任务(Servicing\StartComponentCleanup),它将自动从 Side by Side 存储、DriverStore 和驱动程序文件夹中删除或压缩被取代和未使用的文件。
我想知道是否有人知道是否可以保留组件清理但跳过压缩,而无需禁用 NTFS 压缩或计划任务?
请注意,如果某些驱动程序/文件开始加载/使用,Windows 似乎不会在压缩后对其进行解压缩。要解压缩它们,您必须手动运行“compact /U”作为 TrustedInstaller 服务。
答案1
您如何衡量压缩节省?您的数字有些错误,因为 RTM 8.1 映像仅通过对内置驱动程序进行 NTFS 压缩(在 x64 上)就能节省大约 114 MB。只需使用资源管理器获取 c:\windows\system32\driverstore 的大小,您就会发现“大小”和“磁盘大小”之间大约有 114 MB 的差异。/startcomponentcleanup 不会重新执行已经完成的工作,因此将来运行它只需压缩新的驱动程序、备份文件或被取代的文件。
对于 RTM 8.1 映像,备份类别中需要压缩的内容非常少,并且取代类别中不应有任何内容。取代类别是使用 /startcomponentcleanup /resetbase 而不是常规 /startcomponentcleanup 时唯一跳过的压缩。因此,我不确定就压缩性能而言,使用它会带来什么优势。取代位(如果有)的压缩确实需要一些时间,但它可以保持您卸载 KB 的能力,同时节省 90% 以上的空间。
要查看 /startcomponentcleanup 或 /startcomponentcleanup /resetbase 对 winsxs 的影响的准确数字,请在运行 /startcomponentcleanup 之前和之后运行 dism /online /cleanup-image /analyzecomponentstore... 特别查看“备份和禁用功能”数字。您会注意到运行该命令后存在显著差异。此外,如果您重新运行 /startcomponentcleanup,您应该会看到它在第二次完成得相当快,因为它没有什么可做的。
编辑-一些用于比较的实际数字
例如,在我刚刚使用 1 月补丁星期二更新(包括可选更新)进行更新的 X64 计算机上,下面是压缩的发生方式,仅查看 1 月补丁造成的变化。
注意:以下节省来自非 NTFS 压缩,因此压缩文件在文件资源管理器中不会显示为压缩。NTFS 压缩仅由 /startcomponentcleanup 用于收件箱驱动程序压缩(未包括在下面,为驱动程序存储节省了约 114 MB)
使用 /startcomponentcleanup 的实际数字
+354.25 MB added for January updates
- 34.14 MB saved by superseded package removal
- 67.84 MB saved for Backups (99.86 MB compressed to 32.02 MB)
-203.36 MB saved for Superseded Components (220.25 MB compressed to 16.89 MB)
---------
48.91 MB growth due to January updates after /startcomponentcleanup
使用 /startcomponentcleanup /resetbase 的实际数字
如果您使用“/startcomponentcleanup /resetbase”而不是仅仅“/startcomponentcleanup”,您可以节省额外的16.89 MB,但现在您无法卸载任何剩余的更新,并且您可能会注意到所有相同的压缩都按上述执行,“被取代的组件”除外。
48.91 MB growth due to January updates after /startcomponentcleanup
- 16.89 MB savings due to /resetbase
---------
32.02 MB growth due to January updates after /resetbase
使用 /analyzecomponentstore 的示例
这是在应用 1 月更新后和运行 /startcomponentcleanup 后运行 /analyzecomponentstore 的结果。请注意“备份和禁用的功能”数字,因为它表示组件存储 (winsxs) 所需的非临时存储。
应用一月更新后
Windows Explorer Reported Size of Component Store : 5.75 GB
Actual Size of Component Store : 5.51 GB
Shared with Windows : 4.49 GB
**Backups and Disabled Features : 884.98 MB**
Cache and Temporary Data : 161.29 MB
Date of Last Cleanup : 2014-01-14 10:04:32
Number of Reclaimable Packages : 3
Component Store Cleanup Recommended : Yes
运行/startcomponentcleanup 之后
Windows Explorer Reported Size of Component Store : 5.33 GB
Actual Size of Component Store : 5.21 GB
Shared with Windows : 4.49 GB
**Backups and Disabled Features : 595.02 MB**
Cache and Temporary Data : 139.23 MB
Date of Last Cleanup : 2014-01-14 10:38:59
Number of Reclaimable Packages : 0
Component Store Cleanup Recommended : No
答案2
没有公开的机制来禁用维修维护任务的压缩部分。
您想禁用哪种维护压缩,为什么?维护任务会压缩备份、其他重复文件和被取代的更新。如您所见,它还使用 NTFS 压缩来压缩收件箱驱动程序。您只想禁用收件箱驱动程序的 NTFS 压缩吗?为什么?
答案3
在虚拟机中进行一些实验后,发现运行添加了开关“/ResetBase”的 DISM 不会压缩任何文件,同时仍会清理被取代的组件。但有一个问题,运行 ResetBase 将删除卸载更新的功能。
完整解决方案:
- 编辑组件清理任务
- 打开 taskchd.msc 并浏览到 \Microsoft\Windows\Servicing\
- 双击 StartComponentCleanup
- 在“操作”选项卡中删除自定义处理程序
- 添加一个新操作,以“C:\Windows\System32\Dism.exe”作为程序,以“/Online /Cleanup-Image /StartComponentCleanup /ResetBase”作为参数
- 抓住工具, RunasSystem 和 RunFromToken 并将 PsExec、RunAsSystem_64 和 RunFromToken_64 提取到 \Windows\System32\
- 解压缩 \Windows\WinSxS\、\Windows\System32\drivers\ 和 \Windows\System32\DriverStore\
- 打开提升的(管理员)命令提示符
- 浏览到要解压缩的基本文件夹(例如:Windows\WinSxS)
- 输入“Compact /U /S /A /I /Q”并等待其完成
- 输入“PSExec -hsi cmd”
- 浏览到要解压的基本文件夹
- 输入“Compact /U /S /A /I /Q”并等待其完成
- 输入“退出”
- 输入“net start TrustedInstaller”
- 输入“runassystem_x64.exe“runfromtoken_x64.exe trustinstaller.exe 1 cmd””
- 浏览到要解压的基本文件夹
- 输入“Compact /U /S /A /I /Q”并等待其完成
- 输入“退出”
- 输入“net stop TrustedInstaller”
注意:由于文件上的 ACL 不同,您需要运行压缩 3 次(一次以管理员身份,一次以本地系统身份,一次以 TrustedInstaller 服务身份)。