备份正在运行的KVM qcow2 VPS


9

我想要一种健壮的方法来在运行时备份qcow2文件的KVM VPS。搜索很长时间后,我发现我们可以使用rsync进行实时备份。我对rsync使用了以下命令:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

它工作正常。但是,如果由于写入和删除操作(例如,安装新软件或更新)而更改VPS时进行备份,恐怕它可能会损坏备份qcow2映像。

因此,从实时VPS快照进行备份似乎是更有趣的选择。

我使用以下命令来备份正在运行的VPS:

1.创建快照:

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的正确方法。我在这里这里找到关于qemu-img命令的不错的文档。但是他们没有提及有关在原始图像中转换实时VPS快照的任何内容。

哪种方法更适合实时VPS备份?在原始图像中转换快照是否安全?

如果我能获得有关快照和基本文件在特定条件下的行为的详细文档,这将非常有帮助。

也许我们也可以将基本的qcow2映像转换为原始备份文件,而不是转换快照。因此命令流将为:
1.创建快照
2.将基本qcow2转换为备份原始映像
3.将快照更改提交到基本映像
4.删除快照

我尝试了一下,在5GB的小型VPS上效果很好。但是,当VPS很大时,是否有可能发生错误或VPS损坏?

提前致谢...


2
这就是我喜欢让虚拟机驻留在逻辑卷上的原因之一。它们具有固有的快照支持。
Halfgaar 2015年

Answers:


12

您唯一缺少的是在拍摄快照之前使来宾文件系统停顿,以确保其一致性。virsh domfsfreeze如果您使用的是libvirtd ,则可以这样做。

例如,操作顺序为:

# 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中安装并运行。取决于分发和安装选择,情况可能会或可能不会。

qemu-guest-agent也是可扩展的; 您可以向其中添加脚本以支持特定的软件。例如,它包含一个示例脚本,可将MySQL置于一致状态。


缺少此答案的唯一一件事是备份后删除了快照:)
dyasny

2
@ BoscoD'mello除非您的硬盘驱动器非常坏,否则它应该不到一秒钟的时间。不用担心。
迈克尔·汉普顿

1
las,快照对我不起作用。尝试执行时 virsh domfsfreeze $VM_NAME,我的访客文件系统获得了拒绝的权限。我的客户文件系统已加密,不确定是否重要。
一位编码员,

2
@ Edward_178118这取决于您的工作负载是否可以暂停一秒钟。
迈克尔·汉普顿

2
@ Edward_178118极低延迟的网络操作,也许吗?我从来没有遇到任何问题。
迈克尔·汉普顿

1

还有另一种方法,涉及在备份期间创建临时快照,然后将其提交回来。

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

有关更多信息,请参见:https : //wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit


1
如果以后再次需要备份的磁盘(来自运行中的vm),如何还原?您是否也不需要RAM内容进行恢复?
阿德里安·扎格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.