Aumentando el tamaño de una VM Linux con LVM

     ¿Alguna vez se os ha quedado una máquina sin espacio y no podíais borrar práctitamente nada?

     Escenario:

  • VMware ESXi 5.5
  • Sistema Operativo: Linux Ubuntu 14.04 LTS
  • LVM configurado (es la mejor opción para gestionar los discos, aumentar/reducir particiones, etc.)
  • Disco inicial 8GB

lvm01

     Observamos que el tamaño del disco aparece bloqueado (en gris). Eso puede ser por dos opciones:

  1. Que tengamos el disco duro configurado como IDE.
  2. Que tengamos snapshots de la máquina.

     Lo más común es que tengamos alguna instantánea de la máquina. Lo único que tenemos que hacer es borrarla y ya podremos modificar el tamaño del disco.

lvm02

     Hacemos clic en Delete ALL (en ese momento se consolidarán todas las snapshot y se quedará el linux con el último estado que tuviésemos).

lvm03

Como podéis observar, ya podemos modificar el tamaño. En este caso, aumentaremos a 16GB.

lvm04

     Todo esto lo hemos hecho con la máquina arrancada. Es el momento de reiniciarla. Normalmente no debería tardar más de 30 segundos en reiniciarse la máquina virtual.

     Tras arrancar hacemos un vgdisplay para ver la información del grupo de volúmenes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vgdisplay
--- Volume group ---
VG Name visualtis-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 7,76 GiB
PE Size 4,00 MiB
Total PE 1986
Alloc PE / Size 1978 / 7,73 GiB
Free PE / Size 8 / 32,00 MiB
VG UUID cEC1jz-uAdk-1eLv-z3cM-eQ5Y-0AYX-ekOavQ

     Vemos que en el espacio libre, aún no aparece el nuevo tamaño. Eso es normal, ya que ese nuevo espacio aún no está asignado.

     Para asignar ese espacio lo podemos hacer con parted, fdisk o gparted (al final el resultado será el mismo con todas).

     Voy a explicar en primer lugar el método por gparted para los más apegados al entorno gráfico.

     Si no lo tenemos instalado, lo primero que tendremos que hacer será instalar el gparted y las x11-server-utils.

1
# apt-get install -y gparted x11-xserver-utils

     Ahora entramos por SSH con la opción del X11 forwarding y permitimos en la VM lanzar las X desde cualquier host.

1
2
# xhost +
access control disabled, clients can connect from any host

 

     En ese momento ya podremos abrir gparted.

lvm05

     Y creamos la nueva partición

lvm06

lvm07

lvm08

Una vez creada, cerramos el gparted y extendemos nuestro grupo de volúmenes.

1
2
3
4
# vgextend visualtis-vg /dev/sda3
No physical volume label read from /dev/sda3
Physical volume "/dev/sda3" successfully created
Volume group "visualtis-vg" successfully extended

 

Comprobamos de nuevo nuestro grupo de volúmenes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vgdisplay visualtis-vg
--- Volume group ---
VG Name visualtis-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 15,76 GiB
PE Size 4,00 MiB
Total PE 4034
Alloc PE / Size 1978 / 7,73 GiB
Free PE / Size 2056 / 8,03 GiB
VG UUID cEC1jz-uAdk-1eLv-z3cM-eQ5Y-0AYX-ekOavQ

     Ahora vemos que tenemos 8GiB libres, así que ampliamos el espacio asignado con el 100% del espacio libre.

1
2
3
# lvresize -l +100%FREE /dev/visualtis-vg/root
Extending logical volume root to 14,76 GiB
Logical volume root successfully resized

Comprobamos el nuevo tamaño del grupo de volúmenes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vgdisplay
--- Volume group ---
VG Name visualtis-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 15,76 GiB
PE Size 4,00 MiB
Total PE 4034
Alloc PE / Size 4034 / 15,76 GiB
Free PE / Size 0 / 0
VG UUID cEC1jz-uAdk-1eLv-z3cM-eQ5Y-0AYX-ekOavQ

     Pero, nuestra partición aún no tiene asignado el nuevo espacio como podemos observar:

1
2
3
# df -h
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/visualtis--vg-root 15G 1,6G 13G 12% /

     Lo único que queda por hacer ahora es ampliar el espacio de nuestra partición y comprobar que todo ha ido bien:

1
2
3
4
5
# resize2fs /dev/visualtis-vg/root
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/visualtis-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/visualtis-vg/root is now 3869696 blocks long.

# df -h
S.ficheros                     Tamaño Usados  Disp Uso% Montado en
/dev/mapper/visualtis–vg-root    15G   1,6G   13G  12% /

 

     Ni siquiera os hará falta reiniciar, ya disponéis de todo ese espacio libre!.

 


 

     Como os dije anteriormente, os enseño también la opción de fdisk, que es bastante más rápida para el que está acostumbrado a la línea de comando. Aunque en este caso hemos añadido un segundo disco virtual. No hemos extendido el ya existente.

     Creamos la nueva partición con todas las opciones por defecto (cuando no veáis una letra después de los dos puntos es porque le di a la tecla intro directamente).

1
2
3
4
5
6
7
8
9
10
11
12
13
# fdisk /dev/sdb
Orden (m para obtener ayuda): n
Tipo de partición:
p primaria (0 primaria, 0 extendida, 4 libre)
e extendido
Seleccione (predeterminado p):
Uso predeterminado de la respuesta p
Número de partición (1-4, valor predeterminado 1):
Se está utilizando el valor predeterminado 1
Primer sector (2048-16777215, valor predeterminado 2048):
Se está utilizando el valor predeterminado 2048
Último sector, +sectores o +tamaño{K,M,G} (2048-16777215, valor predeterminado 16777215):
Se está utilizando el valor predeterminado 16777215

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.
Se están sincronizando los discos.

# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (4-Feb-2014)
Etiqueta del sistema de ficheros=
OS type: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096896 blocks
104844 blocks (5.00%) reserved for the super user
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=2147483648
64 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: hecho
Escribiendo las tablas de nodos-i: hecho
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Después de eso extendemos nuestro grupo de volúmenes

1
2
3
4
# vgextend visualtis-vg /dev/sdb1
No physical volume label read from /dev/sdb1
Physical volume "/dev/sdb1" successfully created
Volume group "visualtis-vg" successfully extended

Y todo lo demás exactamente igual.

 

Espero que os haya resultado util!