· KVM构建及管理
· virsh控制工具
· 镜像管理
· 虚拟机快捷技术

环境的准备

  1. 将A虚拟机的配置改成内存为6GB,添加一块40GB的硬盘
  2. 将虚拟机当成一个真机去使用,需要修改一下CUP的参数,如下操作

扩展根分区空间

df -h			查看正在挂载使用的设备信息
#   文件系统					容量   已用   可用   已用%   挂载点
# /dev/mapper/centos-root   18G   2.2G   16G   13%     /

vgs				查看卷组信息
#   VG     #PV #LV #SN Attr   VSize   VFree
#   centos   1   2   0 wz--n- <19.00g    0 

lsblk			查看硬件信息
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda               8:0    0   20G  0 disk 
# ├─sda1            8:1    0    1G  0 part /boot
# └─sda2            8:2    0   19G  0 part 
#   ├─centos-root 253:0    0   18G  0 lvm  /
#   └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
# sdb               8:16   0   40G  0 disk 
# sr0              11:0    1  4.4G  0 rom  /mydvd

vgextend centos /dev/sdb			扩展卷组的空间
#  Physical volume "/dev/sdb" successfully created.
#  Volume group "centos" successfully extended

vgs				查看卷组信息
#   VG     #PV #LV #SN Attr   VSize  VFree  
#   centos   2   2   0 wz--n- 58.99g <40.00g

lvextend -L 50G /dev/centos/root 		将逻辑卷的空间扩展到50G
#  Size of logical volume centos/root changed from <18.00 GiB (4607 extents) to 50.00 GiB (12800 extents).
#  Logical volume centos/root successfully resized.

lvs				查看逻辑卷的大小
#   LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
#   root centos -wi-ao---- 50.00g                                                    
#   swap centos -wi-ao----  1.00g

blkid /dev/centos/root			查看文件系统的类型
# /dev/centos/root: UUID="28673c9f-9554-40df-83f8-ec4b1ff8771d" TYPE="xfs" 

xfs_growfs /dev/centos/root				将逻辑卷的大小刷新到文件系统

df -h 				显示设备使用情况
# /dev/mapper/centos-root   50G  2.2G   48G   5% /

虚拟机A---->Linux平台虚拟化软件----->新建虚拟机----->装系统

· 传递光盘镜像文件到虚拟机A

  • 电脑需要先下载Xftp 连接到Xshell软件,将电脑里面的centos通过Xftp软件传给虚拟机A
mkdir /dvd					在根目录下创建/dvd目录

kvm中创建的镜像路径_xml

ls /dvd		
# CentOS-7-x86_64-DVD-2009.iso

虚拟化概述

· virtualization 资源管理

  • x个物理资源–> y个逻辑资源
  • 实现程度:完全、部分、硬件辅助(CPU)

    虚拟化主要厂商及产品

安装KVM虚拟化软件

kvm中创建的镜像路径_kvm中创建的镜像路径_02

使用yum安装KVM虚拟化软件包
yum -y install qemu-kvm					为kvm提供底层仿真支持
yum -y install libvirt-daemon			守护进程,管理虚拟机
yum -y install libvirt-client			用户端软件,提供客户端管理命令
yum -y install libvirt-daemon-driver-qemu		libvirtd连接qemu的驱动
yum -y install virt-manager				图形管理工具

安装好KVM虚拟化软件包之后
virt-manager			输入命令进入KVM的软件的图形界面直接进行安装

环境异常处理

  • 如果我们的Xshell一直启动不了图形界面,需要在电脑上先安装Xmanager
  • Xshell 7连接Xmanager 7需要处理软件之间的依赖关系,需要先在虚拟机安装xorg-x11-xauth
yum -y install xorg-x11-xauth
  • 如果我们在输入virt-manager命令,图形界面提示找不到libvirtd守护进程文件,我们需要先修改一下守护进程文件的配置文件
将 vim /etc/libvirt/libvirtd.conf中
listen_tls = 0
listen_tcp = 1
tls_port = "16514"
tcp_port = "16509"
将这四行的注释取消

systemctl start libvirtd.service

使用KVM虚拟化软件 新建虚拟机

virt-manager		图形虚拟系统管理器

kvm中创建的镜像路径_centos_03

kvm中创建的镜像路径_xml_04

kvm中创建的镜像路径_linux_05

kvm中创建的镜像路径_kvm中创建的镜像路径_06

kvm中创建的镜像路径_linux_07

kvm中创建的镜像路径_linux_08

kvm中创建的镜像路径_centos_09

kvm中创建的镜像路径_kvm中创建的镜像路径_10

kvm中创建的镜像路径_linux_11

kvm中创建的镜像路径_xml_12

kvm中创建的镜像路径_linux_13

  • 配置完成后开始装系统

kvm中创建的镜像路径_centos_14

kvm中创建的镜像路径_centos_15

kvm中创建的镜像路径_linux_16

kvm中创建的镜像路径_centos_17

  • KVM虚拟机安装完成

虚拟化命令使用 virsh

· 提供管理各虚拟机的命令接口

  • 支持交互模式,查看/创建/停止/关闭 …
  • 格式 :virsh 控制指令 [虚拟机名称] 【参数】
  • virsh命令使用的两种状态
[root@svr7 ~]: virsh		直接使用命令virsh会进入一个交互式环境		
	# Welcome to virsh, the virtualization interactive terminal.
	
	# Type:  'help' for help with commands
	#       'quit' to quit

	virsh: list			列出正在运行的虚拟机
	#  Id    Name                           State
	# ----------------------------------------------------
	#  1     nsd01                          running
	
	virsh:	exit		退出virsh交互式环境

我们也可以直接使用命令行的模式,不进入交互式环境(非交互模式不支持tab键)
[root@svr7 ~]: virsh list		列出正在运行的虚拟机
#  Id    Name                           State
# ----------------------------------------------------
#  1     nsd01                          running
  • virsh命令的基本使用
· 查看KVM节点(服务器)信息
- virsh nodeinfo

· 列出虚拟机
- virsh list [--all]

· 查看指定虚拟机的信息
- virsh dominfo	虚拟机名称

· 运行/重启/关闭指定的虚拟机
- virsh start/reboot/shutdown 虚拟机名称		

· 强制关闭指定的虚拟机
- virsh destroy	虚拟机名称
 
· 将指定的虚拟机设为开机自动运行
-  virsh autostart [--disable] 虚拟机名称
virsh nodeinfo					查看KVM服务器虚拟机A的信息

virsh list --all				列出全部的虚拟机(--all 没有运行的虚拟机也会列出)	
	
virsh dominfo nsd01				查看虚拟机nsd01的详细信息

virsh autostart nsd01			将虚拟机nsd01设为开启服务器自动启动
# Domain nsd01 marked as autostarted

virsh autostart nsd01 --disable 		取消虚拟机nsd01为开启服务器自动启动
# Domain nsd01 unmarked as autostarted

virsh destroy nsd01				关闭虚拟机nsd01
# Domain nsd01 destroyed

virsh start nsd01			开启虚拟机nsd01
# Domain nsd01 started

KVM虚拟机的组成

  • KVM虚拟机由 xml 配置文件 和 磁盘镜像文件 组成
  1. xml 配置文件 : 定义虚拟机的名称、UUID、内存、虚拟磁盘、网卡等各种参数设置
    · 默认xml配置文件存放路径 : /etc/libvirt/qemu/
ls /etc/libvirt/qemu
autostart  networks  nsd01.xml

kvm中创建的镜像路径_bc_18

  1. 磁盘镜像文件 : 保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
    · 默认磁盘镜像文件的存放路径 : /var/lib/libvirt/images/
ls /var/lib/libvirt/images/
# nsd01.qcow2

命令行 手动克隆虚拟机

  1. 生成磁盘镜像文件
virsh destroy nsd01					关闭虚拟机nsd01
cd /var/lib/libvirt/images/		
cp nsd01.qcow2 abc01.qcow2 			复制虚拟机nsd01的镜像文件
ls 
# abc01.qcow2  nsd01.qcow2
  1. 建立xml配置文件
cd /etc/libvirt/qemu
cp nsd01.xml abc01.xml
ls
# abc.xml  autostart  networks  nsd01.xml

vim abc01.xml
: set nu   显示行号
   9   <name>abc01</name>			修改虚拟机的名字
  10   <uuid>cb686431-39fd-41e2-adf9-a6c33b4ebc96</uuid>		uuid可以整行删除,启动KVM软件会自动生成一个uuid
 		# uuid是出厂设置的条形码,出厂设置具有唯一的标识性
  43   <source file='/var/lib/libvirt/images/abc01.qcow2'/>			修改虚拟机磁盘的镜像文件路径
  76   <mac address='52:54:00:ad:5d:53'/>		mac网卡地址可以整行删除,启动KVM软件会自动生成一个mac地址
		# mac出厂设置具有唯一的标识性
  1. 导入xml的配置文件
virsh define /etc/libvirt/qemu/abc01.xml			导入xml的配置文件
# Domain abc01 defined from /etc/libvirt/qemu/abc01.xml


virsh list --all				列出所有的虚拟机
#  Id    Name                           State
# ----------------------------------------------------
#  -     abc01                          shut off
#  -     nsd01                          shut off

virsh start abc01				开启虚拟机abc01	
# Domain abc01 started

virsh destroy abc01				关闭虚拟机abc01
# Domain abc01 destroyed

手动克隆虚拟机 三合一版

  1. 生成一个磁盘镜像文件
virsh destroy nsd01					关闭虚拟机nsd01
cd /var/lib/libvirt/images/		
cp nsd01.qcow2 ABC01.qcow2 			复制虚拟机nsd01的镜像文件
  1. 建立新的xml配置( 复制,修改,导入===》三合一操作 )
virsh edit nsd01			以nsd01虚拟机作为模板进行编辑
: set nu   显示行号
   1   <name>ABC01</name>			修改虚拟机的名字
   2    <uuid>cb686431-39fd-41e2-adf9-a6c33b4ebc96</uuid>		uuid可以整行删除,启动KVM软件会自动生成一个uuid
 		# uuid是出厂设置的条形码,出厂设置具有唯一的标识性
  37   <source file='/var/lib/libvirt/images/ABC01.qcow2'/>			修改虚拟机磁盘的镜像文件路径
  70  <mac address='52:54:00:ad:5d:53'/>		mac网卡地址可以整行删除,启动KVM软件会自动生成一个mac地址
		# mac出厂设置具有唯一的标识性


virsh list --all				查看所有的虚拟机
#  Id    Name                           State
# ----------------------------------------------------
#  -     ABC01                          shut off
#  -     abc02                          shut off
#  -     nsd01                          shut off

virsh start ABC01				开启虚拟机ABC01
# Domain ABC01 started

virsh destroy ABC01				关闭虚拟机ABC01
# Domain ABC01 destroyed

手动删除虚拟机

  1. 关闭虚拟机
virsh destroy ABC01
# Domain ABC01 destroyed

virsh list --all
#  Id    Name                           State
# ----------------------------------------------------
#  -     abc01                          shut off
#  -     ABC01                          shut off
#  -     nsd01                          shut off
  1. 删除导入的虚拟机信息(删除XML配置文件)
virsh undefine ABC01
# Domain ABC01 has been undefined

virsh list --all
#  Id    Name                           State
# ----------------------------------------------------
#  -     abc01                          shut off
#  -     nsd01                          shut off
  1. 手动删除虚拟机的镜像文件
rm -rf /var/lib/libvir/images/ABC01.qcow2
ls /var/lib/libvirt/images/
# abc01.qcow2  nsd01.qcow2

写时复制 Copy On Write

无视磁盘文件大小,快速产生磁盘文件

  • 虚拟机的磁盘镜像文件格式

· Copy On Write ,写时复制

  • 直接映射原始盘(后端盘)的数据内容
  • 原始盘(后端盘)内容不变,并且不能修改原始盘(后端盘)内容,否则所有前端盘无法使用
  • 对前端盘的修改不回写原始盘(后端盘)

kvm中创建的镜像路径_bc_19

手动克隆虚拟机 写时复制版

· 快速创建qcow前端盘

写时复制的基本格式:
- qemu-img 通过 -b 选择复用指定后端盘
- qemu-img create -f qcow2 -b 后端盘 前端盘
  1. 生成一个磁盘镜像文件
cd /var/lib/libvirt/images/				切换目录
qemu-img create -f qcow2 -b nsd01.qcow2 stu01.qcow2			创建一个qcow2类型的前端盘stu01.qcow2	
# Formatting 'stu01.qcow2', fmt=qcow2 size=9663676416 backing_file='nsd01.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
ls
# abc01.qcow2  abc02.qcow2  nsd01.qcow2  stu01.qcow2

qemu-img info stu01.qcow2			查看前端盘的信息
# image: stu01.qcow2
# file format: qcow2
# virtual size: 9.0G (9663676416 bytes)			虚拟大小9G
# disk size: 196K							实际占用磁盘空间196K
# cluster_size: 65536
# backing file: nsd01.qcow2				显示后端盘 : nsd01.qcow2	
# Format specific information:
#    compat: 1.1
#    lazy refcounts: false
  1. 建立新的xml配置(三合一操作)
virsh edit nsd01		以nsd01虚拟机作为模板进行编辑
: set nu   显示行号
   1   <name>stu01</name>			修改虚拟机的名字
   2    <uuid>cb686431-39fd-41e2-adf9-a6c33b4ebc96</uuid>		uuid可以整行删除,启动KVM软件会自动生成一个uuid
 		# uuid是出厂设置的条形码,出厂设置具有唯一的标识性
  36   <source file='/var/lib/libvirt/images/stu01.qcow2'/>			修改虚拟机磁盘的镜像文件路径
  69  <mac address='52:54:00:ad:5d:53'/>		mac网卡地址可以整行删除,启动KVM软件会自动生成一个mac地址
		# mac出厂设置具有唯一的标识性


virsh list --all			查看所有的虚拟机
# Id    Name                           State
# ----------------------------------------------------
# -     stu01                          shut off

virsh start stu01	    		开启虚拟机stu01
# Domain stu01 started

virsh list 			      查看已经开启的虚拟机
# Id    Name                           State
# ----------------------------------------------------
# 7     stu01                          running

离线访问虚拟机

· 使用guestmount工具

  • 支持离线挂载 raw、qcow2 格式虚拟机磁盘
  • 可以在虚拟机关机情况下,直接修改磁盘中的文档
  • 方便对虚拟机定制、修复、脚本维护
    !!!需要注意 SElinux 机制的影响

· 如何挂载虚拟盘

基本格式
guestmount -a 虚拟机磁盘路径 -i /挂载点
virsh list --all				虚拟机abc01的状态为关机状态
# Id    Name                           State
# ----------------------------------------------------
# -     abc01                          shut off

yum provides */guestmount				查询磁盘中哪个软件包产生guestmount
# Loaded plugins: fastestmirror
# Loading mirror speeds from cached hostfile
# 1:libguestfs-tools-c-1.40.2-10.el7.x86_64 : System administration tools for virtual machines
# Repo        : 1996
# Matched from:
# Filename    : /usr/bin/guestmount

yum -y install libguestfs-tools-c			安装guestmount所在的包

guestmount -a /var/lib/libvirt/images/abc01.qcow2 -i /mnt 		将磁盘镜像文件abc01.qcow2挂载到mnt目录下
ls /mnt			展现的是磁盘镜像文件abc01.qcow2的内容
# bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
# boot  etc  lib   media  opt  root  sbin  sys  usr

挂载成功后,可以对磁盘镜像文件abc01.qcow2直接进行修改
比如vim /mnt/etc/hostname修改主机名,就是直接修改虚拟机abc01的主机名