By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
解决kvm虚拟化无法关闭客户机
pve Proxmox VE kvm    2018-11-28 13:09:53    4341    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穿透

4341 人读过
文档导航