
¿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 elvgsplit
dominio. 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 usarpvmove
Primero, 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
, lvconvert
y vgsplit
. Dado que un movimiento es una combinación de copiar y eliminar, esto también funcionará para un movimiento.
Alternativamente, puedes usar pvmove
para 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 vg1
con volumen lógico lv1
y vg2
con lv2
y hacemos una copia lv1
en 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 lv1
usando lvconvert
. El
dest-pv
argumento indica lvconvert
que 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/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
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:
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.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.Al fusionarse, los volúmenes lógicos
vg1
deben estar inactivos. Y en la división, los volúmenes lógicos avg2
los que pertenecevg1
deben estar inactivos. En nuestro caso, esto eslv1
.
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/sdb
y /dev/sdc1
a 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 s0
con 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/sdb
del s0
grupo.
$ vgreduce s0 /dev/sdb
Siga los mismos pasos para/dev/sdc1