Blog icon indicating copy to clipboard operation
Blog copied to clipboard

QEMU创建虚拟机

Open jason--liu opened this issue 5 years ago • 0 comments

QEMU简介

QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。

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

sudo apt-get install qemu

基本原理

QEMU作为系统模拟器时,会模拟出一台能够独立运行操作系统的虚拟机。如下图所示,每个虚拟机对应主机(Host)中的一个QEMU进程,而虚拟机的vCPU对应QEMU进程的一个线程。 image 系统虚拟化最主要是虚拟出CPU、内存及I/O设备。虚拟出的CPU称之为vCPU,QEMU为了提升效率,借用KVM、XEN等虚拟化技术,直接利用硬件对虚拟化的支持,在主机上安全地运行虚拟机代码(需要硬件支持)。

QEMU发起ioctrl来调用KVM接口,KVM则利用硬件扩展直接将虚拟机代码运行于主机之上,一旦vCPU需要操作设备寄存器,vCPU将会停止并退回到QEMU,QEMU去模拟出操作结果。 虚拟机内存会被映射到QEMU的进程地址空间,在启动时分配。在虚拟机看来,QEMU所分配的主机上的虚拟地址空间为虚拟机的物理地址空间。

QEMU在主机用户态模拟虚拟机的硬件设备,vCPU对硬件的操作结果会在用户态进行模拟,如虚拟机需要将数据写入硬盘,实际结果是将数据写入到了主机中的一个镜像文件中。

创建及使用虚拟机

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

qemu-img create -f qcow2 ubuntu1804.img 10G

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

qemu-system-x86_64 ubuntu1804.img

此事会弹出一个窗口,显示如下 image 因为ubuntu1804.img镜像中还没有安装任何操作系统,所以会提示“no bootable device”。 2、准备操作系统 这里以从Ubuntu官网下载ubuntu18.04LTS作为测试系统。 3、检测kvm是否可用 QEMU使用KVM来提升虚拟机性能,如果不启用KVM会导致性能损失。要使用KVM,首先要检查硬件是否有虚拟化支持:

grep -E 'vmx|svm' /proc/cpuinfo

如果有输出则代表硬件支持虚拟化。其次要检查kvm模块是否已经加载:

lsmod | grep kvm

4、在虚拟机中安装操作系统 执行下面的命令启动带有cdrom的虚拟机:

qemu-system-x86_64 -m 2048 -enable-kvm ubuntu1804.img -cdrom ./ubuntu-18.04.3-desktop-amd64.iso

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

qemu-system-x86_64 -m 2048 -enable-kvm ubuntu1804.img

参考资料

QEMU创建虚拟机 kvm流程分析

jason--liu avatar Nov 22 '19 05:11 jason--liu