【虚拟化】qemu

qemu

qemu本身并不是KVM的一部分,就是一个著名的开源虚拟机软件。

qemu是通过纯软件来仿真x86平台处理器的取指、解码和执行,指令并不会在物理平台上直接执行,因此性能比较差,但可以模拟不同架构平台的虚拟机。

qemu的使用

# 安装
apt install qemu-system-x86

# 创建硬盘
qemu-img create disk.img 20G

# 分配物理光驱
qemu-system-x86_64 disk.img -cdrom ***.iso

# 配置CPU
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
# n 用于设置客户机中使用的逻辑CPU数量,默认=1;
# maxcpus 用于设置客户机中最大可能被使用的CPU数量,包括热插拔hot-plug加入CPU
# cores 用于设置每个CPU socket上的cores数量,默认=1
# threads用于设置每个CPUcore上的线程数,默认=1
# sockets用于设置客户机中看到的总的CPU socket数量
#  通过-cpu ?参数设定虚拟机中使用的处理器型号
# 例如 qemu-system-x86_64 -smp 2,sockets=2,cores=2,threads=2 -cpu core2duo ...

# 配置内存
qemu -m 1024
qemu -m 2G

网络配置

网络配置较为复杂

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=on|off]
         [,hostname=host][,dhcpstart=addr][,dns=addr][,dnssearch=domain][,tftp=dir]
         [,bootfile=f][,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off][,queues=n]
-net bridge[,vlan=n][,name=str][,br=bridge][,helper=helper]
//......

与其他虚拟机类似,支持4种网卡类型:

  1. 桥接
    基于网桥的虚拟网卡,在主机的网卡上建立一个虚拟网桥,然后再虚拟网桥上创建虚拟的网卡,把创建好的虚拟网卡分配给qemu客户机使用。
# apt-get install bridge-utils
# brctl addbr br0    # 添加bridge br0
# brctl addif br0 eth0 # 将br0 与eth0 绑定
# brctl stp br0 on    # 将br0设置为STP协议
# ifconfig eth0 0     # 将eth0 的IP设置为0,因为eth0已经工作在链路层,不需要IP
# dhclient br0       # 设置br0参数
# route            # 查看路由表

# 然后将虚拟机网卡tap分配给客户机
qemu-system-x86_64 -hda disk.img -m 2G -net nic -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no

如果客户机网卡设置成dhcp模式的,会发现客户机的IP地址与主机的IP地址在同一个网段上。

  1. NAT
  2. 内部网络
  3. 直接分配宿主机的物理网卡

qemu参数

参数 说明
-M vexpress-a9 指定要仿真的开发板:vexpress-a9
-m 512M 指定DRAM内存大小为512MB
-cpu cortex-a9 指定CPU架构
-smp n CPU的个数,不设置的话,默认是1
-kernel ./zImage 要运行的内核镜像
-dtb ./vexpress-vap-ca9.dtb 要加载的设备树文件
-append cmdline 设置Linux内核命令行、启动参数
-initrd file 使用file文件作为初始化ram disk
-nographic 非图形化启动,使用串口作为控制台
-sd rootfs.ext3 使用rootfs.ext3作为SD卡镜像文件
-net nic 创建一个网卡
-net nic -net tap 将开发板网卡和主机网卡建立桥接(Bridge)

re

https://www.zhaixue.cc/qemu/qemu-intro.html