4.2. 创建逻辑卷


LVM 通过将物理层抽象到可根据您的需要创建和调整的逻辑卷,为处理磁盘存储提供了一种灵活的方法。

4.2.1. 创建线性(厚)逻辑卷

使用线性逻辑卷(LV),您可以将多个物理存储单元合并到一个虚拟存储空间中。您可以轻松地扩展或减少线性 LV,以适应数据要求。

先决条件

  • 管理访问权限.
  • 已安装 lvm2 软件包。
  • 已创建卷组。如需更多信息,请参阅创建 LVM 卷组

流程

  1. 列出卷组的名称及其大小:

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. 创建线性 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 中指定的内容不匹配,则会调整其大小。

如果您要缩小逻辑卷,以避免数据丢失,则您必须确保该逻辑卷上的文件系统没有使用要缩小的逻辑卷中的空间。

先决条件

流程

  1. 创建一个包含以下内容的 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 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 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,可以调整。

先决条件

  • 管理访问权限.

流程

  1. 列出卷组的名称及其大小:

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. 创建条带 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 数量。

表 4.1. 最小 RAID 配置要求
RAID 级别类型奇偶校验最小设备数最小条带号

RAID0

条带

None

2

2

RAID1

镜像

None

2

-

RAID4

条带

使用第一个设备存储奇偶校验

3

2

RAID5

条带

使用额外的设备来存储奇偶校验

3

2

RAID6

条带

使用两个额外的设备来存储奇偶校验

5

3

RAID10

条带和镜像

None

4

2

先决条件

  • 管理访问权限.

流程

  1. 列出卷组的名称及其大小:

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. 创建 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)操作可能会较慢。
  • 数据块可以在多个文件系统间术语,导致随机访问限制。

先决条件

流程

  1. 列出卷组的名称及其大小:

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. 创建精简池:

    # lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName

    PoolSize 替换为精简池可以使用的最大磁盘空间量。将 ThinPoolName 替换为精简池的名称。将 VolumeGroupName 替换为卷组的名称。

  3. 创建精简 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 池已创建为对,始终作为对存在。

先决条件

  • 管理访问权限.

流程

  1. 列出卷组的名称及其大小:

    # vgs -o vg_name,vg_size
    
      VG              VSize
      VolumeGroupName 30.75g
  2. 创建 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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.