当前位置:   article > 正文

虚拟化原理与应用复习知识点_内核半虚拟化:需要更改操作系统内核,同时需要( )和( )兼容。

内核半虚拟化:需要更改操作系统内核,同时需要( )和( )兼容。

虚拟化原理与应用

第一章 虚拟化技术简介:

一、重点:概念:

1)虚拟化:
一种技术—将任何一种形式的资源抽象成另外一种形式的资源。比如:物理服务器上:将一台物理机进行虚拟成多台虚拟的计算机,提高IT资源的利用率。
(虚拟化是一个广义的术语,是指计算原件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理、优化资源的解决方案。虚拟化技术通过引入一个新的虚拟化层,对下管理真实的物理资源,对上提供虚拟的系统资源,从而实现了在扩大硬件容量的同时,简化软件的重新配置过程。)
2)虚拟机:虚拟出来的计算机(cpu、内存、硬盘等都是虚拟出来的)(客户机 Guest)
3)宿主机:真实的计算机,具备真实的物理硬件的计算机。(物理机Host)
4)宿主机操作系统:真实的物理机上安装的操作系统(HOST OS)
5)客户机操作系统:虚拟出来的计算机上安装的操作系统(Guest OS)
Hypervisor:虚拟机监控器,就是给我们虚拟机提供运行环境(CPU\内存、磁盘、网卡等)的,可以是软件、固件、硬件。(VMM)(可允许多个操作系统和应用共享一套基础物理硬件,是用来建立与执行虚拟机器的软件、固件或硬件。)
(Hypervisor是所有虚拟化技术的核心。)
(KVM就是一种开源的虚拟化技术)
(在虚拟化技术中,可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象为一份。)

二、hypervisor的分类:

2大类:
1.宿主型:指 VMM 之下还有一层宿主操作系统,Guest OS对硬件的访问必须经过宿主操作系统。(应用程序调用硬件资源时需要经过:VM 内核->Hypervisor->主机内核 ,导致性能是三种虚拟化技术中最差的 。主机虚拟化技术代表是VMware Server (GSX)、Workstation 和 Microsoft Virtual PC 、 Virtual Server 等)
2.裸金属型:指 VMM 直接运作在裸机上,使用和管理底层的硬件资源,GuestOS 对真实硬件资源的访问都要通过VMM来完成,作为底层硬件的直接操作者, VMM 拥有硬件的驱动程序。(代表是VMware ESX Server、Citrix XenServer 和 Microsoft Hyper-V)

虚拟化技术方向:系统虚拟化、存储虚拟化、网络虚拟化、CPU虚拟化、软件虚拟化、硬件支持虚拟化

三、虚拟化技术演变的阶段:
1)软件模拟:

(用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台访问的截获和模拟。)

2)虚拟化层翻译:

1、软件全虚拟化(软件捕获翻译):不需要更改操作系统内核,Guest不知道自己是虚拟机,这时,通过VMM时刻的监控Guest的特权指令,进行捕获和模拟。 缺点:性能损耗过大
2、半虚拟化(改造虚拟机系统内核加虚拟化层翻译):需要更改操作系统的内核,Guest知道自己是虚拟机,这时,Guest会自己发送特权指令给VMM。(对虚拟机操作系统的内核进行改造,使虚拟机自己对特殊的指令进行更改,能够与虚拟化层协同工作。这种方法叫做准虚拟化,也叫半虚拟化。)
优点:性能好了。
缺点:针对于闭源的操作系统是无法更改内核的。
3、硬件辅助的全虚拟化(硬件支持的虚拟化层翻译):既不用修改操作系统内核,还能够让Guest知道自己是虚拟机,这时通过第3方厂商来支持的,修改底层的硬件。(优势:不需要对客户机操作系统做任何修改即可正常运行任何非虚拟化环境中已存在基于X86平台的操作系统和软件)
(目前硬件虚拟化技术主要是Intel VT 和AMD-V)
解决方案:Intel —>VT技术:
①针对于CPU:vt-x ②在I/O设备方面:vt-d ③网络方面:vt-c
AMD —>AMD-v技术

(软件全虚拟化、半虚拟化、硬件全虚拟化三者之间的区别:

1.全虚拟化技术早于半虚拟化技术;
2.软件全虚拟化,客户机认为自己运行在硬件之上,优点:不需对客户机操作系统进行修改;缺点:消耗资源大。
3.半虚拟化,客户机知道自己是运行在虚拟机上,缺点:需要对客户机操作系统进行修改,所以对不能修改的系统(Windows系统)不支持;优点:消耗资源小性能好。
4.硬件全虚拟化,靠硬件辅助的全虚拟化技术性能逐渐逼近半虚拟化,性能好并且不需要对客户机操作系统做任何修改,硬件全虚拟化技术将成为虚拟化技术的核心。)

(X86平台的指令集权限划分:

1、X86平台指令集划分为4个特权模式:Ring0、Ring1、Ring2、Ring3。操作系统一般使用Ring0级别,应用程序使用Ring3级别,驱动程序使用Ring1和Ring2级别。2、Ring值越小,其特权越高。3、有些指令只能在 Ring 0 才能正确执行,如 LGDT、LMSW 指令,我们称之为特权指令。)

3)容器虚拟化:

打包:打包整个运行环境。(将进程进行隔离,每个进程就像一台单独的虚拟机一样,有自己被隔离出来的资源,也有自己的根目录、独立的进程编号、被隔离的内存空间。基于容器的虚拟化可以实现在单一内核上运行多个实例,因此是一个更高效率的虚拟化方式。目前最热的容器虚拟化技术就是Docker。)
(基于硬件的全虚拟化产品将是未来虚拟化技术的核心。)

虚拟机的优点:

1)兼容性2)隔离性3)封装性4)独立于硬件

虚拟机的特征:
1)同质、2)高效、3)资源可控
  • 1

(云计算概念:云计算是一种能使用户便捷、随需应变地对共享的可配置计算资源共享池(如网络、服务器、存储器、应用程序和服务)进行网络访问的模型。按照服务模式分类:软件即服务(SaaS)、平台即服务(PaaS)、基础设施即服务(IaaS))

第二章 主流虚拟化产品介绍

针对于主流的虚拟化产品及厂商

1.全虚拟化解决方案:
Vmware kvm(KVM属于基于硬件辅助的全虚拟化解决方案。KVM的全称:基于内核的虚拟化。)
Vmware产品:
1)个人版:VMware Workstations 和 VMware Fusion
2)企业版:VMware vSphere 、VMware vCenter
2.半虚拟化解决方案:Xen、微软的Hyper-v
3.其他:VirtualBox既支持纯软件虛拟化,也支持Intel VT-x与AMD AMD-V硬件虚拟化技术。

第03章 KVM概述

一、什么是KVM(5颗星)

1.KVM:基于Linux内核的虚拟机
2.KVM是一个全虚拟化解决方案,适用于包含硬件扩展(Intel VT 或AMD-V)的X86平台上并且是基于Linux操作系统的。
1)保证加载内核模块:kvm.ko 和(kvm-intel或kvm-amd模块)
2)运行虚拟机无需修改Linux或Windows操作系统内核。
3)Kvm可以保证隔离性,每个虚拟机有自己独立的虚拟化硬件:网卡、磁盘、图形适配器等。
4)Kvm为开源软件。
5)版本支持:Linux内核2.6.20之后并入了KVM,还需借助用户空间组件:qemu 1.3。
(①KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor。②KVM是一个全虚拟化解决方案,适用于包含硬件扩展(Intel VT或AMD-V)的x86平台上。③它由可加载的内核模块kvm.ko组成,它提供核心虚拟化基础架构和处理器特定模块,kvm-intel.ko或kvm-amd.ko。④其体系架构包含kvm和qemu,其中kvm主要是内核中的一个模块,其主要功能就是初始化CPU,打开虚拟化功能,用来支持虚拟机的运行。用户空间程序qemu通过kvm创建的/dev/kvm接口进行通讯,并且向虚拟机提供模拟的I/O设备,用户空间通过qemu来模拟网卡、显卡、存储控制器和硬盘。)

二、KVM的体系架构(4颗星)

1.Kvm需要qemu的支持,称为:qemu-kvm。
2.什么是qemu:qemu用于用户空间,是一个通用的开源的硬件模拟器。
(用户空间程序QEMU通过KVM创建的/dev/kvm接口进行通讯,并且向虚拟机提供模拟的I/O设备,用户空间通过QEMU来模拟网卡、显卡、存储控制器和硬盘。)
3.如何将kvm与qemu结合在一起??(kvm的体系架构)
包含2部分:kvm、qemu
二者之间的分工:
①KVM:运行在内核空间
初始化CPU硬件,打开虚拟化模式,用来支持虚拟机的运行。
提供CPU和内存的虚拟化,以及客户机的I/O拦截,Guest的I/O被KVM拦截后,交给Qemu处理。
②QEMU:运行在用户空间
修改过的为KVM虚机使用的代码,运行在用户空间,提供硬件I/O虚拟化。模拟网卡、显卡、硬盘等硬件。
通过IOCTL /dev/kvm设备保证qemu和KVM交互。(KVM提供接口:/dev/kvm,)
4.总结:在Kvm的架构体系中可以看出:kvm将Linux系统变做了一个hypervisor,并且属于Type-II(宿主型)的虚拟化。需要借助宿主操作系统:Linux,而Hypervisor在宿主操作系统体现为一个应用程序,它就不需要实现对物理资源的管理了,而是由宿主操作系统来实现。
5.在Linux kvm上,一个虚拟机就体现为一个进程。关闭一个虚拟机最简单粗暴的方式就是kill掉这个进程。
(KVM分为3种模式:用户模式、内核模式、来宾模式。)

三、KVM的管理工具(3颗星)

存在2套管理工具:qemu和libvirt这2套管理工具。
(Qemu管理工具:(纯命令行)
qemu-kvm:可以实现创建虚拟机、启动虚拟机、配置虚拟机等操作。
qemu-img:主要是用来实现磁盘映像管理的工具组件,能够完成管理磁盘映像文件、管理快照的操作。)
(Libvirt是目前使用最广泛的对于KVM管理的工具和API,libvirt是Hypervisor的一套管理工具,除了能提供对KVM的管理,还能够对Xen、VMware等管理。Virsh:基于 libvirt 的 命令行工具 (CLI):Virt-Manager:基于 libvirt 的 GUI 工具,主要用于虚拟机的创建删除以及系统安装引导过程等)

四、如何搭建KVM运行环境(5颗星)

1.前提:
1)选择实验环境:嵌套虚拟化(借助Vmware 虚拟一个宿主机Linux)
2)必须保证开启硬件支持:
2.安装宿主机:Linux Cent OS7
方式一:安装Linux时选择虚拟化主机;
方式二:已经安装好的Linux操作,后期使用命令去安装这些虚拟化的工具包即可。
方式三:依据应答文件完成自动安装。
3.验证是否具备硬件支持:
1)在终端执行#cat /proc/cpuinfo(或#grep -Ei “vmx|svm” /proc/cpuinfo)命令,查看flag标志位是否含有vmx或者svm,如果其中输出有vmx或svm,即表明支持虚拟化技术。
如果搜索出vmx。则代表已经开启了Intel-vt技术。
如果搜索出svm。则代表已经开启了AMD-V技术。
4.验证是否加载了必须的2个模块:kvm和(kvm_intel 或 kvm_amd)
1)lsmod |grep kvm
5.验证dev下是否存在kvm的设备文件,如果存在这个设备文件,则说明整个Linux操作系统就变成了一个hypervisor。就可以运行虚拟机了。
6.安装虚拟化管理工具:libvirt、qemu2套管理工具。
7.关闭Linux的安全子系统:selinux
五.如何使用应答文件来自动安装操作系统。
1.导出模版虚拟机的kickstart应答文件:
每个CentOs都会生成自己的应答文件,位于/root/anaconda-ks.cfg。
2.将这个导出的应答文件放在web服务器、ftp服务器、刻录到安装光盘介质中,让安装程序知道该配置文件的位置。
注意:web服务器所在计算机的防火墙要关闭。
3.随后,就自动安装了。

第04章 kvm创建第一个客户机

方式一:使用qemu-kvm管理虚拟机

一、使用qemu-kvm
1.安装:yum -y install qemu-kvm qemu-kvm-tools (保证宿主机的网络是畅通的)
2.如果想去使用命令的话,需要将qemu-kvm的二进制包连接到/usr/sbin中:
1)使用rpm 列举二进制安装包路径:rpm -ql qemu-kvm
2)进行创建软连接:ln -sv /usr/libexec/qemu-kvm /usr/sbin/
3)查看软连接是否创建成功:ll |grep “qemu-kvm”
3.如果遇见以下错误:
解决办法:yum 安装openssl即可
4.使用qemu-kvm 获取他的帮助手册:qemu-kvm -h
二、使用命令行工具qemu-kvm创建虚拟机的步骤:
(步骤:准备好iso镜像。使用qemu-img创建磁盘映像文件。使用qemu-kvm创建虚拟机。借助vnc远程访问虚拟机图形界面。如若关闭虚拟机,直接kill掉即可。)
1.前提:准备好操作系统的镜像文件
2.准备好虚拟磁盘映像文件
1)创建管理虚拟磁盘的目录:mkdir -r /kvm/images
2)在虚拟磁盘目录中通过qemu-img创建虚拟机磁盘镜像文件(大小为6G,磁盘格式推荐使用qcow2):
qemu-img create -f qcow2 -o size=6G /kvm/images/centos6.qcow2
3.使用qemu-kvm创建虚拟机:
qemu-kvm -name “centos6” -m 1024 -smp 2 -hda /kvm/images/vm1/centos6.qcow2 -cdrom /kvm/iso/CentOS-6.10-x86_64-bin-DVD1.iso -boot order=dc
虚拟机运行后表现为一个进程(验证):ps -aux | grep “qemu-kvm”
4.借助vnc远程访问虚拟机图形界面;
(常用的远程管理方式有:SSH X-Windows VNC
vncserver:服务器端,此服务程序必须在在主(或遥控)计算机上运行。
vncviewer :本地应用程序,用于远程接入运行vncserver的计算机并显示其环境。
虚拟机CentOS6创建后运行在了vnc服务的5900端口上,通过ps -aux查看到此虚拟机进程)
1)需要保证服务器端安装:
在Linux系统上安装 :tigervnc-server,配置服务器端组件。yum -y install tigervnc-server
安装完成服务器端之后,要开启服务端,运行命令:vncserver
2)在客户端访问服务器端的时候,保证安装客户端的软件:
①针对于Windows的,下载客户端安装即可,官网:https://www.realvnc.com/。
针对于Linux的,安装yum -y install tigervnc。
②借助客户端远程访问服务器端:
针对于Linux 连接格式: vncviewer :端口号
针对于Windows连接格式: 连接主机IP : 端口号
5.关闭虚拟机:
1)简单粗暴的方式:直接杀死进程,但是不推荐这种方式。
查看进程:ps -aux | grep “qemu-kvm” 杀死进程:kill -9 进程号

方式二:libvirt创建虚拟机

一、使用libvirt这套工具管理虚拟机,(功能强大、可以永久保存虚拟机,提供图形化的管理工具及命令行的管理工具)
1.前提:保证服务开启:libvirtd服务开启。
(安装libvirt tools工具:CentOS 7 #yum -y install libvirt libvirt-client virt-install virt-manager
systemctl enable libvirtd ----设置开机启动
systemctl start libvirtd -----开启libvirtd
systemctl status libvirtd -----查看libvirtd的状态)
2. 使用virt-manager创建虚拟机:
A.准备好iso操作系统镜像
B.使用virt-manager来进行创建虚拟机:
1)注意点:
①virt-manager就是一个管理工具,它的底层还是需要调用qemu-kvm
②virt-manager默认设置下需要使用root用户才能够使用该工具。
③virt-manager是一套虚拟机的桌面管理器,必须在桌面环境下运行。
2)使用:运行virt-manager命令,打开virt-manager主页面。
3)创建虚拟机的操作步骤:
注意virt-manager会自动创建虚拟磁盘映像文件默认存放路径:/var/lib/libvirt/images/win2k3

三、扩展知识:为宿主机CentOS7进行热添加一块磁盘,进行扩容。

扩容原因:因为默认存储的位置空间不足。
解决办法:扩容之后,将虚拟机磁盘文件存放在宿主机的新添加的硬盘中。
案例:为宿主机热添加一块80G的硬盘,并进行分区。(很实用)
1.热添加(虚拟化上的概念):在不关机的状态下来进行添加设备
2.添加磁盘:
1)CentOS7:虚拟机设置–》添加一块80G硬盘–》确定
2)fdisk -l | more 查看CentOS7上的磁盘,发现没有新添加的80G的磁盘。
3)扫描磁盘:echo “- - -” > /sys/class/scsi_host/host0/scan
echo “- - -” > /sys/class/scsi_host/host1/scan
echo “- - -” > /sys/class/scsi_host/host2/scan
备注:‘- - -’代表channel,target和LUN编号。
4)fdisk -l | more 再次查看CentOS7上的磁盘信息,此时会发现新添加的80G的磁盘,但是未格式化,未分区。
3.格式化磁盘,为磁盘分区,并设置文件系统:
1)为磁盘分区:
①fdisk /dev/sdb
②输入m,获取帮助命令:
③命令(输入 m 获取帮助):p
磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos 磁盘标识符:0x6fd75829
设备 Boot Start End Blocks Id System
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-167772159,默认为 2048):
Last 扇区, +扇区 or +size{K,M,G} (2048-167772159,默认为 167772159):
⑤命令(输入 m 获取帮助):p ⑥命令(输入 m 获取帮助):w
⑦再次验证:[root@localhost scsi_host]# fdisk -l /dev/sdb
2)将磁盘分区默认的类型Linux更改为LVM逻辑卷管理格式的。
①LVM:逻辑卷管理,
概念:LVM是处于磁盘分区和文件系统之间的一个逻辑层。
优点:动态的管理磁盘分区的大小,弹性的调整文件系统的容量。
名词:LVM是Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。
PV:physical Volumn 指物理卷,由一个或多个物理分区组成。
VG:Volume Group卷组,可理解为一个虚拟磁盘,由一个或多个PV组成。
LV:logical volume,可理解为虚拟分区,一个VG可以分成1到多个虚拟分区。
PE:LVM中最小的存储块。
②设置为LVM逻辑卷管理:
查看物理分区:[root@localhost 桌面]# fdisk -l /dev/sdb
B、将分区“Linux”类型更改为“llinux lvm”类型[root@localhost 桌面]# fdisk /dev/sdb
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
C、再次查看验证磁盘分区格式是否已经更改。[root@localhost 桌面]# fdisk -l /dev/sdb
D、为物理分区创建物理卷
查看物理卷:[root@localhost 桌面]# pvscan
创建物理卷:[root@localhost 桌面]# pvcreate /dev/sdb1
E、创建逻辑卷组VG(虚拟磁盘)查看vg:[root@localhost 桌面]# vgscan
创建vg:[root@localhost 桌面]# vgcreate vmvg /dev/sdb1
[root@localhost 桌面]# pvscan
查看vg详细信息:[root@localhost 桌面]# vgdisplay vmvg
F、创建逻辑分区LV
创建:[root@localhost 桌面]# lvcreate -n lvvm1 -l 20479 vmvg
查看详细LV信息:[root@localhost 桌面]# lvdisplay /dev/vmvg/lvvm1
[root@localhost 桌面]# vgdisplay vmvg
设置文件系统ext4[root@localhost 桌面]# mkfs.ext4 /dev/vmvg/lvvm1
H、挂载 [root@localhost /]# cat /etc/fstab
为了使其开机自动挂载,编辑/etc/fstab文件:[root@localhost /]# vim /etc/fstab
此时在最后一行添加:/dev/vmvg/lvvm1 vm ext4 defaults 0 0
执行挂载命令:[root@localhost /]# mount /vm 验证查看:[root@localhost /]# mount

第五章qemu-kvm与virt-install详解

一、qemu-kvm的语法:qemu-kvm [options] [disk_image]

1、标准选项:-name name:设定虚拟机名称;
-m megs 设定虚拟机的RAM(内存)大小。默认128M,可添加M、G单位指定大小。
-cpu 指定cpu的模式,可以使用qemu-kvm -cpu ?获取qemu-kvm支持的cpu的模式
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpu=maxcpu]:设定模拟的SMP架构中CPU的个数、每个CPU的核心数,每个核心的线程数及CPU的socket数目,CPU可以模拟的最大的虚拟CPU数,PC机上最多可以模拟255颗CPU。
-boot [order=drives]:设定引导次序。在x86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器。(例:#先从网络启动,然后从硬盘启动:
qemu-kvm -boot order=nc,先从CD-ROM启动:qemu-kvm -boot once=d)
2.块设备选项(Block device options):
-hda file:file指定磁盘镜像文件,将这个磁盘镜像文件模拟为IDE格式的硬盘,第一个IDE接口的主盘。(不推荐使用)
-cdrom file:使用指定的file作为CD-ROM的镜像(光驱设备)(不推荐使用)
-drive option [,option[,option[,option[,…]]:定义新驱动器;可用的子选项有很多:
file=/path/to/somefile:硬件映像文件路径;
if=interface:此选项定义驱动器在接口上连接的类型,即控制器类型。可用类型有:ide、scsi、sd、mtd、floppy、pflash、virtio。常用的是ide和virtio格式。
index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
format=format:指定映像文件的格式,具体的格式可以参见qemu-img命令。
snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
catch=catch:定义如何使用物理机缓存来访问块数据,其可用的值有none(不缓存)、writeback(回写)、unsafe(以非安全模式使用缓存,数据可能会丢失,但是性能会好)和writethrough(直写)四个。
案例1:使用qemu-kvm创建最基本的虚拟机:(不推荐)
qemu-kvm -name “win2ka” -m 1G -smp 2,cores=2 -boot order=dc -cdrom /iso/ZRMPSEL_CN.iso -hda /vm/win2ka.qcow2
案例2:使用qemu-kvm的drive选项指定磁盘类型等信息:(推荐)
qemu-kvm -name “win2k3a” -m 512M -smp 1,cores=2 -boot order=dc
-drive file=/vm/test.qcow2,if=virtio,index=0,media=disk,format=qcow2,snapshot=on
-drive file=/vm/isos/win2003.iso,index=1,media=cdrom
案例3:qemu-kvm启动虚拟机:
qemu-kvm -name “centos6” -m 1G -smp 1,cores=2 -boot order=c -drive file=/vm/centos6a.qcow2,if=virtio,index=0,format=qcow2,media=disk
安装完成之后,我们就可以直接启动系统。可以在命令后添加&符号,从而放到后台去运行。
3、显示选项
1)-vnc display[,option[,option[,…]]]:指定使用vnc的方式来显示窗口桌面,使用-vnc选项可以让qemu监听在VNC上,下面仅列举常用的子选项有:
(1) password :password为关键字表示连接时需要验证密码。而为虚拟机设定远程连接的密码需要通过monitor监控接口使用change命令。语法为:change vnc password
(2)recerse:“反向”连接至某处于监听状态的vncviewer上,不常用。
(3)display的指定方式有3种:
①host:N :监听在哪个主机的第几个桌面上。如:172.16.100.7:1,这是监听于172.16.100.7主机的5900+N的端口上,host省略不写则默认工作在本机上。
(案例:①指定监听在哪个主机的哪个桌面上:
qemu-kvm -name “centos6” -m 1G -smp 1,cores=2 -boot order=c -drive file=/vm/centos6a.qcow2,if=virtio,index=0,format=qcow2,media=disk -vnc :2)
②unix:path将允许通过Unix域套接字进行连接,path是要侦听连接的Unix套接字的位置。
③none 表示不启动桌面,但是并不是真的不启动,只是说在启动qemu-kvm虚拟机时不启动,那么可以在需要时手动启动起来。可以在监控模式下使用“change”命令启动VNC服务器。语法为:change vnc :n 如:qemu-kvm -name “win2k3a” -m 512M -smp 1,cores=2 -boot order=c -drive file=/vm/test.qcow2,if=virtio,index=0,media=disk,format=qcow2,snapshot=on -vnc none -monitor stdio(-monitor stdio:表示在标准的输入输出上显示监控模式界面)
②进入监控模式:方式1:进入到虚拟机的桌面中,按ctrl+alt+2进入到虚拟机的监控模式。Ctrl+alt+1回到虚拟机桌面。
方式2:在启动虚拟机的时候,加-monitor stdio进入到监控模式。
③监控模式下:(进入监控模式(qemu):change vnc :3)
功能一:运行监控模式的命令,比如info命令,help info ,获取虚拟机的基本信息
功能二:change命令更改显示桌面、更改远程连接桌面的密码
②更改远程连接桌面的密码:
[root@localhost vm]# qemu-kvm -name “centos6” -m 1G -smp 1,cores=2 -boot order=c -drive file=/vm/centos6a.qcow2,if=virtio,index=0,format=qcow2,media=disk -vnc :3,password -monitor stdio(表明使用vnc连接虚拟机时,要输入密码,但是现在无密码,所以需要在监控模式下设置密码,语法为:change vnc password)
③quit退出监控模式。
4、网络选项:详见第8章网络虚拟化。

二、Virt这一套工具:virt-install:命令行方式,创建虚拟机并完成GuestOS安装。

1.注意libvirtd服务必须正常开启
(获取帮助信息:virt-install -h 获取版本信息:virt-install -version)
2.使用virt-install案例:
使用virt-install创建的每一个虚拟机都会相应的生成一个配置文件,放在/etc/libvirt/qemu文件夹下。但virt-install是要进行虚拟机保存的,所以,在配置文件中,每一个虚拟机都有自己唯一的名称和唯一的一个uuid。
例:virt-install -name centos6_2 //虚拟机名称,需全局唯一
-ram 1024 //虚拟机内存大小,单位为MB
-vcpus 2 //为虚拟机配置的vcpus数
-disk path=/vm/centos6_2.qcow2,bus=virtio,size=8,sparse,format=qcow2 ( device:设备类型, 如cdrom、disk或floppy等,默认为disk; bus:磁盘类型,其值可以为ide、scsi、usb、virtio或xen; perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw; size:新建磁盘映像的大小,单位为GB;format:磁盘映像格式,如raw、qcow2、vmdk等; sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间; nodisks:不使用本地磁盘)
-graphics vnc,password=123456 //监听模式下的密码
-noautoconsole //禁止自动连接至虚拟机的控制台
-cdrom /vm/CentOS-6.10-x86_64-bin-DVD1.iso //光盘安装介质
-network network=default //连接默认网络
-os-type linux //指定操作系统的类型
-os-variant rhel6 //指定具体版本
virt-install与qemu-kvm区别:使用virt-install创建的每一个虚拟机都会相应的生成一个配置文件,放在/etc/libvirt/qemu文件夹下。而这个配置文件将永远的被此虚拟机使用。这与qemu创建虚拟机不一样,qemu创建的虚拟机,下次打开时,更改虚拟机名称将不会受影响。但virt-install是要进行虚拟机保存的,所以,在配置文件中,每一个虚拟机都有自己唯一的名称和唯一的一个uuid。

第06章 管理虚拟机

创建虚拟机与启动虚拟机:
Qemu-kvm:命令行的方式来安装启动虚拟机。
Virt-manager:图形化的工具来安装启动虚拟机,virt-manager除了安装启动还可以完成虚拟机的管理:比如,管理存储、管理CPU、管理网卡。
Virt-install:命令行的方式进行安装与启动虚拟机。
Virt-viewer:图形化显示桌面,显示虚拟机的桌面。
Virsh:命令行管理虚拟机(重中之重)

一、Libvirtd作用是什么?

Libvirt概念:本身就是构建于抽象的概念之上,它包含一个libvirt API库,一个进程libvirtd和一系列的管理工具(virt-install virsh virt-manger等等)。(libvirt是为了更方便的管理平台虚拟化技术而设计的开放源代码的应用程序接口(API)、守护进程和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理。)
libvirt架构概述:libvirtd通过读取虚拟机的xml配置文件(/etc/libvirt/qemu)来调用qemu-kvm进程执行相应的操作,常见的管理工具(virt-manager、virt-install、virsh等)都是通过libvirtd来管理虚拟机。
(查看libvirtd服务的状态:systemctl status libvirtd 开启libvirtd服务:systemctl start libvirtd
重启libvirtd服务:systemctl restart libvirtd 停止libvirtd服务:systemctl stop libvirtd)

二、管理虚拟机:
1、图形化管理虚拟机的工具:

virt-manager(virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具。)
(virt-manager主要功能:定义和创建虚拟机;硬件管理;性能管理与监视;虚拟机保存和恢复、暂停和继续、关闭和启动;控制台工具;在线和离线迁移)
2、管理虚拟机:管理虚拟机的存储、CPU、网卡、及虚拟机的常规管理,考虑如何提高虚拟机的性能。
3、案例:提高虚拟机的性能,可以使用半虚拟化驱动virtio。
为了提高内存、硬盘、网络的性能,需要支持半虚拟化方案:virtio。
原理:1)通过统一的接口以支持的多种硬件设备(virtio统一接口)
2)不同的虚拟设备和不同的虚拟机可以有不同的前端驱动
3)不同的硬件设备可以有不同的后端驱动
4)两者之间的交互遵循virtio的标准

2、命令行方式管理虚拟机:virsh(6颗星)
1)2种模式:命令模式和交互模式
2)virsh常用命令:
①虚拟机常规管理的命令:

列举不同状态的虚拟机:list
查看在运行的虚拟机:virsh list
查看创建的所有虚拟机:virsh list --al
启动虚拟机:virsh start 虚拟机名称
关闭虚拟机:virsh shutdown 虚拟机名称 (友好性的关机)
重启虚拟机:virsh reboot 虚拟机名称
强制关闭虚拟机:virsh destory 虚拟机名称 (强制性关机)
挂起(暂停)虚拟机:virsh suspend 虚拟机名称
恢复被挂起的虚拟机:virsh resume 虚拟机名
开机启动虚拟机(在虚拟机服务(libvirt)启动的时候):virsh autostart 虚拟机名称
关闭开机启动虚拟机:virsh autostart --disable 虚拟机名称

②获取虚拟机的基本信息:id、name、uuid、状态、xml配置文件等:

查看虚拟机的信息:virsh dominfo 虚拟机的id或name
查看虚拟机的name:virsh domname 虚拟机id或uuid
查看虚拟机的id:virsh domid 虚拟机的name或uuid
查看虚拟机的uuid: virsh domuuid 虚拟机的name或id
查看虚拟机的状态:virsh domstate 虚拟机的id或name
查看虚拟机的xml配置文件:virsh dumpxml 虚拟机的name或uuid

③彻底删除一个虚拟机的步骤:

1)关闭虚拟机:virsh destroy 虚拟机名称
2)取消定义(删除虚拟机配置文件):virsh undefine 虚拟机名称
3)删除虚拟机文件(虚拟机磁盘映像文件、日志文件/var/log/libvirt/qemu/xxx.log等)
方式二:可以编写shell脚本删除:
#!/bin/bash
read -p “please input host name that you want to delete:” host
virsh destroy $host virsh undefine h o s t r m − f / v a r / l o g / l i b v i r t / q e m u / host rm -f /var/log/libvirt/qemu/ hostrmf/var/log/libvirt/qemu/{host}.log
echo -e "KVM host list is:\n virsh list --all"

④virsh管理网络:

启动默认的网络:virsh net-start default
暂停(销毁)网络:virsh net-destroy 网卡名称
自动开始网络:virsh net-autostart 网卡名称(默认网络virsh net-autostart default)
获取网卡XML配置文件:virsh net-dumpxml 网卡名称
获取网络信息: virsh net-info 网卡名称
列出网络:viesh net-list
把一个网络UUID 转换为网络名:virsh net-name 网卡uuid
把一个网络名转换为网络UUID:virsh net-uuid 网卡名称
⑤virsh进行虚拟机资源收集(维护)功能:
(1)获取hypervisor CPU的利用率:virsh nodecpustats --percent
(2)获取 hypervisor 内存的利用率:virsh nodememstats
(3)获取分配给虚拟机实例的CPU数量:virsh vcpucount --current kvm1 --live
(4)收集Guest虚拟CPU的详细信息:virsh vcpuinfo kvm1
(5)获取关于虚拟Guest CPU的timer信息:virsh cpu-stats --total kvm1
(6)获取关于Guest的常规信息:virsh dominfo kvm1
(7)获取Guest的内存利用率:virsh dommemstat --live kvm1
(8)获取Guest实例关联的块设备信息:virsh domblklist kvm1
(9)获取块设备信息的大小:virsh domblkinfo --device hda kvm1
(10)获取Guest实例关联的块设备错误信息: virsh domblkerror kvm1
(11)uri 显示出当前主机hypervisor连接的接口:

3)virsh进行时间点快照管理:

(创建快照、删除快照、恢复快照、获得快照信息)
①列出快照的父级:virsh snapshot-list 虚拟机名称 --parent
②以树状结构列出快照列表:virsh snapshot-list 虚拟机名称 --tree
③快照的拍摄、恢复、删除、查看操作:
查看虚拟机已有哪些快照:virsh snapshot-list 虚拟机名
创建快照(快照名称为随机的):virsh snapshot-create 虚拟机名
创建快照时,为快照起名称:virsh snapshot-create as 虚拟机名 快照名
恢复快照:virsh snapshot-revert 虚拟机名 快照名
删除快照:virsh snapshot-delete 域名城 快照名称
获取快照信息:virsh snapshot-info 虚拟机名 快照名
获取快照的xml配置文件:virsh snapshot-dumpxml 虚拟机名 快照名

4)使用virsh进行CPU管理操作:

①CPU的绑定操作:
适用:CPU绑定技术可以解决生产环境下CPU利用率严重不平均的问题。
CPU绑定技术适用于以下场景:系统的CPU压力比较大;多核CPU压力不平衡。
A、在线绑定CPU:
让虚拟机只能在物理CPU 2-3之间调度:virsh emulatorpin 虚拟机 2-3 --live
查看绑定是否生效:virsh emulatorpin 虚拟机名称
查看配置文件中是否生效:virsh dumpxml 虚拟机名称
强制VCPU和物理CPU一对一的绑定
强制虚拟机centos6.1上的虚拟CPU0绑定在物理CPU3上:virsh vcpupin centos6.1 0 3
强制虚拟机centos6.1上的虚拟CPU1绑定在物理CPU1上:virsh vcpupin centos6.1 1 1
查看是否绑定成功:virsh vcpuinfo centos6.1 查看配置文件:virsh dumpxml centos6.1
②使用virsh来为虚拟机进行热添加CPU
注意点:在给虚拟机分配CPU的时候,就要预留足够的CPU。
A、把CPU在线的修改为3个:virsh setvcpus 虚拟机 3 --live
B、如果要验证是否添加成功:方式一:virsh vcpuinfo 虚拟机
方式二:进入虚拟机,查看CPU的配置文件:cat /proc/cpuinfo 或 cat /proc/interrupts
注意点:CPU是不支持热去除,但是,可以在虚拟机进行关闭已激活的cpu。

三、为virsh来进行增强管理虚拟机,设置虚拟机代理。

1、理解Qemu Guest Agent的这个服务,明确它是虚拟机的一个服务,能够进行将hypervisor与虚拟机通信。
2、安装与配置qga服务: 1)虚拟机为Windows的操作系统:
①手动下载编译好的二进制包,连接上光盘:/kvm/isos/virtio-win-xxx.iso
②双击运行安装即可(注意:操作系统是32位的还是64位的),安装完成之后,去验证qga服务是否已经开启。
③保证qga服务已经开启之后,然后,去添加虚拟机代理设备:配置文件(etc/libvirt/qemu)
方式二:
借助图形化virt-manager添加硬件:添加新硬件Channel。选择org.qemu.quest_agent.0.
④验证:1)宿主机中输入命令:virsh qemu-agent-command 虚拟机名称’{“execute”:“guest-ping”}’ 如果返回:{“return”:{}},说明正常连接,则配置成功。
2)宿主机中输入命令:qemu-agent-command centos6.1 ‘{“execute”:“guest-info”}’
如果正常返回虚拟机的配置信息,则配置成功。
⑤运行virsh的一些增强的命令:比如获取虚拟机的时间:domtime 虚拟
2)虚拟机为Linux的操作系统:
①安装qga:yum -y install qemu-guest-agent ②见上述Windows安装中的第③部分
③见上述Windows安装中的第④部分 ④关闭客户机的selinux及防火墙
⑤重启客户机(保证selinux关闭发挥作用) ⑥执行设置密码及获取时间命令即可。

第七章 管理虚拟磁盘

一、管理虚拟磁盘:
1、磁盘的存储模式都有哪些?

(KVM虚拟机的磁盘镜像从存储上看,可以分为两种方式:基于文件系统的存储和基于设备的存储,直接为虚拟机分配使用裸设备)

2、Kvm所支持的存储格式:

①raw:kvm创建虚拟磁盘默认的磁盘格式,注意点:raw格式并不是一个真正的磁盘格式,只是一个二进制磁盘镜像,不支持高级特性(快照、压缩、加密)。本身不支持稀疏文件特性,需要文件系统的支持才能够支持稀疏文件特性。
稀疏文件特性:就是文件系统会把分配的空字节文件记录在元数据当中,而不是实际的占用磁盘空间。
②qcow2:本身就支持稀疏文件特性,支持对磁盘进行高级特性(快照、压缩、加密)的管理。推荐使用的。
qcow:第一代的格式 ③vmdk:VMware环境当中默认使用的磁盘格式
④vdi:VitrualBox环境当中默认使用的磁盘格式

3、管理虚拟磁盘:qemu-img命令管理

(qemu-img --help包括以下功能:check 检查完整性create 创建镜像commit 提交更改
compare 比较convert 转换info 获得信息map 映射snapshot 快照管理rebase 在已有的镜像的基础上创建新的镜像resize 调整大小amend 修订镜像格式选项)

1)实验一:创建磁盘及更改磁盘大小

①不指定格式创建磁盘文件:qemu-img create t1.img 1G
指定格式床架磁盘文件:qemu-img create -f qcow2 t2.img 1G
查看这个磁盘文件的信息:qemu-img info t1.img
使用ll查看其分配的大小:ll /vm/t1.img
使用du -lh查看其占用大小:du -lh /vm/t1.img
mount查看文件系统格式:文件系统ext4支持稀疏文件,所以,raw支持稀疏文件。
对于qcow2格式的磁盘本身就支持稀疏文件特性,比如:分配1G的磁盘,实际磁盘占用空间为196K。
②改变磁盘映像文件的大小(2种格式):
qemu-img resize t1.img +1G 或者 qemu-img resize t1.img 2G
raw格式的镜像文件支持缩小磁盘映像文件的大小,但是qcow2格式不支持缩小磁盘映像文件的大小。
③raw格式不支持高级特性,而qcow2支持高级特性,推荐使用qcow2格式。
qcow2格式选项: size (虚拟化磁盘大小) Compat (0.10 or 1.1)
backing_file (用于指定后备镜像文件) backing_fmt (设置后备镜像的镜像格式)
encryption(用于设置加密) preallocation(设置镜像文件空间的预分配模式)
cluster_size (设置镜像中的簇大小,取值在512K到2M之间,默认为64K)

2)实验二:稀疏文件

稀疏文件特性:文件系统会把分配的空字节文件记录在元数据当中,而不实际占用磁盘空间。
它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实的数据块会按原样写入磁盘。
使用ll和du命令可查看到,磁盘分配大小与实际占用大小不一致,说明,创建的这2种格式(raw、qcow2)的磁盘均支持稀疏特性。不过,raw是由于文件系统支持稀疏特性才支持的,qcow2本身就支持稀疏特性。
总结:A、raw格式的磁盘需要文件系统的支持才能支持sparse file。因为ext4文件系统是一个支持稀疏特性的文件系统,当文件内容全部是空的时候,ext4并不分配实际的空间。所以,使用ll命令和du命令看到的分配大小与实际占用磁盘的大小不一致。
Windows的ntfs文件系统也支持稀疏特性。qcow2格式磁盘按需进行分配磁盘空间,不管文件系统是否支持稀疏特性,qcow2本身就支持稀疏特性。如果希望创建一个磁盘实际分配和占用的大小一致(也就是不支持稀疏特性),可以使用dd命令
②扩展知识:对稀疏文件做灵活处理。
A、dd命令创建支持稀疏文件的虚拟磁盘:
B、对于raw格式,文件系统支持的稀疏文件,是否可以去改变为不支持呢?
可以在复制的时候(使用cp命令的时候)指定稀疏文件特性:
–sparse=always 创建稀疏文件 --sparse=never 禁止创建稀疏文件
案例:# du -lh flag*
#cp flag1.raw flag1c.raw --直接复制时,本身支持稀疏特性,复制后还是支持
#cp flag2.raw flag2c.raw --直接复制时,本身不支持稀疏特性,复制后还是不支持
#cp flag1.raw flag1cc.raw --sparse=never --复制时,改变稀疏特性,改变为不支持
]# cp flag2.raw flag2cc.raw --sparse=always --复制时,改变稀疏特性,改变为支持

4、qemu-img check对磁盘做检查的语法:

qemu-img check 磁盘文件的路径,对于raw格式的不支持磁盘检查。(镜像检查只支持qcow2、qed、vdi格式)

5、qcow2格式的选项:

1)qcow2格式的预分配策略:preallocation指定4种模式:off:缺省策略,即不使用预分配策略,按需分配。metadata:分配元数据,预分配后的虚拟磁盘仍然属于稀疏映像类型。等同于VMware中的精简配置。full:分配所有磁盘空间并置零,预分配后的虚拟磁盘属于非稀疏映像类型。等同于VMware中的厚置备置零。falloc:分配文件的块并标示它们的状态为未初始化,相对full模式来说,创建虚拟磁盘的速度要快很多。等同于VMware中的厚置备延迟置零。
2)后备差异虚拟磁盘:backing_file :指多台虚拟机共用一个后备镜像,每个虚拟机根据需要,如果是读操作,则读取镜像,如果是写操作,则写入自己的镜像文件。(优点:标准化基础镜像,快速生成虚拟机镜像。节省空间;缺点:增加了开销,较差的性能)
①注意点:后备镜像可以是raw和qcow2格式,但是差量镜像只能是qcow2格式。
②后备差异虚拟磁盘实验:
1.准备后备镜像文件:父磁盘文件(模版文件):cp /vm/centos6a.qcow2 centos_base.qcow
2.创建差量磁盘文件,读取后备文件的数据:qemu-img create -f qcow2 -o backing_file=centos_base.qcow2 oa-disk1.qcow2
3.创建虚拟机(对于虚拟机来说,看到的还是只是一块盘,只不过这个磁盘由两个镜像文件共同合并起来的。):virt-install --import --name=oa --vcpus=2 --ram=512 --disk path=/vm/oa-disk1.qcow2 --graphics vnc,password=123456 --network network=default

6、磁盘的转换:

qemu-img convert -p -f 原有格式 -O 目标格式 原有虚拟磁盘文件名 转换后磁盘文件名
如:qemu-img convert -p -f raw -O qcow2 flag.raw flag.qcow2 转换后虚拟磁盘文件名

7、磁盘的压缩及加密:

(只能针对qcow2格式的。了解即可)
压缩:qemu-img convert -c -p -f qcow2 -O qcow2 flag.qcow2 flag1.qcow2
加密:qemu-img convert -p -f qcow2 -O qcow2 flag.qcow2 flag1.qcow2 -o encryption

8、磁盘快照管理(raw格式不支持快照,只有qcow2格式才支持快照)

列举出映像文件的所有快照:qemu-img snapshot -l /vm/test.qcow2
创建快照test-1.snap:qemu-img snapshot -c /vm/test-1.snap /vm/test.qcow2
恢复到快照test-1.snap:qemu-img snapshot -a /vm/test-1.snap /vm/test.qcow2
删除快照test-1.snap:qemu-img snapshot -d /vm/test-1.snap /vm/test.qcow2
(按快照信息保存分为:内置快照、外置快照;按虚拟机的状态可以分为:关机态快照、运行态快照;按磁盘数量可以分为:单盘、多盘)

二、存储池与存储卷的管理:
1、存储池的概念:

狭义的理解就是:管理虚拟磁盘文件的本地目录(放置虚拟机的存储位置,可以是本地的,也可以是网络存储)

2、存储池:

每一个存储池都会相应的产生一个XML配置文件,这些xml存储池的配置文件的存放在:/etc/libvirt/storage

3、管理存储池的基本命令:

列出池:virsh pool-list --help 列出活跃池:virsh pool-list
列出所有池:virsh pool-list --all 显示存储池的信息:virsh pool-info --help
存储池的名称可以更改,但是其UUID是唯一不变,不可更改的。

4、创建不同类型的存储池:

1)创建基于文件系统目录的存储池:
Virsh创建存储池2种方式:pool-define-as :通过指定参数来创建存储池
Pool-define :通过提前编写好的xml配置文件创建存储池
①使用virsh创建基于目录的存储池步骤(使用第1种方式):
定义池:virsh pool-define-as gu1 dir --target /gu1创建存储池的xml配置文件)
构建池:virsh pool-build guest_dir (创建存储池的目标目录)启动池:pool-start guest_dir
设置为自动启动:virsh pool-autostart guest_dir
②删除基于目录的存储池步骤:
销毁池(其实就是暂停池):virsh pool-destroy guest_dir
删除池(删除存储池关联的目标目录):virsh pool-delete guest_dir
取消池的定义,清除配置文件(删除xml配置文件):virsh pool-undefine guest_images2
2)创建基于预先格式化块设备fs的存储池:
注意:libvirtd会自动mount分区
构建池:virsh pool-build guest_images (创建存储池的目标目录)
启动池:virsh pool-start guest_images 设置为自动启动:virshpool-autostart guest_images
3)创建基于磁盘裸设备的存储池:(没有文件系统占用性能,性能比较高)
使用第2种方式创建:pool-define 指定xml配置文件进行创建。
①:准备XML文件
vim /tmp/guest_images_disk.xml
②:使用virsh,通过xml创建基于disk的存储池:
virsh pool-define /tmp/guest_images_disk.xml
virsh pool-list --all
virsh pool-start guest_images_disk
将池标记为自动启动:virsh pool-autostart guest_images_disk
4)创建基于LVM的存储池:
基于LVM的存储池要求使用全部磁盘分区,会自动创建新的vg。

三、存储卷管理:

存储卷可以体现为:虚拟磁盘文件、可以是块设备(比如,物理分区、LVM逻辑卷),或者是libvirt管理的其他类型存储(存储池被划分为多个存储卷。存储卷:虚拟磁盘文件;块设备(物理分区、LVM逻辑卷);libvirt管理的其他类型存储的抽象)
(1)创建存储卷:vol-create-as 存储池名 卷名 卷大小 --format qcow2(指定格式为qcow2)(例:irsh vol-create-as vm test1.qcow2 2G --format qcow2)
(2)查看存储池中的卷:virsh vol-list 存储池
查看卷的信息:virsh vol-info test1.qcow2 --pool vm或者virsh vol-info /vm/test1.qcow2
(3)克隆存储卷:virsh vol-clone test1.qcow2 test2.qcow2 --pool vm
(3)删除存储卷:virsh vol-delete test1.qcow2 --pool vm

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/65331
推荐阅读
相关标签
  

闽ICP备14008679号