如何在 LVM 中将卷转换为条带卷 (RAID0)

出于性能原因,而不是使用一个大型 LVM 卷,它可能会被多个小型条带化 (RAID0) 卷替换。
没有直接将单个磁盘逻辑卷转换为条带化逻辑卷的命令。
这篇文章将解释执行转换的过程。

注意:在开始之前对卷或者文件系统进行完整备份。

此过程可以在实时系统中执行,无需重新启动。
该过程包括在原始卷和新的条带卷之间创建镜像。
镜像完成后,我们可以从镜像中删除原始卷,只留下条带卷。

为了能够执行转换,LVM 逻辑卷 (LV) 中的逻辑盘区 (LE) 数必须能被未来条带化 LV 中将使用的物理卷 (PV) 数整除。

检查分配的 LE 数量:

# lvdisplay
 --- Logical volume --
 LV Path                /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME>
 LV Name                <LOGICAL_VOLUME>
 VG Name                <VOLUME_GROUP>
 LV UUID                <VOLUME_UUID>
 LV Write Access        read/write
 LV Creation host, time <HOSTNAME>, 2020-12-10 08:38:44 +0000
 LV Status              available
 # open                 1
 LV Size                <10.00 GiB
 Current LE             2559
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           252:0

在这种情况下,LE 的数量是 2559.

要知道所需 LE 的数量,我们可以使用:
le = 分配的 LE 数,来自上一个命令(在本例中为 2559)
pv = 将来要使用的条带 PV 数(例如:5)

$ le=2559; pv=5; echo $((le%pv?(le/pv+1)*pv:le))
2560

在这种情况下,需要一个另外的 LE。
扩展 LV 的示例:

# lvresize --extents +1 /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME> /dev/sdb
 Size of logical volume <VOLUME_GROUP>/<LOGICAL_VOLUME> changed from <10 GiB (2559 extents) to <10 giB (2560 extents).
 Logical volume <VOLUME_GROUP>/<LOGICAL_VOLUME> successfully resized.

LV准备好后,继续:

  1. 将新的 PV 添加到 LV 创建一个条纹镜像。

条纹的数量应该是 PV 的数量:

# lvconvert --type mirror -m 1 --mirrorlog core --stripes 2 /dev/<VOLUME_GROUP>/<LOGICAL_VOLUME> /dev/<PV1> /dev/<PV2> ... /dev/<PV5>
  1. 从 LV 中删除初始 PV:
# lvconvert -m0 <VOLUME_GROUP>/<LOGICAL_VOLUME> /dev/<INITIAL_PV>
  1. 从 LVM 中删除 PV:
# vgreduce <VOLUME_GROUP> /dev/<INITIAL_PV>
# pvremove /dev/<INITIAL_PV>
日期:2020-09-17 00:13:26 来源:oir作者:oir