上一篇文章介绍了为什么微软的系统,打补丁了要重启。这是一个既成事实,说的是如何去接受这个事实。
但是今天的故事会更有一点意思,我们介绍一下特定场景中,如何做到打补丁不重启的,也就是不去接受上面的事实。
虽然打补丁重启很麻烦,但是需要注意的是,在Windows 10/Windows Server 2016以后的操作系统中,我们不需要在意补丁的细节,只需要安装最新的补丁,这种补丁是累计更新的。
而在Windows7以及更早的系统中,补丁的安装是这样的:
早期的补丁安装方式优点和缺点同样明显:
- 补丁一般有专门的应对功能,相对体积较小,安装速度快。
- 补丁2的安装可能依赖补丁1,有时候不见得会有很明确的说明。
- 补丁3可能替换了补丁1,在安装补丁3的时候不需要安装补丁1。
- 安装补丁依然会有可能需要重启。
如何做到打补丁不重启
打补丁不重启不是什么高科技,这只是微软的产品功能。说到功能,就要理解一般来说,这会有限制条件。一个恰当的比喻类似于显卡的光线追踪
。
而在打补丁这个事情里,这项技术叫做 Azure Automanage 热补丁
,他是随着Windows Server 2022
的发布而带来的功能,但是这项功能又不是泛指所有的Windows Server 2022
,它只支持一种操作系统
- Windows Server 2022(core)
再次强调一下,是Windows Server 2022的CORE
版。虽然使用CORE版会减低被攻击的风险,但是没有图形界面对大多数朋友来说,应该还是会带来一些障碍的。
而且也不是随便一个平台,随便一个版本就支持,它只存在下面两种环境中。
- Azure(公有云)
- AzureStack HCI(混合云)
也就是说,本地化的Windows Server 2022(零售、EA)并不支持这项功能。要在自家数据中心使用这项功能,必须要使用AzureStack HCI,而云端则必须要选择Azure。
什么是 Azure Automanage 热补丁
这里简单介绍一下这项功能:
“Windows Server 2022 Datacenter:Azure 版本”支持 Azure Automanage 中的热补丁。 热修补是在新的 Windows Server Azure Edition 虚拟机 (VM) 上安装更新的一种新方式,安装后无需重新启动。 有关详细信息,请参阅 Azure Automanage 文档。
热补丁目前处于公共预览版
中。需要一个选择加入程序才能使用下面描述的功能。此预览版在没有服务级别协议的情况下提供,不建议用于生产工作负载。某些功能可能不受支持或功能受限。有关详细信息,请参阅Microsoft Azure 预览版的补充使用条款。
热补丁的工作原理
Hotpatch 的工作原理是首先使用 Windows 更新最新累积更新建立基线。基于该基线的热补丁会定期发布(例如,每月的第二个星期二)。热补丁将包含不需要重新启动的更新。定期(从每三个月开始)使用新的最新累积更新刷新基线。
上面的话很官方,简单来说就是这样:
- 可以做到打补丁不重启,但是这只能坚挺三个月
- 每3个月会打一个基线补丁,这个时候会重启。
- 周而复始
回到和Windows7时代的补丁机制对比,每个补丁很小,对系统的影响相对较小。但是每3个月会对齐一下基线,让补丁不至于和Win7一样乱,这对于解决补丁依赖和补丁替代,会有积极的作用。
除了上面计划内的补丁安装之外,也可能会出现一些计划外的补丁,比如重大的0day,那就可能会发布新的需要重启的补丁。
补丁安装的原则是这样的:
- 分类为“关键”或“安全”的补丁会自动下载并应用到虚拟机上。
- 在 VM 时区的非高峰时段应用补丁程序。
- 补丁编排由 Azure 管理,补丁的应用遵循可用性优先原则。
- 监控通过平台健康信号确定的虚拟机健康状况以检测修补故障。
实现
要开始在Azure上新 VM 上使用热补丁,请执行以下步骤:
- 启用
预览访问
- 每个订阅都需要启用一次性预览访问权限。
- 可以通过 API、PowerShell 或 CLI 启用预览访问,如下面的“启用预览访问”部分所述。
- 从 Azure 门户开始创建新 VM
- 在预览期间,您需要开始使用此特定链接创建。
- 在 VM 创建期间提供详细信息
- 确保在“图像”下拉列表中选择了受支持的Windows Server Azure 版图像。使用本指南确定支持哪些图像。
- 在“来宾操作系统更新”部分下的“管理”选项卡上,选中“启用热补丁”复选框以在预览时评估热补丁。补丁编排选项将设置为“Azure 编排”。
- 在“Azure Automanage”部分下的“管理”选项卡上,为“Azure Automanage 环境”选择“开发/测试”或“生产”,以在预览时评估 Automanage 机器最佳实践。
- 创建你的新虚拟机
补丁更新
我们可以手动的对系统打一下补丁,试验一下效果,看看到底是不是真的不用重启。
- 在安装好的操作系统,进入
来宾和主机更新
→转到热补丁(预览)
- 在这个界面
Assess updates
→立即触发评估
→确定
- 等待评估结束,可以看到能够安装的补丁会在下方列出来。
- 此时可以点击顶部的
Manage updates
→one-time update
进行手动安装补丁
- 进行如下配置,默认不需要修改
- 在左侧点击
+包含更新分类
,勾选所有
- 刚才发现的补丁就可以安装了。点击
下一步
继续
- 确认无误,正式安装
- 右上角会出现提示正在安装。
- 由于补丁不大,安装很快结束。
- 一条正常的安装日志,大概是长这个样子的。
补丁安装失败的情况处理
在我的测试过程中,我发现补丁安装有失败的情况,那这个锅应该甩给热补丁么?
- 检查日志,看到有如下错误提示
- 这里也能看到相应错误提示
- 前往虚拟机,查看日志,由于是个core系统,没有资源管理器,所以需要开一个notepad,然后在notepad里面,使用
打开
,操作这个窗口。在这里,我们可以选择单个文件
,通过远程桌面,可以把文件拷贝出来。日志检查没有发现异常的地方。
- 检查日志过程中,发现裸机内存占用很大,远程桌面也有时会断联。
- 内存扩容为3.5G,裸连直接使用掉2G,因此可以下定论,Windows Server 2022比较占用内存资源,即使是CORE,也要分配4G内存。
- 内存扩容后,补丁安装正常,现阶段可以看出来,Windows Server 2022对系统资源要求相对较高,这一块大家一定要有心理预期。
总结
从我最早知道热补丁这个概念的时候,我对他的期待还是蛮高的,安装补丁要重启,重启就有可能带来各种意外的问题。所以不重启的话,就能减低出现问题的可能性。
现在的功能从标配的次次重启改成了3个月重启一次。并且在Azure上,可以由Azure来托管补丁的安装过程。这对于云端用户是个利好消息。
而本地化的用户呢?其实这种改变对本地化用户也有很大的影响,在本地使用需要使用Azure Stack HCI。HCI的账单会从Azure走,进行合并。如果用户没有互联网连接,也就无法使用这项功能。
虽然没有做到完全的不重启打补丁,这是一种有很多前置条件的不重启
,但这确实在某种程度上改变了和推进了云运维的模式。