解决kvm虚拟化无法关闭客户机
pve Proxmox VE kvm    2018-11-28 13:09:53    3626    0    0
emengweb   pve Proxmox VE kvm

问题:

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


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

这里写图片描述


解决方案:

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

#Debian系统
apt-get install acpid -y

#Centos系统
yum install acpid -y

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

这里写图片描述

这里写图片描述

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

这里写图片描述

这里写图片描述


acpid 介绍(以下内容来自百度百科):

ACPId服务是AdvancedConfigurationandPowerInterface缩写,acpid中的d则代表daemonAcpid是一个用户空间的服务进程,它充当Linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。


ACPId服务与内核的通信方式:acpidpoll函数挂在/proc/acpi/event文件上。内核在drivers/acpi/event.c中实现了该文件的接口,一旦总线事件列表(acpi_bus_event_list)上有电源管理事件发生,内核就会唤醒挂在/proc/acpi/event上的acpidacpid再从/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_idtypedatadevice_classbus_id是字符串,typedata是十六制整数。在配置文件中可以使用通配符,来匹配指定的事件。

上一篇: Mac OS 下 NVM 的安装与使用

下一篇: 用Proxmox搞定GPU穿透

3626 人读过
文档导航