14

Я переставляю кучу дисков на своем сервере дома и нахожусь в состоянии переместить кучу логических томов LVM в другую группу томов. Есть ли простой способ сделать это? Я видел упоминание о команде cplv но она, кажется, либо старая, либо недоступна для Linux.

3 ответа3

19

Если вы можете сделать так, чтобы логический том находился в отдельном подмножестве физических томов от остальной группы исходных томов (может помочь lvconvert sourcevg/sourcelv /dev/pv1 ... ), вы можете использовать vgsplit для отделения lv в новый vg и vgmerge чтобы объединить новый vg с целевым vg.

Хотя в LVM есть функция зеркалирования, вы не можете (разумно) использовать ее для копирования между группами томов, поскольку обе ветви зеркала должны находиться на одном и том же vg, и связь не может быть нарушена.

Вы можете скопировать том LVM в другой, как если бы вы копировали любой том в другой: создайте целевой lv соответствующего размера, а затем скопируйте содержимое с помощью dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M . Если исходный том активен, вы можете использовать LVM для создания согласованной копии: сначала сделайте снимок исходного lv с lvcreate -s , а затем скопируйте снимок.

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove может перемещать данные между физическими томами: Руководство администратора LVM

1

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

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

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

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

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 . Аргумент <> указывает lvconvert сделать зеркальную копию lv1_copy в /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 неактивным.

vgchange -a n vg2

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

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) При слиянии:

Logical volumes in `vg1` must be inactive

И на сплите:

Logical volume `vg2/lv1` must be inactive.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .