如何在 Linux 中将 Virtualbox VM 迁移到 KVM VM

您是否决定从 Oracle 切换 VirtualBox 到基于内核的虚拟机? 伟大的! 本分步指南介绍了如何在 Linux 中将 Virtualbox VM 迁移到 KVM VM。

您可能正在运行一些重要的客户机 VirtualBox. 无需创建具有相同配置的新 KVM 来宾,您可以轻松地将现有的 Virtualbox 机器转换为 KVM,如此处所述。

在 Linux 中将 Virtualbox 虚拟机迁移到 KVM 虚拟机

首先,关闭所有正在运行的虚拟机 VirtualBox.

出于本指南的目的,我将使用 中央操作系统自由BSD 托管的虚拟机 VirtualBox.

您可能已经知道,KVM 虚拟机的默认磁盘映像格式是 .qcow2 和 Virtualbox VM 是 .vdi.

我们可以通过两种方式将 vdi 磁盘映像文件转换为 qcow2。 我们可以直接转换 vdi 图像到 qcow2 格式。

如果由于任何原因它不起作用,我们可以先转换 vdi 格式为原始格式,然后将原始格式转换为 qcow2.

1.将vdi图像格式转换为qcow2图像格式

让我向您展示使用创建的 CentOS VM 的磁盘映像类型 VirtualBox.

$ ls CentOS 8 Server/

样本输出:

CentOS 8 Server.vbox CentOS 8 Server.vbox-prev CentOS 8 Server.vdi Logs

您可能已经注意到,CentOS VM 磁盘映像的文件类型是 .vdi. 对于那些想知道的人,VDI 是 VirtualBox. VirtualBox 当我们创建一个新的虚拟机时,默认使用这种格式。

这是 FreeBSD 磁盘映像的文件类型:

$ ls FreeBSD 12/
FreeBSD-12.0-RELEASE-amd64.vhd freebsd12.qcow2 FreeBSD 12.vbox FreeBSD 12.vbox-prev Logs

这里,freebsd 磁盘镜像文件类型为 .vhd. VHD 是 Microsoft Virtual PC 的本机格式。

我创建了两个虚拟机 VirtualBox. 但是使用了Virtualbox .vdi CentOS 的格式和 .vhd FreeBSD 的格式。

VDI 和 VHD 格式都得到了很好的支持 VirtualBox.并且这两种图像类型都可以轻松转换为 qcow2 格式。

现在让我们回到主题 – 如何使用以下方法将 Virtualbox 机器磁盘映像转换为 KVM 支持的磁盘映像类型 "qemu-img" 命令?

好吧,这很容易! 这 qemu-img 命令用于将虚拟机磁盘映像转换为各种不同的格式,包括 qcow2, raw, vdi, vhd, 和 vmdk.

转换一个 vdi 图像到 qcow2 图像使用 qemu-img 命令,运行:

$ qemu-img convert CentOS 8 Server/CentOS 8 Server.vdi -O qcow2 centos8.qcow2

上面的命令将转换给定的 vdi 文件到 qcow2 格式。

在这里,我们使用 -O qcow2 明确指定输出格式。 当然,您不必显式指定输出格式,只需指定输入和输出格式,如下所示:

$ qemu-img convert CentOS 8 Server/CentOS 8 Server.vdi centos8.qcow2

但是,它将创建更大尺寸的图像。

同样,您可以将 vhd 图像文件到 qcow2 使用以下命令创建图像:

$ qemu-img convert FreeBSD 12/FreeBSD-12.0-RELEASE-amd64.vhd -O qcow2 freebsd12.qcow2
在Linux中将vdi图像格式转换为qcow2图像格式

这就是我们将 Virtualbox 虚拟机迁移到 KVM 虚拟机的方式。

现在前往 “从 Qcow2 镜像创建 KVM 虚拟机 下面给出的部分了解如何使用 Qcow2 映像创建新的 KVM 虚拟机。

万一上述方法不起作用(这种可能性很小),您可以使用以下方法进行转换 vdi 图像到 qcow2 图片。

2.将vdi转为raw图像格式再转为qcow2图像格式

首先,使用命令查找可用虚拟机磁盘映像的列表及其位置:

$ vboxmanage list hdds

或者,

$ VBoxManage list hdds

样本输出:

UUID:           ecfb6d5c-aa10-4ffc-b40c-b871f0404da8
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/sk/VirtualBox VMs/CentOS 8 Server/CentOS 8 Server.vdi
Storage format: VDI
Capacity:       20480 MBytes
Encryption:     disabled

UUID:           34a5709f-188c-4040-98f9-6093628c3d88
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/sk/VirtualBox VMs/Ubuntu 20.04 Server/Ubuntu 20.04 Server.vdi
Storage format: VDI
Capacity:       20480 MBytes
Encryption:     disabled
列出 Linux 中的 virtualbox 磁盘映像详细信息

如您所见,我有两个 virtualbox 虚拟机。

现在我将使用 CentOS 8 机器的磁盘映像转换为原始磁盘格式 vboxmanage 命令:

$ vboxmanage clonehd --format RAW /home/sk/VirtualBox VMs/CentOS 8 Server/CentOS 8 Server.vdi CentOS_8_Server.img

或者,

$ VBoxManage clonehd --format RAW /home/sk/VirtualBox VMs/CentOS 8 Server/CentOS 8 Server.vdi CentOS_8_Server.img

样本输出:

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'RAW'. UUID: afff3db8-b460-4f68-9c02-0f5d0d766c8e

RAW图像是 太大 使用。 就我而言,RAW 图像比 Qcow2 图像大十倍。

$ du -h CentOS_8_Server.img 
21G CentOS_8_Server.img

因此,让我们使用 qemu-img 命令将 RAW 图像格式转换为 KVM 磁盘格式,即压缩的 qcow2:

$ qemu-img convert -f raw CentOS_8_Server.img -O qcow2 CentOS_8_Server.qcow2
将 virtualbox 虚拟机迁移到 KVM 虚拟机将 virtualbox 虚拟机迁移到 KVM 虚拟机

完毕! 我们已经将 Virtualbox 磁盘镜像格式 VDI 转换为 KVM 镜像格式 qcow2。

检查 Qcow2 图像的大小:

$ du -h CentOS_8_Server.qcow2 
2.1G CentOS_8_Server.qcow2

看? Qcow2 比 RAW 图像小得多。

3.从Qcow2镜像创建KVM虚拟机

您现在可以通过从命令行导入虚拟磁盘映像文件或使用任何图形 KVM 管理应用程序(如 虚拟管理器 或者 座舱 网络控制台。

有关详细信息,请参阅以下指南:

  • 如何使用 Qcow2 镜像创建 KVM 虚拟机

故障排除

有时您可能在没有从 Virtualbox 媒体管理器中正确释放它的情况下删除了虚拟磁盘。

当您尝试从同一个 VDI 文件创建新的 RAM 映像时,您将收到类似的错误 – "hard disk with UUID already exists".

要解决此问题,您必须从 Virtualbox 中释放虚拟磁盘并再次尝试转换映像。 请参阅以下指南以了解如何执行此操作:

  • 修复“UUID 硬盘已存在”问题 VirtualBox

结论

在本指南中,我们了解了如何在 Linux 中将 Virtualbox VM 迁移到 KVM VM。 我们还研究了如何通过导入 Qcow2 映像文件来创建新的 KVM 实例。