Cuando 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:
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:
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:
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:
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 <strong>50G</strong> 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 <strong>100G</strong> 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 <strong>48G 50%</strong> /var/respaldo 



Comentarios
Enviar comentario