关机相关

最近更新时间: 2024-06-12 15:06:00

虚拟客户机关机过程分析

关机过程

腾讯云金融专区 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 实例里的这些相关设置如果被再次调整,也不能保证软关机顺利进行。 强制关机会造成风险,建议仅在十分必要的时候才进行硬关机操作。