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

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

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

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

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

решение1

Группа томов состоит из целых физических томов. Физический том состоит из множества экстентов (обычно экстент составляет 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сначала необходимо разместить логические тома, которые вы хотите переместить, на отдельных физических дисках.

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

решение2

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

В качестве альтернативы вы можете использовать pvmoveдля перемещения физических экстентов. ЦитатаU&L: Цель физических экстентов:

Один физический экстент — это наименьшая единица дискового пространства, которой LVM может управлять индивидуально.

Ниже приведен полный автономный пример сеанса с использованием петлевых устройств 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

Запустите команду merge в тестовом режиме. Это объединит 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. #Перед некоторыми командами указывается, что это комментарий. Он не представляет собой приглашение root.

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

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

решение3

Я предложу свой вариант:

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

решение4

Допустим, у вас есть том с именемs0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

Я хочу переехать /dev/sdbна /dev/sdc1новый психический диск/dev/sdd1

Создать физический том на sdd1

$ pvcreate /dev/sdd1

Теперь вы можете расширить свою группу томов s0с помощью нового диска.

$ vgextend s0 /dev/sdd1

Теперь вы можете начать перемещение данных

$ pvmove /dev/sdb /dev/sdd1

Подождите, пока закончите

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

Проверять

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

Теперь вы можете удалить /dev/sdbиз s0группы

$ vgreduce s0 /dev/sdb

Выполните те же шаги для/dev/sdc1

Связанный контент