Назад | Перейти на главную страницу

Можно ли отразить логический том 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

Создайте 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