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
像這樣試試
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