Windows Server 2016 安装补丁后反复回滚
Windows Server 2016 安装补丁后反复回滚
Windows Server 2016 安装累积更新后,如果重启阶段提示 “We couldn't complete the updates”,并反复回滚,根因不一定是磁盘空间或组件存储损坏,也可能是历史用户配置文件异常导致 per-user registry 阶段失败。
现象
补丁安装阶段看似成功,重启时出现:
We couldn't complete the updates
Undoing changes
Don't turn off your computer进入系统后发现 OS Build 没有提升,再次安装仍然重复回滚。
WindowsUpdate.log 可能出现:
Post-reboot status ... 0x800f0922CBS.log 中可见:
CBS_E_INSTALLERS_FAILED
Per-User Registry Installer ... 0x80070002CSI 日志里还能看到历史用户 NTUSER.DAT 卸载失败。
排查思路
先排除常规原因:
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth同时检查:
- SSU 是否已安装。
- C 盘是否有足够空间。
- SoftwareDistribution / catroot2 重置后是否仍失败。
如果这些都正常,就要看 CBS/CSI 日志中是否集中出现在 Per-User Registry Installer 阶段。
根因
案例中问题集中在历史用户配置文件。服务器上存在多个历史用户目录、Unknown Profile,甚至体积异常大的用户配置文件。更新在重启阶段需要加载或卸载用户注册表 hive,某些 NTUSER.DAT 无法正常卸载,导致补丁事务失败并触发回滚。
处理方案
1. 先备份
生产环境操作前先创建 AMI 或快照。用户 Profile 清理有数据风险,不能直接在生产上盲删。
2. 清理 Unknown Profile
图形界面方式:
- 运行
sysdm.cpl。 - 进入“高级”选项卡。
- 在“用户配置文件”区域点击“设置”。
- 删除状态为 Unknown 或确认不再使用的历史用户配置文件。
3. 必要时清理注册表 ProfileList
谨慎打开注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList对照 C:\Users 目录和 ProfileList 中的 SID,清理失效项。执行前应导出注册表备份。
4. 重新安装补丁
清理后重启,再重新安装目标累积更新。
5. 临时规避
如果不能立即清理 Profile,且后续月度补丁已发布,可以测试直接安装更新的累积补丁。Windows 累积更新通常包含前月安全内容,但这只能作为临时规避,根本问题仍应清理。
总结
Windows 补丁重启阶段回滚时,不要只盯着 Windows Update。CBS/CSI 里如果指向 Per-User Registry Installer 和用户 hive 卸载失败,就要重点检查历史用户配置文件。
服务器长期多人登录后,Profile 堆积很常见。建议定期清理废弃 Profile,避免在补丁窗口才暴露问题。
