问题:
安装 kvm 虚拟化并且安装客户机之后,通过 virsh shutdown 命令无法关闭客户机,只能通过 virsh destroy 进行强制关闭电源。虽然这也是一种方法,但是直接断电显然有点不妥,并且你并不知道何时会出现一些奇奇怪怪的问题。

在下图中我分别对客户机 centos6.5 和 hongxuecentos6.5 试图执行 virsh shutdown 进行正常关闭,输出信息为: Domain “client” is being shutdown,但是通过 virsh list –all 进行查看

 

解决方案:
shutdown使用发送acpi指令来控制虚拟机的电源,而KVM虚拟机安装linux系统时默认没有安装acpid服务,反以导致不能关闭虚拟机,需要安装acpid。

分别在两台虚拟机中安装 acpi 服务,并且开启 acpid 服务

 kvm 虚拟化 virsh shutdown 无法关闭客户机

 kvm 虚拟化 virsh shutdown 无法关闭客户机

等待acpid服务启动之后,即可通过 virsh shutdown 来正常关机。

 kvm 虚拟化 virsh shutdown 无法关闭客户机

kvm 虚拟化 virsh shutdown 无法关闭客户机

 

 

acpid 介绍(以下内容来自百度百科):
ACPId服务是AdvancedConfigurationandPowerInterface缩写,acpid中的d则代表daemon。Acpid是一个用户空间的服务进程,它充当Linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。

ACPId服务与内核的通信方式:acpid用poll函数挂在/proc/acpi/event文件上。内核在drivers/acpi/event.c中实现了该文件的接口,一旦总线事件列表(acpi_bus_event_list)上有电源管理事件发生,内核就会唤醒挂在/proc/acpi/event上的acpid,acpid再从/proc/acpi/event中读取相应的事件。acpid与应用程序的通信方式有两种,

其一是通过本地socket,其文件名为/var/run/acpid.socket,应用程序只要连接到这个socket上,不用发送任何命令就可以接收到acpid转发的电源管理事件。

其二是通过配置文件。在acpid收到来自内核的电源管理事件时,根据配置文件中的规则执行指定的命令。

ACPId服务配置文件在/etc/acpi/events/目录下,
下面是一个示例:
event=button/power.*action=/sbin/shutdown-hnow
ACPId服务事件的格式为:
device_classbus_idtypedata。device_class和bus_id是字符串,type和data是十六制整数。在配置文件中可以使用通配符,来匹配指定的事件。
---------------------
作者:亦非我所愿丶
来源:CSDN
原文:https://blog.csdn.net/wanglei_storage/article/details/51120302
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章: