kvm-存储池基础介绍、创建
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、创建目录
mkdir /kvm/images -p
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