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

Particionar y cambiar el tamaño del volumen raíz EBS de una instancia AWS EC2

6 comentarios

Una de las pocas cosas que no me gustan del servicio EC2 de Amazon Web Services es que todas las imágenes o AMI’s disponibles a partir de las cuales lanzar una nueva instancia requieren un volumen raíz o root volume de un mínimo de 8 ó 10 GB y todos ellos cuentan además con una única partición donde se monta el sistema de ficheros raíz con todos sus directorios.

En mi artículo La importancia de particionar correctamente un disco en Linux ya discutí por qué este enfoque no me parece adecuado y en este artículo voy a abordar cómo dividir dichos volúmenes en varias particiones conservando el tamaño base de 8-10 GB o haciéndolos incluso más pequeños para ahorrar costes en caso de que queramos montar servidores más pequeños que no necesiten tanto espacio de almacenamiento.

Requerimientos previos

Para llevar a cabo este procedimiento es necesario contar con una instancia EC2 auxiliar aparte de aquella cuyo volumen raíz queramos particionar. Servirá cualquier tipo de instancia, por lo que podemos optar por la más económica disponible actualmente, la t2.nano. Dado que Amazon sólo nos cobrará por el tiempo que tardemos en ejecutar el procedimiento (unos 30 minutos) y luego terminaremos la instancia, el coste asociado será muy bajo.


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  Si ya disponemos de otra instancia EC2 corriendo en la misma región y zona de disponibilidad no será necesario crear una nueva, ya que podremos usar la existente para montar los volúmenes que vamos a necesitar más adelante. Estos montajes no tendrán ningún impacto significativo sobre el rendimiento ni la capacidad del servidor auxiliar que utilicemos, pero aún así no es recomendable usar uno en producción que sea crítico para nosotros, pues si nos equivocamos en algún paso podemos afectar el servicio que presta.

                  No es imprescindible, pero si muy recomendable, que la instancia auxiliar tenga la misma distribución y versión de Linux que la instancia que queremos particionar para que la instalación del cargador de arranque en el nuevo volumen sea lo más directa y exenta de problemas posible. Para el ejemplo de este artículo he utilizado una instancia Ubuntu 16.04.2 LTS.

                  Partimos por tanto con 2 instancias en ejecución: aquella que queremos particionar y la instancia auxiliar que voy a llamar AMI y AUX respectivamente, cada una con su correspondiente root volume: amiroot y auxroot.

                  Situación de partida: instancias AMI y AUX con sus respectivos volúmenes raíz

                  Situación de partida: instancias AMI y AUX con sus respectivos volúmenes raíz

                  Instancias EC2 de partida

                  Instancias EC2 de partida

                  Volúmenes EBS de partida

                  Volúmenes EBS de partida

                  1. Crear un nuevo volumen EBS

                  En nuestro ejemplo vamos a crear un volumen más pequeño (6 GB) que el tamaño por defecto de 8 GB que ofrece Amazon, pero podemos elegir el tamaño que más nos convenga, sea éste mayor o menor de 8 GB. Podemos aprovechar también para cifrar el nuevo volumen, ya que por defecto todos los volúmenes raíces que utilizan las AMI’s de Amazon no están encriptados.

                  Creación del nuevo volumen EBS a particionar

                  Creación del nuevo volumen EBS a particionar

                  Creación nuevo volumen cifrado inferior a 8 GB

                  Creación nuevo volumen cifrado inferior a 8 GB

                  Nuevo volumen creado no vinculado a ninguna instancia

                  Nuevo volumen creado no vinculado a ninguna instancia

                  2. Vincular volúmenes amiroot y myroot a la instancia auxiliar

                  Ahora desvincularemos el volumen amiroot de la instancia AMI y lo vincularemos a la instancia auxiliar AUX. Para ello es necesario detener primero la instancia AMI, ya que al ser su root volume no se puede desvincular sin pararla antes. Por el contrario, ambos volúmenes se pueden vincular a la instancia auxiliar en caliente sin ningún problema, pues su volumen raíz es auxroot y ese no lo tocaremos en ningún momento. Asignaremos el dispositivo /dev/sdf al volumen amiroot y el /dev/sdg a myroot.

                  Diagrama de la instancia auxiliar con los 3 volúmenes vinculados

                  Diagrama de la instancia auxiliar con los 3 volúmenes vinculados

                  Desvincular volumen amiroot de la instancia AMI

                  Desvincular volumen amiroot de la instancia AMI

                  Vincular volumen amiroot a la instancia auxiliar

                  Vincular volumen amiroot a la instancia auxiliar

                  3. Comprobar que la instancia auxiliar reconoce los nuevos volúmenes vinculados

                  Entraremos mediante SSH a la instancia auxiliar y comprobaremos que los nuevos volúmenes están disponibles con el comando lsblk:

                  ~$ ssh ubuntu@ec2-54-194-114-199.eu-west-1.compute.amazonaws.com -i ~/.ssh/awskey.pem 
                  Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-1020-aws x86_64)
                  ...
                  ...
                  ubuntu@ip-172-31-17-107:~$ lsblk 
                  NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
                  xvda    202:0    0   8G  0 disk  
                  └─xvda1 202:1    0   8G  0 part / 
                  xvdf    202:80   0   8G  0 disk  
                  └─xvdf1 202:81   0   8G  0 part  
                  xvdg    202:96   0   6G  0 disk

                  Si todo ha ido bien debería aparecer nuestro volumen amiroot como xvdf y myroot como xvdg. Como se puede observar, existe una partición /dev/xvdf1 de 8 GB ya creada que se corresponde con la partición que traía el volumen raíz de la instancia creada a partir de la AMI de Amazon. El volumen myroot como se ha creado desde cero no tiene todavía ninguna partición creada.

                  4. Crear esquema de particiones personalizado en el volumen myroot

                  Ha llegado el momento de particionar el volumen a nuestro gusto, que es realmente nuestro objetivo inicial. Si tienes dudas de qué particiones crear y qué tamaños asignar a cada una de ellas te recomiendo que eches un vistazo al siguiente artículo:

                  Lectura recomendada:
                    La importancia de particionar correctamente un disco en Linux

                  A continuación indico los comandos necesarios para establecer una tabla de particiones GPT, una partición de arranque BBP (BIOS Boot Partition) y el esquema de particionamiento deseado para nuestro volumen de 6 GB usando la herramienta parted:

                  ~# parted /dev/xvdg
                  GNU Parted 3.2 
                  Using /dev/xvdg 
                  Welcome to GNU Parted! Type 'help' to view a list of commands.
                  (parted) mklabel gpt
                  (parted) mkpart bbp 1MB 2MB
                  (parted) set 1 bios_grub on
                  (parted) mkpart root ext4 2MB 20%
                  (parted) mkpart swap linux-swap 20% 25%
                  (parted) mkpart home ext4 25% 30%
                  (parted) mkpart usr ext4 30% 65%
                  (parted) mkpart var ext4 65% 100%

                  Una vez creadas, la tabla de particiones debería mostrar un aspecto similar a este:

                  (parted) unit GiB                                                          
                  (parted) p                                                                 
                  Model: Xen Virtual Block Device (xvd) 
                  Disk /dev/xvdg: 6.00GiB 
                  Sector size (logical/physical): 512B/512B 
                  Partition Table: gpt 
                  Disk Flags:  
                   
                  Number  Start    End      Size     File system     Name  Flags 
                   1      0.00GiB  0.00GiB  0.00GiB                  bbp   bios_grub 
                   2      0.00GiB  1.20GiB  1.20GiB                  root 
                   3      1.20GiB  1.50GiB  0.30GiB  linux-swap(v1)  swap 
                   4      1.50GiB  1.80GiB  0.30GiB  ext4            home 
                   5      1.80GiB  3.90GiB  2.10GiB  ext4            usr 
                   6      3.90GiB  6.00GiB  2.10GiB  ext4            var

                  De cara a obtener un mejor rendimiento querremos comprobar si todas las particiones están alineadas de forma óptima conforme a la geometría del disco. En realidad esto sólo es necesario si hemos creado un volumen EBS tipo HDD, como los st1, sc1 o magnetic, pues los volúmenes gp2 e io1 usan discos SSD (puedes ver las características de los distintos tipos de volúmenes EBS de AWS en https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).

                  (parted) align-check optimal 1                                             
                  1 aligned 
                  (parted) align-check optimal 2 
                  2 aligned 
                  (parted) align-check optimal 3 
                  3 aligned 
                  (parted) align-check optimal 4 
                  4 aligned 
                  (parted) align-check optimal 5 
                  5 aligned
                  (parted) align-check optimal 6
                  6 aligned

                  No obstante, si has especificado el tamaño de las particiones usando porcentajes (%) en lugar de GB, MB o sectores no tendrás que preocuparte por esto porque parted siempre las alineará de forma óptima y el resultado de la comprobación anterior será siempre satisfactorio.


                  Error: Your Requested widget " ai_widget-6" is not in the widget list.
                  • [do_widget_area above-nav-left]
                    • [do_widget_area above-nav-right]
                      • [do_widget_area footer-1]
                        • [do_widget id="wpp-4"]
                      • [do_widget_area footer-2]
                        • [do_widget id="recent-posts-4"]
                      • [do_widget_area footer-3]
                        • [do_widget id="recent-comments-3"]
                      • [do_widget_area footer-4]
                        • [do_widget id="archives-4"]
                      • [do_widget_area logo-bar]
                        • [do_widget id="oxywidgetwpml-3"]
                      • [do_widget_area menu-bar]
                        • [do_widget id="search-3"]
                      • [do_widget_area sidebar]
                        • [do_widget id="search-4"]
                        • [do_widget id="ai_widget-2"]
                        • [do_widget id="categories-5"]
                        • [do_widget id="ai_widget-3"]
                        • [do_widget id="ai_widget-4"]
                        • [do_widget id="ai_widget-5"]
                      • [do_widget_area sub-footer-1]
                        • [do_widget id="text-4"]
                      • [do_widget_area sub-footer-2]
                        • [do_widget_area sub-footer-3]
                          • [do_widget_area sub-footer-4]
                            • [do_widget_area upper-footer-1]
                              • [do_widget id="search-2"]
                              • [do_widget id="recent-posts-2"]
                              • [do_widget id="recent-comments-2"]
                              • [do_widget id="archives-2"]
                              • [do_widget id="categories-2"]
                              • [do_widget id="meta-2"]
                            • [do_widget_area upper-footer-2]
                              • [do_widget_area upper-footer-3]
                                • [do_widget_area upper-footer-4]
                                  • [do_widget_area widgets_for_shortcodes]
                                    • [do_widget id="search-5"]
                                    • [do_widget id="ai_widget-6"]
                                  • [do_widget_area wp_inactive_widgets]
                                    • [do_widget id="wpp-2"]
                                    • [do_widget id="text-1"]
                                    • [do_widget id="recent-posts-3"]
                                    • [do_widget id="categories-3"]
                                    • [do_widget id="archives-3"]
                                    • [do_widget id="icl_lang_sel_widget-3"]

                                  Al salir de parted es posible que recibas el siguiente mensaje:

                                  (parted) quit
                                  Información: Puede que sea necesario actualizar /etc/fstab

                                  En ese caso, si no vemos el nuevo esquema de particiones con el comando lsblk tendremos que ejecutar el comando partprobe y a continuación ya debería mostrase correctamente:

                                  ~# lsblk                                             
                                  NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT 
                                  xvda    202:0    0    8G  0 disk  
                                  └─xvda1 202:1    0    8G  0 part / 
                                  xvdf    202:80   0    8G  0 disk  
                                  └─xvdf1 202:81   0    8G  0 part  
                                  xvdg    202:96   0    6G  0 disk  
                                  ├─xvdg1 202:97   0    1M  0 part  
                                  ├─xvdg2 202:98   0  1.2G  0 part  
                                  ├─xvdg3 202:99   0  307M  0 part  
                                  ├─xvdg4 202:100  0  307M  0 part  
                                  ├─xvdg5 202:101  0  2.1G  0 part  
                                  └─xvdg6 202:102  0  2.1G  0 part

                                  5. Formatear las nuevas particiones

                                  Una vez encontremos el esquema de particiones a nuestro gusto procederemos a formatearlas todas ellas excepto la partición de arranque BPP y la de swap. Usaremos el sistema de ficheros más estándar de Linux, el ext4:

                                  ~# for I in 2 4 5 6; do mkfs.ext4 /dev/xvdg${I}; done
                                  ...
                                  ...
                                  ~# mkswap /dev/xvdg3
                                  Setting up swapspace version 1, size = 307 MiB (321908736 bytes) 
                                  no label, UUID=1aad1fa2-188e-4b7a-8a0f-33f775cdd329

                                  6. Montar las particiones

                                  Montaremos todas aquellas particiones cuyo contenido nos interese replicar a partir del disco raíz de la AMI de partida, que serán la partición raíz (/), /home, /usr y /var del volumen myroot. También montaremos la partición raíz del volumen amiroot:

                                  ~# mkdir /mnt/amiroot
                                  ~# mkdir -p /mnt/myroot/root /mnt/myroot/home /mnt/myroot/usr /mnt/myroot/var
                                  
                                  ~# tree /mnt 
                                  /mnt 
                                  ├── amiroot 
                                  └── myroot 
                                      ├── home 
                                      ├── root 
                                      ├── usr 
                                      └── var 
                                   
                                  6 directories, 0 files
                                  
                                  ~# mount /dev/xvdf1 /mnt/amiroot
                                  ~# mount /dev/xvdg2 /mnt/myroot/root
                                  ~# mount /dev/xvdg4 /mnt/myroot/home
                                  ~# mount /dev/xvdg5 /mnt/myroot/usr
                                  ~# mount /dev/xvdg6 /mnt/myroot/var

                                  7. Sincronizar el contenido de amiroot en su correspondiente partición

                                  Sincronizaremos con rsync el contenido de los distintos directorios de la única partición del volumen raíz de la AMI de partida (amiroot) en sus correspondientes particiones asignadas. Hay que tener la precaución de no copiar en la nueva partición raíz el contenido de esos mismos directorios que ahora tienen una partición propia asignada, por lo que usaremos el parámetro –exclude de rsync. Dado que hemos excluido esos directorios, los crearemos manualmente, pero vacíos y con los permisos adecuados:

                                  ~# rsync -av /mnt/amiroot/home/ /mnt/myroot/home/
                                  ~# rsync -av /mnt/amiroot/usr/ /mnt/myroot/usr/
                                  ~# rsync -av /mnt/amiroot/var/ /mnt/myroot/var/
                                  ~# rsync -av --exclude=home --exclude=usr --exclude=var /mnt/amiroot/ /mnt/myroot/root/
                                  ~# mkdir /mnt/myroot/root/home;chmod 755 /mnt/myroot/root/home
                                  ~# mkdir /mnt/myroot/root/usr;chmod 755 /mnt/myroot/root/usr
                                  ~# mkdir /mnt/myroot/root/var;chmod 755 /mnt/myroot/root/var

                                  Es muy importante que llegados a este punto desmontemos la partición del volumen original amiroot y lo desvinculemos de la instancia auxiliar para que el instalador del cargador de arranque grub que ejecutaremos en el siguiente punto no detecte que hay otra partición bootable que no nos interesa que interfiera con la de nuestro nuevo volumen. No basta sólo con desmontarla con el comando umount, sino que será necesario también desconectarla de la instancia como hemos hecho anteriormente en el apartado 2.

                                  ~# sync && umount /mnt/amiroot

                                  8. Instalar el cargador de arranque grub en el nuevo volumen myroot

                                  Antes de hacerlo tendremos la precaución de deshabilitar los scripts /etc/grub.d/10_linux y /etc/grub.d/20_linux_xen porque pueden generar algún problema a la hora de detectar nuestra partición arrancable BPP. Para ello bastará con que añadamos el comando exit a la segunda línea de ambos ficheros, justo después de #! /bin/sh.


                                  Error: Your Requested widget " ai_widget-6" is not in the widget list.
                                  • [do_widget_area above-nav-left]
                                    • [do_widget_area above-nav-right]
                                      • [do_widget_area footer-1]
                                        • [do_widget id="wpp-4"]
                                      • [do_widget_area footer-2]
                                        • [do_widget id="recent-posts-4"]
                                      • [do_widget_area footer-3]
                                        • [do_widget id="recent-comments-3"]
                                      • [do_widget_area footer-4]
                                        • [do_widget id="archives-4"]
                                      • [do_widget_area logo-bar]
                                        • [do_widget id="oxywidgetwpml-3"]
                                      • [do_widget_area menu-bar]
                                        • [do_widget id="search-3"]
                                      • [do_widget_area sidebar]
                                        • [do_widget id="search-4"]
                                        • [do_widget id="ai_widget-2"]
                                        • [do_widget id="categories-5"]
                                        • [do_widget id="ai_widget-3"]
                                        • [do_widget id="ai_widget-4"]
                                        • [do_widget id="ai_widget-5"]
                                      • [do_widget_area sub-footer-1]
                                        • [do_widget id="text-4"]
                                      • [do_widget_area sub-footer-2]
                                        • [do_widget_area sub-footer-3]
                                          • [do_widget_area sub-footer-4]
                                            • [do_widget_area upper-footer-1]
                                              • [do_widget id="search-2"]
                                              • [do_widget id="recent-posts-2"]
                                              • [do_widget id="recent-comments-2"]
                                              • [do_widget id="archives-2"]
                                              • [do_widget id="categories-2"]
                                              • [do_widget id="meta-2"]
                                            • [do_widget_area upper-footer-2]
                                              • [do_widget_area upper-footer-3]
                                                • [do_widget_area upper-footer-4]
                                                  • [do_widget_area widgets_for_shortcodes]
                                                    • [do_widget id="search-5"]
                                                    • [do_widget id="ai_widget-6"]
                                                  • [do_widget_area wp_inactive_widgets]
                                                    • [do_widget id="wpp-2"]
                                                    • [do_widget id="text-1"]
                                                    • [do_widget id="recent-posts-3"]
                                                    • [do_widget id="categories-3"]
                                                    • [do_widget id="archives-3"]
                                                    • [do_widget id="icl_lang_sel_widget-3"]

                                                  A continuación eliminaremos el fichero /boot/grub/grub.cfg que era el que traía la AMI en origen para sustituirlo por uno adaptado a nuestro nuevo volumen recién particionado:

                                                  ~# rm /mnt/myroot/root/boot/grub/grub.cfg
                                                  ~# grub-mkconfig -o /mnt/myroot/root/boot/grub/grub.cfg

                                                  Ahora ya podemos instalar el cargador de arranque grub en nuestro nuevo disco de 6 GB:

                                                  ~# grub-install --target=i386-pc --directory=/mnt/myroot/usr/lib/grub/i386-pc --recheck --boot-directory=/mnt/myroot/root/boot /dev/xvdg

                                                  No olvidar volver a habilitar los scripts 10_linux y 20_linux_xen cuando hayamos terminado si hemos utilizado como instancia auxiliar un servidor que estemos usando para otro cometido. Si no dará igual porque al finalizar el procedimiento terminaremos la instancia y ésta se destruirá.

                                                  9. Reflejar en el fichero /etc/fstab las nuevas particiones

                                                  Primero será necesario obtener los identificadores UUID de las particiones con el comando blkid. Es mejor ejecutarlo como root porque si no no mostrará información de la partición de swap.

                                                  ~# blkid 
                                                  /dev/xvda1: LABEL="cloudimg-rootfs" UUID="567ab888-a3b5-43d4-a92a-f594e8653924" TYPE="ext4" PARTUUID="1a7d4c6a-01" 
                                                  /dev/xvdg2: UUID="286a4418-45b4-40c6-aece-6a4e1efd247a" TYPE="ext4" PARTLABEL="root" PARTUUID="56c0cfb6-20eb-4123-a766-420911980fb3" 
                                                  /dev/xvdg4: UUID="6e244eed-310f-4aae-aaa1-7ef549bbdbd1" TYPE="ext4" PARTLABEL="home" PARTUUID="bdbacb79-532b-410f-853e-f5530c4f9fa7" 
                                                  /dev/xvdg5: UUID="cceffcdd-1aeb-4aab-b8e0-7ac04893858c" TYPE="ext4" PARTLABEL="usr" PARTUUID="fbee2b01-9d41-4c16-bda6-a4b2abc02a04" 
                                                  /dev/xvdg6: UUID="b3fe50cb-b147-4b3b-b8ce-17ee445db64c" TYPE="ext4" PARTLABEL="var" PARTUUID="b4983050-a4e6-4d8a-9284-1a269a451d35"
                                                  /dev/xvdg3: UUID="1aad1fa2-188e-4b7a-8a0f-33f775cdd329" TYPE="swap" PARTLABEL="swap" PARTUUID="24eecaf3-4942-4ead-bab4-909e359dd5ae"
                                                  /dev/xvdg1: PARTLABEL="bbp" PARTUUID="916ca11f-db90-48d1-93d2-de6a99b60f40"

                                                  A continuación trasladaremos esos identificadores al fichero /mnt/myroot/root/etc/fstab así:

                                                  UUID=286a4418-45b4-40c6-aece-6a4e1efd247a  /      ext4   defaults,discard,noatime,errors=remount-ro      0 1
                                                  UUID=6e244eed-310f-4aae-aaa1-7ef549bbdbd1  /home  ext4   defaults,noatime,acl,user_xattr,nodev,nosuid    0 2
                                                  UUID=cceffcdd-1aeb-4aab-b8e0-7ac04893858c  /usr   ext4   defaults,noatime,nodev,errors=remount-ro        0 2
                                                  UUID=b3fe50cb-b147-4b3b-b8ce-17ee445db64c  /var   ext4   defaults,noatime,nodev,nosuid                   0 2
                                                  UUID=1aad1fa2-188e-4b7a-8a0f-33f775cdd329  swap   swap   defaults                                        0 0
                                                  tmpfs                                      /tmp   tmpfs  defaults,noatime,nodev,noexec,nosuid,size=256m  0 0

                                                  Si quieres saber más sobre el significado de las opciones de montaje que he utilizado te recomiendo de nuevo la lectura de mi artículo La importancia de particionar correctamente un disco en Linux.

                                                  10. Vincular el nuevo volúmen como root volume de la instancia que lanzamos a partir de la AMI

                                                  Como parte del último punto de este procedimiento desmontaremos todas las particiones que montamos anteriormente y desvincularemos el volumen myroot ya particionado, configurado y listo para el arranque de la instancia auxiliar para vincularlo a la instancia definitiva en la que será utilizado, en nuestro ejemplo la instancia AMI que lanzamos en un primer momento.

                                                  ~# sync && umount /mnt/myroot/root /mnt/myroot/home /mnt/myroot/usr /mnt/myroot/var

                                                  Es muy importante que cuando vinculemos el volumen myroot a la instancia EC2 indiquemos como dispositivo /dev/sda1 para indicar que se trata del root volume de la instancia,  ya que si no lo ponemos así tendremos problemas con el arranque del sistema operativo.

                                                  Si todo ha ido bien nuestra instancia arrancará normalmente y podremos ver en el log de sistema de la instancia EC2 el mensaje de login tal y como aparece en la tercera captura a continuación. Si algo va mal obtendremos más información del problema en ese mismo log.

                                                  Diagrama situacion final: instancia AMI con root volume vinculado

                                                  Diagrama situacion final: instancia AMI con root volume vinculado

                                                  Vincular volumen como root volume (/dev/sda1)

                                                  Vincular volumen como root volume (/dev/sda1)

                                                  Log del sistema de una instancia que ha arrancado satisfactoriamente

                                                  Log del sistema de una instancia que ha arrancado satisfactoriamente

                                                  Y eso es todo. Ahora si te conectas a la nueva instancia verás que todo es igual que antes, pero si haces un df -h verás que aparecen todas las particiones que has creado, y si ejecutas el comando free -h aparecerá una cantidad de swap equivalente al tamaño de la partición que creaste en el punto 4. No olvides terminar la instancia auxiliar si ya no la vas a utilizar para nada más.

                                                  ¡Qué disfrutes de tu nuevo sistema, que ahora es más seguro y está mejor preparado para hacer frente a cambios que se puedan presentar en el futuro!

                                                   

                                                  Sobre el autor

                                                  Daniel López Azaña
                                                  Arquitecto de soluciones Cloud AWS & Linux Sysadmin Freelance

                                                  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, AWSi, DevOps, DevSecOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

                                                  DanielParticionar y cambiar el tamaño del volumen raíz EBS de una instancia AWS EC2

                                                  Artículos relacionados

                                                  6 comentarios

                                                  Unirte a la conversación
                                                  • judith - 12/01/2019 responder

                                                    No funciona el proceso descrito. Testeado.
                                                    Aparece el mensaje: «dracut-initqueue timeout»

                                                    Daniel - 22/01/2019 responder

                                                    Ese mensaje creo que es propio de Red Hat/Centos/Fedora, mientras que el proceso descrito hace referencia a sistemas Debian/Ubuntu. Seguramente alguna sutil diferencia entre ambos tipos está provocando que grub no se instale bien y salga ese mensaje porque el sistema no puede arrancar correctamente. Necesitaría que me enviaras una captura de pantalla de la consola de la instancia EC2 y del registro del sistema, así como una descripción detallada de los pasos que has realizado para poder ayudarte.

                                                  • Pablo - 26/01/2020 responder

                                                    Hola, he seguido todos los pasos pero la instancia se queda en esta Inicializando y no arranca, no veo cual es el error ya que durante el proceso no lo refleja en ninguno de los pasos, en el ultimo paso cuando se esta creando el grub el que existe en el fichero fstab, según tus pasos no se añade la siguiente línea:
                                                    /dev/xvdg1: PARTLABEL=»bbp» PARTUUID=»cb70f2d3-465a-4b91-aef3-e067ff515d84″
                                                    Solamente estas:
                                                    UUID=»1ca2bc91-3569-4b9b-b3f1-7aa8ea24d090″ TYPE=»ext4″ PARTLABEL=»root» PARTUUID=»53ae296a-b2c6-4164-b1a7-689952402999″
                                                    UUID=»f6d03f8f-ac27-4a22-95e5-4048e37ed20e» TYPE=»swap» PARTLABEL=»swap» PARTUUID=»1fd4626e-9242-48dd-83f9-3f08afa9ebeb»
                                                    UUID=»84cbfbcf-0215-40fa-b318-84fce937e211″ TYPE=»ext4″ PARTLABEL=»home» PARTUUID=»27dc14ad-689b-4c67-befe-0e4ac093143a»
                                                    UUID=»0105a54d-0211-4ffa-9120-716881653775″ TYPE=»ext4″ PARTLABEL=»usr» PARTUUID=»b5b86ee6-2e43-42a3-8da5-bdb3b48fd8a0″
                                                    UUID=»2823d32a-a3aa-422d-82b9-51af50f7edd5″ TYPE=»ext4″ PARTLABEL=»var» PARTUUID=»48acd368-b0aa-4d57-a144-a269602edce0″

                                                    No se si el error puede estar ahí, en otro sitio no lo encuentro el contenido del fichero original del que tendría que copar los valores es el siguiente:
                                                    /dev/xvda1: LABEL=»cloudimg-rootfs» UUID=»651cda91-e465-4685-b697-67aa07181279″ TYPE=»ext4″ PARTUUID=»eeaf5908-01″
                                                    /dev/xvdf1: LABEL=»cloudimg-rootfs» UUID=»651cda91-e465-4685-b697-67aa07181279″ TYPE=»ext4″ PARTUUID=»eeaf5908-01″
                                                    /dev/loop0: TYPE=»squashfs»
                                                    /dev/loop1: TYPE=»squashfs»
                                                    /dev/loop2: TYPE=»squashfs»
                                                    /dev/xvdg1: PARTLABEL=»bbp» PARTUUID=»cb70f2d3-465a-4b91-aef3-e067ff515d84″
                                                    /dev/xvdg2: UUID=»1ca2bc91-3569-4b9b-b3f1-7aa8ea24d090″ TYPE=»ext4″ PARTLABEL=»root» PARTUUID=»53ae296a-b2c6-4164-b1a7-689952402999″
                                                    /dev/xvdg3: UUID=»f6d03f8f-ac27-4a22-95e5-4048e37ed20e» TYPE=»swap» PARTLABEL=»swap» PARTUUID=»1fd4626e-9242-48dd-83f9-3f08afa9ebeb»
                                                    /dev/xvdg4: UUID=»84cbfbcf-0215-40fa-b318-84fce937e211″ TYPE=»ext4″ PARTLABEL=»home» PARTUUID=»27dc14ad-689b-4c67-befe-0e4ac093143a»
                                                    /dev/xvdg5: UUID=»0105a54d-0211-4ffa-9120-716881653775″ TYPE=»ext4″ PARTLABEL=»usr» PARTUUID=»b5b86ee6-2e43-42a3-8da5-bdb3b48fd8a0″
                                                    /dev/xvdg6: UUID=»2823d32a-a3aa-422d-82b9-51af50f7edd5″ TYPE=»ext4″ PARTLABEL=»var» PARTUUID=»48acd368-b0aa-4d57-a144-a269602edce0″
                                                    Podrias ayudarme con este tema ??
                                                    Gracias

                                                  • Pablo - 02/02/2020 responder

                                                    No funciona he seguido todos los pasos y la maquina no arranca ni da error alguno, se queda en estado inicializando …., el ejercicio lo he hecho sobre un ubuntu 18.04 bionic

                                                  • ruben - 22/07/2021 responder

                                                    Hola Dani

                                                    sabes si sería posible en una Amazon Linux 1 (Centos6)? Hay comandos como el grub-mkconfig que no existen en esa distro.

                                                    Saludos

                                                  • Javi - 06/03/2022 responder

                                                    Hola,
                                                    Lo interesante sería poder tener una AMI que ya incluya estos cambios, sería posible hacer con packer o similar?
                                                    Gracias

                                                  Deja una respuesta

                                                  Tu dirección de correo electrónico no será publicada.