Un grupo de volúmenes consta de volúmenes físicos completos. Un volumen físico consta de muchas extensiones (una extensión suele tener 4 MB); cada extensión puede pertenecer a un volumen lógico diferente. Para transferir un volumen lógico a un grupo diferente, no puede simplemente transferir extensiones, ya que eso podría dividir el volumen físico entre el VG de origen y el VG de destino.
Lo que puede hacer es transferir uno o más PV desde el VG de origen al VG de destino, con el vgsplit
dominio. Puede especificar qué PV desea transferir o qué LV (pero solo uno a la vez). Si especifica un LV, este y los otros LV en el VG de origen deben estar en PV separados. El VG de destino se creará si no existe ningún VG con el nombre especificado.
vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99
Es posible que deba usar pvmove
primero para organizar los volúmenes lógicos que desea mover para que estén en PV separados.
Si pretendía conservar los límites físicos del VG y mover los datos, no hay una herramienta integrada, pero podría crear un espejo y luego eliminar el original.
A partir de LVM en Debian stretch (9.0), es decir, 2.02.168-2, es posible hacer una copia de un volumen lógico en grupos de volúmenes usando 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 simplemente mover el volumen.
Una sesión de ejemplo completa e independiente que utiliza dispositivos de bucle y lvconvert
sigue.
Resumen:creamos el grupo de volúmenes vg1
con volumen lógico lv1
y vg2
con lv2
y haga una copia de lv1
en vg2
.
Crear archivos.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Configure dispositivos de bucle en archivos.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Cree volúmenes físicos en dispositivos de bucle (inicialice los dispositivos de bucle para que los use LVM).
pvcreate /dev/loop1 /dev/loop2
Cree grupos de volumen 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. Hacer vg1 inactivo.
vgchange -a n vg1
Ejecute el comando de combinación en modo de prueba. Esto fusiona 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 lv1
usando lvconvert
. El dest-pv
el argumento le dice a lvconvert
para hacer la copia espejo en /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 ahora es lv1_copy
.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Haz 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
Salida 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, volúmenes lógicos en vg1
debe estar inactivo. Y en volúmenes divididos, lógicos en vg2
perteneciente a vg1
debe estar inactivo. En nuestro caso, este es lv1
.
Ofreceré los míos:
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/
si todo está bien, quita la fuente
lvremove vgsource/lv0