libvirt 和 qemu/kvm -snapshot 选项

libvirt 和 qemu/kvm -snapshot 选项

使用 libvirt 时,我想使用 QEMU 的“-snapshot”选项。这样,当机器关闭时,所做的所有磁盘更改都会被销毁。

以下是 -snapshot 选项的手册:

写入临时文件而不是磁盘映像文件。在这种情况下,您使用的原始磁盘映像不会被写回。但是,您可以按 Ca s 强制写回。

类似的功能几乎可以满足我的要求(qcow2 覆盖图像、libvirt 后备存储),但不同之处在于每次启动虚拟机时我都需要一个全新的环境。这可能吗?

答案1

添加 libvirt 尚不支持的命令行开关的唯一方法是创建包装器脚本并更改虚拟机的配置以使用它。例如,

#cat >/usr/local/bin/qemu-snapshot<<'结束'
/bin/sh #!/bin/sh 复制代码
执行/usr/bin/qemu“$@”-snapshot
结尾
#chmod + x /usr/local/bin/qemu-snapshot
#virsh -c qemu:///系统编辑 my_vm
改变
    <模拟器>/usr/bin/qemu</模拟器>

    <模拟器>/usr/local/bin/qemu-snapshot</模拟器>

(对你来说可能是/usr/bin/kvm这样的。)

答案2

您只需发送 kvm 的监视器commit all即可进行相当于 CTRL+a 的操作...

答案3

您是否知道如何将快照更改提交到磁盘 img?Ca s 似乎无济于事。甚至尝试过,ctrl ctrl ctrl-a s。virsh 也没有提交命令。

如果你弄明白了,把它传递下去将会非常有帮助!:D

答案4

笔记

xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0

在标题中,然后检查一下。这几乎可以正常工作!

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>...</name>
  <memory unit='KiB'>...</memory>
  <os>
    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
  </os>

  <qemu:commandline>
     <qemu:arg value='-snapshot'/>
  </qemu:commandline>

  <devices>
    <emulator>/usr/bin/kvm</emulator>

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/tmp/some/existing/image.qcow2'/>
      <target dev='hda' bus='ide'/>
<!--
    https://bugzilla.redhat.com/show_bug.cgi?id=832194
      <transient />
-->
    </disk>
  </devices>
</domain>

不幸的是,发生了以下情况:

internal error: process exited while connecting to monitor: qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device needs media, but drive is empty
qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device initialization failed.
qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device 'ide-hd' could not be initialized

但无论如何,这是传递自定义 qemu 参数的更干净的方法

相关内容