我有一台 ubuntu 10.04 服务器,在 kvm/qemu 上运行我的虚拟机。我一直在手动暂停我的虚拟机(使用 virt-manager gui),然后将 /var/lib/libvirt 文件夹复制到 /mnt/usbexterno 的外部 USB 驱动器。这显然远非理想。我需要一个解决方案来每晚运行备份。
我考虑使用带有脚本的 cron 作业来暂停虚拟机并将文件复制到驱动器。我在论坛上看到我可以使用 virsh 将虚拟机状态保存到文件中,但我认为这不是我需要的,因为我想在服务器崩溃时对所有内容进行完整备份!
简而言之。我需要一些东西来每天将我的虚拟机备份到外部 USB 驱动器,虚拟机可以在夜间暂停。服务器上没有可用的 GUI。
有什么建议 ?
答案1
如果您的虚拟机名为“FooVM”,那么您可以使用以下命令创建快照:
VBoxManage snapshot FooVM take FooVM_Snapshot1
您可以通过命令行配置快照的存储位置:
VBoxManage configvm FooVM --snapshotfolder /media/foostick/foofolder
但请注意确保 UBS 硬盘始终可用。
您可以使用 cron 作业自动执行备份。无需关闭虚拟机。
答案2
我花了一段时间才回过神来,向所有给我提示的人表示歉意。这是我最终得到的解决方案。
由于我仍然没有真正掌握快照/恢复快照的概念(是的,我有点笨),我编写了一个脚本来删除旧文件,从以下链接开始迈克尔·K提供,然后继续在 USB 驱动器上创建一个带有今天日期的文件夹,暂停所有活动的虚拟机(这里绝对不需要 100% 的正常运行时间,公司的工作时间是上午 9 点到下午 6 点),并将所有 /var/lib/libvirt 复制到其中,然后恢复虚拟机并开心起来。
这是脚本。
#!/bin/bash
find /mnt/usbexterno/backup* -maxdepth 0 -type d -mtime +15 -exec rm -rf {} \;
virsh list | sed '1,2d' | cut -d' ' -f3>/tmp/vmlist
VMLIST=$(cat /tmp/vmlist)
set -- $VMLIST
for i in $VMLIST
do
/usr/bin/virsh suspend $1
shift
done
mkdir /mnt/usbexterno/`date +backup-%Y-%m-%d`
cp -Rv /var/lib/libvirt /mnt/usbexterno/`date +backup-%Y-%m-%d`
set -- $VMLIST
for i in $VMLIST
do
/usr/bin/virsh resume $1
shift
done
rm /tmp/vmlist
如果有人对我如何改进这一点有任何建议,请随意 :D
答案3
我会考虑在发送虚拟机之前对其进行压缩,但这正是我一直在做的事情。
哦,您可能还想考虑保存 xml 文件(/etc/libvert/qemu/
)。
答案4
我倾向于同意,尽管您的备份策略有效,但它可能不是最好的。
在我看来,虚拟机所独有的东西并不多,而且有几种可用的备份策略。
备份策略因您运行的服务器而异。通常,在服务器上,我会备份数据(例如 /var/www 和数据库)、我手动编辑的任何配置文件(我将原始文件和编辑的文件的副本保存在 /root 中)以及所有已安装软件包的列表(如果需要,您可以从软件包列表中恢复)。
从我的一些帖子中你可以猜到,我是 rsync 的粉丝;)