今天筆者在對kvm虛擬機進行管理時,使用virsh shutdown命令關閉指定的虛擬機時,發現雖然有如下的提示,但其實虛擬機卻一直不會真正的關閉。
經過查看virsh命令幫助和上網查詢,才得知virsh shutdown命令使用發送acpi指令來控制虛擬機的電源,
而kvm虛擬機安裝linux系統時默認是沒有安裝acpi服務的,所以並不會做處理。據說安裝windows會自動安裝acpi服務,沒測試過。
知道了原因、解決方法也就簡單了、我們只需要在虛擬機里安裝和啟動acpid服務即可,執行命令如下:
[root@kvm_client_00 ~]# yum install acpid -y [root@kvm_client_00 ~]# /etc/init.d/acpid restart //重新啟動acpic服務,安裝后默認會加入到開機啟動的
最后這里筆者簡單講一下關於apcpid服務的工作原理。
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/power.conf,下面是一個示例:
event=button/power.*
action=/sbin/shutdown-hnow
ACPId服務事件的格式為:
device_classbus_idtypedata。device_class和bus_id是字符串,type和data是十六制整數。在配置文件中可以使用通配符,來匹配指定的事件。
尊重別人的勞動成果 轉載請務必注明出處:http://www.cnblogs.com/5201351/p/4462541.html