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

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

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

内容

  1. 在 Linux 中将 Virtualbox VM 迁移到 KVM VM
    1. 1.vdi图像格式转qcow2图像格式
    2. 2.先将vdi转成raw图像格式再转qcow2图像格式
    3. 3.从Qcow2镜像创建KVM虚拟机
      1. 故障排除
  2. 结论

在 Linux 中将 Virtualbox VM 迁移到 KVM VM

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

出于本指南的目的,我将使用 CentOSFreeBSD 托管在的虚拟机 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 虚拟机磁盘映像的文件类型是 .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图像格式

首先,使用以下命令找到可用的 virtualbox 磁盘映像及其位置的列表:

$ 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 VM。

现在我将使用 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 VM 迁移到 KVM VM将 virtualbox VM 迁移到 KVM VM

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

检查 Qcow2 图像的大小:

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

看? Qcow2 比 RAW 图像小得多。

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

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

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

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

故障排除

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

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

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

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

结论

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

将 Virtualbox VM 转换为 KVM VMHypervisor 基于内核的虚拟机 KVMKVM 迁移Linux将 Virtualbox VM 迁移到 KVM VMVirtualBoxVirtualization