Linux KVM 如果客户机重新启动,它将无法启动,必须​​手动启动

num*_*er9 6 linux kvm-virtualization virsh

拥有运行 KVM 的 Ubuntu 服务器:

Linux hyperv 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

它正在运行几台 Linux 虚拟机和一台 Windows 虚拟机。安装新的Windows 2016服务器虚拟机后出现问题。可以通过执行以下操作来启动虚拟机(称为 winstore):

virsh start winstore
Run Code Online (Sandbox Code Playgroud)

结果很好。如果从 VM 内部重新启动此特定 VM,它将完全关闭,但不会恢复。跑步

virsh list
Run Code Online (Sandbox Code Playgroud)

确认它尚未启动。为了启动虚拟机,必须执行以下操作

virsh start winstore 
Run Code Online (Sandbox Code Playgroud)

再次。这不是所需的行为,也不是其他 Windows VM 的行为方式(它们具有所需的行为,即重新启动时重新启动)。

该虚拟机的创建方式与正常情况略有不同。以下是最初创建虚拟机的步骤:

创建磁盘映像

qemu-img create -f qcow2 -o preallocation=metadata /mnt/vmstorage/images/winstore.qcow2 1300G
Run Code Online (Sandbox Code Playgroud)

获取我们将要执行的操作的 xml 输出,以便我们可以修改 cdrom 属性

virt-install --name winstore --ram 8192 --vcpus=2 --graphics=vnc --network=bridge=br731,model=virtio --disk path=/mnt/vmstorage/images/winstore.qcow2,format=qcow2,bus=virtio,cache=none --disk path=/mnt/backups/isos/virtio-win-0.1.126.iso,device=cdrom --cdrom /mnt/backups/isos/SW_DVD9_Win_Server_STD_CORE_2016_64Bit_English_-4_DC_STD_MLF_X21-70526.ISO --os-type=windows --noautoconsole --accelerate --noapic --print-xml > winstore.xml
Run Code Online (Sandbox Code Playgroud)

更改 xml 文件中 cdrom 的顺序:

<disk type="file" device="cdrom">
  <driver name="qemu" type="raw"/>
  <source file="/mnt/backups/isos/virtio-win-0.1.126.iso"/>
  <target dev="hda" bus="ide"/>
  <readonly/>
</disk>
<disk type="file" device="cdrom">
  <driver name="qemu" type="raw"/>
  <source file="/mnt/backups/isos/SW_DVD9_Win_Server_STD_CORE_2016_64Bit_English_-4_DC_STD_MLF_X21-70526.ISO"/>
  <target dev="hdb" bus="ide"/>
  <readonly/>
Run Code Online (Sandbox Code Playgroud)

然后通过执行以下命令安装并启动它:

virsh create ./winstore.xml 
virsh start winstore
Run Code Online (Sandbox Code Playgroud)

安装后,编辑了 xml,并交换了两个驱动器 (hda/hdb),因此它将从磁盘而不是 cdrom 启动。然后在 virsh 中使用以下内容定义 VM:

virsh define ./winstore.xml
Run Code Online (Sandbox Code Playgroud)

同样,虚拟机现在似乎工作正常,但它只是从

virsh start winstore
Run Code Online (Sandbox Code Playgroud)

同样,如果虚拟机从来宾内部重新启动,它不会重新启动,只会关闭。查看 /var/log/libvirt/qemu/winstore.log 中的日志,似乎没有任何异常。

请注意,VM 显示在

virsh list --all
Run Code Online (Sandbox Code Playgroud)

是的,我绝对、肯定地确定我没有点击 Windows VM 中的“关闭”。:)

num*_*er9 7

根据上面的 Michael Hampton 评论,xml 对节点进行了“销毁”<on_reboot>而不是“重新启动”。