· KVM构建及管理
· virsh控制工具
· 镜像管理
· 虚拟机快捷技术
环境的准备
- 将A虚拟机的配置改成内存为6GB,添加一块40GB的硬盘
- 将虚拟机当成一个真机去使用,需要修改一下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目录
ls /dvd
# CentOS-7-x86_64-DVD-2009.iso
虚拟化概述
· virtualization 资源管理
- x个物理资源–> y个逻辑资源
- 实现程度:完全、部分、硬件辅助(CPU)
虚拟化主要厂商及产品
安装KVM虚拟化软件
使用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虚拟机安装完成
虚拟化命令使用 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 配置文件 和 磁盘镜像文件 组成
- xml 配置文件 : 定义虚拟机的名称、UUID、内存、虚拟磁盘、网卡等各种参数设置
· 默认xml配置文件存放路径 :/etc/libvirt/qemu/
ls /etc/libvirt/qemu
autostart networks nsd01.xml
- 磁盘镜像文件 : 保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
· 默认磁盘镜像文件的存放路径 :/var/lib/libvirt/images/
ls /var/lib/libvirt/images/
# nsd01.qcow2
命令行 手动克隆虚拟机
- 生成磁盘镜像文件
virsh destroy nsd01 关闭虚拟机nsd01
cd /var/lib/libvirt/images/
cp nsd01.qcow2 abc01.qcow2 复制虚拟机nsd01的镜像文件
ls
# abc01.qcow2 nsd01.qcow2
- 建立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出厂设置具有唯一的标识性
- 导入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
手动克隆虚拟机 三合一版
- 生成一个磁盘镜像文件
virsh destroy nsd01 关闭虚拟机nsd01
cd /var/lib/libvirt/images/
cp nsd01.qcow2 ABC01.qcow2 复制虚拟机nsd01的镜像文件
- 建立新的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
手动删除虚拟机
- 关闭虚拟机
virsh destroy ABC01
# Domain ABC01 destroyed
virsh list --all
# Id Name State
# ----------------------------------------------------
# - abc01 shut off
# - ABC01 shut off
# - nsd01 shut off
- 删除导入的虚拟机信息(删除XML配置文件)
virsh undefine ABC01
# Domain ABC01 has been undefined
virsh list --all
# Id Name State
# ----------------------------------------------------
# - abc01 shut off
# - nsd01 shut off
- 手动删除虚拟机的镜像文件
rm -rf /var/lib/libvir/images/ABC01.qcow2
ls /var/lib/libvirt/images/
# abc01.qcow2 nsd01.qcow2
写时复制 Copy On Write
无视磁盘文件大小,快速产生磁盘文件
- 虚拟机的磁盘镜像文件格式
· Copy On Write ,写时复制
- 直接映射原始盘(后端盘)的数据内容
- 原始盘(后端盘)内容不变,并且不能修改原始盘(后端盘)内容,否则所有前端盘无法使用
- 对前端盘的修改不回写原始盘(后端盘)
手动克隆虚拟机 写时复制版
· 快速创建qcow前端盘
写时复制的基本格式:
- qemu-img 通过 -b 选择复用指定后端盘
- qemu-img create -f qcow2 -b 后端盘 前端盘
- 生成一个磁盘镜像文件
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
- 建立新的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的主机名