将 VM 服务器备份至外部 USB 驱动器

将 VM 服务器备份至外部 USB 驱动器

我有一台 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

我倾向于同意,尽管您的备份策略有效,但它可能不是最好的。

在我看来,虚拟机所独有的东西并不多,而且有几种可用的备份策略。

Ubuntu 服务器指南 - 备份

备份策略因您运行的服务器而异。通常,在服务器上,我会备份数据(例如 /var/www 和数据库)、我手动编辑的任何配置文件(我将原始文件和编辑的文件的副本保存在 /root 中)以及所有已安装软件包的列表(如果需要,您可以从软件包列表中恢复)。

从我的一些帖子中你可以猜到,我是 rsync 的粉丝;)

相关内容