KVM虚拟机创建功能详细讲解
Linux系统下基于Kvm创建虚拟机时网络网桥的配置使用说明

Linux系统下基于Kvm创建虚拟机时网络网桥的配置使用说明一,配置命令1。
创建网桥设备:brctl addbr <bridge> ,eg:brctl addbr br02。
向网桥设备添加物理网卡:brctl addif <bridge><device>,eg:brctl addif br0 eth0/eth1(根据需要添加几个网卡)3。
从网桥中删除网卡:brctl delif <bridge><device>,eg:brctl delif br0 eth0/eth14。
删除网桥:brctl delbr <bridge>,eg:brctl delbr br0 5。
查看网桥配置情况:brctl show二,实例讲解1。
假如我有一台主机装有linux操作系统,并安装了网桥模块,而且有两块物理网卡,希望能分别与公司内网和外网进行通信。
同时为了方便管理,我把网桥配置固定IP (172.7.10.5)。
2。
其次创建一个虚拟网桥:# brctl addbr br03。
建立一个虚拟网桥之后,我们还需要为它分配特定的端口。
在Linux中,一个端口实际上就是一个物理网卡。
而每个物理网卡的名称则分别为eth0,eth1...。
我们需要把每个网卡和br0 这个网桥联系起来,作为br0中的一个端口。
4。
# brctl addif br0 eth0 (让eth0成为br0的第一个端口)# brctl addif br0 eth1 (让eth1成为br0的第二个端口)如图:5。
网桥的每个物理网卡作为一个端口,可以直接运行于混杂模式,它们是在链路层工作,所以就不需要IP了。
# ifconfig eth0 0.0.0.0# ifconfig eth1 0.0.0.0注:混杂模式(Promiscuous Mode)是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是它。
kvm虚拟化技术实战与原理解析pdf

kvm虚拟化技术实战与原理解析pdf KVM虚拟化技术实战与原理解析KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它通过利用Linux内核来创建和管理虚拟机,同时提供了高性能和快速的虚拟化环境。
本文将重点介绍KVM虚拟化技术的实战应用和原理解析。
一、KVM虚拟化技术概述KVM虚拟化技术是一种基于硬件的全虚拟化解决方案,它允许将一台物理机划分为多个虚拟机,并在每个虚拟机中运行不同的操作系统和应用程序。
KVM利用了Linux内核的虚拟化模块(KVM模块)来创建和管理虚拟机,并通过QEMU(Quick Emulator)提供了对虚拟硬件设备的模拟。
二、KVM虚拟化技术的实战应用1. 虚拟化服务器KVM虚拟化技术可以将一台物理服务器划分为多个虚拟服务器,每个虚拟服务器都具有独立的操作系统和资源。
这样可以提高服务器的利用率,节省硬件成本,并简化服务器的管理和维护。
同时,KVM 虚拟化技术还支持虚拟机的热迁移和快照功能,方便进行故障恢复和资源调度。
2. 云计算平台KVM虚拟化技术是目前主流的云计算平台使用的关键技术之一。
通过KVM虚拟化技术,云服务提供商可以将一台物理服务器划分为多个虚拟机,为不同用户提供独立的计算资源。
这样可以实现资源的弹性分配和动态扩缩容,提高云服务的灵活性和可扩展性。
3. 虚拟化桌面环境KVM虚拟化技术可以将一台物理桌面主机划分为多个虚拟桌面环境,每个虚拟桌面环境都具有独立的操作系统和应用程序。
这样可以实现桌面资源的集中管理和统一部署,减少用户端的硬件要求,并提高桌面环境的安全性和稳定性。
三、KVM虚拟化技术的原理解析1. KVM模块KVM虚拟化技术利用了Linux内核的虚拟化模块(KVM模块)来实现和管理虚拟机。
KVM模块利用虚拟化扩展技术,将物理机的处理器和内存虚拟化为多个虚拟机,每个虚拟机都能够独立运行不同的操作系统和应用程序。
2. QEMU在KVM虚拟化技术中,QEMU提供了对虚拟硬件设备的模拟。
KVM的工作原理

KVM的工作原理KVM是Kernel-based Virtual Machine的缩写,是一种开源的虚拟化技术,允许将Linux内核转变为一个Hypervisor,从而在一台物理服务器上运行多个虚拟机。
KVM结合了QEMU(Quick Emulator)和Linux内核的功能,提供了高性能的虚拟化解决方案。
1.KVM模块加载:当系统启动时,KVM模块会被加载到内核中。
KVM模块包含了一系列的虚拟化基础设施,用于管理虚拟机的创建、销毁、调度等操作。
2. 虚拟机创建:当用户需要创建一个虚拟机时,KVM会通过调用QEMU启动一个新的进程来模拟虚拟机的硬件和设备。
在这个过程中,KVM会利用Linux内核中的相关功能,例如虚拟地址空间管理、设备驱动等。
3. 硬件虚拟化:KVM利用硬件虚拟化扩展(Intel VT-x和AMD-V)来提高虚拟机的性能。
硬件虚拟化扩展允许虚拟机直接访问物理硬件资源,减少了虚拟机和宿主机之间的中间层次。
4. CPU调度:KVM使用Linux内核的调度器来管理虚拟机的CPU资源分配,确保虚拟机能够公平地分享物理CPU的计算能力。
KVM也支持CPU热插拔功能,可以动态调整虚拟机的CPU个数。
5. 内存管理:KVM通过使用Linux内核的虚拟内存管理系统,将虚拟机的内存映射到物理内存中。
KVM还支持内存热插拔功能,虚拟机可以根据需要增加或减少内存容量。
6. I/O虚拟化:KVM利用QEMU的设备模拟功能来模拟虚拟机的硬件设备,例如虚拟网卡、虚拟存储等。
同时,KVM也支持通过Hypervisor的直通技术将物理设备直接分配给虚拟机,提高I/O性能。
7. 网络通信:KVM支持虚拟机之间和虚拟机与宿主机之间的网络通信。
通过Linux内核的网络堆栈,虚拟机可以与外部网络通信,获取外部服务。
8. 虚拟机的迁移:KVM支持虚拟机的迁移(migration)功能,可以将虚拟机从一台物理机迁移到另一台物理机上,而不中断虚拟机的运行。
KVM的工作原理

KVM的工作原理标题:KVM的工作原理引言概述:KVM(Kernel-based Virtual Machine)是一种基于Linux内核的虚拟化技术,可以在同一台物理服务器上运行多个虚拟机。
KVM的工作原理是通过将Linux内核转变为一个虚拟化的hypervisor,实现虚拟机的创建、管理和运行。
本文将详细介绍KVM的工作原理。
一、硬件虚拟化1.1 CPU虚拟化:KVM利用CPU的虚拟化技术,如Intel VT-x和AMD-V,将物理CPU转换为虚拟CPU,实现虚拟机对物理CPU的访问。
1.2 内存虚拟化:KVM通过内存管理单元(MMU)将虚拟机的内存地址映射到物理内存地址,实现虚拟机对内存的访问。
1.3 I/O虚拟化:KVM通过QEMU等工具摹拟各种硬件设备,如网卡、磁盘等,实现虚拟机对硬件设备的访问。
二、虚拟机管理2.1 虚拟机创建:KVM通过调用Linux内核提供的虚拟化接口,创建一个虚拟机实例,并为其分配CPU、内存等资源。
2.2 虚拟机启动:KVM将虚拟机的镜像加载到内存中,并启动虚拟机的操作系统,实现虚拟机的运行。
2.3 虚拟机迁移:KVM支持虚拟机的迁移,可以将虚拟机从一台物理服务器迁移到另一台物理服务器,实现负载均衡和故障恢复。
三、内核模块3.1 KVM模块:KVM是一个内核模块,通过加载KVM模块到Linux内核中,实现对虚拟化硬件的访问和管理。
3.2 KVM模块参数:KVM提供了一些参数供用户配置虚拟机的资源,如CPU 数量、内存大小等。
3.3 KVM模块接口:KVM提供了一些接口供用户管理虚拟机,如创建虚拟机、启动虚拟机等。
四、虚拟化技术4.1 彻底虚拟化:KVM通过彻底虚拟化技术实现虚拟机对硬件的访问,可以运行未修改的操作系统。
4.2 半虚拟化:KVM还支持半虚拟化技术,通过修改虚拟机的操作系统,提高虚拟机的性能和效率。
4.3 硬件辅助虚拟化:KVM利用CPU的虚拟化指令集,加速虚拟机的运行,提高性能和效率。
KVM安装步骤及基本操作

一、查看cpu是否支持kvmKVM 需要有CPU 的支持(Intel vmx或AMD svm),在安装KVM 之前检查一下CPU 是否提供了虚拟技术的支持:egrep '(vmx|svm)' --color=always /proc/cpuinfo如果输出的结果包含VMX,它是Intel处理器虚拟机技术标志:如果包含SVM,它是AMD 处理器虚拟机技术的标志,如果你什么都没有得到,那应你的系统并没有支持虚拟化的处理,不能使用KVM,另处linux发行版本必须在64bit环境中才能使用KVM。
二、BIOS中开启Virtual Technolege在主板BIOS中开启CPU的Virtual Technolege(VT,虚化技术),不同主板所在菜单不同例如:华硕主板开启虚拟化Intel主板开启虚拟化三、安装KVM服务器安装KVM 虚拟机和安装其他服务器一样,在选择操作系统类型是选择“Virtual Host”即可,其它步骤可参考“AiSchool平台安装指导”中操作系统安装部分。
如果使用此服务器管理其他KVM 主机,需要额外安装openssh-askpass软件包。
注:(已安装好的操作系统,里面有重要资料无法重新安装的可以在已有的系统上安装如下软件包yum install kvmkmod-kvmqemukvm-qemu-imgvirt-viewer virt-manager libvirtlibvirt-python python-virtinstopenssh-askpass或者如下图,安装需要的组四、检查kvm模块是否安装使用以下命令显示两个模块则表示安装完成[root@vm76 ~]# lsmod | grepkvmkvm_intel54285 0kvm 333172 1 kvm_intel以上表明安装完成五、配置宿主机1、关闭防火墙(如不用)chkconfigiptables offserviceiptables stop2、执行如下命令打开文件selinux配置文件。
Linux KVM虚拟机PVE使用指南

Linux KVM虚拟机PVE使用指南1引言KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。
使用 KVM 可允许多个包括 Linux 和 Windows 每个虚拟机有私有的硬件,包括网卡、磁盘以及图形适配卡等PVE使用图形化安装方式,支持裸机安装,管理界面是WEB方式,易于操作,浏览器(fireox,chrome等)支持JAVA即可以进行guest OS的图形管理,无须安装客户端,方便快捷。
本文将详细介绍PVE的安装,使用,部署优化等各方面的内容。
2KVM/QEMU体系架构2.1总体架构QEMU作为一个开源的硬件模拟器项目,除了支持x86体系架构之外,还支持ARM、MIPS、PowerPC、IA64等多种硬件架构。
QEMU采用模块化设计的方法,因此,还能支持多种多样的外设硬件,并且能够方便地进行扩充。
除了支持KVM之外,QEMU还支持全模拟化和kqemu加速模块等方式,这三种方式的架构区别如图5-6所示。
第一种模式是通过kqemu模块实现内核态的加速。
通过在内核中加入kqemu 的相关模块,在用户态的QEMU则通过访问/dev/kqemu设备文件接口调用改进型加速。
在这种模式中,主要针对虚拟机和宿主机运行于统一架构的情况下进行虚拟化。
第二种模式是在用户态直接运行QEMU,由QEMU对目标机的所有指令进行翻译后执行,相当于全虚拟化。
在这种模式下,可以运行各种不同形态的体系结构,如Android开发环境中即使用了QEMU来为其模拟ARM运行环境,但是在这种模拟环境下,每一条目标机的执行指令都需要耗费少则数个,多则成千上万个宿主机的指令周期来模拟实现,速度方面不太理想。
第三种模式则是KVM官方提供的kvm-qemu加速模式。
运行在内核态的KVM 模块通过/dev/kvm字符设备文件向外提供操作接口。
kvm虚拟化完整教程

Centos7安装kvm虚拟机(centos6也可以)1.本教程以vmware虚拟机为例子,在其中的centos7虚拟机上安装kvm虚拟机首先开启虚拟化模块2.安装qemu-kvm 、libvirtyum install-y qemu-kvm libvirt,其中qemu-kvm用来创建虚拟机硬盘,libvirt 用来管理虚拟机qemu下载地址:https:///(多种版本)3.安装virt-install,yum -y install virt-install(virt-install用来创建虚拟机)4.启动libvirtd并且设置开机自启动,systemctl start libvirtd 、systemctl enable libvirtd5.创建虚拟机硬盘,(使用qemu来创建一个虚拟机硬盘,大小可以自定义),qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G,硬盘名称为CentOS-7-x86_64.raw,硬盘大小为10G6.也可以用qcow2格式,此格式支持快照但是速度没有raw的快,命令方式类似,qemu-img create -f qcow2 /opt/centos.qcow2 10G7.在根目录下创建一个文件夹iso,将centos7的镜像上传到此目录下8.利用virt-install 创建一个名称为CentOS-7-x86_64的虚拟机,内存为10249.virt-install --virt-type kvm --name=centos --ram 1024 --vcpus=16 --cdrom=/iso/centos.iso --disk path=/data2/centos.raw --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=5988, --force--autostart10.如果启动报错:ERROR internal error: process exited while connecting to monitor: 2019-05-10T17:10:20.075431Z qemu-kvm: -drivefile=/root/window.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=o n: could not open disk image /root/window.iso: Could not open'/root/window.iso': Permission deniedDomain installation does not appear to have been successful.If it was, you can restart your domain by running:virsh --connect qemu:///system start windowsotherwise, please restart your installation.表示权限不足可以编辑配置文件 vi /etc/libvirtd/qemu.conf文件取消#user=”root” #group=”root”注释然后重启libvirtd systemctl restart libvirtd11.其中--name表示名称,ram表示内存为1024M,--vcpus表示cpu核数,cdrom 表示镜像所在目录,disk表示创建的虚拟机硬盘位置,port指定哪个端口安装时通过vnc连接就用哪个端口连接,安装多台机器时可以指定不同的端口然后来分别安装不同的操作系统,--graphics表示指定图形界面工具表示安装成功12.接下来通过vnc来连接虚拟机进行安装,地址为宿主机地址,端口为5988(防火墙提前开放端口)如果报错提示如下:修改成rgb222连接即可13.然后开始正常的系统安装过程,不在赘述14.安装成功后可以通过命令virsh list --all上述表示虚拟机是关闭状态开启kvm虚拟机命令virsh start CentOS-7-x86_64,关闭虚拟机命令为virsh shutdown CentOS-7-x86_64 重启为virsh reboot CentOS-7-x86_64有的时候virsh shutdown 命令不能关闭虚拟机,此时要在虚拟机(不是宿主)内安装acpid软件并设置开机自启动,然后就可以执行shutdown|reboot来关闭和重启了了yum -y install acpidservice acpid startchkconfig acpid on如果想连接此虚拟机还是要通过vnc来连接登陆安装net-tools 安装后才可以执行ifconfig命令ip地址走的是宿主机的虚拟网卡virbr0,宿主机网卡如下:上图中的虚拟机默认的是nat模式,内部的虚拟机可以访问外部网络,但是外部网络无法访问内部的虚拟机(xshell无法连接),可以通过配置成桥接的方式来实现xshell连接内部虚拟机15.配置桥接网络:系统如果安装了桌面环境,网络由NetworkManager来管理,它不支持桥接网络,所以需要先关闭NetworkManager,一定要关闭,否则容易报错,配置完桥接后还要启动NetworkManager要不桌面无法使用,是黑屏状态。
kvm工作原理

kvm工作原理KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,允许在同一物理主机上运行多个虚拟机。
KVM的工作原理基于Linux内核的虚拟化功能,通过将Linux内核转变为一个Hypervisor,实现对硬件资源的管理和分配。
KVM的工作原理分为以下几个步骤:1. 初始化:当KVM模块加载到Linux内核中时,它会创建一个虚拟机管理器(Virtual Machine Manager,VMM)实例。
VMM是KVM的核心组件,负责管理和控制虚拟机的创建、启动、停止等操作。
2. 虚拟机创建:当需要创建一个新的虚拟机时,VMM会通过调用相应的API,创建一个虚拟机实例并为其分配所需的资源,包括内存、CPU、网络等。
虚拟机实例在创建过程中会分配一个唯一的虚拟机ID,用于标识该虚拟机。
3. 虚拟设备模拟:虚拟机实例启动后,VMM会为其模拟一套虚拟设备,包括虚拟的CPU、内存、硬盘、网络接口等。
这些虚拟设备与真实的物理设备相似,但其操作和交互都是在虚拟化的环境中进行。
4. 虚拟机调度:当有多个虚拟机同时运行时,VMM会根据各个虚拟机的优先级和资源需求,进行调度和分配物理资源。
虚拟机之间是完全隔离的,它们共享宿主机的硬件资源,但相互之间不可见。
5. 虚拟机操作:虚拟机实例启动后,其操作系统(Guest OS)会在VMM的监控下运行。
虚拟机可以执行各种操作系统任务,如运行应用程序、访问文件系统等。
虚拟机可以通过虚拟设备与外部环境进行通信,如通过虚拟网络接口连接到网络、通过虚拟硬盘存储数据等。
6. 虚拟机迁移:KVM还支持虚拟机的迁移(Live Migration),即将一个正在运行的虚拟机从一台物理主机迁移到另一台物理主机,而不会中断虚拟机的运行。
这是通过将虚拟机的内存、CPU状态等信息转移到目标主机上实现的。
总结来说,KVM利用Linux内核的虚拟化功能,通过VMM实现对虚拟机的创建、管理和调度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.KVM虚拟机创建的用户操作对于用户或者管理员来说,虚拟机的创建有着很多的方法,例如:kvm自带命令行工具、使用virsh命令来创建、使用具有图形界面的virt-manager等等。
但是它们底层实现的原理都是一样的,而且它们基本上都是通过开源的虚拟化库Libvirt来开发的。
下面就讲一讲三种用户可以创建虚拟机的方式。
1.1 利用kvm自带命令行工具进行创建kvm常用命令如下:参数示例说明-hda -hda /data/windows.img 指定windows.img作为硬盘镜像-cdrom -cdrom /data/windows.iso 指定windows.iso作为光盘镜像-boot -boot c 从硬盘启动-boot d 从光盘启动-m -m 512 分配512M存给虚拟系统-vnc -vnc :0 作为vnc服务器-cpu -cpu ? 列出支持的CPU-cpu core2duo 指定CPU为core2duo-smp -smp 2 指定虚拟机有2个CPU-net -net nic 为虚拟机网卡(默认为tap0)-net tap 系统分配tap设备(默认为tap0)1-net nic -net tap 将虚拟机的网卡eth0连接真机里的tap0具体创建一个虚拟机的步骤如下:(1)生成硬盘镜像文件roothost:kvm-img create -f rawtest.img 10G其中“-f raw”指定镜像文件的格式为“raw”,“10G”指定镜像文件大小。
(2)从光盘启动虚拟机来安装操作系统roothost:kvm -boot d -hda test.img-cdrom test.iso -m 512其中“-boot d”指定虚拟机从光盘启动,“-hda test.img”指定硬盘镜像的位置,“-cdrom test.iso”指定光盘镜像的位置,“-m 512”指定虚拟机的存为512M。
(3)安装操作系统后便可直接从硬盘启动虚拟机roothost:kvm -boot c -hda test.img-m 5121.2 利用virsh命令行工具进行创建1.2.1 virsh工具简介Virsh是由一个名叫libvirt的软件提供的管理工具,提供管理虚拟机比较高级的能力。
Virsh 可以管理KVM以及xen等虚拟机。
下面是virsh的一些常见的命令行选项:命令Descriptionhelp 打印基本帮助信息。
list 列出所有客户端。
dumpxml 输出客户端XML 配置文件。
create 从XML 配置文件生成客户端并启动新客户端。
start 启动未激活的客户端。
destroy 强制客户端停止。
define 为客户端输出XML 配置文件。
domid 显示客户端ID。
命令Descriptionhelp 打印基本帮助信息。
list 列出所有客户端。
domuuid 显示客户端UUID。
dominfo 显示客户端信息。
domname 显示客户端名称。
domstate 显示客户端状态。
quit 退出这个互动终端。
reboot 重新启动客户端。
restore 恢复以前保存在文件中的客户端。
resume 恢复暂停的客户端。
save 将客户端当前状态保存到某个文件中。
shutdown 关闭某个域。
suspend 暂停客户端。
undefine 删除与客户端关联的所有文件。
migrate 将客户端迁移到另一台主机中。
命令Descriptionsetmem 为客户端设定分配的存。
setmaxmem 为管理程序设定存上限。
setvcpus 修改为客户端分配的虚拟CPU 数目。
vcpuinfo 显示客户端的虚拟CPU 信息。
vcpupin 控制客户端的虚拟CPU 亲和性。
domblkstat 显示正在运行的客户端的块设备统计。
domifstat 显示正在运行的客户端的网络接口统计。
attach-device 使用XML 文件中的设备定义在客户端中添加设备。
attach-disk 在客户端中附加新磁盘设备。
attach-interface 在客户端中附加新网络接口。
detach-device 从客户端中分离设备,使用同样的XML 描述作为命令attach-device。
detach-disk 从客户端中分离磁盘设备。
detach-interface 从客户端中分离网络接口。
命令Descriptionversion 显示virsh版本nodeinfo 有关管理程序的输出信息1.2.2 virsh命令来创建虚拟机步骤(1)生成硬盘镜像文件roothost:kvm-img create -f rawtest.img 10G(2)编写xml配置文件,这一步在1.2.3节具体介绍(3)创建并运行虚拟机roothost:virsh create test.xml其中“test.xml”指定步骤(2)中创建的xml文件这样一个虚拟机便创建起来了。
1.2.3 xml配置文件的编写利用virsh工具创建虚拟机必须编写xml配置文件,该文件指定虚拟机的各项参数,比如虚拟机名称、磁盘镜像的位置、存大小、显示配置等等。
下面给出一个简单的配置文件的例子。
#test.xml<domain type='qemu'><name>windowsXP</name><uuid></uuid><memory>500000</memory><currentMemory>500000</currentMemory><vcpu>1</vcpu><os><type arch='i686'machine='pc'>hvm</type><boot dev='hd'/><boot dev='cdrom'/></os><devices><emulator>/usr/bin/qemu-system-x86_64</emulator><disk type='file' device='cdrom'><sourcefile='/home/turnupthesun/kvm/windowsXP.iso'/><target dev='hdc'/><readonly/></disk><disk type='file' device='disk'><sourcefile='/home/turnupthesun/kvm/windowsXP.img'/><target dev='hda'/></disk><graphicstype='vnc' port='14' listen='127.0.0.1'/></devices></domain>下面介绍其中几个比较重要的元素及属性。
(1)<domain>元素的type属性指定运行域的虚拟机管理器,针对kvm应当选择“qemu”。
(2)<name>元素的容指定域的名字。
(3)<memory>元素和<currentMemory>元素的容非别指定启动时为域分配的最大存和实际分配的存。
(4)<os></os>元素之间的容用来指定操作系统启动的一些信息。
其中重复的<boot>元素形成了一个启动顺序表,比如例子中先从磁盘启动,磁盘无法启动再从光盘启动。
(5)<disk>元素的device属性指明不同的设备,<source>标签的file属性指明这些设备的位置。
1.3 如何通过图形化界面virt-manager来创建虚拟机Virt-manger既虚拟机管理器,是创建和管理虚拟客户端的图形工具。
具体的操作步骤为:①从控制台窗口启动这个工具,从root身份输入virt-manager命令,点击file菜单的”新建”选项。
②virt-manager显示两种虚拟化方法:Qemu/KVM或者Xen,这里选择Qemu/KVM作为hypervisor。
③选择虚拟机名称和指定一种安装方法,通过网络安装服务器或者本地CD/DVD驱动包括本地ISO文件,在此我用本地ISO的安装方法。
④输入本地ISO文件路径和文件名(假设本地ISO的路径就在根目录下,名称为Mini-BT3.6.1.iso)⑤设置虚拟机使用的存容量和处理器数量。
⑥配置虚拟机的存储方法。
对于存储后端有两种选择:物理存储设备或者使用之前建立的磁盘文件。
如果处于简单测试,创建文件作为存储后端。
当创建虚拟磁盘时,默认为10GB。
⑦网络配置,在这里选择NAT方式。
这样一个虚拟机就开始启动起来了,将会出现启动界面,最后出现虚拟机中操作系统的界面。
二.libvirt函数库如何实现虚拟机创建2.1 virsh工具”create”命令源码在libvirt软件包安装完成之后,就可以看到libvirt的源码,这个源码实现了很多的开发虚拟化软件的用户接口,也就是开发的API。
里面也实现了工具virsh,这个工具也实现了很多的功能。
在/tools下面有一个virsh.c,这个文件里面实现virsh的功能,这里就具体把创建这部分代码选取出来。
/** "create" command*/static const vshCmdInfo info_create[] ={{"help", N_("create a domain from an XML file")},{"desc", N_("Create a domain.")},{NULL, NULL}};static const vshCmdOptDef opts_create[]= {{"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containingan XML domain description")}, #ifndef WIN32{"console", VSH_OT_BOOL, 0, N_("attach to console after creation")},#endif{"paused", VSH_OT_BOOL, 0, N_("leave the guest pausedafter creation")}, {"autodestroy", VSH_OT_BOOL, 0, N_("automatically destroythe guest when virsh disconnects")},{NULL, 0, 0, NULL}};static boolcmdCreate(vshControl *ctl, const vshCmd*cmd){virDomainPtr dom;const char *from = NULL;bool ret = true;char *buffer;#ifndef WIN32int console = vshCommandOptBool(cmd, "console");#endifunsigned int flags = VIR_DOMAIN_NONE;if (!vshConnectionUsability(ctl, ctl->conn))return false;if (vshCommandOptString(cmd, "file", &from) <= 0)return false;if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)return false;if (vshCommandOptBool(cmd, "paused"))flags |= VIR_DOMAIN_START_PAUSED;if (vshCommandOptBool(cmd, "autodestroy"))flags |= VIR_DOMAIN_START_AUTODESTROY;dom = virDomainCreateXML(ctl->conn, buffer, flags);VIR_FREE(buffer);if (dom != NULL) {vshPrint(ctl, _("Domain %s created from %s\n"),virDomainGetName(dom), from);#ifndef WIN32if (console)cmdRunConsole(ctl, dom,NULL);#endifvirDomainFree(dom);} else {vshError(ctl, _("Failed to create domain from %s"), from);ret = false;}return ret;}代码的讲解:⑴typedef struct{const char *name;const char *data;}vshCmdInfo;上面这个结构体是关于命令的键值对信息,命令一般包含两个名称:命令的名字和命令的描述信息。