一、QEMU介绍
QEMU是一款高效而实用的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM),主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
二、软件安装及系统命令安装
1、首先要确保IntelVT技术勾选(虚拟机中使用的话),然后查看cpu是否支持,有vmx输出即可;
grep vmx /proc/cpuinfo
2、安装相关的依赖包,将KVM软件安装完成;
yum install qemu-kvm libvirt-binvirtinst bridge-utils (virt-manager
kvm qemu virt-viewer)
必须安装组件是qemu-kvm libvirt-bin
virt-viewer是一个用于显示虚拟机的图形控制台的最小工具
virt-manager是一个虚拟机管理软件,含图形管理界面
三、qemu-system-x86创建安装虚拟机
qemu-system-x86和qemu-kvm区别:
在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 –enable-kvm参数使能即可
1、qemu-img命令创建虚拟机的磁盘镜像
[root@localhost ~]# qemu-img create -f qcow2 /root/kvm-test/CentOS-7.qcow2 10G
-f 指定格式 qcow2 kvm的虚拟磁盘格式
/root/kvm-test/CentOS-7.qcow2 /root/kvm-test目录及CentOS-7.qcow2文件名
10G 虚拟磁盘大小
即可成功创建了10G大小的qcow2格式的镜像,但是创建完成后实际的镜像在磁盘上占用大小并不是真实的10G大小,只有安装完虚拟机系统后才会占用真实大小;
命令qemu-img info source_images.img可以查看镜像的信息
2、qemu-system-x86_64创建并安装虚拟机系统
[root@localhost ~] qemu-system-x86_64 -name vfw -m 8192 -smp 2 -cpu host -hda /gao/kvm-fw.qcow2 -cdrom /gao/vfw3.iso -boot c -enable-kvm -netdev type=tap,ifname=fw-eth0,script=no,downscript=no,id=net0 -device e1000,netdev=net0,mac=52:54:63:02:02:01,bus=pci.0,addr=0x3 -netdev type=tap,ifname=fw-eth1,script=no,downscript=no,id=net1 -device virtio-net-pci,netdev=net1,mac=52:54:63:02:02:02,bus=pci.0,addr=0x4 -netdev type=tap,ifname=fw-eth2,script=no,downscript=no,id=net2 -device virtio-net-pci,netdev=net2,mac=52:54:63:02:02:03,bus=pci.0,addr=0x5 -daemonize -vnc :11
参数解释:
-name 设置虚拟机名称
-m 指定虚拟机内存大小
-smp 设置虚拟机CPU数
-cpu 选择CPU
-hda 选择使用*.qcow2 作为IDE硬盘镜像
-cdrom 选择使用*.iso作为cdrom安装镜像
-boot 选择启动类型: floppy (a), hard disk ©, CD-ROM (d), network (n)
-enable-kvm 使能KVM支持:enable KVM full virtualization support
-netdev 配置主机的虚拟网卡:configure a host TAP network backend with ID ‘str’
type 类型 ifname 名称 connected to a bridge (default=br0)
script:use network scripts ‘file’ (default=/etc/qemu-ifup)
-device 配置虚拟机的网卡类型
-vnc 配置VNC端口
启动后查看VNC端口:
[root@localhost ~]# netstat -natp | grep qemu
tcp 0 0 0.0.0.0:5910 0.0.0.0:* LISTEN 13190/qemu-system-x
tcp 0 0 0.0.0.0:5911 0.0.0.0:* LISTEN 14946/qemu-system-x
使用VNC连接虚拟机并安装指定的ISO镜像系统;
四、配置主机与虚拟机网络
1、配置主机网络
以上虚拟机创建完成后主机中会创建出fw-eth0虚拟网卡,虚拟机中会创建出驱动为e1000类型虚拟网卡net0作为管理口使用,virtio作为业务口使用,-netdev、-device可理解为是成对的一对口,连接主机与虚拟机通信,主机中将管理口和fw-eth0虚拟网卡同时加入桥br0下,配置IP、ROUTE、DNS;客户机管理口配置和桥相同网段的IP、ROUTE后重启网络即可访问外网;
1)手动配置主机网络:
brctl addbr br0 #创建桥
brctl stp br0 on #使能stp
ifconfig br0 up #使能桥up
ifconfig fw-eth0 up #使能虚拟网卡up
ifconfig enp8s0 up #使能管理口up
brctl addif br0 fw-eth0 #绑定虚拟机口到桥
brctl addif br0 enp8s0 #绑定管理网口到桥
ip add del 192.169.8.198/24 dev enp8s0
ip add add 192.169.8.198/24 dev br0 #配置IP ROUTE
ip route add 192.169.0.0/16 via 192.169.8.254
配置完成后查看桥口配置:
配置完成后 可以ip add 或 ifconfig查看配置是否生效,ip route 或者route -n查看路由信息,然后ping 网关、PC机、外网试试;如果不通可以修改/etc/resolv.conf文件试试;
[root@localhost ~]# cat /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
search localdomain
[root@localhost ~]#
2)开机自动配置主机网络方法:
配置桥口文件:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge #配置桥类型
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.169.8.198
NETMASK=255.255.255.0
GATEWAY=192.169.8.254
DNS1=114.114.114.114
DNS2=8.8.8.8
配置桥绑定的管理口文件:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp8s0
TYPE=Ethernet #以太网类型
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp8s0
UUID=9dbab5a4-2552-4ceb-bc45-a302b88840f2 #不通可考虑去掉
DEVICE=enp8s0
ONBOOT=yes
BRIDGE=br0 #桥下绑定
DNS1=114.144.114.114
DNS2=8.8.8.8
配置完成后systemctl restart network重启网络,可以ip add 或 ifconfig查看配置是否生效,ip route 或者route -n查看路由信息,然后ping 网关、PC机、外网试试;如果网络配置不上或者不通可以如下操作:
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
systemctl restart network
如果还是配置不上网络,建议重启主机系统试试,我这出现了systemctl restart network重启网络后IP配置不上或者DNS配置不上的情况,重启后正常了;
在此要强调一点的是,直接修改/etc/resolv.conf这个文件是没用的,网络服务重启以后会根据/etc/sysconfig /network-scripts/ifcfg-eth0来重载配置,如果ifcfg-eth0没有配置DNS,那么resolv.conf会被冲掉,重新变成空值;配置成功后/etc/resolv.conf会自动加上相关的nameserver,不需要手动配置。
2、配置虚拟机网络:
insmod /firewall/e1000.ko
ifconfig eth0 up
ifconfig eth0 192.169.8.192
route add -net 192.169.0.0 netmask 255.255.0.0 gw 192.169.8.254
虚拟机管理口配置和主机桥口相同的网段、网关、路由即可。配置完成后重启网络,然后ping 网关、PC机、外网试试;
3、虚拟网卡类型
[shell /pkg]$lspci
00:00.0 Class 0600: 8086:1237
00:01.0 Class 0601: 8086:7000
00:01.1 Class 0101: 8086:7010
00:01.3 Class 0680: 8086:7113
00:02.0 Class 0300: 1234:1111
00:03.0 Class 0200: 8086:100e
00:04.0 Class 0200: 1af4:1000
00:05.0 Class 0200: 1af4:1000
记录一下: -device e1000创建的虚拟网卡厂商ID是8086, -device virtio-net-pci 不是8086;
五、虚拟机重启及重新配置
对于已经创建的虚拟机ps -ax | grep qemu查看对应的PID,然后kill -9 pid杀掉 或者killall -9 qemu后可以修改-m 6144值、-device e1000类型、addr=0x8总线值 、ifname=vfw1-eth1接口名、-vnc端口号等参数,重新启动后虚拟机会按照新的配置进行启动,启动后重新配置主机、虚拟机网络即可;比如:
[root@localhost ~] qemu-system-x86_64 -name vfw -m 4096-smp 2 -cpu host -hda /gao/kvm-fw.qcow2 -cdrom /gao/vfw3.iso -boot c -enable-kvm -netdev type=tap,ifname=fw-eth0,script=no,downscript=no,id=net0 -device e1000,netdev=net0,mac=52:54:63:02:02:01,bus=pci.0,addr=0x6 -netdev type=tap,ifname=fw-eth1,script=no,downscript=no,id=net1 -device e1000,netdev=net1,mac=52:54:63:02:02:02,bus=pci.0,addr=0x7 -netdev type=tap,ifname=fw-eth2,script=no,downscript=no,id=net2 -device e1000,netdev=net2,mac=52:54:63:02:02:03,bus=pci.0,addr=0x8 -daemonize -vnc :22