【自】kvm虚拟化笔记

 

内核态  用户态

Image

虚拟化介绍:CPU\内存\各种IO设备

Image(1)

cpu虚拟化:

 

Popek,Glodberg关于虚拟化的定义:

1、等价执行

2、性能良好

3、安全隔离

模拟虚拟化:trap(陷阱)>>emulate(模拟,仿真),即通过陷阱来捕获,进而模拟,因性能较低,被弃用

完全虚拟化:可以运行所有的操作系统(含开源和非开源),但性能较低

para半虚拟化:不可以运行非开源操作系统,性能较高

hvm硬件虚拟化:性能比完全虚拟化更好,且可以运行非开源系统

MMU:负责VA(虚拟地址)到PA(物理地址)的转换

内存虚拟化:GVA(guestVA)>>GPA(guestPA)>>HPA>>ShadowMMU>>MMU

TLB技术解决VA到PA的映射关系;tagged TLB

IO虚拟化:IO设备非常多

受限于VMM的实现方式:

type1型:hypervisor运行在硬件上,各操作系统都是虚拟机实例,性能比type2高,然hypervisor需要驱动各种IO设备,XEN实际仅驱动了DOM0特权域来调用硬件

typer2型:某操作系统运行在硬件上,操作系统上运行的软件是VMM

VMM对IO的驱动模式大致分为:

IO虚拟化模式纯模拟实现(由VMM自行提供驱动)、IO半虚拟化、混合模式Hybird(有的利用DOM0,有的利用DOMu):

Hybird:例如VMware EXS

SR-IOV 、 PF->VF 、VT-D;透传

完全虚拟化:VmWare Workstation、Vitural Box

半虚拟化:XEN

KVM笔记:

Image(2)

KVM不是stype1,也不是stype2

qemu: 可以模拟cpu、IO、内存,能创建、管理虚拟机,体积很小

cpu:kqemu(二进制翻译器,加速qemu,但bug多)

模式:用户模式、内核模式、来宾模式

VCPU:用线程模拟实现

modprobe kvm  //rh6加载kvm

lsmod | grep kvm

ll /dev/    //查询kvm是否存在

Image(3)

Image(4)

Image(5)

【虚拟化的时钟一致性务必使用ntp服务器,任何一种虚拟设备的时钟机制都不能保证时钟一致性】

virtio技术:IO半虚拟化

Image(6)

kvm基本架构:

Image(7)

kvm的一般情况下的两套管理工具:qemu、virtual

Image(8)

grep -i “kvm” /boot/config-2.6.32-431.el6.x86_64  //查看kvm装载的情况

cat /proc/cpuinfo  //查看cpu信息

Image(9)

grep -Ei “vmx|svm” /proc/cpuinfo  //查看cpuinfo中是否有vmx(vmx是intel的cpu支持虚拟化的标志,没有就是不支持)或者svm(svm是amd的cpu支持虚拟化的标志,没有就是不支持)

yum -y install qemu-kvm qemu-kvm-tools //安装qemu-kvm,允许虚拟化IO

yum grouplist |grep -i “Virtualization”  //上面的方法可以使用本方法

yum groupinfo “Virtualization”

然后安装qemu

#查看qemu信息

rpm -ql qemu-kvm

#添加软连接

ln -sv /usr/libexec/qemu-kvm /usr/sbin

#查看qemu信息

qemu-kvm -h

Image(10)

Image(11)

Image(12)

Image(13)

Image(14)

qemu-img resize /images/vm2/test.qcow2 30G   //增大或缩减images文件大小,resize只能扩展不能减小

qemu-img info /images/vm2    //查看images文件大小

qemu-img info test.qcow2  //查看文件大小

qemu-kvm -M ?  //查看支持哪些操作系统的虚拟化

qemu-kvm -cpu ?  //查看支持哪些操作cpu的虚拟化

qemu-kvm  -net nic,model=?   //查看支持的网络设备的接口类型

numa:非对称性的一致访问技术

#实例化一个kvm虚拟机【以下仅供参考,不熟悉参数操作则不成功】

mkdir /images/vm1 -pv  //建立一个vm的镜像存放地址

qemu-img create -f qcow2 -o size=100G /images/vm1/ubuntu.qcow2  //创建虚拟机镜像文件名字、文件大小

qemu-kvm -name “[ubuntu][winxp]” -m 768 -smp 2 -hda /images/vm1/ubuntu.qcow2 [ubuntu-12.04.1-desktop-i386.iso][-cdrom exam-boot-xp.iso] -boot order=dc -net nic  //创建[ubuntu系统][winxp系统]的虚拟机,此时会提示启动虚拟机成功在vnc模式下

ps aux|grep kvm  //查看启动的虚拟机的进程,若删除虚拟机直接kill进程就行

yum -y install tigervnc-server  //在宿主机(hypervisoer)安装连接虚拟机的vnc服务端

vncserver :1  //通过vnc连接虚拟机

yum -y install tigervnc //在宿主机安装vnc客户端

vncviewer :5900 //在宿主机端连接虚拟机

#VNC 客户端连接kvm虚拟机

1\在远端win系统下,使用xshell连接前需要安装xming(xmanager),并配置xshell的隧道xming【如下图】

vncviewer [ip]:[kvm虚拟机的端口号][CTRL]

显示kvm虚拟机界面即为正常

#kvm高级

#创建虚拟网桥脚本

#设置虚拟网网桥,将eth0连至br0【过程略】

vim /etc/qemu-ifup  //可以在默认位置创建虚拟网桥的脚本

#/bin/bash

#/etc/qemu-ifup

#

switch=br0

if [-n “$1”];then

ifconfig $1 up

sleep 0.5s

brtcl addif $switch $1

exit 0

else

echo “Error:no specifed interface.”

exit 1

fi

bash -n /etc/qemu-ifup   //检查bash语法是否错误

chmod +x /etc/qemu-ifup

#启动方案一

qemu-kvm -name “winxp” -m 768 -smp 4 -drive file=/mirros/vm1/winxp.qcow2,if=ide,index=0,media=disk,format=qcow2 -drive file=/root/winxp_ghost.iso,media=cdrom,index=1 -boot order=dc -net tap,ifname=vnet0,script=/etc/qemu-ifup  //创建tap设备,使用脚本并桥接到物理桥上

#启动方案二

qemu-kvm -name “winxp” -m 768 -smp 4 -drive file=/mirros/vm1/winxp.qcow2,if=ide,index=0,media=disk,format=qcow2 -drive file=/root/winxp_ghost.iso,media=cdrom,index=1 -boot order=dc -net tap,ifname=vnet0,downscript=no  //创建tap设备,不使用脚本并桥接到物理桥上

brctl show   //查看网桥情况【 安装brctl命令  yum install bridge-utils】

【ctrl+alt+2  //在启动过程中查看监控接口

info netowrk  //查看网络

info cpu  //查看CPU信息】

#kvm虚拟使用进程

dnsmasq的几种网络模型:NAT、路由、

Image(15)

dnsmasq:既可以作为dns使用,也可以作为dhcp使用

yum install dnsmasq -y

Image(16)

路由模型:Image(17)

Image(18)

隔离模型

Image(19)

桥接模型:

Image(20)

多路桥接模型:

Image(21)

启动测试:

Image(22)

#/bin/bash

#/etc/qemu-ifup

#

switch=virbr0

if [-n “$1”];then

ifconfig $1 up

sleep 0.5s

brtcl addif $switch $1

exit 0

else

echo “Error:no specifed interface.”

exit 1

fi

SDL:simple directmedia layer 简单的多媒体

VNC: virtual network computing 虚拟网络计算,基于RFB

display:

(1)host:N

172.16.100.7:1   监听于172.16.100.7的5900+N的端口上

(2)unix:/path/to/socket_file

(3)none

options:

password:连接时需要验证密码,设定密码通过monitor接口使用change

reverse:”反向”连接至某处于监听状态的vncview上

-monitor stdio:表示在标准输入输出上显示mobitor界面

-nographic :

ctrl-a,c:在console和monitor之间切换

ctrl-a,h:显示帮助信息

Image(23)

镜像文件格式转换:

Image(24)

快照文件命令:

Image(25)

#kvm高级使用

http://launchpad.net/cirros/+download     //cirros镜像文件仓库

Image(26)

monitor:

help

info

cpus

migrate  //迁移内存命令

-incoming

Image(27)

Image(28)

#libvirt   virtual模式:

Image(29)

Image(30)

Image(31)

Image(32)

Image(33)

Image(34)

Image(35)

yum -y install liabvirt virt-manager virt-viewer python-virtinst   //安装virt的几个包

 

virt-install 创立的虚拟机会被保存在硬盘,重启并不影响,且名字唯一;qemu则不行,重启虚拟机就会消失

Image(36)

libvirt实例:

yum -y install python-virtinst libvirt  //安装virtins libvirt

service libvirtd start  //启动libvirt

virsh help iface-bridge  //virsh查看iface-bridge帮助

virsh iface-bridge eth0 br0  //关联eth0和br0

virsh -h   //查看virsh的帮助

【注】如果启动libvirtd错误如下解决:yum -y upgrade device-mapper-libs

Image(37)

【注】在vmware workstations情况下,需要开启以下设置,才会有/dev/kvm

Image(38)

virsh命令:

help            打印帮助
attach-device   从一个XML文件附加装置
attach-disk     附加磁盘设备
attach-interface 获得网络界面
autostart       自动开始一个域
capabilities    性能
cd              change the current directory
connect         连接(重新连接)到 hypervisor
console         连接到客户会话
cpu-baseline    compute baseline CPU
cpu-compare     compare host CPU with a CPU described by an XML file
create          从一个 XML 文件创建一个域
start           开始一个(以前定义的)非活跃的域
destroy         删除一个域
detach-device   从一个 XML 文件分离设备
detach-disk     分离磁盘设备
detach-interface 分离网络界面
define          从一个 XML 文件定义(但不开始)一个域
domid           把一个域名或 UUID 转换为域 id
domuuid         把一个域名或 id 转换为域 UUID
dominfo         域信息
domjobinfo      domain job information
domjobabort     abort active domain job
domname         将域 id 或 UUID 转换为域名
domstate        域状态
domblkstat      获得域设备块状态
domifstat       获得域网络接口状态
dommemstat      get memory statistics for a domain
domblkinfo      domain block device size information
domxml-from-native Convert native config to domain XML
domxml-to-native Convert domain XML to native config
dumpxml         XML 中的域信息
edit            编辑某个域的 XML 配置
find-storage-pool-sources 发现潜在存储池源
find-storage-pool-sources-as 找到潜在存储池源
freecell        NUMA可用内存
hostname        打印管理程序主机名
list            列出域
migrate         将域迁移到另一个主机中
migrate-setmaxdowntime set maximum tolerable downtime
net-autostart   自动开始网络
net-create      从一个 XML 文件创建一个网络
net-define      从一个 XML 文件定义(但不开始)一个网络
net-destroy     删除一个网络
net-dumpxml     XML 中的网络信息
net-edit        为网络编辑 XML 配置
net-list        列出网络
net-name        把一个网络UUID 转换为网络名
net-start       开始一个(以前定义的)不活跃的网络
net-undefine    取消定义一个非活跃的网络
net-uuid        把一个网络名转换为网络UUID
iface-list      list physical host interfaces
iface-name      convert an interface MAC address to interface name
iface-mac       convert an interface name to interface MAC address
iface-dumpxml   interface information in XML
iface-define    define (but don’t start) a physical host interface from an XML file
iface-undefine  undefine a physical host interface (remove it from configuration)
iface-edit      edit XML configuration for a physical host interface
iface-start     start a physical host interface (enable it / “if-up”)
iface-destroy   destroy a physical host interface (disable it / “if-down”)
managedsave     managed save of a domain state
nodeinfo        节点信息
nodedev-list    这台主机中中的枚举设备
nodedev-dumpxml XML 中的节点设备详情
nodedev-dettach dettach node device from its device driver
nodedev-reattach reattach node device to its device driver
nodedev-reset   重置节点设备
nodedev-create  create a device defined by an XML file on the node
nodedev-destroy destroy a device on the node
nwfilter-define define or update a network filter from an XML file
nwfilter-undefine undefine a network filter
nwfilter-dumpxml network filter information in XML
nwfilter-list   list network filters
nwfilter-edit   edit XML configuration for a network filter
pool-autostart  自动启动某个池
pool-build      建立池
pool-create     从一个 XML 文件中创建一个池
pool-create-as  从一组变量中创建一个池
pool-define     在一个 XML 文件中定义(但不启动)一个池
pool-define-as  在一组变量中定义池
pool-destroy    销毁池
pool-delete     删除池
pool-dumpxml    XML 中的池信息
pool-edit       为存储池编辑 XML 配置
pool-info       存储池信息
pool-list       列出池
pool-name       将池 UUID 转换为池名称
pool-refresh    刷新池
pool-start      启动一个(以前定义的)非活跃的池
pool-undefine   取消定义一个不活跃的池
pool-uuid       把一个池名称转换为池 UUID
secret-define   define or modify a secret from an XML file
secret-dumpxml  secret attributes in XML
secret-set-value set a secret value
secret-get-value Output a secret value
secret-undefine undefine a secret
secret-list     list secrets
pwd             print the current directory
quit            退出这个非交互式终端
exit            退出这个非交互式终端
reboot          重新启动一个域
restore         从一个存在一个文件中的状态恢复一个域
resume          重新恢复一个域
save            把一个域的状态保存到一个文件
schedinfo       显示/设置日程安排变量
dump            把一个域的内核 dump 到一个文件中以方便分析
shutdown        关闭一个域
setmem          改变内存的分配
setmaxmem       改变最大内存限制值
setvcpus        改变虚拟 CPU 的号
suspend         挂起一个域
ttyconsole      tty 控制台
undefine        取消定义一个非活跃的域
update-device   update device from an XML file
uri             打印管理程序典型的URI
vol-create      从一个 XML 文件创建一个卷
vol-create-from create a vol, using another volume as input
vol-create-as   从一组变量中创建卷
vol-clone       clone a volume.
vol-delete      删除卷
vol-wipe        wipe a vol
vol-dumpxml     XML 中的卷信息
vol-info        存储卷信息
vol-list        列出卷
vol-pool        returns the storage pool for a given volume key or path
vol-path        returns the volume path for a given volume name or key
vol-name        returns the volume name for a given volume key or path
vol-key         returns the volume key for a given volume name or path
vcpuinfo        域 vcpu 的信息
vcpupin         控制域 vcpu affinity
version         显示版本
vncdisplay      vnc 显示
snapshot-create Create a snapshot
snapshot-current Get the current snapshot
snapshot-delete Delete a domain snapshot
snapshot-dumpxml Dump XML for a domain snapshot
snapshot-list   List snapshots for a domain

snapshot-revert Revert a domain to a snapshot

mkdir /images/vm3  //建立虚拟机的运行目录地址

virt-install -n “centos6” –vcpus 2 -r 512 -l http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64 –disk path=/images/vm3/centos6.qcow2,bus=virtio,size=120,sparse –network bridge=br0,model=virtio –force

【注】如果出现以下情况和解决方法

Image(39)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值