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

来源:互联网 发布:mac豆沙色口红是几号 编辑:程序博客网 时间:2024/05/21 23:01

问题:

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

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

这里写图片描述


解决方案:

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

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

这里写图片描述

这里写图片描述

等待acpd服务启动之后,即可通过 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是十六制整数。在配置文件中可以使用通配符,来匹配指定的事件。

0 0
原创粉丝点击