67.9. 创建和管理精简配置的卷(精简卷)
Red Hat Enterprise Linux 支持精简配置的快照卷和逻辑卷:
- 使用精简配置的逻辑卷,您可以创建大于可用物理存储的逻辑卷。
- 使用精简配置的快照卷,您可以在同一数据卷中存储更多虚拟设备。
67.9.1. 精简配置概述
很多现代存储堆栈现在提供在密集配置和精简配置之间进行选择的能力:
- 密集配置提供了块存储的传统行为,其中块的分配与其实际用途无关。
- 精简配置允许置备更大的块存储池,其大小可能大于存储数据的物理设备,从而导致过度配置。过度置备可能是因为单个块在实际使用之前没有被分配。如果您有多个共享同一池的精简置备设备,那么这些设备可以是过度配置的。
通过使用精简配置,您可以超额使用物理存储,且可以管理称为精简池的可用空间池。当应用程序需要时,您可以将这个精简池分配给任意数量的设备。当需要有效分配存储空间时,您可以动态扩展精简池。
例如,如果 10 个用户的每个用户都为他们的应用程序请求一个 100GB 的文件系统,那么您可以为每个用户创建一个 100GB 的文件系统,但其由较少的实际存储支持,仅在需要时使用。
在使用精简配置时,监控存储池,并在可用物理空间耗尽时添加更多容量是非常重要的。
以下是使用精简配置的设备的一些优点:
- 您可以创建大于可用物理存储的逻辑卷。
- 您可以将更多的虚拟设备存储在相同的数据卷中。
- 您可以创建逻辑上可自动增长的文件系统,以支持数据需求,并将未使用的块返回给池,以供池中的任意文件系统使用
以下是使用精简配置的设备的潜在缺陷:
- 精简配置的卷存在耗尽可用物理存储的固有风险。如果过度配置了底层存储,您可能会因为缺少可用物理存储而导致停机。例如,如果您创建了 10T 的精简配置的存储,而只有 1T 的物理存储来支持,则卷将在 1T 耗尽后不可用或不可写。
-
如果卷在精简配置的设备后没有向层发送丢弃,那么对使用情况的统计将不准确。例如,在不使用
-o discard mount
选项的情况下放置文件系统,且不在精简配置的设备之上定期运行fstrim
,则永远不会不分配之前使用的存储。在这种情况下,随着时间的推移,即使没有真正使用它,您最终都会使用全部的置备量。 - 您必须监控逻辑和物理使用情况,以便不会用尽可用的物理空间。
- 在带有快照的文件系统上,写时复制(CoW)操作可能会较慢。
- 数据块可以在多个文件系统之间混合,导致底层存储的随机访问限制,即使它没有向最终用户展示那种方式。
67.9.2. 创建精简配置的逻辑卷
使用精简配置的逻辑卷,您可以创建大于可用物理存储的逻辑卷。创建精简配置的卷集允许系统分配您所使用的卷,而不是分配所请求的全部存储。
使用 lvcreate
命令的 -T
或 --thin
选项,您可以创建精简池或精简卷。您还可以使用 lvcreate
命令的 -T
选项,使用单个命令创建精简池和精简卷。这个流程描述了如何创建和增大精简配置的逻辑卷。
先决条件
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
创建精简池:
# lvcreate -L 100M -T vg001/mythinpool Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
请注意:由于您要创建物理空间池,您必须指定池的大小。
lvcreate
命令的-T
选项不使用参数;它从随命令一起添加的其他选项来确定要创建的设备类型。您还可以使用额外的参数创建精简池,如下面的例子所示:您还可以使用
lvcreate
命令的--thinpool
参数创建精简池。与-T
选项不同,--thinpool
参数要求您指定您要创建的精简池逻辑卷的名称。以下示例使用--thinpool
参数在卷组 vg001 中创建名为 mythinpool 的精简池,大小为 100M :# lvcreate -L 100M --thinpool mythinpool vg001 Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "mythinpool" created.
由于池创建支持条带,所以您可以使用
-i
和-I
选项创建条带。以下命令在卷组 vg001 中创建一个名为 thinpool 的 100M 精简池,其有两个 64 kB 条带和一个大小为 256 kB 的块。它还会创建一个名为 vg001/thinvolume 的 1T 的精简卷。注意确保卷组中有两个有足够空闲空间的物理卷,否则您无法创建精简池。
# lvcreate -i 2 -I 64 -c 256 -L 100M -T vg001/thinpool -V 1T --name thinvolume
创建精简卷:
# lvcreate -V 1G -T vg001/mythinpool -n thinvolume WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.
在这种情况下,您为卷指定了虚拟大小,其大于包含它的池。您还可以使用额外的参数创建精简卷,如下面的例子所示:
要创建精简卷和精简池,请使用
lvcreate
命令的-T
选项,并指定大小和虚拟大小参数:# lvcreate -L 100M -T vg001/mythinpool -V 1G -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (100.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume "thinvolume" created.
要使用剩余的空闲空间来创建精简卷和精简池,请使用
100%FREE
选项:# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data. Logical volume "thinvolume" created.
要将现有的逻辑卷转换成精简池卷,请使用
lvconvert
命令的--thinpool
参数。您还必须将--poolmetadata
参数与--thinpool
参数结合使用,将现有的逻辑卷转换成精简池卷的元数据卷。以下示例将卷组 vg001 中的现有逻辑卷 lv1 转换为精简池卷,并将卷组 vg001 中的现有逻辑卷 lv2 转换为那个精简池卷的元数据卷:
# lvconvert --thinpool vg001/lv1 --poolmetadata vg001/lv2 Converted vg001/lv1 to thin pool.
注意将逻辑卷转换成精简池卷或者精简池元数据卷会破坏逻辑卷的内容,因为
lvconvert
不会保留设备的内容,而是覆盖其内容。默认情况下,
lvcreate
命令使用以下公式近似设置精简池元数据逻辑卷的大小:Pool_LV_size / Pool_LV_chunk_size * 64
如果您有大量快照,或者您的精简池有小的块,且预期以后精简池的大小会显著增长,则您可能需要使用
lvcreate
命令的--poolmetadatasize
参数来增加精简池的元数据卷的默认值。精简池元数据逻辑卷所支持的值在 2MiB 到 16GiB 之间。以下示例演示了如何增大精简池的元数据卷的默认值:
# lvcreate -V 1G -l 100%FREE -T vg001/mythinpool --poolmetadatasize 16M -n thinvolume Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. Logical volume "thinvolume" created.
查看创建的精简池和精简卷:
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices [lvol0_pmspare] vg001 ewi------- 4.00m /dev/sda(0) mythinpool vg001 twi-aotz-- 100.00m 0.00 10.94 mythinpool_tdata(0) [mythinpool_tdata] vg001 Twi-ao---- 100.00m /dev/sda(1) [mythinpool_tmeta] vg001 ewi-ao---- 4.00m /dev/sda(26) thinvolume vg001 Vwi-a-tz-- 1.00g mythinpool 0.00
可选:使用
lvextend
命令扩展精简池的大小。但是您无法缩小精简池的大小。注意在创建精简池和精简卷的过程中,如果您使用
-l 100%FREE
参数,这个命令会失败。以下命令调整了一个已存在的大小为 100M 的精简池,将其大小增加 100M。
# lvextend -L+100M vg001/mythinpool Size of logical volume vg001/mythinpool_tdata changed from 100.00 MiB (25 extents) to 200.00 MiB (50 extents). WARNING: Sum of all thin volume sizes (1.00 GiB) exceeds the size of thin pool vg001/mythinpool (200.00 MiB). WARNING: You have not turned on protection against thin pools running out of space. WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full. Logical volume vg001/mythinpool successfully resized
# lvs -a -o +devices LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices [lvol0_pmspare] vg001 ewi------- 4.00m /dev/sda(0) mythinpool vg001 twi-aotz-- 200.00m 0.00 10.94 mythinpool_tdata(0) [mythinpool_tdata] vg001 Twi-ao---- 200.00m /dev/sda(1) [mythinpool_tdata] vg001 Twi-ao---- 200.00m /dev/sda(27) [mythinpool_tmeta] vg001 ewi-ao---- 4.00m /dev/sda(26) thinvolume vg001 Vwi-a-tz-- 1.00g mythinpool 0.00
可选:要重命名精简池和精简卷,请使用以下命令:
# lvrename vg001/mythinpool vg001/mythinpool1 Renamed "mythinpool" to "mythinpool1" in volume group "vg001" # lvrename vg001/thinvolume vg001/thinvolume1 Renamed "thinvolume" to "thinvolume1" in volume group "vg001"
重命名后查看精简池和精简卷:
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mythinpool1 vg001 twi-a-tz 100.00m 0.00 thinvolume1 vg001 Vwi-a-tz 1.00g mythinpool1 0.00
可选:要删除精简池,请使用以下命令:
# lvremove -f vg001/mythinpool1 Logical volume "thinvolume1" successfully removed. Logical volume "mythinpool1" successfully removed.
其它资源
-
lvcreate (8)
,lvrename (8)
,lvs (8)
, 和lvconvert (8)
man page
67.9.3. 在 web 控制台中为精简置备的卷创建池
为精简配置的卷创建一个池。
先决条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 已创建一个卷组。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击 。
- 在 Name 字段中输入新逻辑卷的名称。不要在名称中包含空格。
在 Pool for thinly provisioned volumes。
下拉菜单中,选择此配置允许您创建一个逻辑卷,其最大卷大小等于卷组中所含所有驱动器的总和。
定义逻辑卷的大小。考虑:
- 使用这个逻辑卷的系统需要多少空间。
- 您要创建的逻辑卷数量。
您可以选择不使用整个空间。如果需要,您可以稍后增大逻辑卷。
点
。精简卷的池创建了,您现在可以向池中添加精简卷。
67.9.4. 在 web 控制台中创建精简配置的逻辑卷
您可以使用 Web 控制台在池中创建精简配置的逻辑卷。该池可以包含多个精简卷,每个精简卷可以变大,作为精简卷本身的池。
使用精简卷需要定期检查逻辑卷的实际可用物理空间。
先决条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 用于精简卷的池已创建。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 Web 控制台的日志记录。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组的菜单按钮。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要在其中创建精简逻辑卷的池。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点 Create new thinly provisioned logical volume。
- 在 Create thin volume 对话框中输入精简卷的名称。不要在名称中使用空格。
- 定义精简卷的大小。
点 Create。
精简逻辑卷被创建。您必须先格式化卷,然后才能使用它。
67.9.5. 块大小概述
块是专用于快照存储的物理磁盘的最大单元。
使用以下条件来使用块大小:
- 较小的块需要更多元数据并会影响到性能,但可以更好地利用快照。
- 较大的块需要较少的元数据操作,但快照的空间利用率较小。
默认情况下,lvm2
以 64KiB 块大小开头,并估算此类块大小的好的元数据大小。lvm2
可以创建和使用的最小元数据大小为 2 MiB。如果元数据大小需要大于 128 MiB,它开始增大块大小,因此元数据大小会保持紧凑。然而,这可能会导致一些大的块值,这使快照使用效率较低。在这种情况下,较小的块大小和较大的元数据大小是一个更好的选择。
要根据您的需要指定块大小,请使用 -c
或 --chunksize
参数来覆盖 lvm2
估计的块大小。请注意,精简池创建后您无法更改块大小。
如果卷数据的大小在 TiB 范围内,请使用 ~15.8GiB 作为元数据大小,这是支持的最大大小,并根据您的要求设置块大小。但请注意,如果您需要扩展卷的数据大小且具有小的块,则无法增大元数据大小。
当用户在 元数据
中耗尽空间,或者由于有限的最大可寻址精简池数据大小,使用块大小和元数据的不合适的组合可能会导致出现潜在问题的情况。
其它资源
-
lvmthin (7)
手册页
67.9.6. 精简配置的快照卷
Red Hat Enterprise Linux 支持精简配置的快照卷。精简逻辑卷的快照也会创建一个精简逻辑卷(LV)。精简快照卷具有与其它精简卷相同的特征。您可以独立激活卷、扩展卷、重新命名卷、删除卷、甚至快照卷。
与所有 LVM 快照卷以及所有精简卷类似,集群中的节点不支持精简快照卷。快照卷必须在一个集群节点中完全激活。
传统快照必须为创建的每一个快照分配新的空间,其中数据作为对源的修改而被保留。但精简配置的快照与源共享相同的空间。精简 LV 的快照非常有效,因为精简 LV 及它的任何快照的公共数据块是共享的。您可以创建精简 LV 的快照或从其他精简快照创建快照。递归快照的通用块也在精简池中共享。
精简快照卷提供以下优点:
- 增加源的快照数量对性能的影响可以忽略不计。
- 精简快照卷可以减少磁盘用量,因为只有新数据被写入,且不会复制到每个快照中。
- 不需要同时激活精简快照卷和源,这是传统快照的要求。
- 当从快照恢复源时,不需要合并精简快照。您可以删除源,而使用快照。传统的快照有单独的卷,其中存储必须要复制回来的更改,即:合并到源以重置它。
- 与传统的快照相比,对允许的快照数量有很大的限制。
虽然使用精简快照卷有很多好处,但在有些情况下,传统的 LVM 快照卷功能可能更适合您的需要。您可以对所有类型的卷使用传统快照。但是,要使用精简快照则要求您使用精简配置。
您不能限制精简快照卷的大小 ; 如有必要,快照将使用精简池中的所有空间。一般说来,在决定使用什么快照格式时,您应该考虑具体的要求。
默认情况下,在通常的激活命令过程中会跳过精简快照卷。
67.9.7. 创建精简配置的快照卷
使用精简配置的快照卷,可以在同一数据卷上存储更多的虚拟设备。
在创建精简快照卷时,不要指定卷的大小。如果指定了 size 参数,则创建的快照不会是一个精简快照卷,也不会使用精简池来存储数据。例如,命令 lvcreate -s vg/thinvolume -L10M
不会创建精简快照,即使原始卷是精简卷。
可为精简配置的原始卷创建精简快照,也可针对不是精简置备的原始卷创建精简快照。以下流程描述了创建精简配置的快照卷的不同方法。
先决条件
- 您已创建了一个精简配置的逻辑卷。如需更多信息,请参阅精简置备概述。
流程
创建一个精简配置的快照卷。下面的命令在精简配置的逻辑卷 vg001/thinvolume 上创建一个名为 mysnapshot1 的精简配置的快照卷:
# lvcreate -s --name mysnapshot1 vg001/thinvolume Logical volume "mysnapshot1" created
# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert mysnapshot1 vg001 Vwi-a-tz 1.00g mythinpool thinvolume 0.00 mythinpool vg001 twi-a-tz 100.00m 0.00 thinvolume vg001 Vwi-a-tz 1.00g mythinpool 0.00
注意在使用精简配置时,存储管理员务必要监控存储池,并在其被完全占用时添加更多容量。有关扩展精简卷大小的详情,请参考 创建精简配置的逻辑卷。
您还可以为非置备的逻辑卷创建精简配置的快照。因为非精简配置的逻辑卷不包含在精简池中,因此它也被称为外部源。外部原始卷可以被很多精简置备的快照卷使用和共享,即使在不同的精简池中也是如此。在创建精简置备快照时,外部原始源必须不活跃且只读。
以下示例创建一个名为 origin_volume 的、只读的、不活动的逻辑卷的精简快照卷。精简快照卷名为 mythinsnap。然后,逻辑卷 origin_volume 在卷组 vg001 中成为精简快照卷 mythinsnap 的精简外部源,其使用现有的精简池 vg001/pool。原始卷必须与快照卷位于同一个卷组中。在指定原始逻辑卷时不要指定卷组。
# lvcreate -s --thinpool vg001/pool origin_volume --name mythinsnap
您可以通过执行以下命令,创建第一个快照卷的第二个精简配置的快照卷。
# lvcreate -s vg001/mysnapshot1 --name mysnapshot2 Logical volume "mysnapshot2" created.
要创建第三个精简配置的快照卷,请使用以下命令:
# lvcreate -s vg001/mysnapshot2 --name mysnapshot3 Logical volume "mysnapshot3" created.
验证
显示精简快照逻辑卷的所有祖先和后代的列表:
$ lvs -o name,lv_ancestors,lv_descendants vg001 LV Ancestors Descendants mysnapshot2 mysnapshot1,thinvolume mysnapshot3 mysnapshot1 thinvolume mysnapshot2,mysnapshot3 mysnapshot3 mysnapshot2,mysnapshot1,thinvolume mythinpool thinvolume mysnapshot1,mysnapshot2,mysnapshot3
在这里,
- thinvolume 是卷组 vg001 中的一个原始卷。
- mysnapshot1 是 thinvolume 的一个快照
- mysnapshot2 是 mysnapshot1 的一个快照
mysnapshot3 是 mysnapshot2 的一个快照
注意lv_ancestors
和lv_descendants
字段显示现有的依赖关系。但是,如果从链中删除了条目,则它们不会跟踪这些条目,因为这些条目可能会破坏依赖关系链。
其它资源
-
系统中
lvcreate (8)
手册页
67.9.8. 使用 Web 控制台创建精简配置的快照卷
您可以在 RHEL web 控制台中创建精简逻辑卷的快照,来备份最后一个快照以来磁盘上记录的更改。
先决条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 一个精简配置卷已创建。
流程
- 登录到 RHEL 8 web 控制台。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建精简卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要在其中创建精简逻辑卷的池。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点击逻辑卷旁边的菜单按钮 。
从下拉菜单中选择 Create snapshot。
在 Name 字段中输入快照名称。
- 点 。
- 在 Pool for thinly provisioned LVM2 logical volumes 页面中,滚动到 Thinly provisioned LVM2 logical volumes 部分,然后点击新创建的快照旁的菜单按钮 。
从下拉菜单中选择 Activate 来激活卷。