关机相关

最近更新时间:2018-05-23 15:59:26

查看pdf

虚拟客户机关机过程分析

关机过程

腾讯云 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 的处理方式】一项,如果设置成忽略或不做操作,将忽略虚拟化母机的关机事件。
  6. Windows 由于电源管理的设置而进入休眠时,不会处理关机事件。
  7. Windows 系统中如果安装了某些恶意的软件,或者中了木马、病毒等,Windows 系统环境本身遭受了破坏,可能会导致 Windows 关机被阻止。

腾讯云在发布 Windows 公共镜像时,对上述大部分场景做了优化,使得软关机可以顺利完成。但是,这些优化措施是不能解决 Windows 中了病毒或木马,以及系统被损坏等场景的。另外,用户的 Windows 实例里的这些相关设置如果被再次调整,也不能保证软关机顺利进行。
强制关机会造成风险,建议仅在十分必要的时候才进行硬关机操作。