KVM虚拟机的管理

1、使用virsh来管理虚拟机

(1)立即模式
virsh list --all
(2)交互模式
# virsh
欢迎使用 virsh,虚拟化的交互式终端。

输入:'help' 来获得命令的帮助信息
       'quit' 退出

virsh #

常见的基本操作

virsh start 虚拟机名
#启动虚拟机
virsh shutdown 虚拟机名
#关闭虚拟机
virsh destroy 虚拟机名
#强制关闭虚拟机
virsh vncdisplay 虚拟机名
#查询虚拟机的VNC端口号
#[root@KVM01 images]# virsh vncdisplay name\=CentOS-7 
#:600
virsh dumpxml 
#导出主机配置信息
virsh undefine 
#删除主机
virsh define 
#导入主机配置
virsh domrename 
#对虚拟机进行重命名
virsh suspend 
#挂起虚拟机
virsh resume 
#恢复虚拟机
virsh autostart 
#虚拟机开机启动



更多参数:
virsh --help
[root@KVM01 images]# virsh --help

virsh [options]... [<command_string>]
virsh [options]... <command> [args...]

  options:
    -c | --connect=URI      hypervisor connection URI
    -d | --debug=NUM        debug level [0-4]
    -e | --escape <char>    set escape sequence for console
    -h | --help             this help
    -k | --keepalive-interval=NUM
                            keepalive interval in seconds, 0 for disable
    -K | --keepalive-count=NUM
                            number of possible missed keepalive messages
    -l | --log=FILE         output logging to file
    -q | --quiet            quiet mode
    -r | --readonly         connect readonly
    -t | --timing           print timing information
    -v                      short version
    -V                      long version
         --version[=TYPE]   version, TYPE is short or long (default short)
  commands (non interactive mode):

 Domain Management (help keyword 'domain')
    attach-device                  从一个XML文件附加装置
    attach-disk                    附加磁盘设备
    attach-interface               获得网络界面
    autostart                      自动开始一个域
    blkdeviotune                   设定或者查询块设备 I/O 调节参数。
    blkiotune                      获取或者数值 blkio 参数
    blockcommit                    启动块提交操作。
    blockcopy                      启动块复制操作。
    blockjob                       管理活跃块操作
    blockpull                      使用其后端映像填充磁盘。
    blockresize                    创新定义域块设备大小
    change-media                   更改 CD 介质或者软盘驱动器
    console                        连接到客户会话
    cpu-stats                      显示域 cpu 统计数据
    create                         从一个 XML 文件创建一个域
    define                         从一个 XML 文件定义(但不开始)一个域
    desc                           显示或者设定域描述或者标题
    destroy                        销毁(停止)域
    detach-device                  从一个 XML 文件分离设备
    detach-device-alias            detach device from an alias
    detach-disk                    分离磁盘设备
    detach-interface               分离网络界面
    domdisplay                     域显示连接 URI
    domfsfreeze                    Freeze domain's mounted filesystems.
    domfsthaw                      Thaw domain's mounted filesystems.
    domfsinfo                      Get information of domain's mounted filesystems.
    domfstrim                      在域挂载的文件系统中调用 fstrim。
    domhostname                    输出域主机名
    domid                          把一个域名或 UUID 转换为域 id
    domif-setlink                  设定虚拟接口的链接状态
    domiftune                      获取/设定虚拟接口参数
    domjobabort                    忽略活跃域任务
    domjobinfo                     域任务信息
    domname                        将域 id 或 UUID 转换为域名
    domrename                      rename a domain
    dompmsuspend                   使用电源管理功能挂起域
    dompmwakeup                    从 pmsuspended 状态唤醒域
    domuuid                        把一个域名或 id 转换为域 UUID
    domxml-from-native             将原始配置转换为域 XML
    domxml-to-native               将域 XML 转换为原始配置
    dump                           把一个域的内核 dump 到一个文件中以方便分析
    dumpxml                        XML 中的域信息
    edit                           编辑某个域的 XML 配置
    event                          Domain Events
    inject-nmi                     在虚拟机中输入 NMI
    iothreadinfo                   view domain IOThreads
    iothreadpin                    control domain IOThread affinity
    iothreadadd                    add an IOThread to the guest domain
    iothreaddel                    delete an IOThread from the guest domain
    send-key                       向虚拟机发送序列号
    send-process-signal            向进程发送信号
    lxc-enter-namespace            LXC 虚拟机进入名称空间
    managedsave                    管理域状态的保存
    managedsave-remove             删除域的管理保存
    managedsave-edit               edit XML for a domain's managed save state file
    managedsave-dumpxml            Domain information of managed save state file in XML
    managedsave-define             redefine the XML for a domain's managed save state file
    memtune                        获取或者数值内存参数
    perf                           Get or set perf event
    metadata                       show or set domain's custom XML metadata
    migrate                        将域迁移到另一个主机中
    migrate-setmaxdowntime         设定最大可耐受故障时间
    migrate-getmaxdowntime         get maximum tolerable downtime
    migrate-compcache              获取/设定压缩缓存大小
    migrate-setspeed               设定迁移带宽的最大值
    migrate-getspeed               获取最长迁移带宽
    migrate-postcopy               Switch running migration from pre-copy to post-copy
    numatune                       获取或者数值 numa 参数
    qemu-attach                    QEMU 附加
    qemu-monitor-command           QEMU 监控程序命令
    qemu-monitor-event             QEMU Monitor Events
    qemu-agent-command             QEMU 虚拟机代理命令
    reboot                         重新启动一个域
    reset                          重新设定域
    restore                        从一个存在一个文件中的状态恢复一个域
    resume                         重新恢复一个域
    save                           把一个域的状态保存到一个文件
    save-image-define              为域的保存状态文件重新定义 XML
    save-image-dumpxml             在 XML 中保存状态域信息
    save-image-edit                为域保存状态文件编辑 XML
    schedinfo                      显示/设置日程安排变量
    screenshot                     提取当前域控制台快照并保存到文件中
    set-lifecycle-action           change lifecycle actions
    set-user-password              set the user password inside the domain
    setmaxmem                      改变最大内存限制值
    setmem                         改变内存的分配
    setvcpus                       改变虚拟 CPU 的号
    shutdown                       关闭一个域
    start                          开始一个(以前定义的)非活跃的域
    suspend                        挂起一个域
    ttyconsole                     tty 控制台
    undefine                       取消定义一个域
    update-device                  从 XML 文件中关系设备
    vcpucount                      域 vcpu 计数
    vcpuinfo                       详细的域 vcpu 信息
    vcpupin                        控制或者查询域 vcpu 亲和性
    emulatorpin                    控制火车查询域模拟器亲和性
    vncdisplay                     vnc 显示
    guestvcpus                     query or modify state of vcpu in the guest (via agent)
    setvcpu                        attach/detach vcpu or groups of threads
    domblkthreshold                set the threshold for block-threshold event for a given block device or it's backing chain element

 Domain Monitoring (help keyword 'monitor')
    domblkerror                    在块设备中显示错误
    domblkinfo                     域块设备大小信息
    domblklist                     列出所有域块
    domblkstat                     获得域设备块状态
    domcontrol                     域控制接口状态
    domif-getlink                  获取虚拟接口链接状态
    domifaddr                      Get network interfaces' addresses for a running domain
    domiflist                      列出所有域虚拟接口
    domifstat                      获得域网络接口状态
    dominfo                        域信息
    dommemstat                     获取域的内存统计
    domstate                       域状态
    domstats                       get statistics about one or multiple domains
    domtime                        domain time
    list                           列出域

 Host and Hypervisor (help keyword 'host')
    allocpages                     Manipulate pages pool size
    capabilities                   性能
    cpu-baseline                   计算基线 CPU
    cpu-compare                    使用 XML 文件中描述的 CPU 与主机 CPU 进行对比
    cpu-models                     CPU models
    domcapabilities                domain capabilities
    freecell                       NUMA可用内存
    freepages                      NUMA free pages
    hostname                       打印管理程序主机名
    hypervisor-cpu-baseline        compute baseline CPU usable by a specific hypervisor
    hypervisor-cpu-compare         compare a CPU with the CPU created by a hypervisor on the host
    maxvcpus                       连接 vcpu 最大值
    node-memory-tune               获取或者设定节点内存参数
    nodecpumap                     节点 cpu 映射
    nodecpustats                   输出节点的 cpu 状统计数据。
    nodeinfo                       节点信息
    nodememstats                   输出节点的内存状统计数据。
    nodesuspend                    在给定时间段挂起主机节点
    sysinfo                        输出 hypervisor sysinfo
    uri                            打印管理程序典型的URI
    version                        显示版本

 Interface (help keyword 'interface')
    iface-begin                    生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback)
    iface-bridge                   生成桥接设备并为其附加一个现有网络设备
    iface-commit                   提交 iface-begin 后的更改并释放恢复点
    iface-define                   define an inactive persistent physical host interface or modify an existing persistent one from an XML file
    iface-destroy                  删除物理主机接口(启用它请执行 "if-down")
    iface-dumpxml                  XML 中的接口信息
    iface-edit                     为物理主机界面编辑 XML 配置
    iface-list                     物理主机接口列表
    iface-mac                      将接口名称转换为接口 MAC 地址
    iface-name                     将接口 MAC 地址转换为接口名称
    iface-rollback                 恢复到之前保存的使用 iface-begin 生成的更改
    iface-start                    启动物理主机接口(启用它请执行 "if-up")
    iface-unbridge                 分离其辅助设备后取消定义桥接设备
    iface-undefine                 取消定义物理主机接口(从配置中删除)

 Network Filter (help keyword 'filter')
    nwfilter-define                使用 XML 文件定义或者更新网络过滤器
    nwfilter-dumpxml               XML 中的网络过滤器信息
    nwfilter-edit                  为网络过滤器编辑 XML 配置
    nwfilter-list                  列出网络过滤器
    nwfilter-undefine              取消定义网络过滤器
    nwfilter-binding-create        create a network filter binding from an XML file
    nwfilter-binding-delete        delete a network filter binding
    nwfilter-binding-dumpxml       XML 中的网络过滤器信息
    nwfilter-binding-list          list network filter bindings

 Networking (help keyword 'network')
    net-autostart                  自动开始网络
    net-create                     从一个 XML 文件创建一个网络
    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    销毁(停止)网络
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    XML 中的网络信息
    net-edit                       为网络编辑 XML 配置
    net-event                      Network Events
    net-info                       网络信息
    net-list                       列出网络
    net-name                       把一个网络UUID 转换为网络名
    net-start                      开始一个(以前定义的)不活跃的网络
    net-undefine                   undefine a persistent network
    net-update                     更新现有网络配置的部分
    net-uuid                       把一个网络名转换为网络UUID

 Node Device (help keyword 'nodedev')
    nodedev-create                 根据节点中的 XML 文件定义生成设备
    nodedev-destroy                销毁(停止)节点中的设备
    nodedev-detach                 将节点设备与其设备驱动程序分离
    nodedev-dumpxml                XML 中的节点设备详情
    nodedev-list                   这台主机中中的枚举设备
    nodedev-reattach               重新将节点设备附加到他的设备驱动程序中
    nodedev-reset                  重置节点设备
    nodedev-event                  Node Device Events

 Secret (help keyword 'secret')
    secret-define                  定义或者修改 XML 中的 secret
    secret-dumpxml                 XML 中的 secret 属性
    secret-event                   Secret Events
    secret-get-value               secret 值输出
    secret-list                    列出 secret
    secret-set-value               设定 secret 值
    secret-undefine                取消定义 secret

 Snapshot (help keyword 'snapshot')
    snapshot-create                使用 XML 生成快照
    snapshot-create-as             使用一组参数生成快照
    snapshot-current               获取或者设定当前快照
    snapshot-delete                删除域快照
    snapshot-dumpxml               为域快照转储 XML
    snapshot-edit                  编辑快照 XML
    snapshot-info                  快照信息
    snapshot-list                  为域列出快照
    snapshot-parent                获取快照的上级快照名称
    snapshot-revert                将域转换为快照

 Storage Pool (help keyword 'pool')
    find-storage-pool-sources-as   找到潜在存储池源
    find-storage-pool-sources      发现潜在存储池源
    pool-autostart                 自动启动某个池
    pool-build                     建立池
    pool-create-as                 从一组变量中创建一个池
    pool-create                    从一个 XML 文件中创建一个池
    pool-define-as                 在一组变量中定义池
    pool-define                    在一个XML文件中定义(但不启动)一个池或已有的池
    pool-delete                    删除池
    pool-destroy                   销毁(删除)池
    pool-dumpxml                   将池信息保存到XML文件中
    pool-edit                      为存储池编辑 XML 配置
    pool-info                      存储池信息
    pool-list                      列出池
    pool-name                      将池 UUID 转换为池名称
    pool-refresh                   刷新池
    pool-start                     启动一个(以前定义的)非活跃的池
    pool-undefine                  取消定义一个不活跃的池
    pool-uuid                      把一个池名称转换为池 UUID
    pool-event                     Storage Pool Events

 Storage Volume (help keyword 'volume')
    vol-clone                      克隆卷。
    vol-create-as                  从一组变量中创建卷
    vol-create                     从一个 XML 文件创建一个卷
    vol-create-from                生成卷,使用另一个卷作为输入。
    vol-delete                     删除卷
    vol-download                   将卷内容下载到文件中
    vol-dumpxml                    XML 中的卷信息
    vol-info                       存储卷信息
    vol-key                        为给定密钥或者路径返回卷密钥
    vol-list                       列出卷
    vol-name                       为给定密钥或者路径返回卷名
    vol-path                       为给定密钥或者路径返回卷路径
    vol-pool                       为给定密钥或者路径返回存储池
    vol-resize                     创新定义卷大小
    vol-upload                     将文件内容上传到卷中
    vol-wipe                       擦除卷

 Virsh itself (help keyword 'virsh')
    cd                             更改当前目录
    echo                           echo 参数
    exit                           退出这个非交互式终端
    help                           打印帮助
    pwd                            输出当前目录
    quit                           退出这个非交互式终端
    connect                        连接(重新连接)到 hypervisor

2、管理虚拟储存

**虚拟化项目中存储的注意事项**
(1)存储的性能几乎总是虚拟化的瓶颈
(2)通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案
(3)考虑部署集中化的SAN/NFS来实现高可用性和实时迁移

**KVM存储模式**
(1)基于文件系统的存储
	dir:Filesystem Directory 虚拟文件系统目录
	fs:Pre-Formatted Block Device
	netfs:Network Exported Directory
(2) 基于设备的存储
	Disk:Physical Disk Device
	Iscsi:iSCSI Target
	logical:LVM Volume Group

**虚拟磁盘类型**
(1) 固定 Fixed
	在配置时,指定磁盘大小
	不管在虚拟磁盘上实际存储多少数据,都将占用相同大小主机磁盘空间
(2) 动态 Dynamic
	增长到最大容量,但是只根据需求使用更多的空间
(3) 差异 Differencing
	因为创建是差异磁盘,所以只保存变更的数据

**KVM支持的虚拟磁盘类型**
(1) raw
	这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像;它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案。然而,也正因为它不存储元数据;因此不能自持某些高级特性,比如快照和压缩等。格式简单,容易转换为其他的格式。需要文件系统的支持才能支持sparse file
(2) cow:copy-on-write格式,昙花一现
(3) qcow:QEMU早期的copy-on-write格式,过渡性方案
(4) qcow2
	按需进行分配磁盘空间,不管文件系统是否支持;支持快照;支持zlib的磁盘压缩;支持AES的加密
(5) vmdk(Virtual Machine Disk)
	VMware环境当中默认使用的磁盘格式
(6) vhd vhdx(Virtual Hard Disk)

**微软默认采用的文件格式**
可以通过qemu-img --help查看支持的格式
qemu-img --help | grep Supported
#支持的格式: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

使用qemu-img管理虚拟磁盘
qemu-img 是一个功能强制磁盘镜像管理工具

(1)常用的命令:
check 检查完整性
create 创建镜像
commit 提交更改
compare 比较
convert 转换
info 获得信息
map 映射
snapshot 快照管理
rebase 在已有的镜像的基础上创建新的镜像
resize 调整大小
amend 修订镜像格式选项

(2)创建磁盘格式:只输入磁盘名和大小创建
qemu-img create t1.img 2g
#Formatting 't1.img', fmt=raw size=2147483648
#默认的磁盘格式fmt=raw

(3)查看虚拟磁盘的信息
qemu-img info t1.img 
#image: t1.img  #文件名称
#file format: raw  #文件格式
#virtual size: 2.0G (2147483648 bytes)   #虚拟磁盘的大小
#disk size: 0   #磁盘空间尺寸是0

(4)检查虚拟磁盘
qemu-img check t1.img 
#qemu-img: This image format does not support checks
check一般不支持raw格式,支持其他格式

qemu-img check windowsxp.img 
#No errors were found on the image.
#131072/131072 = 100.00% allocated, 0.00% fragmented, 0.00% compressed clusters
#Image end offset: 8591507456

根据以上测试,默认情况下qemu-img创建的磁盘文件的类型是动态的(Dynamic 空洞)会根据真实存放数据 的大小进行动态扩容直到磁盘空间设定值的大小。

预分配磁盘策略(qcow2)

(1) off
		缺省策略,即不使用预分配策略
(2) metadata
		分配元数据(metadata),预分配后的虚拟磁盘仍然属于稀疏映像类型(空洞文件)
(3) full
		分配所有磁盘空间并置零,预分配后的虚拟磁盘属于非稀疏映像类型
(4)falloc
		分配文件的块并标示它们的状态为未初始化,相对full模式来说,创建虚拟磁盘的速度要快很多。
preallocation='预分配策略' -- 创建时指定参数
		预分配策略里,off和metadata预分配策略都属于空洞文件,而falloc和full属于非空洞文件

登入内嵌的虚拟机

[root@KVM01 images]# ssh 192.168.122.66
The authenticity of host '192.168.122.66 (192.168.122.66)' can't be established.
ECDSA key fingerprint is SHA256:IVdQC4wtAamQDwOTGFdF7PkJSxMN1UgHlv2g7WE/0qY.
ECDSA key fingerprint is MD5:4a:bc:6f:1c:92:16:80:52:6e:5a:3b:5d:8b:6c:8a:52.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.66' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Mon Oct 19 20:37:51 2020
[root@kvm03 ~]# exit
登出

虚拟机的迁移(不同格式虚拟机的迁移)
1、VMware Workstation虚拟机中找一个关闭状态的虚拟机进行导出
选择要导出的虚拟机—点击文件—点击导出OVF
在这里插入图片描述
正在导出
在这里插入图片描述
导出的磁盘文件
在这里插入图片描述
将磁盘文件导入到KVM虚拟机中
导入到该路径下:/var/lib/libvirt/images,注意此时格式为vmdk
在这里插入图片描述
进行格式的修改:

qemu-img convert -O qcow2 x3-disk1.vmdk x3-disk1.img

在这里插入图片描述

查看导入的详情
qemu-img info KVM02_.44-disk1.img 
#image: KVM02_.44-disk1.img
#file format: qcow2
#virtual size: 80G (85899345920 bytes)
#disk size: 127M
#cluster_size: 65536
#Format specific information:
#   compat: 1.1
#   lazy refcounts: false

创建虚拟机环境:
virt-install --import --name=KVM02.44 --vcpus=1 --ram=1024 --disk  bus=scsi,path=/var/lib/libvirt/images/KVM02_.44-disk1.img --network type=bridge,source=virbr0 --network network=default --graphics vnc,listen=0.0.0.0 --os-type=linux --os-variant=rhel7 --noautoconsole
#不设置端口,默认5900端口
netstat -lnupt | grep 59
#tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      3562/qemu-kvm  

用VNC连接5900端口的虚拟机:在这里插入图片描述
调整虚拟磁盘的大小(qcow2只能调大)

(1) 语法格式
	qemu-img --help | grep resize resize [-q] filename [+ | -]size
(2) 操作之前,一定要做好数据备份
(3) 增加文件大小后,需要在客户机中使用fdisk,parted等分区工具进行相应操作才能真正让客户机使用到增加后的镜像空间。
(4) 缩小镜像之前,要在客户机中保证里面的文件系统有空余空间,否则会数据丢失
(5) qcow2不支持缩小镜像的操作

qemu-img resize KVM02_.44-disk1.img +1G
qemu-img info KVM02_.44-disk1.img   #查看是否修改成功

存储池
存储池的基础概念
(1) libvirt可以以存储池的形式对存储进行统一管理,简化操作
(2) 对于虚拟机操作来说,存储池和卷并不是必须的
(3) 支持以下存储池

dir:Filesystem Directory   #文件系统目录
disk:Physical Disk Device   #磁盘设备
fs:Pre-Formatted Block Device  
gluster:Gluster FileSystem
iscsi:iSCSI Target
logical:LVM Volume Group
mpath:Multipath Device Enumerator  #多路径设备
netfs:Network Export Directory
rbd:RADOS Block Device/Ceph
scsi:SCSI Host Adapter
sheepdog:Sheepdog Filesystem

存储池的相关命令
在这里插入图片描述
存储池创建:

显示池与卷的信息 # virsh pool-list --help
查看所有的存储池 # virsh pool-list
查看某个存储池的详细信息 # virsh pool-list
查看某个存储池中的所有存储卷 # virsh vol-list vm
查看所有的存储池 # virsh pool-list
查看某个存储池的详细信息 # virsh pool-list
查看某个存储池中的所有存储卷 # virsh vol-list vm
**1、基于目录的存储池**
(1) 准备目录
# mkdir /guest_images 
(2)设置目录权限
# chown root:root /guest_images/ 
# chmod 700 /guest_images
(3)通过virsh创建一个自定义存储池
# virsh pool-define-as guest_images dir --target "/guest_images"
(4)启动存储池
# virsh pool-start guest_images
(5)删除自定义的存储池
# virsh pool-destroy guest_images #销毁池 
# virsh pool-delete guest_images #删除池目录 
# virsh pool-undefine guest_images #清除存储池配置文件

**2、基于分区的储存池**
(1)libvirtd会自动mount分区
(2) 准备分区并创建文件系统
# fdisk /dev/sdb
# mkfs.xfs /dev/sdb1
(3)通过virsh创建:
Source Path:块设备名
Target Path:mount到的目录名
# virsh pool-define-as guest_images_fs fs --source-dev "/dev/sdb1" --target "/guest_images2" 
# virsh pool-build guest_images_fs #创建存储池存储目录 
# virsh pool-start guest_images_fs #启动存储 
# virsh pool-autostart guest_images_fs #标记存储池开机自启动 
# mount | grep /dev/sdb1 #已经自动挂载 
/dev/sdb1 on /guest_images2 type xfs (rw,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)
例如:
[root@KVM01 ~]# virsh pool-define-as guest_images_fs fs --source-dev "/dev/sdb1" --target "/guest_images2"
定义池 guest_images_fs

[root@KVM01 ~]# virsh pool-build guest_images_fs 
构建池 guest_images_fs

[root@KVM01 ~]# virsh pool-start guest_images_fs 
池 guest_images_fs 已启动

[root@KVM01 ~]# virsh pool-autostart guest_images_fs 
池 guest_images_fs 标记为自动启动

[root@KVM01 ~]# mount | grep /dev/sdb1
/dev/sdb1 on /guest_images2 type xfs (rw,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)
[root@KVM01 ~]# virsh pool-list 
 名称               状态     自动开始
-------------------------------------------
 guest_images_fs      活动     是       
 images               活动     是       
 iso                  活动     是       

[root@KVM01 ~]# virsh pool-destroy guest_images_fs 
销毁池 guest_images_fs

[root@KVM01 ~]# virsh pool-delete guest_images_fs 
池 guest_images_fs 被删除

[root@KVM01 ~]# virsh pool-undefine guest_images_fs 
池 guest_images_fs 已经被取消定义


**3、基于LVM的存储池**
(1) 基于LVM的存储池要求使用全部磁盘分区
(2) 创建时存储池,有两种方法
使用现有的VG
创建新的VG
Target Path:新的卷组名
Source Path:存储设备的位置
Build Pool:会创建新的VG
(3)通过virsh命令创建vg并创建基于LVM的存储池
# virsh pool-define-as guest_images_lvm3 logical --source-dev=/dev/sdc --source- name=libvirt_lvm --target=/dev/libvirt_vg
(4)virsh命令创建卷组libvirt_lvm
# virsh pool-build guest_images_lvm3
(5)启动LVM存储池并标记开机自启动
# virsh pool-start guest_images_lvm3 
# virsh pool-autostart guest_images_lvm3

**4、基于NFS的存储池**
(1)# virsh pool-define-as --name nfstrial2 --type netfs --source-host 192.168.150.132 --source-path /nfsshare --target /nfstrial2

[root@KVM01 ~]# systemctl stop firewall.sevice
#关闭防火墙
[root@KVM01 ~]# sed -i '/^SELINUX=/ cSELINUX=disable'  /etc/selinux/config 
#禁用SELinux
[root@KVM01 ~]# setenforce 0
#临时禁用SELinux
[root@KVM01 ~]# yum install -y nfs-utils rpcbind
#下载NFS包
[root@KVM01 ~]# setenforce 0
#创建一个目录
[root@KVM01 ~]# vim /etc/exports
/vm  192.168.16.0/24(rw,sync,all_squash,anonuid=0,anongid=0)
#共享/vm 目录
[root@KVM01 ~]# mkdir /vm
#创建/VM 目录
[root@KVM01 ~]# systemctl restart rpcbind
[root@KVM01 ~]# systemctl restart nfs-server.service 
#重启rpcbind nfs服务
[root@KVM01 ~]# showmount -e localhost
Export list for localhost:
/vm 192.168.16.0/24
#查看是否成功

[root@KVM01 ~]#  virsh pool-define-as --name nfstrial2 --type netfs --source-host 192.168.16.55 --source-path /nfsshare --target /nfstrial2
定义池 nfstrial2

分区并创建文件系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

存储卷
(1)存储池被分割为存储卷(Storage Volume)
(2)存储卷
文件
块设备(如物理分区,LVM逻辑卷等)
libvirt管理的其他类型存储的抽象

存储卷的相关命令
在这里插入图片描述
存储卷的创建

**基于目录创建vm存储池**
[root@KVM01 ~]# virsh pool-define-as vm dir --target "/vm"
定义池 vm
[root@KVM01 ~]# mkdir /vm
[root@KVM01 ~]# virsh pool-build vm 
构建池 vm
[root@KVM01 ~]# virsh pool-start vm 
池 vm 已启动
[root@KVM01 ~]# virsh pool-autostart vm
池 vm 标记为自动启动
[root@KVM01 ~]# virsh pool-list 
 名称               状态     自动开始
-------------------------------------------
 images               活动     是       
 iso                  活动     是       
 vm                   活动     是 

**基于目录的存储池中的存储卷管理**
(1)向vm存储池中创建一个存储卷
[root@KVM01 ~]# virsh vol-create-as vm test1.qcow2 1G --format qcow2
创建卷 test1.qcow2
(2)查看test1.qcow2的卷信息:两种方式
方式一:
	[root@KVM01 ~]# virsh vol-info /vm/test1.qcow2 
方式二:
	[root@KVM01 ~]# virsh vol-info test1.qcow2 --pool vm

**存储卷的克隆**
[root@KVM01 ~]# virsh vol-clone test1.qcow2 test2.qcow2 --pool vm
使用 test2.qcow2 克隆的卷 test1.qcow2 
[root@KVM01 ~]# virsh vol-info test2.qcow2 --pool vm
名称:       test2.qcow2
类型:       文件
容量:       1.00 GiB
分配:       196.00 KiB

**删除基于目录的存储池的存储卷**
[root@KVM01 vm]# virsh vol-delete /vm/test2.qcow2 /vm/test2.qcow2 被删除
[root@KVM01 vm]# virsh vol-delete /vm/test1.qcow2 /vm/test1.qcow2 被删除

管理快照

**快照概念**
(1)磁盘快照
	对磁盘数据进行快照
	主要用于虚拟机备份等场合
(2)内存快照
	对虚拟机的内存/设备信息进行保存
	该机制同时用于休眠恢复,迁移等场景
	主要使用virsh save(qemu migrate to file)实现,只能对运行的虚拟机进行
(3)检查点快照
	同时保存虚拟机的磁盘快照和内存快照
	用于将虚拟机恢复到某个时间点
	可以保证数据的一致性

**磁盘快照分类**
(1) 按快照信息保存分为:
	内置快照:快照数据和base磁盘数据放在一个qcow2文件中
	外置快照:快照数据单独的qcow2文件存放
(2)按虚拟机状态可以分为:
	关机态快照:数据可以保持一致性
	运行态快照:数据无法保持一致性,类似与系统crash后的磁盘数据。使用是可能需要fsck等操作。
(3)按磁盘数量可以分为:
	单盘:单盘快照不涉及原子性
	多盘:涉及原子性。主要分两个方面:1,是所有盘快照点相同 2,所有盘要么都快照成功,要么都快
	     照失败。主要依赖于qemu的transaction实现

**格式**
[root@KVM01 vm]# qemu-img --help | grep snapshot
  snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
  '-a'  #快照回滚
  '-c'  #创建快照
  '-d'  #删除快照
  '-l'  #显示快照列表
[root@KVM01 images]# qemu-img snapshot -c s1  centos7u6.img
[root@KVM01 images]# qemu-img snapshot -l centos7u6.img
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         s1                        0 2020-10-21 20:17:03   00:00:00.000
[root@KVM01 images]# qemu-img snapshot -d s1 centos7u6.img
 #删除快照
[root@KVM01 images]# qemu-img snapshot -a s1 centos7u6.img 
#在虚拟机中删除一个文件然后进行磁盘回滚
注:进行磁盘快照回滚时需要关闭虚拟机,回滚后,数据已经恢复qemu-img方式的磁盘快照只能支持原生态的qcow2格式,不支持从raw格式转换而来的qcow2不然会出现问题

猜你喜欢

转载自blog.csdn.net/m0_46289868/article/details/109168754