Lvm

是否可以鏡像條帶化 LVM 邏輯卷?

  • January 10, 2018

我有一個條帶化邏輯卷,該卷目前在兩個物理驅動器(/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

像這樣試試

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 的解決方案。而不是 RAID 1 - 我們需要使用 –type mirror

lvconvert --type mirror -m 1 StripedVG/StripedLV

在此處輸入圖像描述

然後將其轉換為線性並選擇要刪除的 PV

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

在此處輸入圖像描述

引用自:https://serverfault.com/questions/814659