Я переставляю кучу дисков на своем сервере дома и нахожусь в состоянии переместить кучу логических томов LVM в другую группу томов. Есть ли простой способ сделать это? Я видел упоминание о команде cplv
но она, кажется, либо старая, либо недоступна для Linux.
3 ответа
Если вы можете сделать так, чтобы логический том находился в отдельном подмножестве физических томов от остальной группы исходных томов (может помочь 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
, а затем скопируйте снимок.
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmove может перемещать данные между физическими томами: Руководство администратора LVM
Начиная с 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.