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

使用 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: 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 文件。

  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'

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

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 数。

Expand
表 4.1. 最小 RAID 配置要求
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

先决条件

  • 管理访问权限.

流程

  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

4.2.5. 创建精简逻辑卷

在精简配置下,从卷组(VG)分配物理扩展(PE),以创建具有特定物理大小的精简池。然后,根据虚拟大小从这个精简池分配逻辑卷(LV),不受池的物理容量的限制。这样,当所有精简 LV 的总虚拟大小超过精简池的物理容量时,每个精简 LV 的虚拟大小都可能会超过精简池的物理容量,从而导致过度配置。因此,务必要密切监控逻辑和物理使用情况,以避免耗尽空间和中断。

精简配置可根据需要分配空间来优化存储效率,降低了初始成本并提高了资源利用率。但是,在使用精简 LV 时,请注意以下缺点:

  • 不当的丢弃处理可能会阻止释放未使用的存储空间,从而导致空间随着时间的推移被全部分配。
  • 在带有快照的文件系统上,写时复制(CoW)操作可能会较慢。
  • 数据块可以在多个文件系统之间混合,导致随机访问限制。

先决条件

  • 管理访问权限.
  • 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷
  • 您已创建了一个卷组。如需更多信息,请参阅 创建 LVM 卷组
  • 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷

流程

  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。

验证

  • 验证精简 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 池作为一对被创建,并总是作为一对存在。

先决条件

  • 管理访问权限.

流程

  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
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部