云服务器关机过程分析
关机过程
说明
腾讯云 Windows 实例的关机过程如下:
1. 母机上的 libvirt 将 shutdown 命令通过 qmp 协议传给 qemu 组件。
2. qemu 组件将 shutdown 命令通过注入 acpi 中断方式传入子机(相关细节可阅读 vmcs 有关的技术文档)。
3. Windows 实例收到关闭信号后,通知应用程序和服务进程退出。
4. 关闭核心服务进程。
5. 关闭电源。
注意
其中步骤3和步骤4根据系统的设置不同,各个应用程序和服务的关闭顺序可能会不同。
Windows 是一个闭源系统,提供了一些 API 使内核态和用户态的程序可以对关机过程进行干预,同时 Windows 本身的一些服务在运行过程中也会影响关机过程,导致无法关闭计算机。因此在某些情况下,Windows 的关机过程会比较漫长。
硬关机
在虚拟化场景下中,除了通过消息通知 Windows 本身的关机之外,还提供了另一种停止实例的方式。其方式类似于物理机上关闭电源,我们将这种关机方式称为硬关机。而由系统信号发起的关机操作,相对的被称为软关机。
硬关机对 Windows 本身和用户体验都是有影响的,主要影响有以下两方面:
1. 硬关机中断了某些服务和应用程序,有可能使得这些程序工作不正常,例如未保存的文档,没有完成的 WindowsUpdate 过程等。
2. 由于 Windows 的 NTFS 系统(或早期的 FAT32 等系统)在关机的过程中,会写入一些关键数据,硬关机可能会造成这些关键数据未写入磁盘,从而导致 Windows 认为 NTFS 文件系统损坏。
基于上述原因,我们建议腾讯云的用户优先使用软关机的方式关闭 Windows 实例。
关机失败的几种场景
Windows 系统中可能存在某些问题,使得关机过程被影响而无法成功关机。关机失败包括但不限于以下几种场景:
1. WindowsUpdate 过程可能会延长关机时间。Windows 在做某些补丁操作时,会在关闭系统的时候做一些处理。此时,屏幕上一般会显示 “请不要关闭计算机电源或拔出电源线” 等提示信息。
2. 如果 Windows 系统开启了关机事件跟踪机制,当系统的服务和驱动程序出现错误并关机时,系统会根据配置,给用户提示框或者让用户填写错误描述,并等待用户完成这些操作才会关闭电源。在用户完成指定操作之前,Windows 不会关闭电源。
3. Windows 可以设置当用户未登录系统时,不允许关机。在此情况下,虚拟化主机发送的软关机指令被 Windows 丢弃,因而无法达到关机目的。
4. Windows 在关机时,会广播消息到每一个服务和应用程序。如果这些程序接收到这个消息后没有返回可以关机的应答,则不会进行关机处理。此场景下,Windows 可以做一些相关的设置来忽略这个过程。
5. Windows 设置电源管理相关的操作中,如果将当按下电源时 Windows 的处理方式设置成忽略或不做操作,Windows 将忽略虚拟化母机的关机事件。
6. Windows 由于电源管理的设置而进入休眠时,不会处理关机事件。
7. Windows 系统中如果安装了某些恶意的软件,或者中了木马、病毒等,Windows 系统环境本身遭受了破坏,可能会导致 Windows 关机被阻止。
腾讯云在发布 Windows 公共镜像时,对上述大部分场景做了优化,使得软关机可以顺利完成。但是,这些优化措施是不能解决 Windows 中了病毒或木马,以及系统被损坏等场景的。此外,用户的 Windows 实例里的这些相关设置如果被再次调整,也不能保证软关机顺利进行。
强制关机会造成风险,建议仅在十分必要的时候才进行硬关机操作。