准备环境Ubuntu16.04桌面版,vmware12(注意打开虚拟化)安装软件:apt-getinstallkvmapt-getinstallqemu-kvmapt-getinstallgccapt-getinstallbridge-utils(配置网络)brctladdbrbr0brctladdifbr0eth0brctlshowVirtio半虚拟化驱动的使用1、分别制作安装了Virtio半虚拟化驱动的Linux磁盘镜像和Windows磁盘镜像。宿主机:ubuntu16.4客户机:centos,windows系统Virtio目前已经是一个成熟的技术了,宿主机中比较新的KVM都支持它,Linux2.6.24及以上的Linux内核版本都是支持virtio的。客户机centos自带有virtio不需要重新安装。重点介绍windowsxp系统。WindowsXP系统安装virtio步骤:1)创建镜像文件qemu-imgcreate-fqcow2winxp.img50G镜像名称为winxp.img,镜像大小为50G2)安装winxp系统到镜像文件中qemu-system-x86_64-localtime-smp2-vgaqxl-m2048-drivefile=winxp.img,cache=writeback,if=virtio-cdrom../ISO/Windows_XP_SP3.iso-netnic,model=virtio-nettap-bootorder=d,menu=on-usbdevicetablet-devicevirtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5--enable-kvm-vnc:11用VNC连入进行系统安装3)启动winxp系统,安装驱动root@xp:~#qemu-system-x86_64-localtime-smp2-vgaqxl-m2048-hdawinxp.img-cdromvirtio-win-0.1.113.iso-netnic,model=virtio-nettap-bootorder=c-usbdevicetablet-deviceAC97-devicevirtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5-vnc:5--enable-kvmVNC连入进行系统安装virtio_ballon、virtio_net、virtio_serial:在依次安装完成这3个驱动程序后,在“DeviceManager“中的“Networkadapter”项目中有“RedHatVirtioEthernetAdapter”设备,在“Systemdevices”项目中增加了“VirtIOBalloonDriver”和“VirtIOSerialDriver”这两个设备。安装virtio_scsi驱动:先建立一个伪镜像文件,然后将其作为window客户机的一个非启动盘root@xp:~#qemu-imgcreate-fqcow2fake.qcow210Mroot@xp:~#qemu-system-x86_64win1xp.img-drivefile=fake.qcow2,if=virtio-smp2-m2048-cdromvirtio-win-0.1.113.iso-vnc:5-usbdevicetablet在windows客户机的“DeviceManager”中会看到“Otherdevices”项目下没有驱动程序的“SCSIController”。同前面步骤一样选择“更新驱动”选择virtio-win中的viostor目录下的对应驱动进行安装。重启后2、通过QEMU命令行参数启动带有Virtio网卡驱动、Virtio磁盘驱动、VirtioBalloon设备驱动的虚拟机。通过命令启动centos系统:root@xp:~#qemu-system-x86_64-smp1-m2048-hdarhel-6.4.img-netnic,model=virtio-nettap-usbdevicetablet-devicevirtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5--enable-kvm-vnc:5通过vnc连接:在客户机里面输入:[root@localhost~]#lsmod|grepvirtioWinxp安装好后virtio驱动后,用下面命令启动,使用virtio驱动:Kvm中virtio的基本框架PCI设备直接分配VT-d概述:在QEMU/KVM,客户机可以使用的设备大致可分为如下3种类型。1)Emulateddevice:QEMU纯软件模拟。2)Virtiodevice:实现VIRTIOAPI的半虚拟化驱动的设备。3)PCIdeviceaddignment:PCI设备直接分配。PCI设备直接分配,他允许将宿主机中的在物理PCI(或PCI-E)设备直接分配给客户机完全使用。KVM中通过VT-d技术使用一个PCI-E网卡的系统架构示例如图所示VT-d环境配置:1.硬件支持和BIOS设置目前很多硬件平台支持VT-d,除了硬件还需要在BIOS将VT-d功能打开。根据不同品牌电脑可以百度一下。2.宿主机内核配置Ubuntu16.4打开处理器的虚拟化引擎选择虚拟化IntelVT-x/EPT或AMD-v/RVI(V)检查ubuntu16.4支持虚拟化输入命令:kvm-ok3.在宿主机中隐藏设备使用pci_stub这个内核模块来对需要分配给客户机的设备进行隐藏,从而让宿主机和未被分配的客户机都无法使用该设备,达到隔离和安全使用的目的,需要通过如下三步来隐藏一个设备。1)加载pci_stub驱动2)查看设备的vendorID和deviceID(假设此设备的BDF为02:00.0)上面lspci命令行,-D:显示设备的domain-n:数字方式显示设备的vendorID和deviceID-s:显示后面指定的一个设备的信息3)绑定设备到pci_stub驱动echo-n808610b9/sys/bus/pci/drivers/pci-stub/new_idecho0000:08:00.0/sys/bus/pci/devices/0000:08:00.0/driver/unbindecho0000:08:00.0/sys/bus/pci/drivers/pci-stub/bind#lspci-k-s08:00.0设备驱动是intel的e1000e,绑定后为pci_stub4.通过QEMU命令行分配设备给客户机利用qemu-kvm命令行中“-device”选项可以为客户机分配一个设备,配合其中的“pciassign”作为子选项可以实现设备直接分配。-devicedriver[,prop[=value][,...]]其中driver是设备使用的驱动,有很多种类,如pci-assign表示PCI设备直接分配、virtio-balloon-pci(又为virtio-balloon)表示ballooning设备这与第4章中提到的“-balloonvirtio”的意义相同)。prop[=value]是设置驱动的各个属性值。“-device?”可以查看有哪些可用的驱动,“-devicedriver,?”可查看某个驱动的各个属性值,如下面命令行所示。qemu-kvm命令行工具在启动时分配一个设备给客户机:qemu-system-x86_64rhel6u3.img-m1024-devicepci-assign,host=08:00.0,id=mydev0,addr=0x6如果要一次性分配多个设备给客户机,只需在qemu-kvm命令行中重复多次“-devicepci-assign,host=$BDF”这样的选项即可。5.除了在客户机启动时就直接分配设备之外,QEUM/KVM还支持设备的热插拔(hot-plug)在客户机运行时添加所需的直接分配的设备,这需要在QEMUmonitor中运行相应的命令。在QEMUmonitor可以对宿主机进行各种操作。SR-IOV技术概述为了实现多个虚拟机能够共享同一个物理设备的资源,并且达到设备直接分配的性能,PCI-SIG组织发布了SR-IOV(SingRootI/OVirtualizationandSharing)规范,该规范定义了一个标准化的机制用以原生地支持实现多个共享的设备。R-IOV最广泛的应用还是在以太网卡设备的虚拟化方面。PhysicalFunction(PF,物理功能)PF是一个普通的PCI-e设备(带有SR-IOV功能),可以放在宿主机中配置和管理其它VF,它本身也可以作为一个完整独立的功能使用。VirtualFunction(VF,虚拟功能)由PF衍生而来的“轻量级”的PCI-e功能,包含数据传送所必需的资源,简而言之,VF通过PF的配置之后,可以分配到客户机中作为独立功能使用。SR-IOV的优势真正实现了设备的共享(多个客户机共享一个SR-IOV设备的物理端口)接近原生系统的高性能(比纯软件模拟和Virtio设备的性能都要好)相比于VT-d,SR-IOV可以用更少的设备支持,更多的客户机,可以提高数据中心的空间利用率SR-IOV的不足之处对设备有依赖,只有部分PCI-e设备支持SR-IOV使用SR-IOV时,不方便动态迁移客户机虚拟机的动态迁移1.动态迁移(LiveMigration):就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。虚拟机迁移主要增强了系统的可维护性,其主要目标就是在客户机没有感觉的情况下,将客户机,迁移到另一个物理机器上,从而保证了服务器正常使用。可以从如下三个方面来衡量虚拟机迁移的效率:整体迁移时间,服务器停机时间,对服务的性能影响。NFS服务器:操作系统版本:ubuntu16,桥接IP为192.168.10.71,服务目录为/mnt/vg/。2.下面介绍在kVM上进行动态迁移的具体操作步骤,这里的客户机镜像文件存在NFS共享存储上面,源宿主机(vt-nhm9)目的宿主机(vt-snb9)都对NFS上的镜像文件具有可读写权限。1)下载配置nfs(1)KVM虚拟机动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件(本例为“/root/kvm”目录),这里的动态迁移是基于共享存储动态迁移,通过NFS来实现,需要qemu-kvm-0.12.2以上版本支持。(2)在NFS服务器上,下载安装NFS,kernel-server相当于server端,common是client端,使用命令“sudoapt-getinstallnfs-kernel-servernfs-commonportmap”安装NFS。(3)配置NFS服务器,IP为192.168.10.71,将NFS服务器上的“/mnt/vg”目录设为服务目录。首先使用命令“sudomkdir/mnt/vg”创建该目录,然后使用命令“sudochmod777/mnt”修改该目录权限,接下来使用vim修改“/etc/exports”文件添加共享目录,在该文件中添加“/root/*(rw,sync,no_root_squash)”即可。*(rw,sync)是命令参数,表示包括读写权限。(4)“/etc/exports”文件修改后,使用命令“sudoexportfs–r”刷新。然后启动NFS服务,命令如下:sudo/etc/init.d/portmaprestartsudo/etc/init.d/nfs-kernel-serverrestart(5)NFS服务启动后,在节点1上使用命令“showmount–e192.168.10.71”查看共享目录,如图1所示:2)在源宿主机挂