A partir del LVM en Debian tramo (9.0), a saber 2.02.168-2, es posible hacer una copia de un volumen lógico a través de grupos de volúmenes utilizando una combinación de vgmerge
, lvconvert
, y vgsplit
. Dado que un movimiento es una combinación de una copia y una eliminación, esto también funcionará para un movimiento.
Alternativamente, puede usar pvmove
para mover el volumen.
Una sesión de ejemplo completa e independiente utilizando dispositivos de bucle y
lvconvert
sigue
Resumen: creamos un grupo de volúmenes vg1
con volumen lógico lv1
, y vg2
con lv2
, y hacemos una copia de lv1
in vg2
.
Crea archivos.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Configurar dispositivos de bucle en los archivos.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Cree volúmenes físicos en dispositivos de bucle (inicialice dispositivos de bucle para que los use LVM).
pvcreate /dev/loop1 /dev/loop2
Cree grupos de volúmenes vg1 y vg2 en / dev / loop1 y / dev / loop2 respectivamente.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Cree volúmenes lógicos lv1 y lv2 en vg1 y vg2 respectivamente.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Cree sistemas de archivos ext4 en lv1 y lv2.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Opcionalmente, escriba algo en lv1 para que luego pueda verificar que la copia se creó correctamente. Haga que vg1 esté inactivo.
vgchange -a n vg1
Ejecute el comando de combinación en modo de prueba. Esto combina vg1 en vg2.
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
Y luego de verdad.
vgmerge -A y -l -v vg2 vg1
Luego cree un par de espejos RAID 1 desde el lv1
uso lvconvert
. El
dest-pv
argumento le dice lvconvert
que haga una copia espejo /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Luego divide el espejo. El nuevo LV es ahora lv1_copy
.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Hacer vg2/lv1
inactivo
lvchange -a n /dev/vg2/lv1
Entonces (modo de prueba)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
De verdad
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Resultado resultante:
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
NOTAS
1) La mayoría de estos comandos deberán ejecutarse como root.
2) Si hay alguna duplicación de los nombres de los volúmenes lógicos en los dos grupos de volúmenes, vgmerge
se negará a continuar.
3) Al fusionar, los volúmenes lógicos vg1
deben estar inactivos. Y en la división, los volúmenes lógicos en vg2
pertenecer a vg1
deben estar inactivos. En nuestro caso, esto es lv1
.