我有一个条带逻辑卷,目前它被拆分到两个物理驱动器(/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