如何转换虚拟机镜像格式

介绍

当你在与远程云服务器一起工作时,你通常在使用一个虚拟机:一个在更大的服务器集群中运行的整个操作系统的沙箱化、隔离的实例。你也可以在本地桌面上使用像QEMU或VirtualBox这样的软件来操作虚拟机。虚拟机可以包含整个桌面界面,也可以仅运行SSH服务器以允许终端连接。无论哪种情况,它们在技术上是类似的,并且具有相似的假设。除了任何大规模的云优化外,虚拟化环境之间唯一显著的差异是虚拟机的硬盘和配置选项。这些被称为虚拟机映像,并且在不同的供应商之间格式不同。

在本教程中,你将学习如何在虚拟机镜像格式之间进行转换(包括qcow2、vdi、vhd和vmdk),这样你就可以根据需要将你的虚拟环境从桌面转移到云端,再从云端返回桌面。

先决条件

只要您可以安装 QEMU 和 VirtualBox 以及它们的命令行工具,本教程中的命令可以在 Windows、 macOS 或 Linux 上运行。本教程使用 Homebrew 包管理器提供安装说明。您可以在 macOS、Linux 或 WSL2 的 Windows 上安装 Homebrew。

如果您在Silicon Cloud droplet上运行,则至少应拥有2个CPU和2GB的内存。

在执行本教程中的命令时,您还需要至少有10GB的可用空间。

Note

注意:如果您使用的是装有苹果芯片(2020年及以后生产的)的 macOS 系统,则只能使用 QEMU 而不能使用 VirtualBox。

QEMU (快速模拟器)

QEMU是最强大且得到广泛支持的开源虚拟化软件。它可在所有主要平台上运行(包括Windows、macOS、Linux以及Android等操作系统),并具备所需的虚拟化和仿真能力。例如,如果您在Windows桌面上运行Linux服务器映像(这是一种常见的用例),这两个平台共享共同的底层架构(Intel/AMD x86),因此QEMU可以通过虚拟化实现全功效。如果您使用QEMU来混合和匹配架构,例如在x86架构的Linux或Windows上运行ARM架构的macOS或Android(无论作为“主机”或“客户机”操作系统),QEMU将自动使用仿真来翻译架构。

与虚拟化相比,模拟通常不在生产环境中使用,因为它会造成显著的性能损失。然而,QEMU将虚拟化和模拟视为近似等同,提供了重要的兼容性优势,因为这意味着相同的镜像格式和相同的工具可以在任何场景中使用。

QEMU是一款命令行软件,与VMware或VirtualBox等桌面虚拟化软件相比,由于虚拟机的配置选项很多,学习曲线很陡。它还可以选择性地与GUI前端一起使用,如Windows或Linux上的QtEmu,以及macOS上的UTM。本教程将提供使用QEMU时的命令行指令。

安装QEMU

要安装QEMU,请使用Homebrew的brew install命令。

  1. brew install qemu

 

这将提供全部的QEMU工具和命令,包括用于命令行上转换虚拟机镜像的qemu-img。通过运行 which qemu-img 命令来验证您是否可以访问 qemu-img 命令。

  1. which qemu-img

 

Output

/usr/local/bin/qemu-img

Note

注意:如果您喜欢在不使用WSL2的Windows上工作,也可以使用QEMU的本地安装程序在Windows上安装它。

QEMU在本教程中提供了大部分所需功能。您也可以安装VirtualBox,另一个流行的虚拟化软件包。

虚拟盒子

VirtualBox是由Oracle提供的开源虚拟化软件。它支持所有x86操作系统(包括2020年之前制造的Windows、Linux和macOS计算机)。它不支持仿真或非x86架构,主要用于在Windows下运行Linux,反之亦然。然而,它比QEMU更简单易用,提供广泛兼容的默认设置,并且默认包含桌面界面。

由于不具备QEMU的那么多命令行功能,因此通常会配合专用的编排软件(如Vagrant)来自动化和复制虚拟机配置。不过,它包含了VBoxManage命令行工具,可用于操作一些虚拟机映像。

安装VirtualBox

在macOS上安装VirtualBox,使用brew install加上–cask标志,因为VirtualBox以完整的应用程序包的形式分发,Homebrew称之为cask。

  1. brew install –cask virtualbox

 

在Ubuntu或Debian衍生的Linux发行版(包括WSL2)上安装VirtualBox,首先使用apt update来刷新软件包源,然后使用apt install进行安装。

  1. sudo apt update
  2. sudo apt install virtualbox

 

要在没有WSL2的Windows上安装VirtualBox,请参考其下载页面。

安装VirtualBox后,通过运行which vboxmanage来验证您是否可以访问vboxmanage命令。

  1. which vboxmanage

 

Output

​​/usr/local/bin/vboxmanage

有一些可用于虚拟化的 QEMU 和 VirtualBox 的替代方案。但是,大多数这些方案是针对特定平台的(例如Windows上的Hyper-V)或者设计用于大规模企业使用(例如VMware)。本教程不会直接涉及这些方案,但您可以在接下来的步骤中转换它们的映像格式。

使用QEMU创建虚拟机镜像

为了展示转换虚拟机映像,您可以从创建一个使用QEMU的镜像开始。如果您已经有一个要转换的映像,您可以跳过本节。

使用qemu-img create命令,并带有-f qcow2参数,以QEMU默认的qcow2格式创建一个镜像。

  1. qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G

 

在这一点上,您将创建一个空的虚拟机镜像。尽管您将其命名为ubuntu-desktop-22.04.qcow2并设置容量为10G,但在这一点上,它既没有安装Ubuntu 22.04,也不具备10GB的大小。

Output

Formatting ‘ubuntu-desktop-22.04.qcow2’, fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

QEMU镜像在磁盘上占用的空间始终尽可能少,同时对虚拟机内运行的任何软件反映出其最大声明容量。在这种情况下,10GB将是虚拟机认为它可用的容量,也是虚拟机镜像会自动扩展到的最大大小。

一个典型的下一步是使用Ubuntu 22.04 ISO将Ubuntu 22.04安装到虚拟机上。然而,在这个教程中,您可以跳过这一步骤,因为您实际上不会直接使用这台虚拟机进行工作。ISO是另一种类型的磁盘映像,通常是只读的,以前通常被写入CD和DVD安装介质,而不是可写硬盘的镜像。还有其他软件可用于处理ISO映像,例如mkisofs和dd。要了解有关使用QEMU安装Linux的更多信息,请参阅QEMU文档。

将一个QEMU映像转换为另一种格式。

一旦您创建了虚拟机映像,您可以使用qemu-img convert命令将其转换为其他格式。vdi是VirtualBox的默认映像格式。默认情况下,这不会删除原始虚拟机映像,而只会创建一个新的映像。

  1. qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi

 

使用-f标志可以指定输入格式和输入文件名。使用-O标志可以指定输出格式和输出文件名。您还可以加上-p标志显示进度条,在转换非常大的图像时很有帮助。由于上一步创建的图像尚无内容,因此图像将立即转换。您可以使用ls确认您已经创建了ubuntu-desktop-22.04.vdi。

  1. ls ubuntu-desktop-22.04.vdi

 

Output

ubuntu-desktop-22.04.vdi

其他常见的格式包括vmdk,主要由VMware使用,以及vhd,主要由Microsoft的Hyper-V使用。如果您的软件需要,您还可以创建“原始”镜像,按照下一步骤进行操作。

将其他虚拟机格式转换为QEMU

如果你有一个以vdi格式存储的镜像,你可以使用VirtualBox提供的vboxmanage命令来进行转换。

  1. vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img –format raw

 

Output

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100% Clone medium created in format ‘raw’. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

请注意,这将自动将所创建的镜像与您本地的VirtualBox配置进行注册,这可能会对您尝试创建临时副本造成不便。如果您无意中注册了重复的条目,则您可能需要手动从VirtualBox界面中删除任何新条目。

原始的虚拟机映像并未经过任何压缩,因此此命令将创建一个完整的10GB文件,而不像之前那样。您可以通过将上一步骤的语法颠倒来将其转换回qcow2格式,以供QEMU使用。

  1. qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2

 

现在你可以删除原始图像来释放磁盘空间。

  1. rm ubuntu-desktop-22.04.img

 

最后,您可以使用 qemu-img check 和 qemu-img info 命令来输出虚拟机镜像的一些元数据。

  1. qemu-img check ubuntu-desktop-22.04.qcow2

 

Output

No errors were found on the image. Image end offset: 262144

  1. qemu-img info ubuntu-desktop-22.04.qcow2

 

Output

image: ubuntu-desktop-22.04.qcow2 file format: qcow2 virtual size: 10 GiB (10737418240 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false

有关使用qemu-img转换图像的更多信息,请参阅qemu-img手册页面或其官方文档。

Note

注意:您还可以按照Silicon Cloud的自定义镜像文档的说明,将这些虚拟机镜像上传到Silicon Cloud并用作云服务器镜像。

结论

在本教程中,您使用了QEMU和VirtualBox的命令行工具来创建、转换和导出虚拟机镜像。您还回顾了一些常见的虚拟机镜像格式示例,以及一些在使用虚拟机时有用的默认假设。了解常见概念如虚拟化背后的技术总是很有帮助的,特别是如果您需要迁移架构或云服务提供商。

接下来,您可能想要查阅我们关于根据您的需求扩展虚拟机的指南。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds