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.可以进行创建连接等操作管理虚拟机
- 转载请注明来源:CENTOS7之KVM虚拟化服务
- 本文永久链接地址:https://www.xionghaier.cn/archives/208.html