1.Kvm安装

安装方法两种方式,一种是直接下载源码编译安装,一种是直接使用yum install kvm/apt-get install kvm,这部分就不详细说明了,我使用的是第二种方法,待后

续需要研究源码的时候再下载源码,当前没有此部分的需求

2.Kvm镜像创建

使用一下命令可以创建一个指定类型和指定大小的空镜像,镜像文件类型参加下面说明,不同类型的文件具有不同的效果,此处我没有一一尝试,直接使用系统推荐的默认类型qcow2,因为qcow2具有copy and write属性方便拷贝使用。

Image types

QEMU supports several image types. The "native" and most flexible type is qcow2, which supports copy on write, encryption, compression, and VM snapshots.

QEMU currently can use these image types or formats:

raw
(default) the raw format is a plain binary image of the disc image, and is very portable. On filesystems that support sparse files, images in this format only use the space actually used by the data recorded in them.
cloop
Compressed Loop format, mainly used for reading Knoppix and similar live CD image formats
cow
copy-on-write format, supported for historical reasons only and not available to QEMU on Windows
qcow
the old QEMU copy-on-write format, supported for historical reasons and superseded by qcow2
qcow2
QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don't support sparse files, optional AES encryption, and optional zlib compression
vmdk
VMware & , or image format, for exchanging images with that product
vdi
VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox.
qemu-img create -f qcow2 wi7.img 10G

从IOS安装系统

下面有个部分可能和网上其他的不同,网上很多资料都现实使用qemu但是我这里qemu显示无法使用,kvm相当于qemu的别名了,这部分具体的原因暂时就不去深究了,后续文章中再进行补充

以下两种方式是通过iso镜像或者光驱来向指定的镜像安装系统

kvm -m  -hda win7.img -cdrom win7sp2.iso -boot d
kvm -m  -hda winxp.img -cdrom /dev/cdrom -boot d

3.Kvm镜像克隆(创建)

 这部分说是创建其实就是克隆,把已经安装好的系统克隆出一个可用镜像,后续创建可以直接使用该镜像进行创建

qcow2格式支持copy and write 我们可以使用qemu-img命令把已经安装配置好的系统创建成镜像后续可以直接使用该镜像进行虚拟机的创建方便快捷

  qemu-img create -f qcow2 -o backing_file=win7.img test01.img

创建后我们目录下就会多出来一个test01.img,就可以直接使用命令来启动机器

kvm -m  -hda test01.img

4.Kvm远程连接

启动kvm镜像的时候可以使用monitor监听socket,监听之后可以通过socket连接到monitor进行操作,例如:查看状态、关机等

下面提供简单示例

kvm -m  -hda test01.img -monitor unix:/home/guowei/working/kvm/kvmsocket,server,nowait
socat - UNIX-CONNECT:/home/guowei/working/kvm/kvmsocket
(qemu) system_powerdown //关机
//info可以查看信息
(qemu) info name  //名称  
(qemu) info vnc  //vnc信息
 

5.Kvm Vnc连接

//创建镜像指定vnc server信息
kvm -smp -m -hda test01.img -monitor unix:/home/guowei/working/kvm/kvmsocket,server,nowait -name guowei -uuid 5a35a426-f7ce-11dd-abd2-0017f227cfc7 -nographic -vnc 127.0.0.1:1

//使用socat连接monitor,同时可以使用sendkey命令发送ctrl-alt-delete快捷键,使用set_password vnc 设置vnc连接密码

socat - UNIX-CONNECT:/home/guowei/working/kvm/kvmsocket
sendkey ctrl-alt-delete #设置密码
set_password vnc 1111111

6.使用vncview连接虚拟机

使用vncviewer可以远程连接虚拟机同步屏幕

vncviewer 127.0.0.1:

7. kvm虚拟主机主机名称和密码修改

可以使用 CloudBaseInit来操作虚拟主机的主机名称和密码,CloudBaseInit密码注入是通过客户端下载服务器的meta_data.json数据文件进行对比注入的,第一次注入之后会在注册 表中更新HKEY_LOCAL_MACHINE/SOFTWARE/Cloudbase Sloutions/Cloudbase-Init/***/Plugins/SetUserPasswordPlugin值为1,表示下次不再更新,我们处理的时候需要保持SetUserPasswordPlugin始终为0,即每次启动都要检测密码是否需要修改。为了实现功能就需要修改 CloudBaseInit的脚本,增加特殊判断不更新密码重置状态。

CloudBaseInit有关于初始化的所有脚本在对应的安装目录下的/Cloudbase-Init/Python27/Lib /site-packages/cloudbaseinit目录下,我们需要修改的就是该目录下的init.py,对比修改内容如下:

68,73c68
<                 #notice:Execture SetUserPasswordPlugin and do
not change status
<                 #Check Password everytime when service start
<                 if plugin_name == "SetUserPasswordPlugin":
<                    LOG.info('Execture SetUserPasswordPlugin 
plugin  do not update status and continue')
<                 else:
<                   self._set_plugin_status(osutils, instance_id,
plugin_name,
---
>                 self._set_plugin_status(osutils, instance_id,
plugin_name,

以上增加了对SetUserPasswordPlugin插件的特殊判断,有一点需要注意,增加内
容的前面空白地方需要使用空格不能使用tab,如果是空格的话服务可以正常启动,如果是tab的话服务就无法启动报启动失败的错误,具体原因
不太清楚,这部分可以当作一个潜规则来处理。创建虚拟机的时候可以直接使用附件里面的init.py进行替换,对于多个虚拟机
修改密码的问题后续再进行研究

meta_data.json数据使用如下内容

{
"admin_pass": "Testi123456",
"uuid": "d8e02d56-2648-49a3-bf97-6be8f1204f38",
"availability_zone": "nova",
"hostname": "testhostname",
"launch_index": 0,
"meta": {
"priority": "low",
"role": "webserver"
},
"public_keys": {
"mykey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDYVEprvtYJXVOBN0XNKVVRNCRX6BlnNbI+USLGais1sUWPwtSg7z9K9vhbYAPUZcq8c/s5S9dg5vTHbsiyPCIDOKyeHba4MUJq8Oh5b2i71/3BISpyxTBH/uZDHdslW2a+SrPDCeuMMoss9NFhBdKtDkdG9zyi0ibmCP6yMdEX8Q== Generated by Nova\n"
}
}

参考:

https://en.wikibooks.org/wiki/QEMU/Images

http://www.nico.schottelius.org/blog/control-and-shutdown-qemu-kvm-vm-via-unix-socket/

http://www.nico.schottelius.org/blog/tunneling-qemu-kvm-unix-socket-via-ssh/

https://cloudinit.readthedocs.org/en/latest/

http://www.cloudbase.it/cloud-init-for-windows-instances/

http://cloudinit.readthedocs.org/en/latest/index.html

https://blueprints.launchpad.net/cloud-init/+spec/set-image-root-password

//web vnc

https://github.com/InstantWebP2P/peer-vnc

kvm学习小计的更多相关文章

  1. Miller-Rabin素数测试学习小计

    1.Miller-Rabin是干啥的?它是用来检测一个数字(一般是很大的数字)是不是素数: 2.Miller-Rabin算法基于的两个定理: (1)费尔马小定理:如果p是一个素数,且0<a< ...

  2. js正则学习小计

    //元字符 {} () ^ $ . ? + //预定义字符 \d \D \w \W \s \S //量词 {n,m} {n} {n,} + ? * //贪婪和惰性 //反向引用 //分组 //候选 / ...

  3. ES6学习小计

    1.增加了for of语法,对应C#里的foreach,注意ES5中的 for in只会传递0,1,2.....序号,并且是字符for-of循环语句通过方法调用来遍历各种集合.数组.Maps对象.Se ...

  4. Docker学习小计

    1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...

  5. Jquery学习小计

    实时监听输入框值变化 首先创建Jquery.fn扩展 jQuery.fn.extend({ inputChange: function(callback){ if($.support.leadingW ...

  6. Python学习小计

    1.初学Python最好选择2.7版本,因为大部分Python书籍的示例代码是基于这个版本的 2.Python安装可以参考百度经验完成 如果在电脑上同时安装2个版本,则CMD启动时只需要: py -2 ...

  7. R学习小计

    安装R扩展包:install.packages("FKF")http://www.douban.com/note/243004605/1.输入数据 l读入有分隔符数据:A<- ...

  8. es6 学习小计

    es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这称之为解构:

  9. 学习小计: Kaggle Learn Embeddings

    Embedding表示map f: X(高维) -> Y(低维),减小数据维度,方便计算+提高准确率. 参看Kaggle Learn:https://www.kaggle.com/learn/e ...

随机推荐

  1. js框架——angular.js(6)

    1. ng-class 这个指令是用来绑定一个或者多个css代码.它的值一般是一个表达式,也可以是函数什么的,只要返回的确实是一个类的名字就可以—— ng-class="nextPageDi ...

  2. HDU-1232--畅通工程(最小生成树)

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  3. 滑轮关节(b2PulleyJoint)

    package{ import Box2D.Collision.b2AABB; import Box2D.Collision.b2RayCastInput; import Box2D.Collisio ...

  4. oracle 管理

    1.管理数据的用户主要是:sys和system. 区别:(1)sys所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle是至关重要的,由数据库自己维护,任何用户都 ...

  5. L4,an exciting trip

    expressions: a great number of 许多 in the centre of 在…的中部 sentences: I have just had breakfast. I hav ...

  6. Opencv 图像叠加 添加水印

    Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...

  7. ZooKeeper概述

    1.Zookeeper概述 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置 ...

  8. jq的事件冒泡

    在页面上可以有多个事件,也可以多个元素响应同一件事, 事件冒泡引发的问题: 有些时候不想动用的事件,却因为事件冒泡而触发 解决问题: 1.事件对象 由于IE-DOM和标准的DOM实现事件对象的方法各不 ...

  9. 在web项目中使用cxf开发webservice,包含spring支持

    本文主要介绍了,如何使用cxf内置的例子,学会开发webserivce,在web项目中使用,且包含spring支持. webserivce的开发可以使用cxf或者axis,好像还有httpclient ...

  10. asp.net MVC 3多语言方案--再次写, 配源码

    之前写了一篇asp.net MVC多语言方案,那次其实是为American Express银行开发的.有许多都是刚开始接触,对其也不太熟悉.现在再回过头去看,自己做一个小网站,完全用asp.net m ...