如何转换虚拟机映像格式

介绍

当您使用远程云服务器时,您通常使用虚拟机:一个被沙箱所隔离的、在更大的服务器集群内运行的整个操作系统实例。 您也可以在您的桌面上局部使用虚拟机工作,使用QEMU或VirtualBox等软件. 虚拟机可能包含一个完整的桌面接口,或者它们可能只运行一个SSH服务器来允许终端连接. 无论哪种情况,它们技术上都相似,并作出类似的假设。 除了任何大规模云优化外,虚拟化环境的唯一显著区别是虚拟机硬盘和配置选项. 这些图像被称为_虚拟机器图像-,不同供应商的格式不同.

在本教程中,您将学习如何在虚拟机图像格式之间进行转换(包括),以便您可以根据需要将虚拟环境从桌面带到云中。

前提条件

此教程中的命令可以在Windows, macOS, 或 Linux 上运行, 只要您可以同时安装QEMU和VirtualBox及其命令行工具. 此教程使用 [Homebrew] (https://brew.sh/] 包管理器提供安装指令 。 您可以在 [macOS] (https://andsky.com/tech/tutorials/how-to-install-and-use-homebrew-on-macos), [Linux] (https://andsky.com/tech/tutorials/how-to-install-and-use-homebrew-on-linux), 或在 [WSL2] (https://andsky.com/tech/tutorials/how-to-install-the-windows-subsystem-for-linux-2-on-microsoft-windows-10) 下的Windows上安装 Homebrew.

如果你正在使用DigitalOcean滴,你应该至少有2个CPU和2GB的内存。

您还需要至少10GB的免费空间来运行本教程中的命令。

注意: 如果您使用的是 Apple Silicon CPU (于 2020 年或更高版本),则只能使用 QEMU,而不是 VirtualBox。

◎ 子

[QEMU] (https://www.qemu.org/)是最强大和被广泛支持的开源虚拟化软件. 它运行在所有主要平台上(包括Windows,macOS,Linux,以及Android等其它操作系统),并根据需要既能虚拟化又能_emulation_. 例如,如果您正在一个Windows桌面上运行一个 Linux 服务器图像(一个常用的用例),那么这两个平台都共享一个共同的基础架构(Intel/AMD_x86_),因此QEMU可以通过虚拟化实现完全性能. 如果您正在使用QEMU来混合并匹配架构,例如运行x86 Linux或Windows(作为"主机"或"客机"操作系统)与macOS或Android的_ARM_架构相匹配,QEMU将自动使用仿真来翻译架构.

与虚拟化相比,模拟通常不会在生产环境中使用,因为它增加了显著的性能处罚,然而,QEMU将虚拟化和模拟视为接近等效,提供了显著的兼容优势,因为这意味着在每个场景中可以使用相同的图像格式和相同的工具。

QEMU 是命令行软件,与 VMware 或 VirtualBox 等桌面虚拟化软件相比,具有较高的学习曲线,因为虚拟机可以配置的选项数量庞大。 它可以选择使用 GUI 前端,如 QtEmu在 Windows 或 Linux 上和 UTM在 macOS 上。

安装QEMU

要安装 QEMU,请使用 Homebrew 的简易安装:

1brew install qemu

这将提供整个QEMU工具和命令套件,包括qemu-img,用于在命令行上转换虚拟机图像。

1which qemu-img
1[secondary_label Output]
2/usr/local/bin/qemu-img

注意:您也可以使用其 原生安装程序,如果您喜欢在没有WSL2的Windows上工作,则可以在Windows上安装QEMU。

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

名称:VirtualBox

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

它不提供像QEMU那样多的命令行功能,所以它通常与专门的编排软件(如 Vagrant相结合,以自动化和复制虚拟机配置,但它确实包含了VBoxManage命令行工具,可以用来操纵一些虚拟机图像。

安装 VirtualBox

要在 macOS 上安装 VirtualBox,请使用带有–cask标志的brew install,因为 VirtualBox 作为一个完整的应用程序包分发,而 Homebrew 称之为 cask:

1brew install --cask virtualbox

要在 Ubuntu 或 Debian 衍生 Linux 发行版上安装 VirtualBox (包括在 WSL 2 中),首先使用apt update来更新您的包源,然后使用apt install:

1sudo apt update
2sudo apt install virtualbox

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

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

1which vboxmanage
1[secondary_label Output]
2​​/usr/local/bin/vboxmanage

然而,其中大多数是平台特定的(如 Hyper-V在Windows上)或旨在大规模的企业使用(如 VMware)。 他们不会被直接涵盖在本教程中,但你会在以下步骤中转换他们的图像格式。

使用QEMU创建虚拟机图像

要演示转换虚拟机图像,您可以开始使用 QEMU 创建图像,如果您已经有要转换的图像,您可以跳过此部分。

使用qemu-img create命令与-f qcow2旗帜创建QEMU的默认qcow2格式的图像:

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

即便你命名它为ubuntu-desktop-22.04.qcow2并提供一个容量为10G,此时它既不会安装Ubuntu 22.04也不会大于10GB。

1[secondary_label Output]
2Formatting '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 图像将始终在您的磁盘上占用尽可能少的空间,同时反映其在虚拟机内运行的任何软件的最大声明容量. 在这种情况下,10 GB将是虚拟机认为可用的容量,以及虚拟机图像将自动缩放的最大尺寸。

一个典型的下一步是将Ubuntu 22.04安装到虚拟机上,使用[Ubuntu 22.04 ISO (https://releases.ubuntu.com/22.04/). 然而, 您可以跳过此步骤来进行此教程, 因为您不会直接使用此虚拟机 。 ISO是另一种通常只读的磁盘图像类型,历史上被写入CD和DVD安装介质,而不是可写硬盘的图像. 其他用于操纵ISO图像的软件也存在,如[mkisofs] (https://linux.die.net/man/8/mkisofs)和[dd] (https://man7.org/linux/man-pages/man1/dd.1.html). 为了更多地了解使用QEMU安装Linux的情况,请参考QEMU文档.

将QEMU图像转换为另一个格式

一旦您创建了 VM 图像,您可以使用qemu-img 转换将其转换为其他格式。vdi是 VirtualBox 的默认图像格式。

1qemu-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:

1ls ubuntu-desktop-22.04.vdi
1[secondary_label Output]
2ubuntu-desktop-22.04.vdi

其他常见格式包括vmdk,主要由VMware使用,和vhd,主要由微软的Hyper-V使用。

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

如果您有vdi格式的图像,您可以使用 VirtualBox 提供的vboxmanage命令来转换它:

1vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
1[secondary_label Output]
20%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
3Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

请注意,这将自动将创建的图像与您的本地 VirtualBox 配置注册,如果您试图创建暂时副本,这可能是不方便的。

原始虚拟机图像根本不被压缩,所以这个命令实际上会创建一个完整的10GB文件,与以前不同。

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

您现在可以删除原始图像以恢复磁盘空间:

1rm ubuntu-desktop-22.04.img

最后,您可以使用qemu-img checkqemu-img info命令从虚拟机图像中输出一些元数据:

1qemu-img check ubuntu-desktop-22.04.qcow2
1[secondary_label Output]
2No errors were found on the image.
3Image end offset: 262144
1qemu-img info ubuntu-desktop-22.04.qcow2
 1[secondary_label Output]
 2image: ubuntu-desktop-22.04.qcow2
 3file format: qcow2
 4virtual size: 10 GiB (10737418240 bytes)
 5disk size: 196 KiB
 6cluster_size: 65536
 7Format specific information:
 8    compat: 1.1
 9    compression type: zlib
10    lazy refcounts: false
11    refcount bits: 16
12    corrupt: false
13    extended l2: false

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

您也可以将这些虚拟机图像上传到DigitalOcean作为云服务器图像,通过DigitalOcean的 自定义图像文档

结论

在本教程中,您使用QEMU和VirtualBox的命令行工具创建、转换和导出虚拟机图像. 您审查了虚拟机图像格式的一些常见示例,以及与虚拟机合作的一些有用的默认假设。

接下来,你可能想审查我们的指南为(https://www.digitalocean.com/blog/how-to-choose-the-right-droplet-vm)。

Published At
Categories with 技术
Tagged with
comments powered by Disqus