Mover PEs y datos
Si queremos mover PEs, por ejemplo, porque queremos dejar libre un PV, o cualquier otro motivo, debemos usar el comando pvmove. Es recomendable hacer copias de seguridad cuando se hacen migraciones.
En primer lugar, consultamos las PEs de los PVs que tenemos:
# pvdisplay -m
--- Physical volume ---
PV Name /dev/sdb
VG Name disco_virtual
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 24
Free PE 0
Allocated PE 24
PV UUID mHsm57-0CKQ-fBt7-VecZ-hR01-7e8F-jVUwKz
--- Physical Segments ---
Physical extent 0 to 23:
Logical volume /dev/disco_virtual/web
Logical extents 0 to 23
--- Physical volume ---
PV Name /dev/sdc
VG Name disco_virtual
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 24
Free PE 10
Allocated PE 14
PV UUID Gtg7dE-k4YQ-nSgE-7KvZ-dbU2-Jrev-W1dBqf
--- Physical Segments ---
Physical extent 0 to 13:
Logical volume /dev/disco_virtual/web
Logical extents 24 to 37
Physical extent 14 to 23:
FREE
--- Physical volume ---
PV Name /dev/sde1
VG Name disco_virtual
PV Size 50,00 MiB / not usable 2,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 12
Free PE 12
Allocated PE 0
PV UUID 1H04tT-uiti-5obu-qO7r-DxUs-a6dd-DdnVuB
--- Physical Segments ---
Physical extent 0 to 11:
FREE
Vamos a mover las 5 últimas PEs de /dev/sdb al comienzo de /dev/sde1 que está vacío en estos momentos:
# pvmove /dev/sdb:19-23 /dev/sde1:0-4
/dev/sdb: Moved: 20,0%
/dev/sdb: Moved: 100,0%
# e2fsck -f /dev/disco_virtual/web
e2fsck 1.42.12 (29-Aug-2014)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura del directorio
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/disco_virtual/web: 12/38912 ficheros (0.0% no contiguos), 10860/155648 bloques
Tras finalizar la operación de movimiento, que puede llevar bastante tiempo, chequeamos el sistema de ficheros del LV afectado.
Veamos como aparecen PEs libres en /dev/sdb y ocupadas en /dev/sde1:
# pvdisplay -m
--- Physical volume ---
PV Name /dev/sdb
VG Name disco_virtual
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 24
Free PE 5
Allocated PE 19
PV UUID mHsm57-0CKQ-fBt7-VecZ-hR01-7e8F-jVUwKz
--- Physical Segments ---
Physical extent 0 to 18:
Logical volume /dev/disco_virtual/web
Logical extents 0 to 18
Physical extent 19 to 23:
FREE
--- Physical volume ---
PV Name /dev/sdc
VG Name disco_virtual
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 24
Free PE 10
Allocated PE 14
PV UUID Gtg7dE-k4YQ-nSgE-7KvZ-dbU2-Jrev-W1dBqf
--- Physical Segments ---
Physical extent 0 to 13:
Logical volume /dev/disco_virtual/web
Logical extents 24 to 37
Physical extent 14 to 23:
FREE
--- Physical volume ---
PV Name /dev/sde1
VG Name disco_virtual
PV Size 50,00 MiB / not usable 2,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 12
Free PE 7
Allocated PE 5
PV UUID 1H04tT-uiti-5obu-qO7r-DxUs-a6dd-DdnVuB
--- Physical Segments ---
Physical extent 0 to 4:
Logical volume /dev/disco_virtual/web
Logical extents 19 to 23
Physical extent 5 to 11:
FREE
Si el movimiento fuese dentro del mismo PV hay que usar la opción --alloc anywhere, por ejemplo, pasemos las 5 primeras PEs de /dev/sdc a sus 5 últimas PEs:
# pvmove --alloc anywhere /dev/sdc:0-4 /dev/sdc:19-23
/dev/sdc: Moved: 0,0%
/dev/sdc: Moved: 100,0%
# e2fsck -f /dev/disco_virtual/web
e2fsck 1.42.12 (29-Aug-2014)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura del directorio
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/disco_virtual/web: 12/38912 ficheros (0.0% no contiguos), 10860/155648 bloques
# pvdisplay -m /dev/sdc
--- Physical volume ---
PV Name /dev/sdc
VG Name disco_virtual
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 24
Free PE 10
Allocated PE 14
PV UUID Gtg7dE-k4YQ-nSgE-7KvZ-dbU2-Jrev-W1dBqf
--- Physical Segments ---
Physical extent 0 to 4:
FREE
Physical extent 5 to 13:
Logical volume /dev/disco_virtual/web
Logical extents 29 to 37
Physical extent 14 to 18:
FREE
Physical extent 19 to 23:
Logical volume /dev/disco_virtual/web
Logical extents 24 to 28
El comando pvmove también se puede utilizar para mover todos los datos de un PV a otro u otros PVs.
Vamos a añadir el dispositivo de bloque /dev/sdd a nuestro VG y posteriormente vamos a mover los datos del PV /dev/sdc:
# lvmdiskscan
/dev/disco_virtual/web [ 152,00 MiB]
/dev/sda1 [ 9,31 GiB]
/dev/sda2 [ 702,00 MiB]
/dev/sdb [ 100,00 MiB] LVM physical volume
/dev/sdc [ 100,00 MiB] LVM physical volume
/dev/sdd [ 100,00 MiB]
/dev/sde1 [ 50,00 MiB] LVM physical volume
/dev/sde2 [ 49,00 MiB]
2 disks
3 partitions
2 LVM physical volume whole disks
1 LVM physical volume
# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created
# lvmdiskscan
/dev/disco_virtual/web [ 152,00 MiB]
/dev/sda1 [ 9,31 GiB]
/dev/sda2 [ 702,00 MiB]
/dev/sdb [ 100,00 MiB] LVM physical volume
/dev/sdc [ 100,00 MiB] LVM physical volume
/dev/sdd [ 100,00 MiB] LVM physical volume
/dev/sde1 [ 50,00 MiB] LVM physical volume
/dev/sde2 [ 49,00 MiB]
1 disk
3 partitions
3 LVM physical volume whole disks
1 LVM physical volume
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb disco_virtual lvm2 a-- 96,00m 0
/dev/sdc disco_virtual lvm2 a-- 96,00m 40,00m
/dev/sdd lvm2 --- 100,00m 100,00m
/dev/sde1 disco_virtual lvm2 a-- 48,00m 48,00m
# vgextend disco_virtual /dev/sdd
Volume group "disco_virtual" successfully extended
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb disco_virtual lvm2 a-- 96,00m 0
/dev/sdc disco_virtual lvm2 a-- 96,00m 40,00m
/dev/sdd disco_virtual lvm2 a-- 96,00m 96,00m
/dev/sde1 disco_virtual lvm2 a-- 48,00m 48,00m
# pvmove /dev/sdc
/dev/sdc: Moved: 100,0%
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb disco_virtual lvm2 a-- 96,00m 0
/dev/sdc disco_virtual lvm2 a-- 96,00m 96,00m
/dev/sdd disco_virtual lvm2 a-- 96,00m 40,00m
/dev/sde1 disco_virtual lvm2 a-- 48,00m 48,00m
Vemos, que LVM ha decidido pasar todos los datos de /dev/sdc a /dev/sdd, pues en las circunstancias actuales, es el único PV donde caben los datos. Podríamos nosotros haber especificado el destino de la siguiente forma:
# pvmove /dev/sdc /dev/sdd
Si hubiésemos especificado como destino de los datos a /dev/sde1, hubiésemos obtenido un error por falta de espacio:
# pvmove /dev/sdc /dev/sde1
Insufficient free space: 14 extents needed, but only 12 available
Unable to allocate mirror extents for pvmove0.
Failed to convert pvmove LV to mirrored
Es posible también, mover solo las PEs de un PV que pertenezcan a un LV concreto:
# pvmove -n nombre_LV PV_origen PV_destino...Obra publicada con Licencia Creative Commons Reconocimiento 4.0