QEMU


QEMU

QEMU简介,QEMU是运行在用户层的开源全虚拟化解决方案,可以在Intel x86机器上虚拟出完整的操作系统,其性质与VMware player类似,由于QEMU工作在用户层,所以很多硬件的特权指令、内核操作无法实现,所以在性能上表现比较差,一般都会配合使用KVM作为底层接口来完成虚拟化。

​ QEMU主要提供两种功能给用户使用:一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码;二是作为虚拟机监管器,能模拟整个计算机系统,包括中央处理器及其他周边设备,它使得为跨平台编写的程序进行测试及除错工作变得容易。

​ QEMU在模拟全系统时,能够利用其他VMM来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。

​ 用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。如在Debian系列的发行版上可以使用下面的命令来安装:

sudo apt-get install  qemu-system-x86

QEMU的主要特点

①默认支持多种架构。可以模拟x86个人计算机、AMD64个人计算机、MIPSR4000与PowerPC等硬件架构。

②可扩展,可自定义新的指令集。

③开源,可移植,仿真速度快。

④在支持硬件虚拟化的x86构架上,可以使用KVM加速配合内核KSM大页面备份内存,速度稳定远超过VMware ESX。

⑤增加了模拟速度,某些程序甚至可以实时运行。

⑥可以在其他平台上运行Linux的程序。

⑦可以储存及还原运行状态(如运行中的程序)。

⑧可以虚拟网络卡。 ​

Qemu 架构

Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。

正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰。

img

从本质上看,虚拟出的每个虚拟机对应 host 上的一个 Qemu 进程,而虚拟机的执行线程(如 CPU 线程、I/O 线程等)对应 Qemu 进程的一个线程。

创建虚拟机

  • 使用qemu-img创建虚拟机镜像

虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。

qemu-img create -f qcow2 test-vm-1.qcow2 10G

-f 选项用于指定镜像的格式,qcow2 格式是 Qemu 最常用的镜像格式,采用来写时复制技术来优化性能。test-vm-1.qcow2 是镜像文件的名字,10G是镜像文件大小。镜像文件创建完成后,可使用 qemu-system-x86 来启动x86 架构的虚拟机.

  • 使用 qemu-system-x86 来启动 x86 架构的虚拟机
qemu-system-x86_64 test-vm-1.qcow2

因为 test-vm-1.qcow2 中并未给虚拟机安装操作系统,所以会提示 “No bootable device”,无可启动设备。

  • 启动 VM 安装操作系统镜像
qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2 -cdrom ./Centos-Desktop-x86_64-20-1.iso

-m 指定虚拟机内存大小,默认单位是 MB, -enable-kvm 使用 KVM 进行加速,-cdrom 添加 fedora 的安装镜像。可在弹出的窗口中操作虚拟机,安装操作系统,安装完成后重起虚拟机便会从硬盘 ( test-vm-1.qcow2 ) 启动。之后再启动虚拟机只需要执行:

qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2

qemu-img 支持非常多种的文件格式,可以通过 qemu-img -h 查看. 其中 raw 和 qcow2 是比较常用的两种,raw 是 qemu-img 命令默认的,qcow2 是 qemu 目前推荐的镜像格式,是功能最多的格式。

使用Qemu运行自制软盘镜像

qemu-system-x86_64 -fda ~/VM/myOS/demo1/mydisk.img

image-20231209155422677