QEMU简介
QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了 另一个独立的虚拟化解决方案:(
(KVM是QEMU的加速器)
KVM+QEMU
KVM 是 linux 内核包含的东西,使用 qemu 作为上层管理(命令行)。qemu 是独立虚拟软件,能独立运行虚拟机(根本不需要 kvm )。 qemu 是该软件的加速软件。 kvm 并不需要 qemu 进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由 kvm 驱动。
qume当运行与主机架构相同的目标架构时可以使用KVM,例如一个x86兼容处理器上运行qemu-system-x86。
qemu-kvm
kvm虚拟化入门
这里选用centos操作系统,centos是必定支持kvm的。
安装qemu-kvm,因为红帽希望大家使用他们推崇的libvirt,所以将qemu-kvm放到了/usr/libexec/ 下,不在PATH下。
$ yum install -y qemu-kvm
$ ln -sv /usr/libexec/qemu-kvm /usr/local/bin/
这里安装了两个比较重要的命令。
- qemu-kvm:管理kvm
- qemu-img:磁盘管理
qemu-kvm 模拟 cpu
- cpu类型
$ kvm-qemu -cpu ?
Available CPUs:
x86 486
x86 Broadwell-IBRS Intel Core Processor (Broadwell, IBRS)
x86 Broadwell-noTSX-IBRS Intel Core Processor (Broadwell, no TSX, IBRS)
x86 Broadwell-noTSX Intel Core Processor (Broadwell, no TSX)
x86 Broadwell Intel Core Processor (Broadwell)
x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2)
x86 EPYC-IBPB AMD EPYC Processor (with IBPB)
x86 EPYC AMD EPYC Processor
x86 Haswell-IBRS Intel Core Processor (Haswell, IBRS)
使用 -cpu 指定模拟的cpu。如 -cpu Broadwell.
注:-smp 才是指定cpu的个数
- numa选项
非一致性内存访问。
numa的概念:假设主机上有4颗cpu,一颗cpu操作一个内存单元的数据修改的话,其他cpu不能操作,也就是资源竞争。为避免cpu竞争内存资源,每颗cpu有自己的内存节点,也有公共的内存。
可以使用-numa opts 指定模拟多节点的numa设备。
qemu-kvm 模拟 disk
- drive选项
指定磁盘映像文件,-hda 选项太过低配。-drive 可以指定的很多,如if=vritio,这是高级的半虚拟化技术。
模拟技术:每一个io设备都分成两端,一半在虚拟机端,一半在宿主机。这两半又有一定的对应关系。
半虚拟化:两端设备之间不再有设备进行转换。直接一端与一端对接。
-drive option[,option ...] 每个选项可以使用","号隔开。
drive是定义一块存储硬盘的,如下。
file=xxx :硬盘映像文件路径。
media= xxx :指定介质设备类型,有disk,和cdrom。
if=interface :指定硬盘设备所连接的接口类型,如ide,sd,virtio等。
cache=cache: 定义如何使用物理机缓存访问块设备。
...
qemu-kvm 的其他选项
- -name name:指定虚拟机的名称。
- -M machine:指定虚拟机的主机类型。如Standerd PC,ISA-only,PC或Intel-Mac等,使用 “qemu-kvm -M ?”查看。
- -m megs: 设定虚拟机的RAM大小。
- -cpu: 指定cpu的模拟类型
- -smp n:指定CPU的核心数以及CPU的socket数目。
- -numa opts:指定模拟多节点的numa设备。
- -cdrom file:指定file作为CD-ROM镜像,不能和 -hdc 等同时使用。
- -boot [order=drivers][,once=drives] 定义设备的引导次序,每种设备使用一个字符表示。a,b 表示软驱,c表示第一块硬盘,d表示第一个光驱,n-p 表示网络适配器。
-boot order=dc,once=d - -nographic 禁止vnc,直接在终端上打印。
qemu-img 创建磁盘硬件
qemu-img是QEMU的磁盘管理工具。其子命令的效果如下。
- info:查看镜像信息
- create:创建镜像
- convert:转换镜像格式
- snapshot:管理快照
- info 查看信息
# qemu-img info cirros-0.3.6-i386-disk.img
image: cirros-0.3.6-i386-disk.img
file format: qcow2
virtual size: 39M (41126400 bytes)
disk size: 14M
cluster_size: 65536
Format specific information:
compat: 0.10
这里能看到这是qcow2的磁盘格式,这是很高级的磁盘镜像格式。
- create 创建镜像
$ qemu-img create -o ? -f qcow2 test.qcow2
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata, falloc, full)
lazy_refcounts Postpone refcount updates
$ qemu-img create -o size=2G,preallocation=metadata -f qcow2 test.qcow2
Formatting 'test.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off
启动虚拟机
$ qemu-kvm -cpu Broadwell -m 512 -smp 2 -name "test" \
-drive file=cirros-0.4.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -vnc 0.0.0.0:0
使用vncviewer连接5900端口
qemu虚拟机.png
可以使用Ctrl+Alt+2 切换为配置模式。在这个模式下有一个info 命令。
可以查看当前虚拟机的各种状态。
- info numa
显示numa节点 - info status
显示虚拟机状态 - 等等......
创建一个centos虚拟机。
1.创建虚拟磁盘映像。
$ qemu-img create -o size=5G,preallocation=metadata -f qcow2 centos-mini.qcow2
Formatting 'centos-mini.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off$ 'centos-mini.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off
# ll -h
总用量 1.3M
-rw-r--r--. 1 root root 5.1G 5月 18 06:06 centos-mini.qcow2
# du -sh centos-mini.qcow2
1.3M centos-mini.qcow2
2.以创建好的磁盘映像启动虚拟机
$ qemu-kvm -m 1024 -smp 2 -name 'centos-mini' \
> -drive file=/root/images/centos-mini.qcow2,if=virtio,media=disk,format=qcow2,cache=writeback \
> -drive file=/root/iso/CentOS-7-x86_64-Minimal-1810.iso,media=cdrom -boot order=dc,once=d \
> --vnc 0.0.0.0:0
- 连上vnc。开始安装
vncviewer 192.168.199.214:5900
安装画面
- 安装完成后,使用启动虚拟机的命令。启动虚拟机。(就是安装虚拟机的命令去掉第二个drive)
$ qemu-kvm -m 1024 -smp 2 -name 'centos-mini' \
> -drive file=/root/images/centos-mini.qcow2,if=virtio,media=disk,format=qcow2,cache=writeback
> -nographic
在终端中以非图形方式启动
- 完成了
网友评论