QEMU虚拟机相关概念介绍

前言:本文围绕QEMU,介绍虚拟机相关进阶知识。为更好地理解本文,读者最好能够了解虚拟机的基本概念。

1. 虚拟机层次结构示意图

图1.1 虚拟机层次结构

2. Hypervisor

Hypervisor介于虚拟机和宿主机操作系统之间,负责对宿主机资源(为方便表述,本文均以硬件资源为例,但实际上被虚拟化的不只有硬件资源)进行虚拟化,并将虚拟化后的硬件资源提供给虚拟机。Hypervisor分为两类:

Type-1 Hypervisor:位于操作系统内核空间,具备对宿主机硬件资源的直接访问权限。代表:Microsoft Hyper-V、Linux KVM、VMWare ESXi。

Type-2 Hypervisor:位于用户空间,需要通过操作系统内核才能访问硬件。代表:QEMU、Oracle VirtualBox。

注意:

1. QEMU是Hypervisor,而不是Guest。

2. 一个Hypervisor之上可以运行多个Guest。

3. 在Linux中,如果采用KVM作为Hypervisor,那么每个Guest本质上就是Linux用户空间的一个进程。

3. QEMU的工作模式

图3.1 QEMU的层次与工作模式

如上图所示,QEMU有两种工作模式:

3.1 QEMU本身作为Hypervisor。QEMU与Linux内核交互,从而获取虚拟化后的硬件。这就是前文所述的Type-2 Hypervisor。

交互层次:VM - QEMU - Linux Kernel - Driver - Hardware

3.2 QEMU作为虚拟机与Linux KVM交互的中间层,仅负责传递交互信息,而不发挥Hypervisor的实际功能。真正发挥Hypervisor功能的是Linux KVM。

交互层次:VM - QEMU - Linux KVM - KVM Virtual Driver - Hardware

第二种工作模式能够直接利用KVM,因而效率更高。而第一种工作模式多用于不需要和硬件直接交互的场合,例如在虚拟机中启动虚拟机。

4. libvirtdlibvirtvirt-manager的概念及与QEMU的关系

libvirtd是Linux中的一个守护进程,其使用的是libvirt库。

libvirt与QEMU的关系,类似于Kubernetes与Docker的关系:QEMU负责实际管理一台宿主机上的所有虚拟机;而libvirtd适用于一台宿主机上启用多台虚拟机的场景,它提供了一系列在虚拟机之间进行资源调度的接口,这些接口底层仍然是以QEMU命令来实现的。

virt-manager是libvirt的图形化界面。在virt-manager上的所有操作,都会被映射为libvirt命令;libvirt命令又会被映射为QEMU命令;如果QEMU处于第3节所述的第二种工作模式,那么QEMU命令又会再次被映射为KVM命令。

从图1.1虚拟机分层的视角来看,virt-manager、libvirt、QEMU与KVM都属于Hypervisor层次。结合图3.1可知,前三者都处于用户空间,只有KVM处于内核空间。

5. 磁盘镜像

虚拟机所有计算资源(包括CPU和内存)都是由Hypervisor提供的。但是,Hypervisor无法直接提供虚拟机的存储资源。最常见的提供虚拟机存储资源的方式,是磁盘镜像。

磁盘镜像是一系列可以模拟各种存储设备的文件的总称。最常见的磁盘镜像文件就是.iso文件,它模拟的是一个光驱。当然,不同的磁盘镜像文件还可以模拟硬盘、软盘、磁带、USB设备等各种常见设备类型的驱动。

磁盘镜像本质上是一种虚拟设备,因此它需要专门的驱动程序来解析(换言之,不能直接使用真实存储设备的驱动,来解析磁盘镜像)。在Linux中,回环设备(loop device)能够解析磁盘镜像。Linux对磁盘镜像解析成功后,将会挂载一个虚拟块设备,在这个虚拟块设备上进行的所有操作,与真实设备上完全相同。

磁盘镜像可直接被KVM解析,从而作为虚拟机的磁盘设备。因此,如果是以KVM作为Hypervisor,那么解析磁盘镜像时,并不要求虚拟机中存在回环设备,因为KVM能够直接解析磁盘镜像。

QEMU中常用的磁盘镜像格式是raw和qcow2。

### qemu-img 工具功能与使用教程 #### 1. qemu-img 的基本概念 `qemu-img` 是 QEMU 虚拟机仿真器的一个重要组件,主要用于创建、转换和管理磁盘镜像文件。它可以支持多种虚拟机磁盘格式之间的相互转换,并提供丰富的操作选项来查看、调整和优化这些镜像文件[^1]。 --- #### 2. 查看帮助文档 通过 `-h` 或者 `--help` 参数可以获取关于 `qemu-img` 命令的详细说明及其子命令列表。运行以下命令即可显示完整的帮助信息: ```bash $ qemu-img --help ``` 这会列出所有可用的操作以及它们的具体语法结构[^2]。 --- #### 3. 主要功能概述 以下是 `qemu-img` 提供的一些核心功能: - **创建新镜像** 使用该工具能够快速建立指定大小的新磁像文件并初始化其内部数据结构。 - **查询现有镜像的信息** 对于已经存在的某个特定类型的磁盘映射对象, 我们能利用 info 子指令提取出它的具体参数配置详情 (例如实际占用空间量级等). - **格式间互相转变** 支持不同存储介质标准间的无缝切换过程(比如从 raw 到 qcow2), 同时保留源副本中的全部元资料不变. - **重设尺寸规格** 当前容量不足以容纳新增加的数据项时可动态扩展目标容器边界直至满足需求为止. - **快照管理** 创建增量备份或者恢复先前保存的状态点等功能都可通过相应的方法实现. --- #### 4. 安装方法 如果尚未部署好本程序的话,请按照如下指引完成前期准备工作: 对于 Windows 用户来说可以直接前往官方仓库页面下载预编译好的二进制包链接地址为 [这里](https://gitcode.com/open-source-toolkit/45017)[^3], 解压之后把路径加入到系统的 PATH 环境变量当中去或者是手动复制粘贴至 C:\Windows\System32 文件夹下面以便全局调用方便快捷些; Linux 平台则通常随主流发行版自带 yum/apt-get install 方式搞定一切依赖关系问题解决起来相对简单许多[^4]. --- #### 5. 实际案例演示 假设现在有一个名为 example.raw 的原始位图形式待处理素材想要将其转化为更高效的 QCOW2 版本同时设置初始分配额度为 8GB 大小单位采用 GiB 表述方式那么对应的执行语句应该是这样的样子: ```bash $ qemu-img convert -f raw -O qcow2 /path/to/example.raw /destination/path/new_example.qcow2 -o preallocation=metadata,size=8G ``` 另外假如我们需要检查刚才生成出来的成果物属性状况又该如何做呢? 很简单只需输入一行简单的命令行代码片段即刻得到反馈结果啦! ```bash $ qemu-img info new_example.qcow2 ``` 上述例子展示了如何运用 qemu-img 来达成日常运维工作中常见任务场景下的解决方案思路分享给大家参考学习之用. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值