




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、kvm 常用命令如下:参数 示例-hda-hda/data/windows.img-cdro -cdromm /data/windows.iso-boot -boot c-boot d-m -m 512-vnc -vnc :0-cpu -cpu ?-cpu core2duo-smp -smp 2-net -net nic-net tap一.KVM虚拟机创建的用户操作对于用户或者管理员来说,虚拟机的创建有着很多的方法,例如: kvm 自带命令行工 具、使用 virsh 命令来创建、使用具有图形界面的 virt-manager 等等。但是它们底层实现 的原理都是一样的,而且它们基本上都是通过开源的
2、虚拟化库Libvirt 来开发的。下面就讲一讲三种用户可以创建虚拟机的方式。1.1 利用 kvm 自带命令行工具进行创建说明指定 windows.img 作为硬盘镜像指定 windows.iso 作为光盘镜像从硬盘启动 从光盘启动分配 512M 内存给虚拟系统作为 vnc 服务器列出支持的 CPU指定 CPU 为 core2duo-net nic -net tap将虚拟机的网卡 eth0 连接真机里的指定虚拟机有 2 个 CPU 为虚拟机网卡(默认为 tap0 ) 系统分配 tap 设备(默认为 tap0 ) 1参数示例说明tapO具体创建一个虚拟机的步骤如下:(1)生成硬盘镜像文件rooth
3、ost: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 -boo
4、t c -hda test.img-m 5121.2利用virsh命令行工具进行创建1.2.1 virsh 工具简介Virsh是由一个名叫libvirt的软件提供的管理工具,提供管理虚拟机比较高级的能力。Virsh可以管理KVM以及xen等虚拟机。下面是virsh的一些常见的命令行选项:Descripti onhelp打印基本帮助信息。list列出所有客户端。dumpxml输出客户端 XML配置文件。create从XML配置文件生成客户端并启动新客户端。Descripti onhelp打印基本帮助信息。list列出所有客户端。start启动未激活的客户端。destroy强制客户端停止。defi
5、 ne为客户端输出 XML配置文件。domid显示客户端ID。domuuid显示客户端 UUID。dominfo显示客户端信息。domn ame显示客户端名称。domstate显示客户端状态。quit退出这个互动终端。reboot重新启动客户端。restore恢复以前保存在文件中的客户端。resume恢复暂停的客户端。save将客户端当前状态保存到某个文件中。shutdow n关闭某个域。suspend暂停客户端。un defi ne删除与客户端关联的所有文件。migrate将客户端迁移到另一台主机中。Descripti onsetmem为客户端设定分配的内存。help list setmax
6、mem setvcpus vcpu info vcpup in domblkstat domifstat attach-device attach-disk attach-i nterfa ce detach-devic e detach-disk detach-i nterf acehelp list setmaxmem setvcpus vcpu info vcpup in domblkstat domifstat attach-device attach-disk attach-i nterfa ce detach-devic e detach-disk detach-i nterf a
7、ceDescripti on打印基本帮助信息。列出所有客户端。为管理程序设定内存上限。修改为客户端分配的虚拟CPU数目。显示客户端的虚拟 CPU信息。控制客户端的虚拟 CPU亲和性。显示正在运行的客户端的块设备统计。显示正在运行的客户端的网络接口统计。使用XML文件中的设备定义在客户端中添加设备。在客户端中附加新磁盘设备。在客户端中附加新网络接口。从客户端中分离设备,使用同样的XML描述作为命令versi on显示virsh 版本nodeinfo有关管理程序的输出信息1.2.2 virsh命令来创建虚拟机步骤(1 )生成硬盘镜像文件roothost:kvm-img create -f rawt
8、est.img 10G(2 )编写 xml 配置文件,这一步在 1.2.3 节具体介绍(3 )创建并运行虚拟机roothost:virsh create test.xml其中“ test.xml ”指定步骤( 2 )中创建的 xml 文件这样一个虚拟机便创建起来了。1.2.3 xml 配置文件的编写利用 virsh 工具创建虚拟机必须编写 xml 配置文件, 该文件指定虚拟机的各项参数, 比如虚 拟机名称、 磁盘镜像的位置、内存大小、 显示配置等等。 下面给出一个简单的配置文件的例 子。#test.xmlwindowsXP5000005000001hvm/usr/bin/qemu-system
9、-x86_64下面介绍其中几个比较重要的元素及属性。(1 ) 元素的 type 属性指定运行域的虚拟机管理器, 针对 kvm 应当选择“ qemu ”。(2 ) 元素的内容指定域的名字。( 3) 元素和 元素的内容非别指定启动时为域分配的最大 内存和实际分配的内存。 (4 ) 元素之间的内容用来指定操作系统启动的一些信息。 其中重复的 元素形成了一个启动顺序表,比如例子中先从磁盘启动,磁盘无法启动再从光盘启动。(5 ) 元素的 device 属性指明不同的设备, 标签的 file 属性指明这些设 备的位置。1.3 如何通过图形化界面 virt-manager 来创建虚拟机Virt-manger
10、 既虚拟机管理器,是创建和管理虚拟客户端的图形工具。具体的操作步骤为: 从控制台窗口启动这个工具,从 root 身份输入 virt-manager 命令,点击 file 菜单 的”新建”选项。 virt-manager 显示两种虚拟化方法: Qemu/KVM 或者 Xen ,这里选择 Qemu/KVM作为 hypervisor 。 选择虚拟机名称和指定一种安装方法,通过网络安装服务器或者本地 CD/DVD 驱动包 括本地 ISO 文件,在此我用本地 ISO 的安装方法。 输入本地 ISO 文件路径和文件名 ( 假设本地 ISO 的路径就在根目录下,名称为 Mini-BT3.6.1.iso) 设
11、置虚拟机使用的内存容量和处理器数量。 配置虚拟机的存储方法。对于存储后端有两种选择:物理存储设备或者使用之前建立 的磁盘文件。如果处于简单测试, 创建文件作为存储后端。 当创建虚拟磁盘时, 默认为 10GB 。 网络配置,在这里选择 NAT 方式。这样一个虚拟机就开始启动起来了, 将会出现启动界面, 最后出现虚拟机中操作系统的界面。 二 libvirt 函数库如何实现虚拟机创建2.1 virsh 工具” create ”命令源码在 libvirt 软件包安装完成之后,就可以看到 libvirt 的源码,这个源码实现了很多的开发虚 拟化软件的用户接口,也就是开发的 API 。里面也实现了工具 v
12、irsh ,这个工具也实现了很 多的功能。 在 /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_(fi
13、le containingan XML domain description),#ifndef WIN32console, VSH_OT_BOOL, 0, N_(attach to console after creation),#endifpaused, 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 boo
14、lcmdCreate(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,
15、 file, &from) = 0)return false ;if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) conn, buffer, flags);VIR_FREE(buffer);if (dom != NULL) vshPrint(ctl, _(Domain %s created from %sn), virDomainGetName(dom), from);#ifndef WIN32if (console)cmdRunConsole(ctl, dom,NULL);#endifvirDomainFree(dom); else
16、vshError(ctl, _(Failed to create domain from %s), from);ret = false;return ret;代码的讲解: typedef structconst char *name;const char *data;vshCmdInfo;上面这个结构体是关于命令的键值对信息,命令一般包含两个名称:命令的名字和命令的 描述信息。 typedef structconst char *name;vshCmdOptType type;unsigned int flags;const char *help;vshCmdOptDef;上面这个结构体是关于
17、命令选项的定义,该结构体一般包括四个字段:选项的名称,选项 类型,标志,帮助信息。其中选项类型包括: bool 类型,字符串类型,整型,字符数据, 剩余的参数。 在 cmdCreate 主程序中有一个特别重要的函数: virDomainCreateXML() ,这个函数 的 最 初 原 型 是 : virDomainPtr virDomainCreateXML (virConnectPtr conn,const char*xmlDesc,unsigned int flags),这个函数是基于一个指定的 XML 文件来创建一个虚拟机,其中 conn 表示一个指向 hypervisor 的连接,
18、xmlDesc 表示一个 XML 文件, flags 表 示命令选项的标志。2.2 通过 libvirt 创建虚拟机的关键 API通过分析 2.1 中的 virsh 源码我们可以看出, 使用 libvirt 进行虚拟机创建要调用两个关键的API- virFileReadAll 和 virDomainCreateXML ,下面分别进行说明。2.2.1 virFileReadAll该函数原型为 intvirFileReadAll(const char *path, int maxlen, char *buf),功能是将参数“ path ”指定路径的文件内容读到一个缓冲区中, 并将缓冲区地址记录在参
19、数 “ *buf ” 中,而参数“ maxlen ”指定文件的最大长度。利用该 API ,我们可以将 xml 配置文件都到 一个缓冲区中,以方便接下来的使用。2.2.2virDomainCreateXML该函数原型为 virDomainPtr virDomainCreateXML (virConnectPtrconn, const char * xmlDesc, unsigned int flags) ,功能是根据参数“ xmlDesc ”定义的配置方式创建 一个域并返回该域的指针。参数“ conn ”是指向虚拟机管理器的指针,而通过设置不同的 “flags ”标志,可以使创建的域具有不同的属
20、性。三 利用 libvirt 库编写自己的虚拟机创建程序Virsh 命令用来创建虚拟机的命令是: virsh create, 这个命令主要是从给定的 XML 文件 生成客户端并启动客户端。下面用一个测试例子来说明如何通过 virsh 命令来创建虚拟机的。具体的操作实践步骤是: 首先需要创建虚拟硬盘,为了放置操作系统的地方,命令是: kvm-img create 701.img10G, 也就是创建一个大小为 10G 的虚拟硬盘。2. 编写一个 xml 文件,这个文件里面包含启动操作系统的一些特征,比如:内存容量, 操作系统位置,虚拟硬盘位置等等,其实有很多的字段,可以简写一个 xml 文件,如果
21、有 些字段没有定义, 那么系统就会默认, 下面给出一个 xml 文件, 命名为 701.xml ,程序为: linux10.04215120005120001hvm/usr/bin/qemu-system-x86_643. 接着编写一个 c 文件 ,名称为 701.c 这个文件主要实现的功能就是调用这个 xml 文件 来创建并启动虚拟机。这个 c 程序代码为:#include#include#include#includeconst char *from=NULL;static virConnectPtr conn=NULL;#define VIRSH_MAX_XML_FILE 10*1024
22、*1024void closeConn()if(conn!=NULL)virConnectClose(conn);int cmdCreate()virDomainPtr dom;char *buffer;unsigned int flags=VIR_DOMAIN_NONE;conn=virConnectOpen(qemu:/system);if(conn=NULL)fprintf(stderr,failed to connect tohypervisor/n);closeConn();return 0;if(virFileReadAll(from,VIRSH_MAX_XML_FILE,&buf
23、fer)0)return 0;dom=virDomainCreateXML(conn,buffer,flags);memset(buffer,0,sizeof(buffer);%screatedif(dom!=NULL)fprintf(stdout,Domainfrom %sn,virDomainGetName(dom),from);virDomainFree(dom);elsefprintf(stdout,Failed to createdomain from %s,from);int main(int argc,char *argv)if(argcvm_fd,KVM_CREATE_IRQC
24、HIP) 。5 ,函数 kvm_create_vcpu() :用于创建虚拟处理器。该函数原型为:int kvm_create_vcpu(kvm_context_t kvm, intslot);参数: kvm 表示对应用户态虚拟机上下文, slot 表示需要创建的虚拟处理器的个数。该函数通过 ioctl 系统调用 ioctl(kvm-vm_fd,KVM_CREATE_VCPU,slot) 创建属于该虚拟机的虚拟处理器。该系统调用函数:Static init kvm_vm_ioctl_create_vcpu(struct*kvm, n)参数 kvm 为内核虚拟机实例数据结构, n 为创建的虚拟 C
25、PU 的数目。6 ,函数 kvm_create_phys_mem()用于创建虚拟机内存空间,该函数原型:Void * kvm_create_phys_mem(kvm_context_tkvm,unsigned long phys_start,unsigned len,int log,int writable);参数:kvm 表示用户态虚拟机上下文信息,phys_start为分配给该虚拟机的物理起始地址,len 表示内存大小, log 表示是否记录脏页面, writable 表示该段内存对应的页表是否可写。该 函 数 首 先 申 请 一 个 结 构 体 kvm_userspace_memory_region 然 后 通 过 系 统 调 用 KVM_SET_USER_MEMO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人手机使用协议
- 专利合同转让协议书
- 全新餐饮租赁商铺合同
- 担保合同于违约责任
- 广告服务居间合同
- 三农产品电商市场渠道拓展与优化方案
- 2025年高压叉车考试试题及答案
- 4.4 公式法(2)完全平方公式法 -八年级数学下册10分钟课前预习练(北师大版)(原卷版)
- 2025年广东中学考试试题及答案
- 人教版部编版小学语文一年级上册我上学了教学设计教案
- 洗浴中心转让合同(5篇)
- 外研版小学英语五年级下册课文翻译
- YY-T 1823-2022 心血管植入物 镍钛合金镍离子释放试验方法
- 年产12000吨水合肼(100%)项目环评报告书
- 钻芯法检测混凝土抗压强度原始记录1
- 液压支架与泵站(第二版)课件汇总全书电子教案完整版课件最全幻灯片(最新)
- 分布式光伏电站支架结构及荷载计算书
- GB∕T 37045-2018 信息技术 生物特征识别 指纹处理芯片技术要求
- DB61∕T 1186-2018 花椒主要病虫害防治技术规范
- DB32T 4013-2021 第三方社会稳定风险评估技术规范
- QC成果提高大跨度多节点曲面钢桁架一次安装合格率
评论
0/150
提交评论