По сути, я хочу переместить / скопировать несколько логических томов (lv) в новую группу томов (vg). Новая группа томов находится на новом наборе физических томов. Кто-нибудь знает, как сделать это безопасно, не повреждая данные внутри этих логических томов?
Нет причин сначала копировать его в файл .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
Хорошо, я смог справиться с ситуацией по-своему. Вот шаги, которые я предпринял:
1) Сделайте снимок целевого логического тома.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
Примечание. Размер снимка может быть как угодно большим. Важно иметь достаточно места, чтобы зафиксировать изменения во время снимка.
blockquote>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
соответственно.Это все, ребята ... Надеюсь, это кому-нибудь поможет:)
vgmerge позволяет объединить два VG. Вы также можете использовать pvmove для перемещения данных в VG и vgsplit , если вы хотите вернуться к нескольким VG.
Я предложу свое:
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
С 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.
Пока нет четырех ответов, точный размер тома часто неизвестен. lvdisplay
показывает только значения, округленные до 2 десятичных знаков, а man lvdisplay
указывает только на другие команды для доступных параметров. Далее выбирается MiB, что является достаточно точным с размером блока LVM по умолчанию 4 МиБ:
lvdisplay --units m
MiB также является единицей по умолчанию для --size
из lvcreate
. В случае сомнений дважды проверьте правильный размер с помощью lvdisplay
после создания целевого тома. Затем, как и в других ответах, сделайте копию. Кроме того, я бы рекомендовал проверить копию , например, с cmp
.
Вот почему используется снимок и что он защищает и не защищает:
Снимок сделан таким образом, что все данные копируются так, как это было на момент создания снимка. создано. Действия на исходном томе в процессе копирования не будут отражены в копии.
Снимок также защищает исходный том от ошибок человека в командной строке dd
. Если вы случайно записали снимок, будут повреждены только данные снимка, и вы можете просто удалить снимок и начать все сначала.
Целевой том не защищен во время процессов копирования. Если другой администратор (или автоматический процесс, такой как os-prober из dracut
) монтирует неполный том, монтирование может испортить вещи. (Даже монтирование только для чтения может записывать записи журнала на том.)
Если необходимо скопировать логический том с VG к другому VG B, я нашел интересное различное использование partclone
. Снимок затем копирует с dd, хороший метод, но мог бы быть медленным, если Ваши файловые системы не полны. Это решение очень быстро, потому что оно копирует только используемые блоки.
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup
--size
вот то, сколько записи может произойти, прежде чем снимок будет отключен
lvcreate --size <new_lv_size> /dev/destvg --name newlv
new_lv_size
должен быть, по крайней мере, размер источника LV
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv
fs_type
может быть ext4
, fat32
, btrfs
, xfs
... любой FS поддерживал partclone
lvremove /dev/sourcevg/lv-backup