En EC2 el disco no está atado al tamaño de la máquina: se puede agrandar cuando quieras, incluso con la máquina encendida, sin reinstalar ni mover nada. Son dos partes: decirle a AWS que el disco es más grande, y decirle al sistema operativo de dentro que lo aproveche. La primera es un clic; la segunda, dos comandos que asustan la primera vez y después se hacen de memoria.
Lo único que no se puede es encoger: un disco solo crece. Así que amplía con cabeza.
Antes de empezar: qué significa cada cosa
- EBS
- El servicio de discos de EC2. Cada disco se llama volumen.
- Volumen raíz
- El disco donde está instalado el sistema. Es el que suele llenarse.
- Partición
- Una división dentro del disco. Al agrandar el disco, la partición sigue del tamaño antiguo hasta que la amplías.
- Sistema de ficheros
- La forma en que el sistema organiza los datos dentro de la partición (ext4 o xfs en Linux). También hay que ampliarlo.
- gp3
- El tipo de disco normal de EBS. Si tu disco es del tipo antiguo (gp2), puedes cambiarlo a gp3 en el mismo paso y suele salir más barato.
- Instantánea
- Una copia del disco. Conviene hacer una antes de tocar el disco, por si acaso.
Paso a paso
Haz una instantánea antes
Consola de EC2, menú Volúmenes, selecciona el disco de la máquina (la columna "Adjunto a" dice cuál es), Acciones, Crear instantánea. Es la red de seguridad; en la práctica el proceso es seguro, pero gratis no cuesta nada... bueno, unos céntimos de almacenamiento.
Amplía el volumen desde la consola
Con el volumen seleccionado, Acciones, Modificar volumen. Pon el tamaño nuevo en GB (por ejemplo de 20 a 40) y, si el tipo es gp2, aprovecha para cambiarlo a gp3. Modificar. El estado del volumen pasa a "modifying" y después a "optimizing"; no hace falta esperar a que termine la optimización para seguir, en cuanto el tamaño nuevo aparece en la lista ya puedes continuar. Ten en cuenta que AWS solo permite modificar un volumen una vez cada seis horas.
Mira cómo está el disco por dentro
Conéctate por SSH a la máquina y escribe:
lsblk df -h /El primer comando muestra el disco (
xvdaonvme0n1) ya con el tamaño nuevo, y debajo su partición (xvda1onvme0n1p1) todavía con el tamaño antiguo. El segundo muestra cuánto espacio ve el sistema: el antiguo. Apunta los nombres exactos de disco y partición.Amplía la partición
sudo growpart /dev/xvda 1Ojo a la sintaxis: el disco y un espacio y el número de partición. Con discos NVMe sería
sudo growpart /dev/nvme0n1 1. Si dice quegrowpartno existe, instálalo (sudo apt install cloud-guest-utilsen Ubuntu/Debian). Vuelve a ejecutarlsblk: la partición ya ocupa todo el disco.Amplía el sistema de ficheros
Depende del tipo, que te dice
df -T /. Si es ext4 (Ubuntu, Debian):sudo resize2fs /dev/xvda1Si es xfs (Amazon Linux, Red Hat):
sudo xfs_growfs -d /Ambos funcionan con el disco en uso, sin reiniciar. Comprueba con
df -h /: ahora el sistema ve el tamaño nuevo.Si el disco no es el raíz
Para un disco de datos adicional, los pasos 4 y 5 son iguales cambiando el nombre del dispositivo. Si el disco no tiene partición (lo formateaste directamente sobre
/dev/xvdf), sáltategrowparty ejecuta directamenteresize2fs /dev/xvdfoxfs_growfssobre su punto de montaje.
Qué puede salir mal
growpart dice "NOCHANGE"
O la partición ya ocupa todo el disco (ve al paso 5), o el sistema todavía no ha visto el tamaño nuevo del disco. Espera un minuto, repite lsblk y, si sigue sin verlo, reinicia la máquina.
No tengo espacio ni para ejecutar los comandos
Con el disco al 100 % algunos comandos fallan. Libera unos megas borrando registros antiguos (sudo journalctl --vacuum-size=50M) o la caché de paquetes (sudo apt clean) y vuelve a intentarlo.
Me he equivocado y he puesto un tamaño enorme
No se puede encoger. La única salida es crear una máquina nueva con un disco menor y migrar los datos. Si el exceso es asumible, déjalo y aprende para la próxima: pon lo que necesites para un año.
Quiero ampliar otra vez y no me deja
Hay que esperar seis horas desde la última modificación del volumen. Es una limitación de AWS.
En Simplio
En Simplio cada máquina muestra la ocupación de su disco y te avisa por correo cuando pasa del 85 %, antes de que la web deje de funcionar. Ampliarlo es un botón: eliges el tamaño nuevo, Simplio hace una instantánea previa, modifica el volumen en AWS y ejecuta en la máquina los comandos para que el sistema use el espacio, y te enseña el resultado. Sin terminal.
Lo mismo, en AWS y en Simplio
| En la consola de AWS | En Simplio | |
|---|---|---|
| Agrandar el disco | Consola EC2, Volúmenes, Modificar, SSH, lsblk, growpart, resize2fs: 7 pasos y una terminal | Botón "Ampliar disco" en la máquina: eliges el tamaño y Simplio hace lo de AWS y lo de dentro |
| Enterarte de que se llena | Nada avisa hasta que algo falla | Aviso por correo al 85 % de ocupación |
| Instantánea previa | Acordarse | Se hace sola antes de ampliar |