1、基础知识
1.1、需求
为了使虚拟机获得更强大的后端存储能力,libvirt 提供了对各种各样的存储介质支持,包括本地文件系统,网络文件系统,iSCSI,LVM 等多种后端存储系统。在虚拟机中主要以存储池(pool)与存储卷(volume)的形式存在。
libvirt 中的存储管理独立于虚拟机管理。也就是存储池和存储卷的操作独立于虚拟机的操作存在,即使是没有虚拟机的场景。工作中我们可以当虚拟机需要存储资源时再进行灵活分配。
1.2、存储池
1.2.1、什么是存储池
KVM平台以存储池的形式对存储进行统一管理。它可以理解为一种映射关系,即将宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机存储资源的统一管理。
宿主机的存储空间,可以是本地的、网络的等kvm支持的任意形式。
1.2.2、存储池流程图

1.2.3、存储池的配置文件位置
root@localhost:~# tree /etc/libvirt/storage/
/etc/libvirt/storage/
├── autostart
│ └── opt.xml -> /etc/libvirt/storage/opt.xml
└── opt.xml
1.2.4、存储池命令管理帮忙信息查询
root@localhost:~# virsh --help | grep pool
allocpages Manipulate pages pool size
Storage Pool (help keyword 'pool')
find-storage-pool-sources-as find potential storage pool sources
find-storage-pool-sources discover potential storage pool sources
pool-autostart autostart a pool
pool-build build a pool
pool-create-as create a pool from a set of args
pool-create create a pool from an XML file
pool-define-as define a pool from a set of args
pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file
pool-delete delete a pool
pool-destroy destroy (stop) a pool
pool-dumpxml pool information in XML
pool-edit edit XML configuration for a storage pool
pool-info storage pool information
pool-list list pools
pool-name convert a pool UUID to pool name
pool-refresh refresh a pool
pool-start start a (previously defined) inactive pool
pool-undefine undefine an inactive pool
pool-uuid convert a pool name to pool UUID
pool-event Storage Pool Events
pool-capabilities storage pool capabilities
vol-pool returns the storage pool for a given volume key or path
2、存储池命令介绍
2.1、查询
存储列表:virsh pool-list
具体信息: virsh pool-info pool_name
2.2、创建存储池
常见两种创建方法,基于文件夹和文件系统,我们主要介绍基于文件夹的方式。
定义永久池+创建池:virsh pool-define-as + virsh pool-build
创建临时池+启动池:virsh pool-create-as
2.3、其它存储【创建存储池】命令
2.3.1、基于分区创建存储池
virsh pool-define-as <存储池名> fs --source-dev <分区名称> --target <挂载目录>
2.3.2、基于磁盘创建存储池
virsh pool-define-as <存储池名> disk --source-dev <磁盘名称> --source-format gpt --target <挂载目录>
2.3.3、基于lvm创建存储池
virsh pool-define-as <存储池名> logical --source-name <vg名称> --target <挂载目录>
2.3.4、基于iscsi创建存储池
virsh pool-define-as <存储池名> iscsi --source-host <存储主机ip> --source-dev <存储目标> --target <挂载目录>
2.3.5、基于nfs创建存储池
virsh pool-define-as <存储池名> netfs --source-host <nfs主机ip> --source-path <nfs共享目录> --target <挂载目录>
2.3.6、基于目录创建存储池
virsh pool-define-as <存储池名> --type dir --target <目录位置>
3、实战
3.1、创建永久存储池
3.1.1、创建目录
3.1.2、创建目录存储池
virsh pool-define-as keep_dpool --type dir --target /kvm/images
virsh pool-build keep_dpool
3.1.3、检查效果
# virsh pool-list --persistent --all
Name State Autostart
------------------------------------
keep_dpool inactive no
opt active yes
# tree /etc/libvirt/storage/
/etc/libvirt/storage/
├── autostart
│ └── opt.xml -> /etc/libvirt/storage/opt.xml
├── keep_dpool.xml
└── opt.xml
# pool-define-as 创建的存储池没有启动,在存储目录中有定义文件
3.1.4、命令参数解析
virsh pool-define-as vmware_pool --type dir --target /kvm/images
注释:
vmware_pool 定义的存储池名称
--type dir 我们的类型是一个dir
--target /kvm/images 存储池的在宿主机上的目录是/kvm/images
3.2、创建临时存储池
3.2.1、创建目录
mkdir /kvm/temp_images -p
3.2.2、创建目录存储池
virsh pool-create-as temp_dpool --type dir --target /kvm/temp_images
3.2.3、检查效果
# virsh pool-list --transient --all
Name State Autostart
----------------------------------
temp_dpool active no
# tree /etc/libvirt/storage/
/etc/libvirt/storage/
├── autostart
│ └── opt.xml -> /etc/libvirt/storage/opt.xml
├── keep_dpool.xml
└── opt.xml
# 可以看到: pool-create-as创建的存储池启动成功了,在存储目录中没有定义文件
3.2.4、命令参数解析
virsh pool-create-as --name vmware_pool --type dir --target /kvm/images
注释:直接创建并启动一个存储池
vmware_pool 定义的存储池名称
--type dir 我们的类型是一个dir
--target /kvm/images 存储池的在宿主机上的目录是/kvm/images