VirtualBox:使用LVM快照创建运行虚拟机的备份和克隆(无停机)

VirtualBox:使用LVM快照创建运行虚拟机的备份和克隆(无停机) 如果您为VirtualBox使用LVM卷...

VirtualBox:使用LVM快照创建运行虚拟机的备份和克隆(无停机)

如果您为VirtualBox VM使用LVM卷(如在VirtualBox VM中使用RAW设备的教程中所示),您可以创建正在运行的VM的备份和克隆,而不关闭它。 本教程仅显示:使用LVM快照创建运行VirtualBox VM的备份和克隆,而不会停机。

我不会保证这将为您工作!

1初步说明

因为我在无头服务器上安装了VirtualBox,所以我在这里使用phpvirtualbox作为VirtualBox GUI。 如果您使用原始的VirtualBox GUI,这是非常好的。

我运行的虚拟机(其中我要备份)被命名为vm10 ,它位于LVM卷/ dev / vg0 / vm10上

确保您以root身份登录(输入

sudo su

成为root),因为我们必须以root用户身份运行本教程中的所有步骤。

2使用LVM快照创建运行的虚拟机的备份

要创建运行的虚拟机vm10的备份,我首先创建名为vm10_snap/ dev / vg0 / vm10的LVM快照。 快照可以小于原始卷 - 512MB可能就够了,但是我在这里使用的大小为5GB:

lvcreate -L5G -s -n vm10_snap /dev/vg0/vm10

接下来,我使用dd从快照中读取内容并将其管道到gzip,以在目录/备份中创建一个gzip压缩的备份映像(当然可以使用任何其他目录):

dd if=/dev/vg0/vm10_snap bs=64k | gzip -c > /backup/vm10.img.gz

就是这样 - 你的vm10的备份现在位于/backup/vm10.img.gz

现在删除LVM快照:

lvremove -f /dev/vg0/vm10_snap

3从备份恢复备份/克隆

恢复和克隆本质上是一样的,所以我将展示如何从刚刚创建的备份中创建一个名为vm11的克隆。

首先创建与原始LVM卷相同大小的LVM卷(在本例中为20GB):

lvcreate -L20G -n vm11 vg0

vm10的备份还原到新的逻辑卷/ dev / vg0 / vm11

gunzip -c /backup/vm10.img.gz | dd of=/dev/vg0/vm11 bs=64k

接下来为/ dev / vg0 / vm11 (例如vm11.vmdk )创建一个.vmdk文件,以便我们可以在VirtualBox中使用它。 最好在运行VirtualBox的用户的主目录中创建它(例如,如果您使用phpvirtualbox,则为/ home / vbox ) - 该文件也必须由该用户拥有:

cd /home/vbox
VBoxManage internalcommands createrawvmdk -filename vm11.vmdk -rawdisk /dev/vg0/vm11
chown vbox:vbox vm11.vmdk

接下来去你的VirtualBox GUI(原来的VirtulBox GUI或phpvirtualbox),然后点击New

单击创建新虚拟机向导中的下一步>>

指定新VM的名称,并选择与原始VM使用的操作系统和版本相同的操作系统和版本:

指定克隆的内存:

虚拟硬盘屏幕上,选择使用现有硬盘 ,然后单击选择虚拟硬盘文件图标:

选择vm11.vmdk文件,然后单击确定

点击下一步>>

点击创建

在我们启动克隆之前,您可能需要调整某些设置,例如,如果原始VM使用桥接,则可能需要为网络配置中的克隆选择桥接:

现在点击开始启动克隆:

在引导过程中,您可能会注意到网络配置挂起:

这是因为VirtualBox为接口eth0分配了不同的MAC地址,但克隆的/etc/udev/rules.d/70-persistent-net.rules文件仍然使用原始的MAC地址。 启动完成后,登录到克隆并运行...

ifconfig

...你会看到eth0缺少(因为MAC地址问题),这意味着克隆不能使用网络:

要解决此问题,请在克隆中打开/etc/udev/rules.d/70-persistent-net.rules ...

vi /etc/udev/rules.d/70-persistent-net.rules

...并注释掉eth0 (以及在启动期间添加的eth1行,因为eth0的MAC地址错误)行。 这样可以确保在下一次引导过程中,系统会添加一个新的具有正确MAC地址的eth0行。

现在重新启动克隆。 重新启动后,它的网络应该工作,你应该在输出中看到eth0

ifconfig

恭喜,您已成功克隆VM而不关闭原始VM。