4.2. 创建逻辑卷
LVM 通过将物理层抽象到可根据您的需要创建和调整的逻辑卷,为处理磁盘存储提供了一种灵活的方法。
4.2.1. 创建线性(厚)逻辑卷
使用线性逻辑卷(LV),您可以将多个物理存储单元合并到一个虚拟存储空间中。您可以轻松地扩展或减少线性 LV,以适应数据要求。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 已创建卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
列出卷组的名称及其大小:
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
创建线性 LV:
# lvcreate --name LogicalVolumeName --size VolumeSize VolumeGroupName
使用 LV 的名称替换 LogicalVolumeName。使用 LV 的大小替换 VolumeSize。如果没有大小后缀,命令默认为 MB。将 VolumeGroupName 替换为卷组的名称。
验证
验证是否已创建线性 LV:
# lvs -o lv_name,seg_type LV Type LogicalVolumeName linear
其他资源
-
vgs (8)
,lvs (8)
,lvcreate (8)
man pages
4.2.2. 使用 storage
RHEL 系统角色创建或者调整逻辑卷大小
使用 storage
角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷
- 在 LVM 上调整现有文件系统大小
- 以池总大小的百分比表示 LVM 卷大小
如果卷组不存在,角色会创建它。如果逻辑卷在卷组中存在,如果其大小与 playbook 中指定的内容不匹配,则会调整其大小。
如果您要缩小逻辑卷,以避免数据丢失,则您必须确保该逻辑卷上的文件系统没有使用要缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Create logical volume ansible.builtin.include_role: name: rhel-system-roles.storage vars: storage_pools: - name: myvg disks: - sda - sdb - sdc volumes: - name: mylv size: 2G fs_type: ext4 mount_point: /mnt/data
示例 playbook 中指定的设置包括以下内容:
size: <size>
- 您必须使用单位(如 GiB)或百分比(例如 60%)来指定大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
验证指定的卷是否已创建或已调整为请求的大小:
# ansible managed-node-01.example.com -m command -a 'lvs myvg'
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件 -
/usr/share/doc/rhel-system-roles/storage/
目录
4.2.3. 创建条带逻辑卷
使用条状逻辑卷(LV),您可以在多个物理卷(PV)之间分发数据,从而可能会同时使用多个磁盘的读取和写入速度。
在创建条带 LV 时,务必要考虑条带数目和大小。条带数是分布数据的 PV 数量。增加条带数可以通过同时使用多个磁盘来提高性能。条带大小是在移至下一个磁盘前写入条状磁盘的数据块大小,并以 KB 为单位指定。最佳条带大小取决于您的工作负载和文件系统块大小。默认值为 64KB,可以调整。
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
创建条带 LV:
# lvcreate --stripes NumberOfStripes --stripesize StripeSize --size LogicalVolumeSize --name LogicalVolumeName VolumeGroupName
用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。
--stripesize
不是一个必需的选项。如果没有指定条带大小,则默认为 64KB。使用 LV 的名称替换 LogicalVolumeName。将 VolumeGroupName 替换为卷组的名称。
验证
验证创建了条状 LV:
# lvs -o lv_name,seg_type LV Type LogicalVolumeName striped
其他资源
-
vgs (8)
lvs (8)
,lvcreate (8)
man pages
4.2.4. 创建 RAID 逻辑卷
RAID 逻辑卷可让您使用多个磁盘来实现冗余和性能。LVM 支持各种 RAID 级别,包括 RAID0、RAID1、RAID4、RAID5、RAID6 和 RAID10。
通过 LVM,您可以创建条带 RAID (RAID0、RAID4、RAID5、RAID6)、镜像 RAID (RAID1)或两者的组合(RAID10)。
RAID 4、RAID 5 和 RAID 6 通过存储奇偶校验数据来提供容错功能,这些数据可用于在磁盘失败时重建丢失的信息。
在创建 RAID LV 时,将每个条带放在一个单独的 PV 中。条带数等于卷组(VG)中 PV 数量。
RAID 级别 | 类型 | 奇偶校验 | 最小设备数 | 最小条带号 |
---|---|---|---|---|
RAID0 | 条带 | None | 2 | 2 |
RAID1 | 镜像 | None | 2 | - |
RAID4 | 条带 | 使用第一个设备存储奇偶校验 | 3 | 2 |
RAID5 | 条带 | 使用额外的设备来存储奇偶校验 | 3 | 2 |
RAID6 | 条带 | 使用两个额外的设备来存储奇偶校验 | 5 | 3 |
RAID10 | 条带和镜像 | None | 4 | 2 |
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
创建 RAID LV:
要创建条带 raid,请使用:
# lvcreate --type raidlevel --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
使用 RAID 级别 0、4、5 或 6 替换 level。用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
要创建镜像的 RAID,请使用:
# lvcreate --type raid1 --mirrors MirrorsNumber --size Size --name LogicalVolumeName VolumeGroupName
将 MirrorsNumber 替换为镜像数量。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
要创建镜像和条带 RAID,请使用:
# lvcreate --type raid10 --mirrors MirrorsNumber --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
将 MirrorsNumber 替换为镜像数量。用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
验证
验证 RAID LV 是否已创建:
# lvs -o lv_name,seg_type LV Type LogicalVolumeName raid0
其他资源
-
lvmraid(7)
,vgs(8)
,lvs(8)
,lvcreate(8)
man pages
4.2.5. 创建精简逻辑卷
在精简配置下,分配卷组(VG)的物理扩展(PE),以创建具有特定物理大小的精简池。然后,根据虚拟大小从这个精简池中分配逻辑卷(LV),不受池的物理容量的限制。因此,当所有精简 LV 的总虚拟大小超过精简池的物理容量时,每个精简 LV 的虚拟大小可能会超过精简池的物理容量。因此,务必要密切监控逻辑和物理使用情况,以避免耗尽空间和中断。
精简配置可根据需要分配空间,降低初始成本并提高资源利用率,从而优化存储效率。但是,在使用精简 LV 时,请注意以下缺陷:
- 不当的丢弃处理可能会阻止未使用的存储空间的发行版本,从而导致空间随着时间的推移完全分配。
- 在带有快照的文件系统上,写时复制(CoW)操作可能会较慢。
- 数据块可以在多个文件系统间术语,导致随机访问限制。
先决条件
- 管理访问权限.
- 您已创建了物理卷。如需更多信息,请参阅创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
列出卷组的名称及其大小:
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
创建精简池:
# lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName
将 PoolSize 替换为精简池可以使用的最大磁盘空间量。将 ThinPoolName 替换为精简池的名称。将 VolumeGroupName 替换为卷组的名称。
创建精简 LV:
# lvcreate --type thin --virtualsize MaxVolumeSize --name ThinVolumeName --thinpool ThinPoolName VolumeGroupName
将 MaxVolumeSize 替换为卷可在精简池中增大的最大大小。将 ThinPoolName 替换为精简池的名称。将 VolumeGroupName 替换为卷组的名称。
注意您可以在同一精简池中创建其他精简 LV。
验证
验证是否创建了 thin LV:
# lvs -o lv_name,seg_type LV Type ThinPoolName thin-pool ThinVolumeName thin
其他资源
-
lvs (8)
,lvcreate (8)
man pages
4.2.6. 创建 VDO 逻辑卷
VDO 逻辑卷(LV)使用 Virtual Data Optimizer (VDO)技术来提高存储效率。VDO LV 同时具有虚拟大小和物理大小。虚拟大小指的是向用户显示的存储总量。物理大小是从 VG 分配的实际物理存储量,由 VDO 池使用。
VDO LV 的虚拟大小通常大于 VDO 池的物理大小,使其过度配置。由于过度置备 VDO 池中的物理空间,需要根据需要密切监控和扩展。
VDO LV 和 VDO 池已创建为对,始终作为对存在。
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
创建 VDO LV:
# lvcreate --type vdo --virtualsize VolumeSize --size PhysicalPoolSize --name VDOVolumeName --vdopool VDOPoolName VolumeGroupName
将 VolumeSize 替换为卷的大小。将 PhysicalPoolSize 替换为池的大小。将 VDOVolumeName 替换为 VDO 卷的名称。将 VDOPoolName 替换为 VDO 池的名称。将 VolumeGroupName 替换为卷组的名称。
验证
验证是否已创建 VDO LV:
# lvs -o name,seg_type,size LV Type LSize VDOPoolName vdo-pool 5.00g VDOVolumeName vdo 5.00g
其他资源
-
vgs (8)
,lvs (8)
,lvcreate (8)
man pages