1、简介
1.1、存储池
存储池是由 libvirt 管理的文件、目录或存储设备,用于为虚拟机提供存储。可以将存储池分为多个存储卷,用于存储虚拟机镜像或作为额外存储附加到虚拟机。多个虚拟机可以共享同一个存储池,从而更好地分配存储资源
存储池可以是持久的或临时的,使用 virsh pool-define
创建持久性存储池,主机系统重启后,持久性存储池会保留下来;使用 virsh pool-create
命令创建临时存储池,临时存储池在主机重启销毁
-
存储池存储类型
-
本地存储池
本地存储池直接附加到主机服务器,包括本地设备中的本地目录、直接附加磁盘、物理分区以及逻辑卷管理(LVM)卷组,本地存储池对不需要迁移或具有大量虚拟机的部署非常有用
-
共享存储池
联网的存储池包括使用标准协议通过网络共享的存储设备
-
1.2、存储卷
存储池被分为多个存储卷,存储卷是物理分区、LVM 逻辑卷、基于文件的磁盘镜像以及 libvirt 处理的其他存储类型的抽象。无论底层硬件是什么,存储卷都以本地存储设备的形式出现在虚拟机中
在主机机器中,存储卷的名称由其名称和存储池的标识符来引用,例如查看某个卷的信息
[root@kvm ~]# virsh vol-info --pool vmhost --vol omv6.qcow2
名称: omv6.qcow2
类型: 文件
容量: 20.00 GiB
分配: 4.63 GiB
1.3、使用 libvirt 进行存储管理
可以使用 libvirt 的管理应用程序来执行虚拟机存储所需的所有任务,可以使用 libvirt API 查询存储池中的卷列表,或者获取有关该存储池中容量、分配和可用存储的信息
对于支持它的存储池,还可以使用 libvirt API 创建、克隆、调整大小和删除存储卷。另外,可以使用 libvirt API 将数据上传到存储卷,从存储卷下载数据,或者从存储卷中擦除数据
1.4、RHEL9支持和不支持的存储池类型
1.4.1、支持的存储类型
- 基于目录的存储池
- 基于磁盘的存储池
- 基于分区的存储池
- 基于 iSCSI 的存储池
- 基于 LVM 的存储池
- 基于 NFS 的存储池
- 使用 vHBA 设备基于 SCSI 的存储池
- 基于多路径的存储池
- 基于 RBD 的存储池
1.4.2、不支持的存储类型
- 基于 Sheepdog 的存储池
- 基于 Vstorage 的存储池
- 基于 ZFS 的存储池
- iscsi-direct 存储池
- glusterfs 存储池
2、管理存储池
2.1、查看存储池信息
[root@kvm ~]# virsh pool-list --all --details
名称 状态 自动开始 持久 容量 分配 可用
----------------------------------------------------------------------------------------------
iso-1 运行 是 是 457.38 GiB 68.91 GiB 388.46 GiB
vdisk-1 运行 是 是 457.38 GiB 68.91 GiB 388.46 GiB
vmhost 运行 是 是 384.90 GiB 78.53 GiB 306.37 GiB
2.2、创建基于目录的存储池
基于目录的存储池是基于现有挂载的文件系统中的目录而创建
-
确定管理程序支持目录存储池
[root@kvm ~]# virsh pool-capabilities | grep "'dir' supported='yes'" <pool type='dir' supported='yes'>
-
创建存储池
使用
virsh pool-define-as <name> <type> --target <string>
创建目录存储池name:存储池名称
type:存储池类型
–target:基本存储的目标(存储路径)
[root@kvm ~]# virsh pool-define-as test-pool dir --target "/data/test-pool" 定义池 test-pool
-
创建存储池目标路径
[root@kvm ~]# virsh pool-build --pool test-pool 构建池 test-pool
-
查看创建的存储池
[root@kvm ~]# ls -lah /data/ drwx--x--x. 2 root root 4.0K 6月 6 16:47 test-pool [root@kvm ~]# virsh pool-list --all 名称 状态 自动开始 ------------------------------------------------- test-pool 活动 否
-
启动存储池
# 启动存储池 [root@kvm ~]# virsh pool-start test-pool # 自动启动存储池 [root@kvm ~]# virsh pool-autostart test-pool
-
查看存储池信息
[root@kvm ~]# virsh pool-info test-pool 名称: test-pool UUID: 3ef05431-2f42-49b6-95f1-c96419f21720 状态: 运行 持久: 是 自动启动: 否 容量: 384.90 GiB 分配: 78.54 GiB 可用: 306.37 GiB
-
创建目录存储池XML文件
<pool type='dir'> <name>vmhost</name> <target> <path>/data/vmhost</path> </target> </pool>
2.3、创建基于硬盘的存储池
在基于磁盘的存储池中,存储池基于磁盘分区,可以让整个磁盘分区为某个虚拟机(VM)做专用存储
-
确定管理程序支持基于磁盘的存储池
[root@kvm ~]# virsh pool-capabilities | grep "'disk' supported='yes'" <pool type='disk' supported='yes'>
-
准备一个用于基础存储池的设备(硬盘),如果需要将整个块设备用于存储池,建议防止设备中的所有重要分区被 GRUB 的 os-prober 功能保护
[root@kvm ~]# vim /etc/default/grub GRUB_DISABLE_OS_PROBER=true GRUB_OS_PROBER_SKIP_LIST="/dev/sda1"
-
创建存储池前备份所选存储设备中的所有数据,在存储池中指定一个磁盘可能会重新格式化并清除当前存储在磁盘设备上的所有数据
-
创建存储池
[root@kvm ~]# virsh pool-define-as test-pool-disk disk --source-format=gpt --source-dev=/dev/sda --target /dev 定义池 test-pool-disk
-
创建存储池目标路径
[root@kvm ~]# virsh pool-build test-pool-disk --overwrite 构建池 test-pool-disk
如果目标硬盘存在分区表,就需要使用 –overwrite 强制覆盖,否则会创建失败
-
验证存储池是否创建成功
[root@kvm ~]# virsh pool-list 名称 状态 自动开始 ----------------------------------------------- test-pool-disk 活动 否
-
启动存储池
[root@kvm ~]# virsh pool-start --pool test-pool-disk
-
查看存储池信息
[root@kvm ~]# virsh pool-info test-pool-disk 名称: test-pool-disk UUID: a1297a48-d5f3-4949-8e2d-ced1f0369ff6 状态: 运行 持久: 是 自动启动: 否 容量: 149.05 GiB 分配: 0.00 B 可用: 149.05 GiB
-
创建硬盘存储池XML文件
<pool type='disk'> <name>disk-pool</name> <source> <device path='/dev/sdb'/> <format type='gpt'/> </source> <target> <path>/dev</path> </target> </pool>
2.4、创建基于iSCSI的存储池
互联网小型计算机系统接口(iSCSI)是一种基于 IP 的存储网络标准,用于连接数据存储设施
-
确定管理程序支持基于 iSCSI 的存储池
[root@kvm ~]# virsh pool-capabilities | grep "'iscsi' supported='yes'" <pool type='iscsi' supported='yes'>
-
创建存储池
[root@kvm ~]# virsh pool-define-as \ --name test-pool-iscsi \ --type iscsi \ --source-host 192.168.10.200 \ --source-dev iqn.2023-06.local.omv6:test-pool-50gb \ --target /dev/disk/by-path 定义池 test-pool-iscsi
-
验证存储池创建
[root@kvm ~]# virsh pool-list --all 名称 状态 自动开始 ------------------------------------------------- test-pool-iscsi 不活跃 否 vdisk-1 活动 是
-
启动存储池
[root@kvm ~]# virsh pool-start test-pool-iscsi 池 test-pool-iscsi 已启动
-
查看存储池信息
[root@kvm ~]# virsh pool-info test-pool-iscsi 名称: test-pool-iscsi UUID: 4566753c-5e3e-4976-8ecd-95a6e59dbc4a 状态: 运行 持久: 是 自动启动: 否 容量: 95.00 GiB 分配: 95.00 GiB 可用: 0.00 B
-
创建iSCSI存储池XML文件
<pool type='iscsi'> <name>test-pool-iscsi</name> <source> <host name='192.168.1.20' port='3260'/> <device path='iqn.2023-06.local.omv:test-pool-50gb'/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool>
2.5、删除存储池
-
查看存储池
[root@kvm ~]# virsh pool-list 名称 状态 自动开始 ----------------------------------------------- test-pool-disk 活动 否 vdisk-1 活动 是
-
停止存储池
[root@kvm ~]# virsh pool-destroy test-pool-disk 销毁池 test-pool-disk
-
删除存储池定义
[root@kvm ~]# virsh pool-undefine test-pool-disk 池 test-pool-disk 已经被取消定义
-
确认是否删除成功
[root@kvm ~]# virsh pool-list --all 名称 状态 自动开始 ------------------------------------------------- vdisk-1 活动 是
3、管理存储卷
3.1、查看存储卷信息
-
查看存储池中的存储卷信息
[root@kvm ~]# virsh vol-list --pool vmhost --details 名称 路径 类型 容量 分配 --------------------------------------------------------------------------------- omv6.qcow2 /data/vmhost/omv6.qcow2 文件 20.00 GiB 4.75 GiB rocky9.qcow2 /data/vmhost/rocky9.qcow2 文件 50.00 GiB 10.12 GiB windows10.qcow2 /data/vmhost/windows10.qcow2 文件 100.00 GiB 42.80 GiB windows11.qcow2 /data/vmhost/windows11.qcow2 文件 100.00 GiB 22.23 GiB
-
查看指定存储卷信息
[root@kvm ~]# virsh vol-info --pool vmhost --vol omv6.qcow2 名称: omv6.qcow2 类型: 文件 容量: 20.00 GiB 分配: 4.75 GiB
3.2、创建并分配存储卷
-
创建存储卷
[root@kvm ~]# virsh vol-create-as --pool vmhost --name test-disk-10gb --capacity 10gb --format qcow2 卷 test-disk-10gb 创建了
-
创建存储卷XML文件
[root@kvm ~]# vim /etc/libvirt/qemu/test-disk-10gb.xml <disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='vmhost' volume='test-disk-10gb'/> <target dev='sdc' bus='virtio'/> </disk>
-
分配存储卷给虚拟机
[root@kvm ~]# virsh attach-device --config windows10 /etc/libvirt/qemu/test-disk-10gb.xml 成功附加设备
3.3、删除卷
-
查看存储池中的卷
[root@kvm ~]# virsh vol-list vmhost 名称 路径 ------------------------------------------------- omv6.qcow2 /data/vmhost/omv6.qcow2 rocky9.qcow2 /data/vmhost/rocky9.qcow2 test-disk-10gb /data/vmhost/test-disk-10gb
-
从虚拟机分离存储卷
[root@kvm ~]# virsh detach-device --domain windows10 --config /etc/libvirt/qemu/test-disk-10gb.xml 成功分离设备
存储卷分离成功后,需要关闭计算机,存储卷才能完全从虚拟机中脱离
-
删除存储卷
[root@kvm ~]# virt-manager [root@kvm ~]# virsh vol-delete --pool vmhost --vol test-disk-10gb 卷 test-disk-10gb 被删除 [root@kvm ~]# virsh vol-list --pool vmhost 名称 路径 ------------------------------------------------- omv6.qcow2 /data/vmhost/omv6.qcow2 rocky9.qcow2 /data/vmhost/rocky9.qcow2