Libvirt domain的几种状态及转换关系

在Libvirt里,一个Domain是一个运行在虚拟机器上的操作系统的实例,它可以指一个运行着的虚拟机,或者用于启动虚拟机的配置。
那么,对于一个Domain而言,主要有哪些状态呢?,他们的转换关系是什么?可以参考文档VM lifecycle。其中,状态主要包括以下:

Domain有以下状态:

  1. Undefined(未定义) - 基线状态。Libvirt不知道任何关于domain的信息,因为它还没有被创建。
  2. Defined or Stopped(已定义/停止) - Domain已经被定义,但是不在运行状态,也被成为停止状态,只有持久性domain有这个状态,当非持久domain停止或者关机了,则它就不存在了。
  3. Running(运行中) - Domain已经被定义并且且启动了,无论是持久性domain还是非持久domain,任何处于该状态的 domain 都已经在主机的 hypervisor 中被执行了。
  4. Paused(暂停) - 在hypervisor上的该domain被挂起了,它的状态被暂存,直到被唤醒。对于domain自身而言,是无法知道自己处于该状态的,如果熟悉操作系统里的进程挂起状态的话,这个很类似。
  5. Saved(已保存) - 和暂停状态很像,只不过domain的状态被存储在持久存储中,而不是内存中,同样domain可以被恢复,并且并不知道自己处于这个状态。

这些状态之间的转换关系,可以参考图:

参考:

  1. https://wiki.libvirt.org/page/VM_lifecycle