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

18

¿Es posible mover un volumen lógico de un grupo de volúmenes a otro en su totalidad?

Es posible crear un lv coincidente (más o menos) y copiar los datos, pero ¿hay alguna manera de hacerlo solo con las herramientas LVM?

Si no, ¿hay una razón teórica o una limitación técnica (tamaños de extensión)?

XTL
fuente

Respuestas:

13

Un grupo de volúmenes consta de volúmenes físicos completos. Un volumen físico consta de muchas extensiones (una extensión es típicamente de 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, porque 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 vgsplitcomando. 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 un 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

Puede que necesite usar pvmoveprimero para organizar los volúmenes lógicos que desea mover para que estén en PV separados.

Si pretendía retener 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 .

Gilles 'SO- deja de ser malvado'
fuente
Parece que target_group puede ser preexistente?
XTL
8

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 pvmovepara mover el volumen.

Una sesión de ejemplo completa e independiente utilizando dispositivos de bucle y lvconvertsigue

Resumen: creamos un grupo de volúmenes vg1con volumen lógico lv1, y vg2con lv2, y hacemos una copia de lv1in 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 lv1uso lvconvert. El dest-pvargumento le dice lvconvertque 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/lv1inactivo

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, vgmergese negará a continuar.

3) Al fusionar, los volúmenes lógicos vg1deben estar inactivos. Y en la división, los volúmenes lógicos en vg2pertenecer a vg1deben estar inactivos. En nuestro caso, esto es lv1.

Faheem Mitha
fuente
2

Ofreceré mi propio:

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, elimine la fuente

lvremove vgsource/lv0
conan
fuente
Esto es más o menos lo contrario de la pregunta. El punto es mover el volumen en lugar de copiar los datos a uno nuevo.
XTL