У меня есть чередующийся логический том, который в настоящее время разделен между двумя физическими дисками (/dev/sda1
и /dev/sdb1
). Теперь я хочу отразить этот том на третьем устройстве (/dev/sdc1
), который был добавлен в группу томов. Я нашел ряд ссылок (например, Можно ли преобразовать чередующийся логический том в линейный логический том?) предполагаем, что это возможно с помощью следующей команды:
lvconvert -m 1 /dev/volgroup/volume /dev/sdc1
Однако для меня это приводит к следующей ошибке:
'--mirrors/-m' is not compatible with striped
Почему у меня это не работает?
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
Создайте VG и LV с 2 полосами
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