CENTOS7之KVM虚拟化服务

1. 虚拟化技术的演变过程

1. 软件模拟

软件模拟,理论上可以模拟任何硬件,甚至是不存在的硬件。但是因为这种方式全部是软件模拟硬件,所以非常低效,一般只用于研究测试的场景。采用这种技术的典型产品有Bochs、 QEMU等。

2. 虚拟化层翻译

2.1  软件全虚拟化:软件捕获翻译    ========> 你和美国人说话需要一个翻译官

VMware,有一个专门虚拟化引擎。通过虚拟化引擎,捕获虚拟机的指令,并进行处理,这也是为什么在虚拟机上虽然使用的是物理机一样的指令,但是虚拟机不能对硬件进行操作的原因,比如重启虚拟机不会引起宿主机的重启。这种解决方案也叫软件全虚拟化方案。

2.2  半虚拟化:改造虚拟机系统内核加虚拟化层翻译  ====> 你学了英语和美国人说话

xen,对虚拟机的操作系统内核进行改造,使虚拟机自己对特殊的指令进 行更改,然后和虚拟化层一起配合工作,这也是Xen早期一直要使用一个特殊内核的原因,并且不支持Windows系统虚拟化。改造的虚拟机虽然使用上有限制,配置比较麻烦,但是这种方式效率非常高,这种方式也被称为半虚拟化方案。

 

2.3  硬件支持的全虚拟化: 硬件支持的虚拟化层翻译 ==》你重生到美国然后和美国人说话

2005年, Intel推出了硬件的方案,对CPU指令进行改造,即VT-x。 这种方案因为是基于硬件的,所以效率非常高,这种方案也称为硬件支持的全虚拟化方案。

3.容器虚拟化

容器虚拟化的原理是基于CGroups、 Namespace等技术将进程隔离,每个进程就像一台单独的虚拟机一样,有自己被隔离出来的资源,也有自己的根目录、独立的进程编号、被隔离的内存空间。基于容器的虚拟化可以实现在单一内核上运行多个实例,因此是一个更高效率的虚拟化方式。目前最热的容器虚拟化技术就是Docker。

比喻:一个新建的大楼的某层,如果将他改建成住宅,那就需要每个房间都要有厨房,浴室等正常人家必备设施,一层楼估计能做出3户人家;但是改建成宿舍,什么厨房,浴室就建一个就可以,然后每个宿舍的墙可以打个隔断,很节省资源,基本可以隔出20个。

4. 虚拟化的优势

1、KVM简介

KVM(Kernel-based Virtual Machine)最初是由以色列的公司Qumranet开发的。 KVM在2007年2月被正式合并到Linux 2.6.20核心中,成为内核源代码的一部分。 2008年9月4日,RedHat公司收购了Qumranet,开始在RHEL中用KVM替换Xen,第一个包含KVM的版本是RHEL 5.4。从RHEL 6开始, KVM成为默认的虚拟化引擎。 KVM必须在具备Intel VT或AMD-V功能的X86平台上运行。它也被移植到S/390、 PowerPC与IA-64平台上。在Linux内核3.9版中,加入了对ARM架构的支持。

2、KVM的架构

KVM的架构非常简单,如图所示, KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理。

因为对进程的管理非常麻烦, RedHat发布了一个开源项目Libvirt。 Libvirt有API,也有一套命令行工具,可以完成对虚拟机的管理,大多数的管理平台都是通过Libvirt来完成对KVM虚拟机的管理的,比如OpenStack、 CloudStack、OpenNebula 等。

 

小结:

结构简单,包含两个部分:

  • 设备驱动/dev/kvm
  • 针对模拟PC硬件的用户空间组件

KVM虚拟化特性

  • 嵌入到Linux正式Kernel(提高兼容性)
  • 代码级资源调用(提高性能)
  • 虚拟机就是一个进程(内存易于管理)
  • 直接支持NUMA技术(提高扩展性)

RedHat收购KVM

  • 更好的商业支持及服务保障

3、QEMU与KVM

QEMU是一个开源项目,实际就是一台硬件模拟器,可以模拟许多硬件,包括X86架构处理器、 AMD64架构处理器等。

QEMU的好处是因为是纯软件模拟,所以可以在支持的平台模拟支持的设备。

QEMU的缺点是因为是纯软件模拟,所有非常慢。

KVM只是个内核模块,只提供CPU和内存。所以还使用qemu模拟器模拟IO设备如磁盘、网卡。

KVM虚拟机=KVM内核模块+QEMU模拟器

4、Libvirt与KVM

Libvirt是一套开源的虚拟化的管理工具,主要由3部分组成:

  • 一套API的lib库,支持主流的编程语言,包括C、Python、Ruby 等
  • Libvirtd服务
  • 命令行工具virsh

Libvirt可以实现对虚拟机的管理,比如虚拟机的创建、启动、关闭、暂停、恢复、迁移、销毁,以及虚拟机网卡、硬盘、 CPU、内存等多种设备的热添加。

3. KVM使用

1. 虚拟机/服务器开启虚拟化功能

  • 首先bios需要开启虚拟化。

  • 其次虚拟机版本要是最新的

 

  • 最后虚拟机开启虚拟化的配置

2. 系统环境

~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
~]# uname -r
3.10.0-327.el7.x86_64

~]# systemctl disable firewalld.service
~]# systemctl stop firewalld.service
~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
~]# getenforce 
Disabled

3. KVM安装

KVM其实已经在CentOS7内置到系统内核,无需安装。

 ~]# lsmod |grep kvm
kvm_intel              162153           0 
kvm                    525259           1            kvm_intel
~]# grep -Eo '(vmx|svm)' /proc/cpuinfo
vmx
vmx

4. 安装qemu-kvm及相关管理命令

~]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install 
~]# rpm -qa|grep -E 'qemu|libvirt|virt'
python-virtinst-0.600.0-29.el6.noarch         # 一套Python的虚拟机安装工具
gpxe-roms-qemu-0.9.7-6.14.el6.noarch          # 虚拟机iPXE的启动固件,支持虚拟机从网络启动
virt-manager-0.9.0-29.el6.x86_64              # 基于Libvirt的图像化虚拟机管理软件,需要图形界面操作系统
qemu-img-0.12.1.2-2.479.el6.x86_64            # 用于操作虚拟机硬盘镜像的创建、查看和格式转化
libvirt-python-0.10.2-54.el6.x86_64           # libvirt为Python提供的API
qemu-kvm-0.12.1.2-2.479.el6.x86_64            # KVM在用户空间运行的程序
qemu-kvm-tools-0.12.1.2-2.479.el6.x86_64
libvirt-0.10.2-54.el6.x86_64                  # 用于管理虚拟机,它提供了一套虚拟机操作API
libvirt-client-0.10.2-54.el6.x86_64 # Libvirt的客户端,最重要的功能之一就是就在宿主机关机时可以通知虚拟机也关机,使虚拟机系统正常关机,而不是被强制关机,造成数据丢失
virt-top-1.0.4-3.15.el6.x86_64                # 类似于top命令,查看虚拟机的资源使用情况
virt-what-1.11-1.2.el6.x86_64                 # 在虚拟机内部执行,查看虚拟机运行的虚拟化平台
virt-viewer-0.5.6-8.el6.x86_64                # 显示虚拟机的控制台console

5. 启动libvirtd

~]# systemctl enable libvirtd.service
~]# systemctl start libvirtd.service
~]# systemctl status libvirtd.service

# libvirtd自动创建了虚拟网卡
~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 192.168.56.69 netmask 255.255.255.0 broadcast 192.168.56.255
 inet6 fe80::20c:29ff:fe7f:b4aa prefixlen 64 scopeid 0x20<link>
 ether 00:0c:29:7f:b4:aa txqueuelen 1000 (Ethernet)
 RX packets 119 bytes 11177 (10.9 KiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 97 bytes 19522 (19.0 KiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 172.16.1.69 netmask 255.255.0.0 broadcast 172.16.255.255
 inet6 fe80::20c:29ff:fe7f:b4be prefixlen 64 scopeid 0x20<link>
 ether 00:0c:29:7f:b4:be txqueuelen 1000 (Ethernet)
 RX packets 0 bytes 0 (0.0 B)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 10 bytes 768 (768.0 B)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 inet6 ::1 prefixlen 128 scopeid 0x10<host>
 loop txqueuelen 0 (Local Loopback)
 RX packets 0 bytes 0 (0.0 B)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 0 bytes 0 (0.0 B)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
 ether 52:54:00:70:c6:52 txqueuelen 0 (Ethernet)
 RX packets 0 bytes 0 (0.0 B)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 0 bytes 0 (0.0 B)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

~]# ps -ef|grep dns # 还启动了dnsmasq
nobody 1630 1 0 06:42 ? 00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root 1632 1630 0 06:42 ? 00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper


6. 创建虚拟机

6.1 创建硬盘

# qcow2格式磁盘
~]# mkdir -p /application/kvm_data
~]# cd /application/kvm_data

[root@kvm kvm_data]# qemu-img create -f qcow2 /application/kvm_data/moban.qcow2 20G
Formatting '/application/kvm_data/moban.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm kvm_data]# ll -h
total 196K
-rw-r--r-- 1 root root 193K May 25 00:40 moban.qcow2
[root@kvm kvm_data]# qemu-img info moban.qcow2     ##查看磁盘信息
image: moban.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
 compat: 1.1
 lazy refcounts: false

6.2 查看虚拟机

挂载光盘

[root@kvm kvm_data]# mkdir -p /application/tools
[root@kvm kvm_data]# cd /application/tools
[root@kvm tools]# dd if=/dev/sr0 of=/application/tools/CentOS7_2.iso
8456192+0 records in
8456192+0 records out
4329570304 bytes (4.3 GB) copied, 205.566 s, 21.1 MB/s
[root@kvm ~]# virt-install --virt-type=kvm --name=c72-moban --vcpus=1 -r 1024 -c /application/tools/CentOS7_2.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/application/kvm_data/moban.qcow2,size=20,format=qcow2

[root@kvm ~]# virt-install --help 
一般参数: 
-n NAME, --name=NAME # 虚拟机名称 
-r MEMORY, --ram=MEMORY # 为虚拟机分配的cpu个数,单位为M 
--vcpus=VCPUS # 为虚拟机分配的cpu个数,默认为1 安装参数: 
-c CDROM, --cdrom=CDROM # 虚拟机使用光驱的镜像文件 
-l LOCATION, --location=LOCATION # 从nfs:host:/path,http://host/path, ftp://host/path获取镜像资源 
--pxe # 网络启动,使用pxe协议 
--os-type=DISTRO_TYPE # 虚拟机的类型。'linux', 'unix','windows' 
--os-variant=DISTRO_VARIANT # 要安装的镜像类型。'rhel5', 'solaris10', 'win2k',‘rhel6’ 存储参数: 
--disk=DISKOPTS # 使用的虚拟磁盘文件。常用写法: 
--disk path=/my/existing/disk 
--disk path=/my/new/disk,size=5 (单位GB) 
--disk vol=poolname:volname,device=cdrom,bus=scsi,.. 
--nodisks # 不使用磁盘 
--filesystem=FILESYSTEMS # 将宿主机的目录共享到虚拟机, 
--filesystem /my/source/dir,/dir/in/guest 网络参数: 
-w NETWORK, --network=NETWORK # 配置网络,常用格式:
--network bridge=mybr0 
--network network=my_libvirt_virtual_net 
--network network=mynet,model=virtio,mac=00:11... --nonetworks # 不为虚拟机创建网络接口 
图像参数: 
--graphics=GRAPHICS # 显示终端配置,常用配置: 
--graphics vnc 
--graphics spice,port=5901,tlsport=5902 
--graphics none 
--graphics vnc,password=foobar,port=5910,keymap=ja 
--noautoconsole # 不自动连接客户机终端 
虚拟化参数: 
-v, --hvm # 配置使用全虚拟化。
--virt-type=HV_TYPE # Hypervisor name to use (kvm, qemu, xen, ...) 
-u UUID, --uuid=UUID # 指定UUID 其他参数: -
-autostart # 虚拟机随宿主机开机自启动 
-q, --quiet # 不输出错误
[root@kvm ~]# netstat -tunlp|grep 5900
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4862/qemu-kvm 

[root@kvm ~]# localectl set-locale LANG=en_US.UTF-8  ##英文字符集

通过tightvnc远程连接192.168.56.69,可以看到装系统的界面。内存为512M,所以为文字界面。安装过程略。

链接:https://pan.baidu.com/s/1isXEluwiVJ6X7V5kRDM5hA 密码:quh1

6.3 查看安装的虚拟机

[root@KVM ~]# virsh list # 只能查看启动的机器
 Id Name State
----------------------------------------------------
[root@kvm kvm_data]# virsh list --all
 Id Name State
----------------------------------------------------
 - c72-moban shut off
[root@KVM ~]# cd /etc/libvirt/qemu/ # 里面存放着虚拟机最重要的配置文件!备份时别忘了!
[root@KVM qemu]# ls # 还在此目录创建c72-moban.xml文件
c72-moban.xml networks
[root@KVM qemu]# cat c72-moban.xml 
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE 
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
 virsh edit kvm-demo
or other application using the libvirt API.
-->
<domain type='kvm'>
 <name>kvm-demo</name>
 <uuid>957954b6-9967-0504-0729-8c39c5b7dcb2</uuid>
 <memory unit='KiB'>524288</memory>
 <currentMemory unit='KiB'>524288</currentMemory>
 <vcpu placement='static'>1</vcpu>
 <os>
 <type arch='x86_64' machine='rhel6.6.0'>hvm</type>
 <boot dev='hd'/>
 </os>
 <features>
 <acpi/>
 <apic/>
 <pae/>
 </features>
 <clock offset='utc'/>
 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>restart</on_crash>
 <devices>
 <emulator>/usr/libexec/qemu-kvm</emulator>
 <disk type='file' device='disk'>
 <driver name='qemu' type='raw' cache='none'/>
 <source file='/opt/kvm.raw'/>
 <target dev='vda' bus='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 </disk>
 <disk type='block' device='cdrom'>
 <driver name='qemu' type='raw'/>
 <target dev='hdc' bus='ide'/>
 <readonly/>
 <address type='drive' controller='0' bus='1' target='0' unit='0'/>
 </disk>
 <controller type='usb' index='0' model='ich9-ehci1'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci1'>
 <master startport='0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci2'>
 <master startport='2'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
 </controller>
 <controller type='usb' index='0' model='ich9-uhci3'>
 <master startport='4'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
 </controller>
 <controller type='ide' index='0'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
 </controller>
 <interface type='network'>
 <mac address='52:54:00:f7:d3:1c'/>
 <source network='default'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>
 <serial type='pty'>
 <target port='0'/>
 </serial>
 <console type='pty'>
 <target type='serial' port='0'/>
 </console>
 <input type='tablet' bus='usb'/>
 <input type='mouse' bus='ps2'/>
 <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
 <listen type='address' address='0.0.0.0'/>
 </graphics>
 <video>
 <model type='cirrus' vram='9216' heads='1'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 </video>
 <memballoon model='virtio'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
 </memballoon>
 </devices>
</domain>

 

6.4 启动虚拟机

[root@kvm kvm_data]# virsh list --all
 Id Name State
----------------------------------------------------
 - c72-moban shut off

[root@kvm kvm_data]# virsh start c72-moban
Domain c72-moban started

[root@kvm kvm_data]# virsh list --all
 Id Name State
----------------------------------------------------
 2 c72-moban running

[root@kvm qemu]# netstat -tunlp|grep 5900
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 40405/qemu-kvm 
[root@kvm qemu]# ps -ef|grep [k]vm
root 868 2 0 00:25 ? 00:00:00 [kvm-irqfd-clean]
avahi 967 1 0 00:25 ? 00:00:00 avahi-daemon: running [kvm.local]
qemu 40405 1 8 02:18 ? 00:00:56 /usr/libexec/qemu-kvm -name c72-moban -S -machine pc-i440fx-rhel7.0.0,accel=kvm,
usb=off,dump-guest-core=off -cpu Broadwell,+rtm,+hle -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,
threads=1 -uuid 5b504250-7dba-4bfb-b6e7-5c82653fb9c3 -no-user-config -nodefaults -chardev socket,id=charmonitor,
path=/var/lib/libvirt/qemu/domain-2-c72-moban/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,
mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global 
PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,
addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device 
ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,
firstport=4,bus=pci.0,addr=0x4.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive 
file=/application/kvm_data/moban.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off
,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,
readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,
vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:24:f2:ca,bus=pci.0,
addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,
id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-2-c72-moban/org.qemu.guest_agent.0,server,
nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device 
usb-tablet,id=input0,bus=usb.0,port=1 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,
addr=0x7 -msg timestamp=on
root 40419 2 0 02:18 ? 00:00:00 [kvm-pit/40405]

使用vnc客户端连接  ifup eth0 开启网卡地址

ssh连接虚拟机

6.5 查看虚拟机相关信息

[root@localhost ~]# grep name /proc/cpuinfo
model name : Intel Core Processor (Broadwell)
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Model name: Intel Core Processor (Broadwell)
Stepping: 2
CPU MHz: 2592.002
BogoMIPS: 5184.00
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0
[root@localhost ~]# free -m
 total used free shared buff/cache available
Mem: 993 86 749 6 157 760
Swap: 1023 0 1023
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 1.3G 17G 7% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 1014M 115M 900M 12% /boot
tmpfs 

[root@kvm ~]# qemu-img info /application/kvm_data/moban.qcow2
image: /application/kvm_data/moban.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 1.5G
cluster_size: 65536
Format specific information:
 compat: 1.1
 lazy refcounts: false

###网卡信息
[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.52540029d991 yes virbr0-nic   # 桥接
 vnet0

4. 虚拟机的管理命令

管理命令都是调用libvirtd的api接口

生成kvm虚拟机:virt-install
查看在运行的虚拟机:virsh list
查看所有虚拟机:virsh list --all
查看kvm虚拟机配置文件:virsh dumpxml name
启动kvm虚拟机:virsh start name
正常关机:virsh shutdown name 
非正常关机(相当于物理机直接拔掉电源):virsh destroy name
删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)
根据配置文件定义虚拟机:virsh define file-name.xml
挂起,终止:virsh suspend name
恢复挂起状态:virsh resume name

下表提供所有virsh命令行选项的快速参考。

命令
Description
help
打印基本帮助信息。
list
查看在运行的虚拟机;查看所有虚拟机:virsh list –all
dumpxml
查看kvm虚拟机配置文件。
create
从XML配置文件生成客户端并启动新客户端。
start
启动kvm虚拟机。
destroy
强制关机。
define
为客户端输出XML配置文件。
domid
显示客户端 ID。
domuuid
显示客户端 UUID。
dominfo
显示客户端信息。
domname
显示客户端名称。
domstate
显示客户端状态。
quit
退出这个互动终端。
reboot
重新启动客户端。
restore
恢复以前保存在文件中的客户端。
resume
恢复暂停的客户端。
save
将客户端当前状态保存到某个文件中。
shutdown
正常关机。
suspend
暂停客户端。
undefine
删除与客户端关联的所有文件。
migrate
将客户端迁移到另一台主机中。

5. 磁盘文件格式介绍

http://www.cnblogs.com/feisky/archive/2012/07/03/2575167.html

 

raw 和qcow2简单区别

  • raw不支持快照
  • qcow2支持快照

注意:关闭虚拟机后操作!

 

硬盘格式总体上分为两种:

全镜像格式(典型代表raw格式),其特点:设置多大就是多大,写入速度快,方便的转换为其他格式,性能最优,但是占用空间大

稀疏格式(典型代表qcow2格式),其特点:支持压缩,快照,镜像,更小的存储空间(即用多少占多少)

 

硬盘格式都可以通过qemu-img管理,详情qemu-img –help

1、格式转换

[root@KVM ~]# cd /opt/
[root@KVM opt]# ls
kvm.raw new.raw rh
[root@KVM opt]# qemu-img convert -c -f raw -O qcow2 new.raw new.qcow2 
[root@KVM opt]# ll -h
total 3.6G
-rw-r--r-- 1 root root 10G Sep 15 18:17 kvm.raw
-rw-r--r-- 1 root root 539M Sep 15 19:00 new.qcow2
-rw-r--r-- 1 root root 10G Sep 15 18:55 new.raw
drwxr-xr-x. 2 root root 4.0K Nov 22 2013 rh
[root@KVM opt]# virsh list --all
 Id Name State
----------------------------------------------------
 - kvm-demo shut off
 - kvm-new shut off
[root@KVM opt]# virsh edit kvm-new
……
 <driver name='qemu' type='qcow2' cache='none'/>
 <source file='/opt/new.qcow2'/>
……
[root@KVM opt]# virsh start kvm-new
Domain kvm-new started

[root@KVM opt]# virsh list
 Id Name State
----------------------------------------------------
 4 kvm-new running
[root@KVM opt]# ps -ef|grep -c qcow2
2
[root@KVM opt]# ps -ef|grep qcow --color
提醒:
直接改虚拟机的xml文件不生效,需要用virsh edit <虚拟机名>改
修改xml后reboot重启不生效,因为宿主机的进程没关闭,新的配置文件不会加载,必须关机再开。

2、检查虚拟磁盘

[root@KVM qemu]# qemu-img check /opt/new.qcow2 
No errors were found on the image.
Image end offset: 564723712

[root@KVM qemu]# qemu-img info /opt/new.qcow2 
image: /opt/new.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 537M
cluster_size: 65536

6. 克隆虚拟机

1、注意事项

克隆的CentOS6虚拟机,首先要做的是:

  • 清除网卡配置文件的UUID和MAC地址,否则克隆后网卡错乱
  • 清空> /etc/udev/rules.d/70-persistent-net.rules,否则克隆后网卡错乱
  • 最后关闭虚拟机,在虚拟机中使用halt命令关机。

克隆CentOS7可以直接克隆:

  • 清除网卡配置文件的UUID和MAC地址(不清除网卡也能启动)
  • 清空KVM虚拟机的uuid信息
  • 关机(KVM虚拟机)做克隆

2、克隆虚拟机

# 虚拟机已关闭
[root@kvm ~]# virsh list --all
 Id Name State
----------------------------------------------------
 -               c72-moban                   shut off

通过复制磁盘文件克隆虚拟机二要素(尤适用于异机的静态迁移):

  • 导出xml文件
  • 导出磁盘文件

手动改配置文件注意事项

  • 直接改虚拟机的xml文件不生效,需要用virsh edit <虚拟机名>改
  • 修改xml后reboot重启不生效,因为宿主机的进程没关闭,新的配置文件不会加载,必须关机再开。

2.1 导出xml

[root@KVM ~]# virsh -h|grep xml
[root@KVM ~]# cd /application
[root@kvm application]# virsh dumpxml c72-moban >new.xml
##导出xml文件命令示例
virsh dumpxml c72-moban >c7-clone.xml

2.2 复制磁盘文件

[root@kvm ~]# cd /application/kvm_data
[root@kvm kvm_data]# cp moban.qcow2 clone.qcow2

2.3 修改xml文件

[root@kvm application]# cp new.xml{,.ori}
[root@kvm application]# vim new.xml # 需要修改的地方,要与原来的不同,因为下面的要唯一
  <name>c72-moban</name>
  <uuid>5b504250-7dba-4bfb-b6e7-5c82653fb9c3</uuid>
…………
 <source file='/application/kvm_data/moban.qcow2'/>
…………
 <mac address='52:54:00:24:f2:ca'/>

##修改后的文件进行对比
[root@kvm application]# diff new.xml{,.ori}
2,3c2,3
< <name>c72-clone</name>
< <uuid>5b504250-7dba-4bfb-b6e7-5c82654fb9c3</uuid>
---
> <name>c72-moban</name>
> <uuid>5b504250-7dba-4bfb-b6e7-5c82653fb9c3</uuid>
34c34
< <source file='/application/kvm_data/clone.qcow2'/>
---
> <source file='/application/kvm_data/moban.qcow2'/>
67c67
< <mac address='52:54:00:54:f2:ca'/>
---
> <mac address='52:54:00:24:f2:ca'/>

[root@KVM qemu]# uuidgen    ##生产UUID
2278bbc8-4ebc-4c20-a030-6655dc9c0ac3

注意MAC地址取值范围:0~9,A-F   不在取值范围内无效。

2.4 导入

# 关联磁盘文件与xml文件
[root@kvm application]# virsh -h|grep define
[root@kvm application]# virsh define new.xml
Domain c72-clone defined from new.xml
[root@kvm application]# virsh list --all
 Id             Name                  State
----------------------------------------------------
 -              c72-clone             shut off
 -              c72-moban             shut off

[root@kvm application]# ls /etc/libvirt/qemu
c72-clone.xml c72-moban.xml networks

说明:

克隆出错等,想删除虚拟机,先解除关联,再删除磁盘文件即可

virsh undefine kvm-dem # 解除关联

2.5 启动新的虚拟机

[root@kvm application]# virsh start c72-clone
Domain c72-clone started
[root@kvm application]# virsh list
 Id           Name               State
----------------------------------------------------
 3            c72-clone          running

[root@kvm application]# netstat -lntup|grep kvm
tcp     0     0     0.0.0.0:5900     0.0.0.0:*      LISTEN       46405/qemu-kvm 

7. 快照

1、创建快照注意事项

  • 磁盘格式要为qcow2
  • 关机做快照最好,开机也能做快照
[root@kvm application]# ssh 192.168.122.171
[root@localhost ~]# poweroff

2、virsh snapshot-create-as创建快照

# 创建快照
[root@kvm ~]# virsh list --all
[root@kvm ~]# virsh snapshot-create-as c72-clone c72-clone_shot1
Domain snapshot c72-clone_shot1 created

# 查看快照列表
[root@kvm ~]# virsh snapshot-list c72-clone
 Name Creation Time State
------------------------------------------------------------
 c72-clone_shot1 2018-05-25 11:44:38 +0800 shutoff
# 查看快照信息
[root@kvm ~]# virsh snapshot-info c72-clone c72-clone_shot1
Name:           c72-clone_shot1
Domain:         c72-clone
Current:        yes
State:          shutoff
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes
# 还原
[root@KVM ~]# virsh snapshot-revert c72-clone c72-clone_shot1

# 删除快照
[root@KVM ~]# virsh snapshot-delete c72-clone c72-clone_shot1 
Domain snapshot c72-clone_shot1 deleted

[root@KVM ~]# virsh snapshot-list c72-clone
 Name Creation Time State
------------------------------------------------------------

8.图形化管理KVM

1.打开Centos图形化虚拟机,找到应用程序-系统工具-虚拟化管理

2.点击之后出现如下界面,输入管理员密码登录

3.登录成功的界面显示

4.可以进行创建连接等操作管理虚拟机

 

 

 

0
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!