¿Hay una manera simple de mover / copiar un volumen lógico de un grupo de volúmenes a otro? (LVM2)
15
Estoy reorganizando un montón de discos en mi servidor en casa y me encuentro en la posición de querer mover un montón de volúmenes lógicos LVM a otro grupo de volúmenes. ¿Hay una manera simple de hacer esto? Vi mencionar un cplvcomando, pero parece ser viejo o no algo que alguna vez estuvo disponible para Linux.
Si puede organizar que el volumen lógico esté en un subconjunto separado de volúmenes físicos del resto del grupo de volúmenes de origen ( lvconvert sourcevg/sourcelv /dev/pv1 ...puede ayudar), puede usar vgsplitpara dividir el lv en un nuevo vg y vgmergefusionar el nuevo vg en el objetivo vg.
Aunque LVM tiene una función de reflejo, no puede usarla (sensatamente) para hacer una copia entre grupos de volúmenes, porque ambas patas del espejo deben vivir en el mismo vg y la asociación no puede romperse .
Puede copiar un volumen LVM a otro de la misma manera que copiaría cualquier volumen a otro: cree un lv de destino del tamaño apropiado, luego copie el contenido con dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Si el volumen de origen está activo, puede aprovechar LVM para hacer una copia consistente: primero tome una instantánea de la fuente lv con lvcreate -s, luego copie la instantánea.
Brilliant Gilles ... vgsplit / vgmerge probablemente estará bien: puedo usar pvmove después de eso para mover las extensiones físicas al nuevo disco y luego eliminar el volumen anterior del VG.
jkp
Es una pena, esto no funcionó para mí al final debido a los diferentes tamaños de extensión. Si eso no es un problema para ti, te sugiero que este método sea más fácil.
jkp
Después dd(si no tiene prisa por deshacerse de los volúmenes antiguos), no olvide cambiar el UUID de los nuevos sistemas de archivos: tune2fs -U random / dev / targetvg / targetlv
Repito: esto no funciona para dos grupos de volúmenes separados
kissgyorgy
Primero vgextendvg1 con un nuevo pv, luego pvmovetu lv al nuevo pv, vgsplitun vg temporal que tienes vgmergeen vg2. Luego pvmovenuevamente el pv original de lv a vg2, vgreducevg2 para leer el pv intermedio. O para evitar la copia intermedia, simplemente puede combinar primero vg1 en vg2, pvmovelv1 y vgsplitnuevamente vg1 de vg2. Esto debería responder a las objeciones de @ MattBianco y @kissgyorgy y es equivalente a la solución de @Gilles pero reemplazando la instantánea y el nivel bajo ddpor unpvmove
marcz
1
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.
dd
(si no tiene prisa por deshacerse de los volúmenes antiguos), no olvide cambiar el UUID de los nuevos sistemas de archivos: tune2fs -U random / dev / targetvg / targetlvpvmove puede mover datos entre volúmenes físicos: Guía del administrador de LVM
fuente
vgextend
vg1 con un nuevo pv, luegopvmove
tu lv al nuevo pv,vgsplit
un vg temporal que tienesvgmerge
en vg2. Luegopvmove
nuevamente el pv original de lv a vg2,vgreduce
vg2 para leer el pv intermedio. O para evitar la copia intermedia, simplemente puede combinar primero vg1 en vg2,pvmove
lv1 yvgsplit
nuevamente vg1 de vg2. Esto debería responder a las objeciones de @ MattBianco y @kissgyorgy y es equivalente a la solución de @Gilles pero reemplazando la instantánea y el nivel bajodd
por unpvmove
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
, yvgsplit
. 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ógicolv1
, yvg2
conlv2
, y hacemos una copia delv1
invg2
.Crea archivos.
Configurar dispositivos de bucle en los archivos.
Cree volúmenes físicos en dispositivos de bucle (inicialice dispositivos de bucle para que los use LVM).
Crear grupos de volúmenes
vg1
yvg2
en/dev/loop1
y/dev/loop2
respectivamente.Crear volúmenes lógicos
lv1
ylv2
envg1
yvg2
respectivamente.Crear sistemas de archivos ext4 en
lv1
ylv2
.Opcionalmente, escriba algo
lv1
para que luego pueda verificar que la copia se creó correctamente. Hacervg1
inactivoEjecute el comando de combinación en modo de prueba. Esto se funde
lv1
conlv2
.Y luego de verdad.
Luego cree un par de espejos RAID 1 desde el
lv1
usolvconvert
. El argumento <> le dicelvconvert
que haga la copia espejolv1_copy
en/dev/loop2
.Luego divide el espejo. El nuevo LV es ahora
lv1_copy
.Hacer
vg2
inactivoEntonces (modo de prueba)
De verdad
Resultado resultante:
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) En combinación:
Y en split:
fuente