GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Cómo ampliar el tamaño de un volumen EBS y de una partición ext4 en AWS

No hay comentarios

Logo AWS EBSCuando se nos llena completamente el sistema de ficheros de una partición ext4 alojada en un volumen EBS de Amazon Web Services y no podemos hacer nada por liberar espacio al no querer perder ninguno de los datos almacenados, el único remedio que nos queda es ampliar el volumen y hacer crecer la partición asociada hasta el 100% de su capacidad para disponer nuevamente de espacio libre de almacenamiento.

Partimos en nuestro ejemplo de un volumen de 50 GB lleno al 100% que queremos ampliar a uno nuevo del doble de tamaño, 100 GB:

~# df -h /var/respaldo
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdg1       50G   47G     0 100% /var/respaldo
~# lsblk | grep xvdg
xvdg    202:96   0   50G  0 disk 
└─xvdg1 202:97   0   50G  0 part

Estos son los pasos para conseguirlo:

1. Desmontar sistema de ficheros

El primer paso consistirá en desmontar el sistema o sistemas de ficheros que haya funcionando en ese momento sobre nuestro volumen EBS:

~# sync
~# umount /var/respaldo

2. Desvincular el volumen de su instancia

A continuación localizaremos en la consola de Amazon el volumen y lo desvincularemos de su instancia:

Desvincular volumen de una instancia

Podemos hacer lo mismo también desde la línea de comandos (AWS CLI):

~# aws ec2 describe-instances --region eu-west-1 --filters Name=tag-key,Values="Name" Name=tag-value,Values="*gnadmin*" | grep InstanceId
                    "InstanceId": "i-02ed7d0bda0768883",
~# aws ec2 describe-volumes --region eu-west-1 --filters Name=attachment.instance-id,Values=i-02ed7d0bda0768883 --filters Name=tag-key,Values="Name" Name=tag-value,Values="*respaldo*" --query 'Volumes[*].{ID:VolumeId,Tag:Tags}'
[
    {
        "Tag": [
            {
                "Key": "Name",
                "Value": "gnadmin11 - /var/respaldo"
            }
        ],
        "ID": "vol-0ca0db0a8d60f1aa5"
    }
]
~# aws ec2 detach-volume --volume-id vol-0ca0db0a8d60f1aa5
{
    "AttachTime": "2016-12-01T18:19:50.000Z",
    "InstanceId": "i-02ed7d0bda0768883",
    "VolumeId": "vol-0ca0db0a8d60f1aa5",
    "State": "detaching",
    "Device": "/dev/sdg"
}

Como puede verse, el estado del volumen cuando lanzamos el comando anterior es detaching. Tendremos que esperar a que pase a estado available para poder continuar con el procedimiento, pero no te preocupes, es prácticamente instantáneo:

~# aws ec2 describe-volumes --region eu-west-1 --volume-id vol-0ca0db0a8d60f1aa5 | grep State
            "State": "available",

3. Crear snapshot del volumen

Tomaremos una “foto” del estado del volumen actual con todo su contenido creando un snapshot o instantánea:

Creación de snapshot o instantánea de un volumen
Progreso de la creación de un snapshot desde la consola de AWS

Podemos conseguir el mismo resultado con el comando create-snapshot de aws-cli:

~# aws ec2 create-snapshot --region eu-west-1 --volume-id vol-0ca0db0a8d60f1aa5 --description "Backup temporal /var/respaldo" | grep SnapshotId

En este caso tendremos que esperar bastante tiempo a que termine, sobre todo en volúmenes de grandes dimensiones. Mientras tanto podemos consultar el progreso con el siguiente comando:

~# aws ec2 describe-snapshots --region eu-west-1 --snapshot-id snap-008c4162b8fb6b76d | egrep "Progress|State"
            "State": "pending",
            "Progress": "27%",

4. Crear nuevo volumen de mayor tamaño a partir del snapshot creado

Tal y como había indicado al principio, vamos a crear ahora un volumen mayor de 100 GB a partir del snapshot que hemos tomado en el punto anterior. El tipo de volumen del ejemplo es magnetic, pero puedes seleccionar el tipo que mejor se adapte al uso que vayas a darle:

Creación de volúmen a partir de snapshot desde la consola de AWS - Paso 1
Creación de volúmen a partir de snapshot desde la consola de AWS - Paso 2

Para hacer lo mismo desde la línea de comandos ejecutaremos lo siguiente:

~# aws ec2 create-volume --size 100 --region eu-west-1 --availability-zone eu-west-1a --snapshot-id snap-008c4162b8fb6b76d --volume-type standard 
{ 
    "Size": 100, 
    "SnapshotId": "snap-008c4162b8fb6b76d", 
    "Encrypted": true, 
    "VolumeType": "standard", 
    "AvailabilityZone": "eu-west-1a", 
    "VolumeId": "vol-0b87a40a0ff017f69", 
    "CreateTime": "2017-05-23T14:01:25.890Z", 
    "State": "creating" 
}

5. Vincular el nuevo volumen a la instancia

Una vez creado el volumen y que éste haya pasado a estado available ya estará disponible para ser vinculado a la instancia desde la consola de AWS:

Vincular volumen a instancia desde la consola de AWS - Paso 1
Vincular volumen a instancia desde la consola de AWS - Paso 2

O desde la línea de comandos:

~# aws ec2 attach-volume --volume-id vol-0b87a40a0ff017f69 --instance-id i-02ed7d0bda0768883 --device /dev/sdg 
{ 
    "VolumeId": "vol-0b87a40a0ff017f69", 
    "InstanceId": "i-02ed7d0bda0768883", 
    "Device": "/dev/sdg", 
    "AttachTime": "2017-05-23T14:35:26.200Z", 
    "State": "attaching" 
}

6. Redimensionar partición para hacerla crecer hasta el 100% del espacio disponible

Tras vincular el nuevo volumen a la instancia, podemos ver con el comando lsblk como el volumen tiene ahora un tamaño de 100 GB, pero la partición que teníamos sigue siendo de 50 GB:

~# lsblk | grep xvdg 
xvdg    202:96   0  100G  0 disk  
└─xvdg1 202:97   0   50G  0 part

Por ello ahora será necesario redimensionarla para aumentar su tamaño a 100 GB de forma que se aproveche el 100% del espacio disponible. Puede ser necesario desmontar previamente el sistema de ficheros, ya que el sistema operativo realiza el montaje automáticamente tras la vinculación del volumen a la instancia si encuentra la información necesaria de la partición en el fichero /etc/fstab:

~# umount /var/respaldo
~# parted /dev/xvdg resizepart 1 100%
Warning: Not all of the space available to /dev/xvdg appears to be used, you can fix the GPT to use all of the space (an extra 104857600 blocks) or continue with the current setting?  
Fix/Ignore? Fix
Information: You may need to update /etc/fstab.
~# lsblk | grep xvdg 
xvdg    202:96   0  100G  0 disk  
└─xvdg1 202:97   0  100G  0 part /var/respaldo

7. Redimensionar el sistema de ficheros ext4 hasta el 100% de la partición

Del mismo modo que era necesario redimensionar la partición para que ocupe el 100% del volumen, ahora hay que hacer lo mismo con el sistema de ficheros con el que está formateada la partición, ext4 en nuestro ejemplo. Podremos conseguirlo usando el comando resize2fs:

~# resize2fs /dev/xvdg1 
resize2fs 1.42.13 (17-May-2015) 
Filesystem at /dev/xvdg1 is mounted on /var/respaldo; on-line resizing required 
old_desc_blocks = 4, new_desc_blocks = 7 
The filesystem on /dev/xvdg1 is now 26214139 (4k) blocks long.

8. Comprobar opcionalmente la integridad del sistema de ficheros

Aunque el redimensionamiento que realiza el comando resize2fs es muy seguro y es improbable que ocurra una corrupción de datos, no viene mal realizar una verificación completa del sistema de ficheros antes de volver a utilizarlo. Previamente puede ser necesario desmontarlo, pues de nuevo se habrá montado automáticamente tras el redimensionamiento con resize2fs:

~# fsck.ext4 -f /dev/xvdg1 
e2fsck 1.42.13 (17-May-2015) 
Pass 1: Checking inodes, blocks, and sizes 
Pass 2: Checking directory structure 
Pass 3: Checking directory connectivity 
Pass 4: Checking reference counts 
Pass 5: Checking group summary information 
/dev/xvdg1: 610218/6553600 files (0.2% non-contiguous), 12654908/26214139 blocks

9. Montar el sistema de ficheros

Por último montaremos el sistema de ficheros y podremos comprobar cómo ahora su ocupación ha bajado al 50% y disponemos de casi 50 GB de espacio adicional, que era nuestro objetivo inicial:

~# mount /dev/xvdg1
~# df -h /dev/xvdg1
Filesystem      Size  Used Avail Use% Mounted on 
/dev/xvdg1       99G   47G   48G  50% /var/respaldo


 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, DevOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielCómo ampliar el tamaño de un volumen EBS y de una partición ext4 en AWS

Artículos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.