我们有一台 CentOS 5.5 KVM 主机,运行装有各种 CentOS 版本的客户机,以后可能还会运行其他操作系统。
我们希望能够 (a) 在主机关闭时自动向所有客户机发送 ACPI 关闭消息或 (b) 将所有客户机暂停到磁盘。
是否有标准方法可以完成其中任何一个,还是需要自己动手?谢谢!
答案1
是的。
该virsh shutdown
命令(或使用 libvirt 的其他“关机”实现,如virt-manager
)指示客户操作系统彻底关闭。从手册页中:
shutdown domain-id
Gracefully shuts down a domain. This coordinates with the domain
OS to perform graceful shutdown, so there is no guarantee that it
will succeed, and may take a variable length of time depending on
what services must be shutdown in the domain.
The exact behavior of a domain when it shuts down is set by the
on_shutdown parameter in the domain’s XML definition.
使用 KVM,这应该发送 ACPI system_powerdown 事件。
在 Fedora 和 RHEL 6 中,libvirt-guests
有一个默认的 init 脚本,配置为在系统关闭时暂停所有客户机。不过,它并不是特别神奇,因此只需稍加修改即可将其复制到 CentOS 5。
答案2
这是最新的 Fedora 和 RHEL 6 中的标准功能。
答案3
据我所知,CentOS 没有这样的标准脚本。可以编写代码,但有点危险,因为您需要处理需要很长时间才能关闭的客户端。超时后直接杀死它们可能会破坏数据,而等待它们可能会让您的关机挂起。
相反,最好在重新启动之前手动关闭客户机。有一段时间,我有一个脚本来代替关机和重新启动。如果有任何正在运行的客户机(虚拟机列表上的简单 lc),该脚本会警告我,如果有正在运行的客户机,则会阻止该命令。
答案4
KVM 客户机只是用户空间进程。您应该有一些进程监控。最常见的似乎是 libvirt(它是由 RedHat 开发的,所以我猜它应该在 CentOS 上可用)。