介绍
当您使用远程云服务器时,您通常使用虚拟机:一个被沙箱所隔离的、在更大的服务器集群内运行的整个操作系统实例。 您也可以在您的桌面上局部使用虚拟机工作,使用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 check
和qemu-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)。