我在 Virtualbox 上运行了多台虚拟机。我想备份这些虚拟机并将其存储在源代码控制中,以备灾难恢复之用。据我所知,就灾难恢复而言,这些虚拟机的快照无法解决问题。
这些备份将定期进行,我将使用 Jenkins 自动化服务器自动执行这些备份。我一直在使用来自TechRepublic的一篇文章作为从命令行操作 VirtualBox 以及导出虚拟设备的资源。
我对 Jenkins 作业执行的过程的想法如下(所有操作均从命令行执行):
- 关闭要备份的特定虚拟机(并保持 virtualbox 运行)。
运行 VirtualBox 导出命令:
vboxmanage export UBUNTUSERVER164 -o ubuntu_server_new.ova
运行命令来重新启动虚拟机。
- CD 进入存储 VirtualBox 虚拟设备的目录。
- 将新创建的虚拟设备(.ova 格式)复制到本地备份目录。
- 将复制的.ova 文件压缩(tar)到本地备份目录中。
- 删除本地备份目录中 .ova 文件的未压缩副本。
- Git 提交压缩的虚拟设备,然后 Git 推送到 BitBucket。
我对使用此方法存在一些疑问:
- VirtualBox 的虚拟设备默认存储在哪里?
- 在备份之前关闭虚拟机的 shell 命令是什么样的?
- 备份后启动虚拟机的 shell 命令是什么样的?
答案1
这是完成您的任务的一个简单方法:
通过客户机中运行的 SSH 会话关闭客户机
ssh -t user@virtualmachine sudo poweroff
VBoxManage controlvm [nameofmachine] poweroff
不建议关闭虚拟机,因为这可能会导致数据丢失。
将虚拟机导出为 OVA 格式
VBoxManage export [nameofmachine] -o /path/[name].ova
- OVA 格式将使用压缩的 VMDK 格式作为 VDI。可能不需要进一步压缩。
- 导出需要几杯咖啡的时间。
将生成的(巨大的)OVA 文件复制到需要备份的任何位置。
导入备份
VBoxManage import [filename.ova] [--dry-run] [--vsys 0 --vmname <name>]
- 进行试运行以显示您可能需要的选项。如果您仍保留原始名称,请小心为其赋予另一个名称。
运行导入的虚拟机
virtualbox --startvm [name]