Si trabajamos con Amazon Web Services, uno de los servicios que usaremos sin duda es EC2. Con EC2 podremos crear instancias (máquinas virtuales) con gran facilidad, y estas, están directamente ligadas al uso de volúmenes EBS (discos virtuales).
Una de las dudas con las que me encuentro a menudo usando instancias EC2 con volúmenes EBS, es elegir bien la capacidad que asignar al disco basándome en el uso que le voy a dar a esa instancia. Si que es verdad que podemos mas a o menos calcularlo, pero a veces nos podemos quedar cortos, ya que nunca sabes si en un futuro vas a implementar algo que pueda requerir mucho espacio… como una base de datos que puede ir creciendo.
Para evitar esto, y no tener que asignar muchísimo espacio que no vamos a usar a corto plazo (ya que el coste esta directamente relacionado con la capacidad asignada a un disco EBS) la mejor solución es usar LVM (Logical Volume Manager).
A continuación voy a explicar los pasos a seguir, mas comunes, para gestionar volúmenes EBS sobre una instancia EC2 ya creada.

CREAR UN VOLUMEN EBS
1. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
2. Pulsamos en “Create Volume”
3. Asignamos la capacidad del disco EBS, la zona de disponibilidad, no seleccionamos ninguna snapshot y dejamos el tipo de volumen en “Standard”
4. En pocos segundos ya tendremos nuestro disco creado y disponible para usarlo donde queramos
ADJUNTAR UN VOLUMEN EBS
1. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
2. Seleccionamos el disco que queremos adjuntar, pulsamos en “More…” y seleccionamos “Attach Volume”
3. En la siguiente ventana, seleccionamos la instancia a la que queremos adjuntar el disco y pulsamos “Yes, Attach”
MONTAR UN VOLUMEN EBS QUE HEMOS ADJUNTADO (EBS CREADO DE CERO, SIN DATOS)
1. Accedemos mediante SSH a la instancia.
2. Buscamos el nombre del disco para el sistema (si es el primera, seguramente serà “xvdj”):

fidsk -l

3. Usamos la herramienta FDISK con el disco:

fdisk /dev/xvdj

4. Creamos una nueva partición usando toda la capacidad, para ello seguimos esos pasos en la aplicación:

[n --> p --> 1 --> ENTER --> ENTER --> w]

5. Formateamos el disco con el sistema de ficheros que queremos (en este caso, EXT4):

mkfs -t ext4 /dev/xvdj1

6. Creamos el directorio donde montaremos el disco (en este caso uno para backups):

mkdir /mnt/backups

7. Montamos el disco en el directorio (en este caso lo hacemos con la partición 1 que hemos creado en este disco, que es la unica que tiene):

mount /dev/xvdj1 /mnt/backups

8. Verificamos que se ha comentado correctamente:

mount -l

9. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:

echo "/dev/xvdj1 /mnt/backups auto defaults,nobootwait 0 0" >> /etc/fstab

MONTAR UN VOLUMEN EBS QUE HEMOS ADJUNTADO (EBS EXTRAIDO DE OTRA INSTANCIA, CON DATOS)
1. Accedemos mediante SSH a la instancia.
2. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdj”):

fdisk -l

4. Creamos el directorio donde montaremos el disco (en este caso uno que ya contiene backups):

mkdir /mnt/backups

5. Montamos el disco en el directorio (en este caso lo hacemos con la partición 1, que es la unica que tiene):

mount /dev/xvdj1 /mnt/backups

6. Verificamos que se ha comentado correctamente:

mount -l

7. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:

echo "/dev/xvdj1 /mnt/backups auto defaults,nobootwait 0 0" >> /etc/fstab

QUITAR UN VOLUMEN EBS DE UNA INSTANCIA EC2
1. Buscamos donde esta montado el disco:

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvde1 985G 552G 383G 60% /
tmpfs 17G 0 17G 0% /dev/shm
/dev/xvdj 1008G 437G 521G 46% /mnt/backups

2. Desmontamos el disco del directorio (nos aseguramos previamente que no se esta usando ni nos encontramos dentro del directorio):

umount /mnt/backups

3. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
4. Seleccionamos el disco que queremos quitar, pulsamos en “More…” y seleccionamos “Dettach Volume”
EXPANDIR EL DISCO BASE DE UNA INSTANCIA
Si tenemos una instancia con x GB de disco, y queremos ampliar el disco base, simplemente creamos una AMI de la instancia, y creamos una nueva instancia con esa AMI. En el proceso de creación aumentaremos la capacidad del disco, pero una vez creada, si accedemos a la instancia veremos que seguimos teniendo la misma capacidad en el disco montado en la raíz, para poder acceder al resto de capacidad deberemos crear una sola partición y redimensionarla, siguiendo los pasos que dejo a continuación
1. Accedemos mediante SSH a la instancia.
2. Usamos la herramienta FDISK con el disco:

fdisk /dev/xvde

3. Eliminamos todas las particiones (si existen):

[d --> 1]

4. Creamos una nueva partición usando toda la capacidad, para ello seguimos esos pasos en la aplicación:

[n --> p --> 1 --> ENTER --> ENTER --> a --> 1 --> w]

5. Reiniciamos la instancia:

reboot

6. Accedemos mediante SSH a la instancia de nuevo, ya que se habrá cortado la conexión reiniciando.
7. Nos aseguramos de que la partición 1 del disco está montada en la raíz del sistema :

cat /etc/fstab
/dev/xvde1 / ext4 defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0

8. Finalmente redimensionamos la partición:

resize2fs /dev/xvde

AÑADIR UN DISCO NUEVO CON LVM
1. Seguimos los pasos de la guía “CREAR UN VOLUMEN EBS” y “ADJUNTAR UN VOLUMEN EBS”
2. Accedemos mediante SSH a la instancia.
3. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdj”):

fdisk -l

4. Instalamos LVM (si no lo tenemos instalado):

yum -y install lvm2

5. Cremos una partición usando todo el disco:

fdisk /dev/xvdj
[n --> p --> 1 --> ENT --> ENT --> w]

6. Inicializamos el volúmen físico para usar LVM:

pvcreate /dev/xvdj1

7. Vemos las características del volúmen físico que hemos inicializado:

pvdisplay

8. Creamos un grupo de volúmen para el disco y le llamamos “vgdatabase”:

vgcreate vgdatabase /dev/xvdj1

9. Vemos las características del grupo de volúmen que hemos creado:

vgdisplay

10. Creamos un volumen lógico con el 100% del espacio del grupo de volúmen y le llamamos “lvdatabase”:

lvcreate -l 100%FREE -n lvdatabase vgdatabase

11. Formatemos el disco con el sistema de ficheros EXT4:

mkfs.ext4 /dev/mapper/vgdatabase-lvdatabase

12. Creamos el directorio donde montaremos el disco:

mkdir /mnt/mysql

13. Montamos el disco:

mount /dev/mapper/vgdatabase-lvdatabase /mnt/mysql

14. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:

echo "/dev/mapper/vgdatabase-lvdatabase /mnt/mysql ext4 defaults,noatime,nodiratime 0 0" >> /etc/fstab

EXPANDIR UN DISCO CON LVM CON OTRO DISCO
1. Seguimos los pasos de la guía “CREAR UN VOLUMEN EBS” y “ADJUNTAR UN VOLUMEN EBS”
2. Accedemos mediante SSH a la instancia.
3. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdk”):

fidsk -l

4. Cremos una partición usando todo el disco:

fdisk /dev/xvdk
[n --> p --> 1 --> ENT --> ENT --> w]

5. Inicializamos el volúmen físico para usar LVM:

pvcreate /dev/xvdk1

6. Extendemos el grupo de volumen “vgdatabase” (que hemos creado en el primer disco) con la partición 1 del disco que acabamos de añadir:

vgextend vgdatabase /dev/sdk1

7. Extendemos el volúmen lógico:

lvextend -l +100%FREE /dev/vgdatabase/lvdatabase

8. Finalmente redimensionamos la partición:

resize2fs /dev/vgdatabase/lvdatabase