重新启动时关闭 ("destroy") libvirt VM
shut down ("destroy") libvirt VM when it reboots
有一段时间,我使用 virt-install
在 libvirt 虚拟机上安装 OS。我了解到 OS 具有自动安装程序功能,需要使用第二张 CD-ROM(将有关所需配置的信息提供给安装程序),但我发现 virt-install
不幸地忽略了除一个之外的所有配置--cdrom
参数。我想出的替代方案是使用 --print-xml
参数将 VM 配置 virt-install
would use with just one CD-ROM 输出到一个文件,编辑它文件添加第二个CD-ROM,然后使用virsh create <xml config file>
.
我之前使用 virt-install
时,VM 在安装结束时自行重启,virt-install
会注意到并关闭 ("destroy") VM,而不是允许它运行重新启动,给我留下一个干净的安装磁盘映像。但是,现在当 VM 在完成安装后重新启动时,它实际上会再次启动而不是干净地关闭,所以我无法以编程方式判断安装何时完成。重新启动后,似乎正在使用相同的 qemu-system-x86_64
进程,所以我也无法使用它来判断安装何时完成。
如何强制 libvirt 关闭 ("destroy") VM,而不是像 virt-install
那样重新启动?或者,我可以使用其他一些指示器来判断是否发生了 VM 重启?
虽然似乎没有办法通过 virsh create
的特殊咒语或通过更改域 XML 文件中的选项在重新启动时自动销毁 libvirt VM,但我偶然发现了非常有用的 virsh event
命令:
$ virsh help event
NAME
event - (null)
SYNOPSIS
event [<domain>] [<event>] [--all] [--loop] [--timeout <number>] [--list]
DESCRIPTION
List event types, or wait for domain events to occur
OPTIONS
[--domain] <string> filter by domain name, id, or uuid
[--event] <string> which event type to wait for
--all wait for all events instead of just one type
--loop loop until timeout or interrupt, rather than one-shot
--timeout <number> timeout seconds
--list list valid event types
命令阻塞,直到指定域发生指定类型的事件。这使我能够通过以下方式实现模拟 virt-install
中的行为的目标:
$ virsh event domain1 --event restart
event 'reboot' for domain -
events received: 1
$ virsh destroy domain1
它甚至给了我一个内置的超时机制!
有一段时间,我使用 virt-install
在 libvirt 虚拟机上安装 OS。我了解到 OS 具有自动安装程序功能,需要使用第二张 CD-ROM(将有关所需配置的信息提供给安装程序),但我发现 virt-install
不幸地忽略了除一个之外的所有配置--cdrom
参数。我想出的替代方案是使用 --print-xml
参数将 VM 配置 virt-install
would use with just one CD-ROM 输出到一个文件,编辑它文件添加第二个CD-ROM,然后使用virsh create <xml config file>
.
我之前使用 virt-install
时,VM 在安装结束时自行重启,virt-install
会注意到并关闭 ("destroy") VM,而不是允许它运行重新启动,给我留下一个干净的安装磁盘映像。但是,现在当 VM 在完成安装后重新启动时,它实际上会再次启动而不是干净地关闭,所以我无法以编程方式判断安装何时完成。重新启动后,似乎正在使用相同的 qemu-system-x86_64
进程,所以我也无法使用它来判断安装何时完成。
如何强制 libvirt 关闭 ("destroy") VM,而不是像 virt-install
那样重新启动?或者,我可以使用其他一些指示器来判断是否发生了 VM 重启?
虽然似乎没有办法通过 virsh create
的特殊咒语或通过更改域 XML 文件中的选项在重新启动时自动销毁 libvirt VM,但我偶然发现了非常有用的 virsh event
命令:
$ virsh help event
NAME
event - (null)
SYNOPSIS
event [<domain>] [<event>] [--all] [--loop] [--timeout <number>] [--list]
DESCRIPTION
List event types, or wait for domain events to occur
OPTIONS
[--domain] <string> filter by domain name, id, or uuid
[--event] <string> which event type to wait for
--all wait for all events instead of just one type
--loop loop until timeout or interrupt, rather than one-shot
--timeout <number> timeout seconds
--list list valid event types
命令阻塞,直到指定域发生指定类型的事件。这使我能够通过以下方式实现模拟 virt-install
中的行为的目标:
$ virsh event domain1 --event restart
event 'reboot' for domain -
events received: 1
$ virsh destroy domain1
它甚至给了我一个内置的超时机制!