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
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: redhat.rhel_system_roles.storage vars: storage_safe_mode: false 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'
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
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 | Striping | None | 2 | 2 |
| RAID1 | Mirroring | None | 2 | - |
| RAID4 | Striping | 使用第一个设备来存储奇偶校验 | 3 | 2 |
| RAID5 | Striping | 使用额外的设备来存储奇偶校验 | 3 | 2 |
| RAID6 | Striping | 使用两个额外的设备来存储奇偶校验 | 5 | 3 |
| RAID10 | Striping 和 mirroring | 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
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。
验证
验证精简 LV 是否已创建:
# lvs -o lv_name,seg_type LV Type ThinPoolName thin-pool ThinVolumeName thin
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