Переместить логический том из одной группы томов в другую

18

Можно ли переместить логический том из одной группы томов в другую в целом?

Можно создать (более или менее) соответствующий lv и скопировать данные, но есть ли способ сделать это только с помощью инструментов LVM?

Если нет, есть ли теоретическая причина или техническое ограничение (размеры экстентов)?

XTL
источник

Ответы:

13

Группа томов состоит из целых физических томов. Физический том состоит из множества экстентов (экстент обычно составляет 4 МБ); каждый экстент может принадлежать другому логическому тому. Чтобы перенести логический том в другую группу, вы не можете просто перенести экстенты, потому что это может разделить физический том между исходной VG и целевой VG.

Что вы можете сделать, это перенести один или несколько PV из исходного VG в целевой VG, с помощью vgsplitкоманды. Вы можете указать, какие PV вы хотите перенести, или какой LV (но только по одному за раз). Если вы указываете LV, он и другие LV в исходной VG должны находиться на отдельных PV. Целевая VG будет создана, если не существует VG с указанным именем.

vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99

Возможно, вам придется использовать pvmoveсначала, чтобы упорядочить логические тома, которые вы хотите переместить, на отдельные PV.

Если вы хотели сохранить физические границы VG и переместить данные, встроенного инструмента нет, но вы могли бы сделать зеркало, а затем удалить оригинал .

Жиль "ТАК - прекрати быть злым"
источник
Похоже, target_group может быть уже существующей?
XTL
8

По состоянию на LVM в Debian участке (9.0), а именно 2.02.168-2, это возможно сделать копию логического тома по группам томов , используя комбинацию vgmerge, lvconvertи vgsplit. Поскольку перемещение - это комбинация копии и удаления, это также будет работать для перемещения.

Кроме того, вы можете использовать, pvmoveчтобы просто переместить громкость.

Полный автономный пример сеанса с использованием петлевых устройств и далее lvconvert.

Резюме: мы создаем группу томов vg1с логическим томом lv1, а vg2также lv2и делаем копию lv1в vg2.

Создавайте файлы.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Настройте устройства петли на файлах.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Создайте физические тома на петлевых устройствах (инициализируйте петлевые устройства для использования LVM).

pvcreate /dev/loop1 /dev/loop2

Создайте группы томов vg1 и vg2 в / dev / loop1 и / dev / loop2 соответственно.

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Создайте логические тома lv1 и lv2 на vg1 и vg2 соответственно.

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Создайте файловые системы ext4 на lv1 и lv2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

При желании напишите что-нибудь на lv1, чтобы позже вы могли проверить, правильно ли была создана копия. Сделайте vg1 неактивным.

vgchange -a n vg1

Запустите команду слияния в тестовом режиме. Это сливает vg1 в vg2.

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

А потом по-настоящему.

vgmerge -A y -l -v vg2 vg1

Затем создайте зеркальную пару RAID 1 с lv1помощью lvconvert. dest-pvАргумент говорит , lvconvertчтобы сделать зеркальную копию на /dev/loop2.

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Затем разделите зеркало. Новый LV сейчас lv1_copy.

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Сделать vg2/lv1неактивным.

lvchange -a n /dev/vg2/lv1

Тогда (режим тестирования)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Серьезно

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Результирующий вывод:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

ПРИМЕЧАНИЯ:

1) Большинство из этих команд нужно будет выполнять от имени пользователя root.

2) Если есть какое-либо дублирование имен логических томов в двух группах томов, vgmergeоткажется продолжить.

3) При слиянии логические тома в vg1должны быть неактивными. При разделении логические тома, vg2принадлежащие к, vg1должны быть неактивными. В нашем случае это так lv1.

Фахим Митха
источник
2

Я предложу свое:

umount /somedir/

lvdisplay /dev/vgsource/lv0 --units b

lvcreate -L 12345b -n lv0 vgtarget

dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress

mount /dev/vgtarget/lv0 /somedir/

если все хорошо, удали источник

lvremove vgsource/lv0
конан
источник
Это в значительной степени противоположность вопроса. Дело в том, чтобы переместить том, а не копировать данные в новый.
XTL