Saltar al contenido

Mover un volumen lógico de un grupo de volúmenes a otro

Nuestros mejores programadores han agotado sus provisiones de café, buscando noche y día por la resolución, hasta que Alexandría halló el hallazgo en Beanstalk así que ahora la comparte contigo.

Solución:

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 necesite usar pvmove primero para organizar los volúmenes lógicos que desea mover para que estén en PV separados.

Si tenía la intención de conservar los límites físicos del VG y mover los datos, no hay una herramienta integrada, pero podría hacer un espejo y luego eliminar el original.

A partir de LVM en Debian stretch (9.0), a saber, 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, lvconverty vgsplit. Dado que un movimiento es una combinación de una copia y una eliminación, esto también funcionará para un movimiento.

Como alternativa, puede utilizar pvmove para simplemente mover el volumen.

Una sesión de ejemplo completa e independiente que utiliza dispositivos de bucle y
lvconvert sigue.

Resumen: creamos grupo de volumen vg1 con volumen lógico lv1y vg2 con lv2y hacer una copia de lv1 en vg2.

Crear archivos.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Configurar dispositivos de bucle en archivos.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Crear volúmenes físicos en dispositivos de bucle (inicializar 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. 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 <> <>
vgmerge -A y -l -t -v vg2 vg1

Y luego de verdad.

vgmerge -A y -l -v vg2 vg1

A continuación, cree un par de espejos RAID 1 a partir de lv1 usando lvconvert. los
dest-pv el argumento dice lvconvert para hacer la copia espejo en /dev/loop2.

lvconvert --type raid1 --mirrors 1 <> <>
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 <> <>
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 <> <> <>
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 proceder.

3) Al fusionarse, los volúmenes lógicos en vg1 debe estar inactivo. Y en volúmenes divididos, lógicos en vg2 perteneciendo a vg1 debe estar inactivo. En nuestro caso, esto es lv1.

Ofreceré el mío:

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 esta bien quita la fuente

lvremove vgsource/lv0

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *