kvm学习小计
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学习小计的更多相关文章
- Miller-Rabin素数测试学习小计
1.Miller-Rabin是干啥的?它是用来检测一个数字(一般是很大的数字)是不是素数: 2.Miller-Rabin算法基于的两个定理: (1)费尔马小定理:如果p是一个素数,且0<a< ...
- js正则学习小计
//元字符 {} () ^ $ . ? + //预定义字符 \d \D \w \W \s \S //量词 {n,m} {n} {n,} + ? * //贪婪和惰性 //反向引用 //分组 //候选 / ...
- ES6学习小计
1.增加了for of语法,对应C#里的foreach,注意ES5中的 for in只会传递0,1,2.....序号,并且是字符for-of循环语句通过方法调用来遍历各种集合.数组.Maps对象.Se ...
- Docker学习小计
1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...
- Jquery学习小计
实时监听输入框值变化 首先创建Jquery.fn扩展 jQuery.fn.extend({ inputChange: function(callback){ if($.support.leadingW ...
- Python学习小计
1.初学Python最好选择2.7版本,因为大部分Python书籍的示例代码是基于这个版本的 2.Python安装可以参考百度经验完成 如果在电脑上同时安装2个版本,则CMD启动时只需要: py -2 ...
- R学习小计
安装R扩展包:install.packages("FKF")http://www.douban.com/note/243004605/1.输入数据 l读入有分隔符数据:A<- ...
- es6 学习小计
es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这称之为解构:
- 学习小计: Kaggle Learn Embeddings
Embedding表示map f: X(高维) -> Y(低维),减小数据维度,方便计算+提高准确率. 参看Kaggle Learn:https://www.kaggle.com/learn/e ...
随机推荐
- 转:透析QTP自动化测试框架SAFFRON
1.为什么要使用框架? 框架是一组自动化测试的规范.测试脚本的基础代码,以及测试思想.惯例的集合.可用于减少冗余代码.提高代码生产率.提高代码重用性和可维护性.例如QTestWare就是QTP自动化测 ...
- P3414 SAC#1 - 组合数
题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数 ...
- c++ data语意学
Data Member的绑定 extern float x; class Point3d { public: point3d(); //问题:被传回和被设定的x是哪一个x呢? float X() c ...
- Windows API 之 OpenProcessToken、GetTokenInformation
The following example uses the OpenProcessToken and GetTokenInformation functions to get the group m ...
- android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明
android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...
- 第13章 Swing程序设计----标签组件与图标
在Swing中显示文本或提示信息的方法是使用标签.本节将探讨Swing标签的用法.如何创建标签,以及如何在标签上放置文本和图标. 1.标签的使用 标签可以显示一行只读文本.一个图像或带图像的文本,它并 ...
- EF开发程序经常用的几个东西
PM> Install-Package EntityFramework PM> Install-Package AutoFac PM> Install-Package AutoMap ...
- laravel 报错 mcrypt_decrypt(): Key of size 11 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported
修改app/config/app.php文件 将key设置成长度为16,24,32的字符串
- 转:WebDriver(Selenium2)模拟鼠标经过事件
在自动化测试过程中,由于javascript的使用,我们常常需要点击一些鼠标经过显示的菜单等元素,这时需要触发该元素的鼠标经过事件.使用WebDriver有以下两种实现. 1.使用Action pub ...