KVM
KVM相关概念
Virtualization虚拟 抽象出来设备 emulation模拟 通过软件构件出来的虚假设备 Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统 它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。 Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。 当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统 1974年,Popek和Goldberg在一篇论文中定义了“经典虚拟化(Classical virtualization)”的基本需求 他们认为一款真正意义上的VMM至少要符合三个方面的标准 1、等价执行(equivalient execution):除了资源的可用性及时间上的不同之外,程序在虚拟化环境中的执行时完全相同的 2、性能(Performance):指令集中的大部分指令要能够直接运行于CPU上 3、安全(Safety):VMM要能够完全控制系统资源 厂商 目前市场主要厂商及产品:VMware vSphere、微软Hyper-V、Citrix XenServer 、IBM PowerVM、 Red Hat Enterprise Virtulization、Huawei FusionSphere、开源的KVM、Xen、VirtualBSD等。 虚拟化模型 1、VMWare ESX 专业化解决方案 guest运行于ring3 (bt技术) 2、para-virtualization半虚拟化 (修改guest内核,windows无法修改内核,因此无法运行) 3、HVM(Hardware assistant VM) guest运行于ring0,VMM 运行于ring-1,捕获guest特权指令 Intel VT-x技术 AMD AMD-v技术
全虚拟化(Full Virtualization)
全虚拟化也称为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件
VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。
全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。
半虚拟化(Para Virtualization)
半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。
该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。
半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
KVM虚拟化技术(Kernel-based Virtual Machine)基于内核的虚拟机
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。
它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
1、是基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。
2、是第一个整合到 Linux 内核的虚拟化技术。
3、在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。支持linux以外的其它系统。如windows。
4、一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
KVM,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使 用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM 之一。KVM的虚拟化需要硬件支持(如Intel VT技术戒者AMD V技术)。是基于硬件的完全虚拟化。而 Xen早期则是基于软件模拟的Para-Virtualization,
结构包含两部分
1、设备驱动/dev/kvm
2、针对模拟PC硬件的用户控件组件
Intel VT技术
主要由三部分技术组成:VTx、VTd和VTc。其中,VTx是处理器技术,提供内存以及虚拟机的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,它提供一些针对虚拟机的特殊应用,如支持某些特定的虚拟机应用跨过处理器I/O管理程序,直接调用I/O资源,从而提高效率,通过直接连接I/O带来近乎完美的I/O性能。VTc是针对网络提供的管理,它可以在一个物理网卡上,建立针对虚拟机的设备队列搜索。
EPT——降低虚拟内存访问的系统开销
EPT即Extended Page Tables(扩展页表)的缩写。CPU要通过主机物理地址来访问内存。如果只是一台物理服务器,这个物理地址就只为一个操作系统服务,但如果进行了虚拟化部署,有多个虚拟机时,就存在着稳定性的隐患。因为在进行VM Entry(虚拟机进入)与VM Exit(虚拟机退出)时(尤其是后者),都要对内存页进行修改。但物理内存是多个虚拟机共享的,因此不能让虚拟机直接访问物理地址,否则一个虚拟机出现内存错误,就会殃及整个物理服务器的运行。所以必须要采取虚拟地址,而EPT的作用就在于加速从虚拟机地址至主机物理地址的转换过程,节省传统软件处理方式的系统开销。
结构包含两部分
1、设备驱动/dev/kvm
2、针对模拟PC硬件的用户控件组件
Intel VT技术
主要由三部分技术组成:VTx、VTd和VTc。其中,VTx是处理器技术,提供内存以及虚拟机的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,它提供一些针对虚拟机的特殊应用,如支持某些特定的虚拟机应用跨过处理器I/O管理程序,直接调用I/O资源,从而提高效率,通过直接连接I/O带来近乎完美的I/O性能。VTc是针对网络提供的管理,它可以在一个物理网卡上,建立针对虚拟机的设备队列搜索。
EPT——降低虚拟内存访问的系统开销
EPT即Extended Page Tables(扩展页表)的缩写。CPU要通过主机物理地址来访问内存。如果只是一台物理服务器,这个物理地址就只为一个操作系统服务,但如果进行了虚拟化部署,有多个虚拟机时,就存在着稳定性的隐患。因为在进行VM Entry(虚拟机进入)与VM Exit(虚拟机退出)时(尤其是后者),都要对内存页进行修改。但物理内存是多个虚拟机共享的,因此不能让虚拟机直接访问物理地址,否则一个虚拟机出现内存错误,就会殃及整个物理服务器的运行。所以必须要采取虚拟地址,而EPT的作用就在于加速从虚拟机地址至主机物理地址的转换过程,节省传统软件处理方式的系统开销。
Xen虚拟化技术
Xen是第一类运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化。
Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。
Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),
能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。需要升级内核,只能支持和物理系统一样的操作系统。
QEMU
是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平 台上使用广泛。
QEMU具有高速度和跨平台的特性,QEMU能模拟至接近真实电脑的速度。
QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。
组成部分
处理器模拟器
仿真设备
关联仿真设备至真实设备的通用设备
仿真主机的描述
调试器
与仿真器交互的用户接口
KVM和QEMU的关系
准确来说,KVM是Linux kernel的一个模块,可以用命令modprobe去加载KVM模块。
加载了模块后,才能进一步通过其他工具创建虚拟机。
但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。
这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。
QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。
KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。
所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。
也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。
KVM架构
KVM管理工具
virt
qemu
查看CPU是否支持硬件虚拟化技术。# lscpu 1、查看自己的CPU是否支持全虚拟化虚拟化技术且是64位的 (rhel6不支持安装kvm) Intel:#cat /proc/cpuinfo | grep --color vmx AMD: #cat /proc/cpuinfo | grep --color svm 看看flag有没有上面的vmx或者是svm,有的话就是支持全虚拟化技术 #cat /proc/cpuinfo | grep --color lm 是否支持64位 2、开启BIOS 虚拟化支持。 查找VT 改为: enable
安装kvm
# yum groupinstall Virtualization -y Installed: qemu-kvm.x86_64 2:0.12.1.2-2.503.el6_9.3 (如需用此工具管理用户空间,# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu)
# yum groupinstall "Virtualization Platform"
Installed:
libvirt.x86_64 0:0.10.2-62.el6 libvirt-client.x86_64 0:0.10.2-62.el6
# yum groupinstall "Virtualization Client"
Installed:
python-virtinst.noarch 0:0.600.0-31.el6 virt-manager.x86_64 0:0.9.0-34.el6
virt-top.x86_64 0:1.0.4-3.15.el6 virt-viewer.x86_64 0:2.0-18.el6
# rpm -qa | egrep "qemu-kvm|virt-manager|libvirt"
libvirt-0.10.2-62.el6.x86_64
libvirt-python-0.10.2-62.el6.x86_64
qemu-kvm-0.12.1.2-2.503.el6_9.3.x86_64
libvirt-client-0.10.2-62.el6.x86_64
virt-manager-0.9.0-34.el6.x86_64
配置好host解析,启动libvirtd
# /etc/init.d/libvirtd start
# chkconfig --list libvirtd
# ifconfig virbr0
virbr0 Link encap:Ethernet HWaddr 52:54:00:A8:D2:57
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
# virsh iface-bridge eth0 br0
# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:B7:8B:FB
inet addr:192.168.0.86 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feb7:8bfb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1242 (1.2 KiB) TX bytes:2056 (2.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:B7:8B:FB
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33801 errors:0 dropped:0 overruns:0 frame:0
TX packets:8992 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:45344378 (43.2 MiB) TX bytes:914250 (892.8 KiB)
单独包安装
#rpm -ivh http://mirrows.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 或rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm #rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #yum install qemu-kvm qemu-kvm-tools virt-manager libvirt qenu-kvm kvm是linux的一个模块,管理和创建完整的虚拟机需要相应的一些管理工具
由于kvm是在qemu的基础上开发的,KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具QEMU-KVM qemu-kvm-tools kvm管理工具 virt-manager 图形化管理工具 libvirt 支持Linux下主流虚拟化工具的C函数库,旨在为包括Xen、kvm在内的各种虚拟化工具提供一套方便、可靠的编程接口
=========================使用图形化管理工具方法
# yum groupinstall "X Window System"
# yum groupinstall Desktop
# virt-manager
=========================使用图形化管理工具方法
virt-install工具
virt-install是一个命令行工具,它能够为KVM,Xen或其它支持Libvirt API的hypervisor创建虚拟机并完成GuestOS安装,此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。
安装过程可以使用本地的安装介质如CDROM,也可以通过网络方式如NFS.HTTP或FTP服务实现,对于通过网络安装的方式,virt-install可以自动加载必要的文件以启动安装过程而无需额外提供引导工具。
当然,virt-install也支持PXE方式的安装过程,也能够直接使用现有的磁盘映像直接启动安装过程。
#一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等
-n NAME, --name=NAME:虚拟机名称,需全局惟一;
-r MEMORY, --
ram
=MEMORY:虚拟机内在大小,单位为MB;
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=
#][,cores=#][,threads=#]:VCPU个数及相关配置;
--cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
安装方法:指定安装方法、GuestOS类型等;
-c CDROM, --cdrom=CDROM:光盘安装介质;
-l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如
ftp
:
//172
.16.0.1
/pub
;
--pxe:基于PXE完成安装;
--livecd: 把光盘当作LiveCD;
--os-
type
=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
--os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
-x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args
"ks=http://172.16.0.1/class.cfg"
--boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel
/initrd
来引导系统启动等 ;例如:
--boot cdrom,hd,network:指定引导次序;
--boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=
/dev/ttyS0
”:指定启动系统的内核及initrd文件;
virt-install --cpu=host --name hzcfvpn --vcpus=2 -r 1024 --cdrom /kvm/CentOS-6.7-x86_64-bin-DVD1.iso
--location ftp://172.16.0.1/pub --extra-args "ks=http://172.16.0.1/class.cfg
#存储配置:指定存储类型、位置及属性等;
--disk=DISKOPTS:指定存储设备及其属性;格式为--disk path=
/some/storage/path
,opt1=val1,opt2=val2等;
常用的选项有:
device:设备类型,如cdrom、disk或floppy等,默认为disk;
bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
size:新建磁盘映像的大小,单位为GB;
cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
format
:磁盘映像格式,如raw、qcow2、vmdk等;
sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
--nodisks:不使用本地磁盘,在LiveCD模式中常用;
--disk path=/kvm/images/centos/hzvpn.qcow2,bus=virtio,size=50,format=qcow2,sparse
#网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio(半虚拟化)等;
mac:固定的MAC地址;省略此选项时将使用随机地址
--nonetworks:虚拟机不使用网络功能;
--network bridge=br0,model=virtio
#图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;
--graphics TYPE,opt1=val1,opt2=val2;指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行 访问的接口;
TYPE:指定显示类型,可以为vnc、sd1、spice或none等,默认为vnc;
port:TYPE为vnc或spice时其监听的端口;
listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改
/etc/libvirt/qemu
.conf定义新的默认值;
password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
--noautoconsole:禁止自动连接至虚拟机的控制台;
设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;
--serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,
格式为“--serial
type
,opt1=val1,opt2=val2,...”
--serial pty:创建伪终端;
--serial dev,path=HOSTPATH:附加主机设备至此虚拟机;
--video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;
--graphics vnc,listen=0.0.0.0,port=5902
#虚拟化平台:虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm
、xen或qemu等)以及当前虚拟机的UUID等;
-
v
, --hvm:当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;
-p, --paravirt:指定使用半虚拟化;
--virt-
type
:使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virsh capabilities’命令获取;
#其它:
--autostart:指定虚拟机是否在物理启动后自动启动;
--print-xml:如果虚拟机不需要安装过程(--
import
、--boot),则显示生成的XML而不是创建此虚拟机;默认情况下,此选项仍会创建磁盘映像;
--force:禁止命令进入交互式模式,如果有需要回答
yes
或no选项,则自动回答为
yes
;
--dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;
-d, --debug:显示debug信息;
示例创建一个名为rhel5的虚拟机,其hypervisor为KVM,内存大小为512MB,磁盘为8G的映像文件/var/lib/libvirt/images/rhel5.8.img,通过boot.iso光盘镜像来引导启动安装过程。
# virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 --disk path=/var/lib/libvirt/images/rhel5.img,size=8 --graphics vnc --cdrom /tmp/boot.iso --os-variant rhel5
(# virsh uri 连接接口)
# virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 --disk path=/var/lib/libvirt/images/rhel5.img,size=8 --graphics vnc --cdrom /tmp/boot.iso --os-variant rhel5
(# virsh uri 连接接口)
示例将创建一个名为rhel6的虚拟机,其有两个虚拟CPU,安装方法为FTP,并指定了ks文件的位置,磁盘映像文件为稀疏格式,连接至物理主机上的名为brnet0的桥接网络:
# virt-install --connect qemu:///system --virt-type kvm --name rhel6 --ram 1024 --vcpus 2 --network bridge=br0 --disk path=/VMs/images/rhel6.img,size=120,sparse --location ftp://172.16.0.1/rhel6/dvd --extra-args “ks=http://172.16.0.1/rhel6.cfg” --os-variant rhel6 --force
创建一个名为rhel5.8的虚拟机,磁盘映像文件为稀疏模式的格式为qcow2且总线类型为virtio,安装过程不启动图形界面(--nographics),但会启动一个串行终端将安装过程以字符形式显示在当前文本模式下,虚拟机显卡类型为cirrus:
# virt-install --connect qemu:///system --virt-type kvm --name rhel5.8 --vcpus 2,maxvcpus=4 --ram 512 --disk path=/VMs/images/rhel5.8.img,size=120,format=qcow2,bus=virtio,sparse --network bridge=brnet0,model=virtio--nographics --location ftp://172.16.0.1/pub --extra-args "ks=http://172.16.0.1/class.cfg console=ttyS0 serial" --os-variant rhel5 --force --video=cirrus
利用已经存在的磁盘映像文件(已经有安装好的系统)创建一个名为rhel5.8的虚拟机:
# virt-install --name rhel5.8 --ram 512 --disk /VMs/rhel5.8.img --import
每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML。
# virt-install --cpu=host --name hzcfvpn --vcpus=2 -r 1024 --cdrom /kvm/CentOS-6.7-x86_64-bin-DVD1.iso --disk path=/kvm/images/centos/hzvpn.qcow2,bus=virtio,size=50,format=qcow2,sparse --network bridge=br0,model=virtio --force --graphics vnc,listen=0.0.0.0,port=5902
每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML。
# virt-install --cpu=host --name hzcfvpn --vcpus=2 -r 1024 --cdrom /kvm/CentOS-6.7-x86_64-bin-DVD1.iso --disk path=/kvm/images/centos/hzvpn.qcow2,bus=virtio,size=50,format=qcow2,sparse --network bridge=br0,model=virtio --force --graphics vnc,listen=0.0.0.0,port=5902
实验测试
/kvmiso 用于放置光盘镜像 # dd if=/dev/cdrom of=/kvmiso/CentOS-6.7-x86_64.iso
/kvmdata 用于放置kvm镜像
# qemu-img create -f raw /kvmdata/CentOS-6.7test1.raw 7G
Formatting '/kvmdata/CentOS-6.7test1.raw', fmt=raw size=7516192768
# qemu-img info /kvmdata/CentOS-6.7test1.raw
image: /kvmdata/CentOS-6.7test1.raw
file format: raw
virtual size: 7.0G (7516192768 bytes)
disk size: 0
#virt-install --virt-type kvm --name CentOS-6.7-x86_64_test1 --ram 512 --cdrom=/kvmdata/CentOS-6.7-x86_64.iso --disk path=/kvmdata/CentOS-6.7test1.raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6 #virt-install --virt-type kvm --name CentOS-6.7-x86_64_test2 --ram 512 --cdrom=/kvmdata/CentOS-6.7-x86_64.iso --disk path=/kvmdata/CentOS-6.7test2.raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6
# netstat -tlnup | grep 590
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 12575/qemu-kvm
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 12709/qemu-kvm
==》之后可以通过VNC连接,进行操作系统安装(略) ===================================================================== vnc无法远程连接的问题 vnc-options expert-colourlevel 改为 full 即可。
编辑xml文件支持vnc连接方法 <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> ===================================================================
#virsh --help 重要命令参数 (#virsh help [参数])
根据xml文件重建:(回到初始安装时的状态)
create:创建并启动
define:创建但不启动
# virsh list --all Id Name State ---------------------------------------------------- - CentOS-6.7-x86_64_test1 shut off
#cp /etc/lib/qume/CentOS-6.7-x86_64_test1 /tmp #virsh undefine CentOS-6.7-x86_64_test1 Domain CentOS-6.7-x86_64_test1 has been undefined #virsh list --all Id Name State ---------------------------------------------------- #virsh create /tmp/CentOS-6.7-x86_64_test1.xml Domain CentOS-6.7-x86_64_test1 created from /tmp/CentOS-6.7-x86_64_test1.xml # virsh list --all Id Name State ---------------------------------------------------- 9 CentOS-6.7-x86_64_test1 running
起停管理domain:
destroy
shutdown
reboot
suspend
resume
start
删除domain
# virsh list --all Id Name State ---------------------------------------------------- 2 CentOS-6.7-x86_64_test1 running 4 CentOS-6.7-x86_64_test2 running # virsh destroy CentOS-6.7-x86_64_test2 Domain CentOS-6.7-x86_64_test2 destroyed # virsh list --all Id Name State ---------------------------------------------------- 2 CentOS-6.7-x86_64_test1 running - CentOS-6.7-x86_64_test2 shut off # ls CentOS-6.7-x86_64_test1.xml CentOS-6.7-x86_64_test2.xml networks
# virsh undefine CentOS-6.7-x86_64_test2 Domain CentOS-6.7-x86_64_test2 has been undefined
#ls CentOS-6.7-x86_64_test1.xml networks #rm /kvmdata/CentOS-6.7test2.raw rm: remove regular file `/kvmdata/CentOS-6.7test2.raw'? y #virsh list --all Id Name State ---------------------------------------------------- 2 CentOS-6.7-x86_64_test1 running
连接至console:
console
列出:
list
附加或拆除disk:(qemu-img创建磁盘)
attach-disk
detach-disk
#qemu-img create -f raw /kvmdata/CentOS-6.7test1_disk1.raw 1G
#virsh attach-disk CentOS-6.7-x86_64_test1 /kvmdata/CentOS-6.7test1_disk1.raw vdb
==>直接可以在guest vm看到/dev/vdb
保存状态至磁盘文件或从磁盘文件恢复:
save
restore
# virsh help setmem
# virsh help setcpu
# virsh help domain
[root@test93 opt]# virsh start CentOS-6.7-x86_64_test Domain CentOS-6.7-x86_64_test started [root@test93 opt]# virsh list --all Id Name State 2 CentOS-6.7-x86_64_test running yum install virt-top 监控kvm (zabbix agent更好) 优化项,默认开启,实现4k内存合并 [root@test93 qemu]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never [root@test93 qemu]# ps aux | grep ksm 定期会对页面合并,相同内容的内存合并 root 34 0.0 0.0 0 0 ? SN 13:50 0:00 [ksmd]