Ampliación y reducción de los LVs
La ampliación y reducción de los LVs es una de las flexibilidades que nos aporta LVM con respecto al almacenamiento tradicional. Los comandos que podemos usar para tal fin son los siguientes:
- lvextend: Permite ampliar el tamaño de un LV mediante las opciones -L, --size, -l, --extents.
- lvreduce: Permite reducir el tamaño de un LV mediante las opciones -L, --size, -l, --extents.
- lvresize: Permite hacer ambas cosas, tanto la ampliación como la reducción, y se usan las opciones -L, --size, -l, --extents. El valor de estas opciones pueden llevar el signo + o el signo -, para indicar aumento o disminución del tamaño, respectivamente. Un valor sin signo indica un valor absoluto.
Tanto si se amplía o se reduce el tamaño de un LV, tendremos que redimensionar el sistema de ficheros, lo cual haremos con el comando resize2fs para extN o fsadm para extN, ReiserFS y XFS, pero los tres comandos anteriores incorporan las opciones -r y --resizefs para hacer lo mismo que resize2fs o fsadm, pero en un solo paso, a la vez que ampliamos o reducimos el LV.
Si lo que queremos es ampliar el tamaño de un LV, primero tendremos que aumentar LV y después redimensionar el sistema de ficheros, pero si lo que queremos es reducir el tamaño de un LV, entonces actuaremos al contrario, primero redimensionaremos el sistema de ficheros disminuyéndolo y posteriormente reduciremos el LV. El sistema de ficheros nunca puede ser más grande que el dispositivo donde reside.
Otro punto, muy importante a recordar, está relacionado con el montaje y desmontaje de los LVs que se van a redimensionar debido las características del sistema de ficheros que contengan. No todos los sistemas de ficheros permiten que su tamaño se cambie con facilidad sin perder información, por lo que habrá que consultar la documentación para saber si son obligatorias o no las operaciones de montaje y desmontaje de los sistemas de ficheros que van a cambiar.
Los sistemas de ficheros ext3, ext4 y XFS pueden ampliarse sin desmontarlos, pero sí hay que desmontarlos para reducirlos (XFS no se puede reducir). El ext2 siempre habrá que desmontarlo, tanto para ampliarlo como para reducirlo. Es con el sistema de ficheros ReiserFS cuando nunca tendremos la obligación de desmontarlo.
Vamos ahora a aumentar el LV que estamos utilizando como ejemplo:
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-a----- 152,00m
# vgs
VG #PV #LV #SN Attr VSize VFree
disco_virtual 3 1 0 wz--n- 240,00m 88,00m
Disponemos del LV de nombre web y de tamaño 152 MB, que se encuentra en el VG de nombre disco_virtual y tamaño 240 MB. Lo que pretendemos es aumentar el LV a 200 MB, ya que, supuestamente, se nos está quedando pequeño. Podemos hacerlo usando el comando lvextend o lvresize. Empezaremos mostrando el tamaño del sistema de ficheros y terminaremos haciendo lo mismo para ver que lo hemos ampliado.
# mount -t ext4 /dev/disco_virtual/web /mnt
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 144M 1,9M 131M 2% /mnt
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-ao---- 152,00m
# lvextend -L 200m disco_virtual/web
Size of logical volume disco_virtual/web changed from 152,00 MiB (38 extents) to 200,00 MiB (50 extents).
Logical volume web successfully resized
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-ao---- 200,00m
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 144M 1,9M 131M 2% /mnt
# resize2fs /dev/disco_virtual/web
resize2fs 1.42.12 (29-Aug-2014)
El sistema de ficheros de /dev/disco_virtual/web está montado en /mnt; hace falta cambiar el tamaño en línea
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/disco_virtual/web is now 204800 (1k) blocks long.
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 190M 1,9M 176M 2% /mnt
Podríamos haber hecho lo mismo usando otras sintaxis de lvextend o usando el comando lvresize. Por ejemplo:
# lvextend -L +50m /dev/disco_virtual/web
# resize2fs /dev/disco_virtual/web
# lvresize -L 200m /dev/disco_virtual/web
# resize2fs /dev/disco_virtual/web
# lvresize -L +50m disco_virtual/web
# resize2fs /dev/disco_virtual/web
Con -r o --resizefs podríamos haberlo hecho todo en una sola línea con cualquiera de los dos comandos anteriores, y es lo recomendable, por ejemplo:
# lvresize -L 200m --resizefs /dev/disco_virtual/web
fsck de util-linux 2.25.2
/dev/mapper/disco_virtual-web: 12/38912 ficheros (0.0% no contiguos), 10860/155648 bloques
Size of logical volume disco_virtual/web changed from 152,00 MiB (38 extents) to 200,00 MiB (50 extents).
Logical volume web successfully resized
resize2fs 1.42.12 (29-Aug-2014)
Cambiando el tamaño del sistema de ficheros en /dev/mapper/disco_virtual-web a 204800 (1k) bloques.
The filesystem on /dev/mapper/disco_virtual-web is now 204800 (1k) blocks long.
Se podría haber hecho la ampliación habiendo solicitado que las PEs se cojan de /dev/sde1, como vemos en el ejemplo, donde se ha ampliado solo 30 MB para que haya espacio suficiente en el dispositivo físico elegido, si hubiésemos puesto 50 MB de ampliación, el comando lvextend o lvresize hubieran fallado.
# 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/sde1 disco_virtual lvm2 a-- 48,00m 48,00m
# lvextend -L +30M -r /dev/disco_virtual/web /dev/sde1
Rounding size to boundary between physical extents: 32,00 MiB
fsck de util-linux 2.25.2
/dev/mapper/disco_virtual-web: 12/38912 ficheros (0.0% no contiguos), 10860/155648 bloques
Size of logical volume disco_virtual/web changed from 152,00 MiB (38 extents) to 184,00 MiB (46 extents).
Logical volume web successfully resized
resize2fs 1.42.12 (29-Aug-2014)
Cambiando el tamaño del sistema de ficheros en /dev/mapper/disco_virtual-web a 188416 (1k) bloques.
The filesystem on /dev/mapper/disco_virtual-web is now 188416 (1k) blocks long.
# 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/sde1 disco_virtual lvm2 a-- 48,00m 16,00m
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-a----- 184,00m
Si lo que queremos es reducir un LV, algo menos frecuente, lo podemos hacer con lvreduce o lvresize, pero antes, con extN hay que desmontar el sistema de ficheros, chequearlo y reducirlo, tras esto ya podemos reducir el LV, aunque la opción -r o --resizefs podría hacerse todo junto menos el desmontado. Hagamos un ejemplo reduciendo el LV a 100 MB.
# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 09db078f-57e4-4d86-9d2b-918da1f2da0a /
└─sda2 swap 4fab3948-c9a2-4a42-8527-686296fab931 [SWAP]
sdb LVM2_member mHsm57-0CKQ-fBt7-VecZ-hR01-7e8F-jVUwKz
└─disco_virtual-web ext4 8a9a5cdf-fb7b-4341-8a18-ce030fd96a64 /mnt
sdc LVM2_member Gtg7dE-k4YQ-nSgE-7KvZ-dbU2-Jrev-W1dBqf
└─disco_virtual-web ext4 8a9a5cdf-fb7b-4341-8a18-ce030fd96a64 /mnt
sdd
sde
├─sde1 LVM2_member 1H04tT-uiti-5obu-qO7r-DxUs-a6dd-DdnVuB
└─sde2
sr0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-ao---- 152,00m
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 144M 1,9M 131M 2% /mnt
# umount /mnt
# lvresize -L -52m --resizefs /dev/disco_virtual/web
fsck de util-linux 2.25.2
/dev/mapper/disco_virtual-web: 12/38912 ficheros (0.0% no contiguos), 10860/155648 bloques
resize2fs 1.42.12 (29-Aug-2014)
Cambiando el tamaño del sistema de ficheros en /dev/mapper/disco_virtual-web a 102400 (1k) bloques.
The filesystem on /dev/mapper/disco_virtual-web is now 102400 (1k) blocks long.
Size of logical volume disco_virtual/web changed from 152,00 MiB (38 extents) to 100,00 MiB (25 extents).
Logical volume web successfully resized
# mount -t ext4 /dev/disco_virtual/web /mnt
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 93M 1,9M 84M 3% /mnt
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-ao---- 100,00m
Si usamos lvreduce y sin la opción --resizefs, la instrucción lvresize la sustituiríamos por:
# vgs
VG #PV #LV #SN Attr VSize VFree
disco_virtual 3 1 0 wz--n- 240,00m 88,00m
# 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
# resize2fs /dev/disco_virtual/web 100M
resize2fs 1.42.12 (29-Aug-2014)
Cambiando el tamaño del sistema de ficheros en /dev/disco_virtual/web a 102400 (1k) bloques.
The filesystem on /dev/disco_virtual/web is now 102400 (1k) blocks long.
# lvreduce -L 100m /dev/disco_virtual/web
WARNING: Reducing active logical volume to 100,00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce web? [y/n]:
Do you really want to reduce web? [y/n]: y
Size of logical volume disco_virtual/web changed from 152,00 MiB (38 extents) to 100,00 MiB (25 extents).
Logical volume web successfully resized
# mount -t ext4 /dev/disco_virtual/web /mnt
# df -h /mnt
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/disco_virtual-web 93M 1,9M 84M 3% /mnt
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
web disco_virtual -wi-a----- 100,00m
# vgs
VG #PV #LV #SN Attr VSize VFree
disco_virtual 3 1 0 wz--n- 240,00m 140,00m
Observamos que el espacio que le hemos reducido al LV se ha incorporado al espacio libre de su VG.
Obra publicada con Licencia Creative Commons Reconocimiento 4.0