是否可以镜像条带化的 LVM 逻辑卷?

是否可以镜像条带化的 LVM 逻辑卷?

我有一个条带逻辑卷,目前它被拆分到两个物理驱动器(/dev/sda1/dev/sdb1)之间。我现在想将此卷镜像到/dev/sdc1已添加到卷组中的第三个设备()。我找到了一些参考资料(例如是否可以将条带逻辑卷转换为线性逻辑卷?)建议使用以下命令来实现:

lvconvert -m 1 /dev/volgroup/volume /dev/sdc1

然而对我来说这会导致以下错误:

'--mirrors/-m' is not compatible with striped

这对我为什么不起作用?

LVM 版本

LVM version:     2.02.133(2) (2015-10-30)
Library version: 1.02.110 (2015-10-30)
Driver version:  4.34.0

答案1

像这样尝试

lvconvert -m1 /dev/volgroup/volume

以下是我测试的命令日志。我在环回设备上进行了测试

创建3个环回设备

dd if=/dev/zero of=disk1 bs=1M count=100
dd if=/dev/zero of=disk2 bs=1M count=100
dd if=/dev/zero of=disk3 bs=1M count=200
[root@localhost ~]# losetup -f /root/disk1
[root@localhost ~]# losetup -f /root/disk2
[root@localhost ~]# losetup -f /root/disk3
[root@localhost ~]# losetup -a
/dev/loop0: [64768]:17900481 (/root/disk1)
/dev/loop1: [64768]:17900482 (/root/disk2)
/dev/loop2: [64768]:17900483 (/root/disk3)

创建 PV

[root@localhost ~]# pvcreate /dev/loop0
  Physical volume "/dev/loop0" successfully created
[root@localhost ~]# pvcreate /dev/loop1
  Physical volume "/dev/loop1" successfully created
[root@localhost ~]# pvcreate /dev/loop2
  Physical volume "/dev/loop2" successfully created
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/loop0        lvm2 ---  100.00m 100.00m
  /dev/loop1        lvm2 ---  100.00m 100.00m
  /dev/loop2        lvm2 ---  200.00m 200.00m
  /dev/sda2  centos lvm2 a--    7.51g  40.00m

创建带有 2 个条纹的 VG 和 LV

vgcreate StripedVG /dev/loop0 /dev/loop1
lvcreate -l +100%FREE -i2 -n StripedLV StripedVG
Using default stripesize 64.00 KiB.
Logical volume "StripedLV" created.

在此处输入图片描述

格式化并安装

mkfs /dev/mapper/StripedVG-StripedLV
mount /dev/mapper/StripedVG-StripedLV /mnt

现在让我们将第三个 PV 添加到 VG

vgextend StripedVG /dev/loop2
Volume group "StripedVG" successfully extended

现在转换

[root@localhost ~]# lvconvert -m1 StripedVG/StripedLV
  StripedVG/StripedLV: Converted: 0.0%
  StripedVG/StripedLV: Converted: 83.3%
  StripedVG/StripedLV: Converted: 100.0%

去除镜子上的条纹部分

[root@localhost ~]# lvconvert -m0 StripedVG/StripedLV /dev/loop0 /dev/loop1
  Logical volume StripedLV converted.

在此处输入图片描述

现在删除 /dev/loop0 和 /dev/loop1

[root@localhost ~]# vgreduce StripedVG /dev/loop0
  Removed "/dev/loop0" from volume group "StripedVG"
[root@localhost ~]# vgreduce StripedVG /dev/loop1
  Removed "/dev/loop1" from volume group "StripedVG"
[root@localhost ~]# pvremove /dev/loop0 /dev/loop1
  Labels on physical volume "/dev/loop0" successfully wiped
  Labels on physical volume "/dev/loop1" successfully wiped

所以我们最终得到的是

在此处输入图片描述

编辑1:
我上面描述的内容在 CentOS 6 上有效,但在 CentOS 7 上无效。
我猜这条规则在 CentOS 7 中生效。
由于条纹 != 线性,所以它失败了。

在此处输入图片描述

我刚刚从源代码重新编译了 lvm rpm 包,但添加了额外的调试

在此处输入图片描述

输出如下

[root@localhost x86_64]# lvconvert -m1 StripedVG/StripedLV
  '--mirrors/-m' is not compatible with striped
  arg_count = 1

  seg_is_linear = 0

  seg_is_mirrored = 0

因此基本上所有 3 个条件都评估为真,并且我们进入错误处理块。

arg_count=1 
!seg_is_linear = !(0) = 1
!seg_is_mirrored = !(0) = 1

编辑2
我找到了 CentOS 7 的解决方案。我们需要使用 --type mirror,而不是 RAID 1

lvconvert --type mirror -m 1 StripedVG/StripedLV

在此处输入图片描述

然后将其转换为线性并选择要删除的 PV

lvconvert -m0 StripedVG/StripedLV /dev/loop0 /dev/loop1

在此处输入图片描述

相关内容