我想要一个强大的方法,在运行时,对qcow2文件的KVM VPS进行备份。 经过长时间的search,我发现我们可以使用rsync进行实时备份。 我使用以下命令进行rsync:
rsync -avh /vms/base.qcow2 /backup/backup.qcow2
它工作正常。 但是,如果在由于写入和删除操作(如安装新软件或更新)而更改VPS时进行备份,恐怕可能会损坏备份qcow2映像。
因此,从现场VPS的快照备份似乎更有趣的select。
我使用以下命令来进行运行VPS的备份:
1.创build快照:
qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2
2.以原始图像格式(.img)转换快照:
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img
恢复VPS:
3.在qcow2图像中转换原始图像:
qemu-img convert -O qcow2 /backup/backup.img base.qcow2
然后我们可以通过virsh create base.xml命令启动VPS。
即使这个方法也能正常工作,但我仍然不确定这是否是正确运行VPS的备份方法。 我在这里和这里find了很好的关于qemu-img命令的文档。 但是他们没有提到在原始图像中转换实况VPS的快照。
哪种方法更适合直播VPS备份? 转换原始图像中的快照是否安全?
如果我能得到很好的详细文档,了解快照和基本文件在某些情况下的行为,这将是非常有用的。
也许我们也可以将base qcow2映像转换成原始备份文件,而不是转换快照。 所以命令stream将是:
1.创build快照
2.将base qcow2转换为备份原始图像
3.将快照更改提交到基本映像
4.删除快照
我试过这个,在5GB的小VPS上工作的很好。 但是当VPS规模巨大时,是否有可能出现错误或VPS损坏?
提前致谢…
您唯一缺less的是在拍摄快照之前暂停来宾文件系统,以确保它是一致的。 如果你正在使用libvirtd,这可以用virsh domfsfreeze来完成。
例如,操作的顺序是:
# Freeze guest filesystems virsh domfsfreeze $VM_NAME # Create snapshot qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2 # Thaw guest filesystems virsh domfsthaw $VM_NAME # Take backup from snapshot qemu-img convert -O raw snapshot.qcow2 /backup/backup.img
注意,这需要qemu-guest-agent在VM中安装并运行。 根据分配和安装的select,这可能会也可能不会。
qemu-guest-agent也是可扩展的, 您可以添加脚本来支持特定的软件。 例如,它包含一个示例脚本,以使MySQL处于一致的状态。