KVM虚拟化

KVM

~~~~~~~~~~主要命令~~~~~~~~~~~

#查看是否支持kvm
grep -o -E ’svm|vmx’ /proc/cpuinfo


#安装kvm
yum grouplist     //查看安装组是否有Vitualization / Vitualization Client / Vitualization Platform / Vitualization Tools
yum groupinstall “Vitualization” “Vitualization Client” “Vitualization Platform” “Vitualization Tools”   //安装虚拟化的包。因为本机器采用centos,centos是RHEL的社区版,kvm是RHEL开发的虚拟化技术
/usr/libexec/qemu-kvm    //qemu并未按在系统变量里,需要全路径查找到,--help查找qemu帮助
yum -y install liabvirt virt-manager virt-viewer python-virtinst   //安装virt的几个包


#模式一:使用virt模式创建管理虚拟机
service libvirtd start    //virt是可以管理xen、KVM、vxm的通用工具,必需起先启动libvirtd;启动libvirtd以后会产生一个叫virbr0的虚拟网桥,通过ifconfig可以查看
chkconfig libvirtd on
virsh iface-bridge eth0 br0    //创建一个物理网桥



~~~~~~~~~~~~~~详述~~~~~~~~~~~~~~~~~~~

内核态  用户态

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

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笔记:

KVM不是stype1,也不是stype2

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

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

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

VCPU:用线程模拟实现

modprobe kvm  //rh6加载kvm
lsmod | grep kvm
ll /dev/    //查询kvm是否存在

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

virtio技术:IO半虚拟化

kvm基本架构:

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

grep -i "kvm" /boot/config-2.6.32-431.el6.x86_64  //查看kvm装载的情况
cat /proc/cpuinfo  //查看cpu信息

grep -Ei "vmx|svm" /proc/cpuinfo  //查看cpuinfo中是否有vmx(vmx是intel的cpu支持虚拟化的标志,没有就是不支持)或者svm(svm是amd的cpu支持虚拟化的标志,没有就是不支持)
也可以使用命令:    grep -o -E ’svm|vmx’ /proc/cpuinfo

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

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、路由、

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

yum install dnsmasq -y

路由模型:

隔离模型

桥接模型:

多路桥接模型:

启动测试:

#/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:显示帮助信息

镜像文件格式转换:

快照文件命令:

#kvm高级使用

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

monitor:

help

info

cpus

migrate  //迁移内存命令

-incoming

#libvirt   virtual模式:

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

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

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


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

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
【注】如果出现以下情况和解决方法


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值