一、KVM简介
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
KVM架构图:
KVM从本质上讲其实就是一个内核模块而已,当KVM内核被加载后,原本的内核就被KVM取代了,也就是说原先的操作系统也是跑在虚拟机上了。
KVM的核心组件:
kvm.ko:kvm模块,通过“腐化”内核来实现虚拟化。
qemu-kvm:用户空间工具环境,命令行工具。
1.KVM虚拟机图形化使用示例
安装KVM要确定CPU支持硬件虚拟化技术:
~]# grep -E -i "(svm|vmx)" /proc/cpuinfo #若可过滤出"svm或vmx"则说明支持虚拟化
装载kvm,并查看是否成功:
~]# modprobe kvm
~]# ls -hl /dev/kvm
crw-rw-rw-+ root kvm , Nov : /dev/kvm
安装组件:
yum install -y libvirt lib-daemon-kvm qemu-kvm virt-manager
启动服务,启动服务后会多出一个virbr0的网卡,它相以NAT模式将虚拟机连接:
~]# systemctl start libvirtd
可启动virt-maneger来创建管理虚拟机,使用方法和VMware类似(需要图形界面):
~]# virt-manager
这里可以选择要装载的镜像,创建磁盘分区、网卡属性等,安装使用起来非常方便。
2.kvm中的qemu管理工具
与virt-manager不同的是Qume是KVM命令行管理工具,主要管理命令有 qemu-kvm 和 qemu-img :
基本格式: qemu-kvm [options] [disk_image]
选项有很多类别:
1.标准选项:
-machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型;
-cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虚拟机上vcpu的数量及拓扑;
-boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
order:各设备的引导次序:c表示第一块硬盘,d表示第一个光驱设备;-boot order=dc,once=d
-m megs:虚拟机的内存大小;
-name NAME:当前虚拟机的名称,要惟一;
2.块设备相关的选项:
-hda/-hdb file:指明IDE总线类型的磁盘映射文件路径;第0和第1个;
-hdc/-hdd file:第2和第3个;
-cdrom file:指定要使用光盘映像文件;
-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
if=TYPE:块设备总线类型,ide, scsi, sd, floppy, virtio,...
media=TYPE:介质类型,cdrom和disk;
index=i:设定同一类型设备多个设备的编号;
cache=writethrough|writeback|none|directsync|unsafe:缓存方式;
format=f:磁盘映像文件的格式;
3.显示选项:
-display type:显示的类型,sdl, curses, none和vnc;
-nographic:不使用图形接口;
-vga [std|cirrus|vmware|qxl|xenfb|none]:模拟出的显卡的型号;
-vnc display[,option[,option[,...]]]]:启动一个vnc server来显示虚拟机接口; 让qemu进程监听一个vnc接口;
-monitor stdio:在标准输出上显示monitor界面;
网络选项:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
通过物理的TAP网络接口连接至vlan n;
script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
ifname=NAME:自定义接口名称;