Vmware qemu-kvm 虚拟化测试

[root@kvm1 cloud]# lsmod | grep kvm
kvm_intel 55496 3
kvm 337772 1 kvm_intel
[root@kvm1 cloud]# egrep "(vmx|svm)" --color /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
[root@kvm1 cloud]#

 

如果没有结果,则应该开启机器支持Inter VT-x/EPT or AMD-V/RVI

7888de1f-387f-4dfd-886d-2475b1d02b92

 

 


#查看Linux内核是否加载了kvm模块
lsmod | grep kvm
#安装qemu-kvm,安装完成后会生成/usr/libexec/qemu-kvm,是用户空间操作kvm内核的接口
yum install qemu-kvm
#通过网络上传ISO镜像文件
#生成一个8G的文件(文件内容全部是0),作为虚拟机的磁盘
dd if=/dev/zero of=/cloud/CentOS.img bs=1M count=8192
#使用qemu-kvm创建虚拟机(参数说明 -m 指定内存大小 -smp 指定cup数量 -boot启动顺序)
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -cdrom /iso/CentOS-6.6-x86_64-minimal.iso -vnc :1
参数说明:
-m 指定客户机内存大小,默认单位MB
-smp 指定客户机cpu个数。SMP:(symmetric[sɪ'metrɪk'] Multi-processing)对称多处理
-boot 指定客户机系统启动顺序,order=cd是指先光盘再硬盘。c:CD-ROM d:Hard Disk
-hda 指定客户机的IDE硬盘(即前面的创建的镜像文件)
-cdrom 指定客户机的光驱
-vnc 类似window下的远程桌面
:1 端口为 5900 + 1 = 5901
#安装vnc或使用vnc工具连接虚拟机,给虚拟机安装系统
#关闭虚拟机并再次启动虚拟机,指定vnc端口为5901(不需要指定cdrom,因为已经将操作系统安装到磁盘中了)
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -vnc :1
#查看虚拟机信息
free -m
dmesg | grep Memory
查看cpu信息命令:
lscpu
cat /proc/cpuinfo
逻辑CPU个数
cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
每个物理CPU上core的个数(未计入超线程)
cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l
#修改配置内存和CPU参数
/usr/libexec/qemu-kvm -m 4096 -smp 2,cores=4 -boot order=cd -hda /cloud/CentOS.img -vnc :1
n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
set the number of CPUs to 'n' [default=1]
maxcpus= maximum number of total cpus, including offline CPUs for hotplug etc.(客户机最大可能被使用的CPU输了,包括启动时处于offline状态的cpu数量,可用于热插拔加入CPU,但是不能超过maxcpus这个上限)
cores=number of CPU cores on one socket.(就是我们平时说的核,每个物理CPU可以双核,四核等等)
threads=number of threads on one CPU core.(thread就是每个core的硬件线程数,即超线程)
sockets=number of discrete sockets in the system.(就是主板上插cpu的槽的数目,也就是可以插入的物理CPU的个数)
#qemu-img是一个比较重要的工具,是QEMU的磁盘管理工具。
#查看帮助信息
qemu-img -h
#查看镜像文件信息
qemu-img info /cloud/CentOS.img
#创建一个磁盘镜像文件
qemu-img create -f qcow2 /cloud/bill.img 10G
#将raw格式转换成qcow2格式
qemu-img convert -O qcow2 /cloud/bill.raw /cloud/bill.qcow2
#修改镜像大小
qemu-img resize /cloud/test.img +2G
#检查镜像
qemu-img check /cloud/bill.qcow2
#镜像格式
#qemu-img支持多种镜像格式,可通过qemu-img -h命令查看,常用的有qcow2,raw
#raw:原始的磁盘镜像格式,是qemu-img命令默认的文件格式,这种格式的文件的优势在于它非常简单且非常容易移植到其他模拟器上使用。特点一开始就让镜像实际占用了分配空间,但是写入速度稍快一下。
#qcow2:这种格式是QEMU目前推荐的镜像格式,它是功能最多的格式,它支持稀疏文件以节省存储空间,支持加密、压缩、快照等功能
QEMU monitor是QEMU与用户交互的一种控制台,一般用于为QEMU模拟器提供较为复杂的功能,
QEMU monitor的切换
"Ctrl + Alt + 2" --> QEMU monitor状态
"Ctrl + Alt + 1" --> 客户机标准显示窗口
查看帮助信息
help/? [cmd]
help savevm 或 ? savevm
显示系统命令状态:info
查看QEMU的版本信息
info versions
查看当前QEMU是否有KVM的支持
info kvm
info name
info status
查看客户机各个vCPU的信息
info cpus
查看块设备信息,如硬盘、软盘、光驱等
info block
查看客户机的网络配置信息
info network
显示当前系统中已保存的客户机快照信息
info snapshots
查看当前客户机的迁移状态
info migrate
显示当前客户机的VNC状态
info vnc
查看QEMU monitor中命令执行的历史
info history
创建快照
savevm snap20150406
恢复快照
loadvm snap20150406
删除快照
delvm snap20150406

Linux bridge-utils tunctl 使用

网络
brctlLinux下用来管理以太网桥,在内核中建立、维护、检查网桥配置的命令
STP Spanning Tree Protocol(生成树协议)逻辑上断开环路,防止二层网络的广播风暴的产生
dhcp模式启用 'eth0'
 
在计算机网络中,TUNTAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
 
#1.创建kvm桥接网络模式,要安装bridge-utils tunctl
yum install bridge-utils tunctl
 
添加一个br0网桥(桥接类型)
brctl addbr br0
ifconfig br0 up
 
#分步执行网络会断开
------------------------
br0eth0绑定在一起
brctl addif br0 eth0
br0设置为启用STP协议
brctl stp br0 on
eth0IP设置为0
ifconfig eth0 0
使用dhcpbr0分配IP
dhclient br0
-------------------------
 
#最佳方式(注意修改成自己的IP)
brctl addif br0 eth0 && brctl stp br0 on && ifconfig eth0 0.0.0.0 && ifconfig br0 192.168.52.201 netmask 255.255.255.0 && route add default gw 192.168.52.1
 
#创建TAP类型虚拟网卡设备
tunctl -b -t vnet0
ifconfig vnet0 up
brctl addif br0 vnet0
brctl show
 
#创建虚拟机并关联网卡
/usr/libexec/qemu-kvm -m 4096 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic -net tap,ifname=vnet0,script=no,downscript=no
#创建虚拟机并关联网卡并添加mac地址
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vnet0,script=no,downscript=no
 
#将磁盘设置成半虚拟化virtio
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" />
<source file="/cloud/centos.img" />
<target dev='vda' bus='virtio'/>
</disk>
 
 
 
libvirt
libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python,JAVA等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。
Libvirt库是一种实现 Linux 虚拟化功能的 Linux API,它支持各种虚拟机监控程序,包括 Xen KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品
 
#安装libvirt
yum install libvirt
#启动libvirt
service libvirtd start
#启动后会多一个virbr0网桥,该网桥是NAT类型
 
virsh(非常好的虚拟化命令行管理工具,两种模式:交换模式和非交换模式)
定义虚拟机
virsh define /cloud/centos-base.xml
 
virsh 进行管理虚拟机
virsh# list --all # 显示所有虚拟机 --all显示全部
 
启动虚拟机
#virsh start centos
 
关闭虚拟机
#virsh shutdown centos
 
强制关机
#virsh destroy centos
 
移除虚拟机
#virsh undefine centos
 
显示vnc端口
#virsh vncdisplay centos
 
动态查询kvm使用资源
#top -d 1 | grep kvm
 
查询kvm进程
ps -aux | grep kvm
 
开机自动启动虚拟机
#virsh autostart centos
 
导出虚拟机centos的硬件配置信息为/cloud/centos.bak.xml
#virsh dumpxml centos > /cloud/centos.bak.xml
 
编辑虚拟机配置
#virsh edit centos