如何(正确)备份实时 QEMU/KVM VM?

Rom*_*man 9 virtualization backup

我目前正在为 KVM 虚拟机设计一个备份解决方案,作为传统备份的附加措施。

不幸的是,到目前为止我遇到的所有当前(2013 年 8 月)现有解决方案要么:

  • 不确保VM的一致备份(丢失 RAM 状态、创建脏映像或其他事情),
  • 或需要长时间停机(备份时完全关闭虚拟机)。

我知道 QEMU/libvirt 的快照功能,但是,它尚不可用,因为:

  • 图像内部快照为您提供了一个不断变化的图像文件,从而导致可能的脏备份(假设完全使用 qcow2 图像)。
  • 还不能将当前活动的外部快照合并到原始支持映像(“blockcommit”)中。

出于上述原因,我现在正在实施一个脚本:

  1. 保存 VM 的状态并停止它
  2. 设置 VM 的磁盘映像和状态所在的设备映射器快照
  3. 恢复虚拟机
  4. 挂载第 2 步的快照。
  5. 备份虚拟机的磁盘和状态(配置方便)
  6. 合并回快照。

如果我一切正常,这将只需要几秒钟(如果有的话,因为 1-3 是快速的,可能是亚秒)停机时间来对 VM 进行一致的备份。当然,在还原的时候,虚拟机将这样过去,但至少给我一个有序的关闭/重新启动的选项。

我在这个解决方案中遗漏了什么吗?或者确实有人已经实施了这个?

Iva*_*ldo 6

https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

这适用于以下版本:QEMU 2.1(及更高版本)、libvirt-1.2.9(及更高版本)。

$ virsh domblklist vm1
Target     Source
------------------------------------------------
vda        /export/images/base.img 

$ virsh snapshot-create-as --domain vm1 guest-state1 \
--diskspec vda,file=/export/images/overlay1.qcow2 \
--disk-only --atomic --quiesce

$ rsync -avhW --progress /export/images/base.img \
/export/images/copy.img

$ virsh blockcommit vm1 vda --active --verbose --pivot
Run Code Online (Sandbox Code Playgroud)

如果你没有 QEmu 客户代理,你可以省略 --quiesce 选项,在这种情况下,当你从备份中恢复时,它看起来像系统崩溃了,但无论如何应该是好的,因为里面的操作系统应该需要刷新数据并保持其文件系统的一致性。


dya*_*sny 3

停止 VM 不会刷新正在运行的 IO,您应该使用qemu-ga它来停顿 VM。

由于 QEMU 引入了块迁移,您可以尝试使用它将虚拟机迁移到备份映像中,从而保存内存状态和磁盘