Как переместить / скопировать логический том (lv) в другую группу томов (vg)?

По сути, я хочу переместить / скопировать несколько логических томов (lv) в новую группу томов (vg). Новая группа томов находится на новом наборе физических томов. Кто-нибудь знает, как сделать это безопасно, не повреждая данные внутри этих логических томов?

17
задан 29 February 2012 в 20:49

7 ответов

Нет причин сначала копировать его в файл .img, просто сначала выполните lvcreate, а затем непосредственно скопируйте его:

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
0
ответ дан 29 February 2012 в 20:49

Хорошо, я смог справиться с ситуацией по-своему. Вот шаги, которые я предпринял:

1) Сделайте снимок целевого логического тома.

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume

Примечание. Размер снимка может быть как угодно большим. Важно иметь достаточно места, чтобы зафиксировать изменения во время снимка.

2) Создайте копию изображения содержимого снимка с помощью dd

dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img

3) Создайте новый логический том достаточного размера в нацеливании ( новый) том группы.

lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name

4) Записать данные на новый логический том из резервной копии изображения, используя dd

dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume

5) удалить снимок и резервное копирование изображений с использованием lvremove и rm соответственно.

Это все, ребята ... Надеюсь, это кому-нибудь поможет:)

0
ответ дан 29 February 2012 в 20:49

vgmerge позволяет объединить два VG. Вы также можете использовать pvmove для перемещения данных в VG и vgsplit , если вы хотите вернуться к нескольким VG.

0
ответ дан 29 February 2012 в 20:49

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

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
0
ответ дан 29 February 2012 в 20:49

С 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

Выполненное слияние управляет в тестовом режиме. Это объединяет 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) Большинство этих команд должно будет быть выполнено как корень.

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

3) На слиянии:

Logical volumes in `vg1` must be inactive

И на разделении:

Logical volume `vg2/lv1` must be inactive.
2
ответ дан 29 February 2012 в 20:49

Пока нет четырех ответов, точный размер тома часто неизвестен. lvdisplay показывает только значения, округленные до 2 десятичных знаков, а man lvdisplay указывает только на другие команды для доступных параметров. Далее выбирается MiB, что является достаточно точным с размером блока LVM по умолчанию 4 МиБ:

lvdisplay --units m

MiB также является единицей по умолчанию для --size из lvcreate. В случае сомнений дважды проверьте правильный размер с помощью lvdisplay после создания целевого тома. Затем, как и в других ответах, сделайте копию. Кроме того, я бы рекомендовал проверить копию , например, с cmp.

Вот почему используется снимок и что он защищает и не защищает:

  • Снимок сделан таким образом, что все данные копируются так, как это было на момент создания снимка. создано. Действия на исходном томе в процессе копирования не будут отражены в копии.

  • Снимок также защищает исходный том от ошибок человека в командной строке dd. Если вы случайно записали снимок, будут повреждены только данные снимка, и вы можете просто удалить снимок и начать все сначала.

  • Целевой том не защищен во время процессов копирования. Если другой администратор (или автоматический процесс, такой как os-prober из dracut) монтирует неполный том, монтирование может испортить вещи. (Даже монтирование только для чтения может записывать записи журнала на том.)

0
ответ дан 29 February 2012 в 20:49

Если необходимо скопировать логический том с VG к другому VG B, я нашел интересное различное использование partclone. Снимок затем копирует с dd, хороший метод, но мог бы быть медленным, если Ваши файловые системы не полны. Это решение очень быстро, потому что оно копирует только используемые блоки.

  1. Сначала создайте снимок источника LV
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup

--size вот то, сколько записи может произойти, прежде чем снимок будет отключен

  1. Создайте целевой LV в целевом VG
lvcreate --size <new_lv_size> /dev/destvg --name newlv

new_lv_size должен быть, по крайней мере, размер источника LV

  1. Скопируйте файловую систему с источника lv резервное копирование на целевой LV
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv

fs_type может быть ext4, fat32, btrfs, xfs... любой FS поддерживал partclone

  1. Удалите снимок
lvremove /dev/sourcevg/lv-backup
0
ответ дан 23 November 2019 в 02:19

Другие вопросы по тегам:

Похожие вопросы: