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

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

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

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

En caso contrario, ¿existe alguna razón teórica o una limitación técnica (tamaños de extensión)?

Respuesta1

Un grupo de volúmenes consta de volúmenes físicos completos. Un volumen físico consta de muchas extensiones (una extensión suele ser 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, 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 del VG de origen al VG de destino, con elvgsplitdominio. Puede especificar qué PV desea transferir o qué LV (pero solo uno a la vez). Si especifica un LV, éste y los demás 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 necesites usarpvmovePrimero, organice los volúmenes lógicos que desea mover para que estén en PV separados.

Si desea conservar los límites físicos del VG y mover los datos, no existe una herramienta incorporada, pero podría hacerlo.hacer un espejo y luego quitar el original.

Respuesta2

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 entre grupos de volúmenes usando una combinación de vgmerge, lvconverty vgsplit. Dado que un movimiento es una combinación de copiar y eliminar, esto también funcionará para un movimiento.

Alternativamente, puedes usar pvmovepara mover las extensiones físicas. CitarU&L: Propósito de las extensiones físicas:

Una extensión física única es la unidad más pequeña de espacio en disco que LVM puede administrar individualmente.

A continuación se muestra una sesión de ejemplo completa e independiente que utiliza dispositivos de bucle lvconvert.

Resumen: creamos un grupo de volúmenes vg1con volumen lógico lv1y vg2con lv2y hacemos una copia lv1en vg2.

Crea 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 dispositivos de bucle para que LVM los use).

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 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 lv1usando lvconvert. El dest-pvargumento indica lvconvertque se debe hacer la copia reflejada 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 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

Verdadero

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. El #delante de algunos de los comandos indica que es un comentario. No representa el indicador raíz.

  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 fusionarse, los volúmenes lógicos vg1deben estar inactivos. Y en la división, los volúmenes lógicos a vg2los que pertenece vg1deben estar inactivos. En nuestro caso, esto es lv1.

Respuesta3

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 está bien, elimina la fuente.

lvremove vgsource/lv0

Respuesta4

Digamos que tienes un volumen llamados0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

Quiero mudarme /dev/sdby /dev/sdc1a un nuevo disco psíquico./dev/sdd1

Crear un volumen físico en sdd1

$ pvcreate /dev/sdd1

Ahora puede ampliar su grupo de volúmenes s0con el nuevo disco

$ vgextend s0 /dev/sdd1

Ahora puedes empezar a mover datos

$ pvmove /dev/sdb /dev/sdd1

Espera a terminar

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

Controlar

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

Ahora puedes eliminar /dev/sdbdel s0grupo.

$ vgreduce s0 /dev/sdb

Siga los mismos pasos para/dev/sdc1

información relacionada