25 votos

Reducción de tamaño del volumen Amazon EBS

He visto esta respuesta para crecientes volúmenes de EBS, pero me gustaría reducir uno.

El valor por defecto Ubuntu Server imágenes son 15 GB mientras que realmente necesito sólo 2 GB máximo (yo uso diferente al volumen de datos). ¿Hay una manera de reducir el tamaño del volumen?

27voto

Aaron Puntos 321

Yo tenía la misma pregunta que tú, así que he trabajado cómo hacerlo.

En primer lugar, esto lo hice desde el Ubuntu de 32 bits EBS-ami con copia de seguridad de los EEUU-Oriente de la región, en otros sistemas operativos o las imágenes pueden funcionar de manera diferente. Sin embargo, sospecho que usted debería estar bien, siempre y cuando usted está utilizando una ext* sistema de archivos. Puede que funcione en otros sistemas de ficheros, pero vas a tener que averiguar cómo cambiar el tamaño de las mismas en el propio.

Los pasos son básicamente los siguientes:

  1. Adjuntar dos volúmenes a una instancia en ejecución, el primero basado en la instantánea que desea reducir, y el segundo en blanco volumen de contar con el nuevo tamaño que desea reducir.

  2. Comprobar el sistema de archivos del primer volumen y reparar los errores.

  3. Reducir el sistema de archivos en el primer volumen de lo que es sólo tan grande como tiene que ser para contener los datos.

  4. Copie el archivo de sistema desde el primer volumen de la segunda.

  5. Ampliar el sistema de archivos en el segundo volumen al máximo tamaño.

  6. Asegúrese de que todo se ve bien marcando el segundo volumen de los errores.

  7. Tomar una instantánea del segundo volumen.

  8. Crear una imagen de máquina en función de la instantánea en el segundo volumen que acaba de hacer.

Primero se necesita para obtener algo de información de la ami que se desea reducir. En particular, usted necesita el kernel de IDENTIFICACIÓN y el disco ram de IDENTIFICACIÓN, en su caso (el de la imagen he encogido no tienen un disco ram). Toda esta información debe estar disponible en la consola de administración de aws ,en el AMI de la ventana.

El núcleo de IDENTIFICACIÓN se parece a kia-xxxxxxxx, y el IDENTIFICADOR de instantánea se ve como complemento xxxxxxxx, y el disco ram Identificadores de aspecto RIA-xxxxxxxx.

A continuación, inicie una instancia de linux. Me lanzó una Ubuntu instancia. Usted puede utilizar un t1.micro ejemplo, si te gusta. No se necesita mucho poder para hacer estos pasos.

Después de que la máquina está en funcionamiento, adjuntar la instantánea que escribió desde el primer paso. En mi caso, os adjunto a /dev/sdf

A continuación, cree un nuevo volumen, teniendo el tamaño que desee. En mi caso, he creado un 5GB de volumen, ya que es el tamaño que yo quería para reducirlo. No crear este nuevo volumen a partir de una instantánea. Necesitamos un nuevo blanco de volumen. Siguiente, adjuntar a la instancia de ejecución, en mi caso, he adjuntado como /dev/sdg

Siguiente, ssh en la máquina pero no montar los volúmenes adjuntos.

En este punto, me equivocó en el lado de la paranoia, y he optado para comprobar el sistema de archivos en el volumen grande, sólo para asegurarse de que no hubiera errores. Si está seguro de que no hay ninguno, puede omitir este paso:

$ sudo e2fsck -f /dev/sdf

A continuación, me cambia el tamaño del sistema de archivos de gran volumen, de modo que era tan grande como los datos en el disco:

$ sudo resize2fs -M -p /dev/sdf

La-M se reduce, y el-p imprime el progreso.

El resize2fs debe decirle cómo es de grande el shrunkin sistema de archivos. En mi caso, me dio el tamaño en bloques de 4 kb.

Ahora copia el shrunkin sistema de archivo para el nuevo disco. Vamos a copiar los datos en 16 trozos, así que tenemos que averiguar cómo muchos de 16MB trozos necesitamos copiar. Es allí donde el reducido tamaño del sistema de archivos que viene en handey.

En mi caso, el reducido sistema de archivos era de poco más de 1 GB, porque yo había instalado una gran cantidad de otros programas en el sistema Ubuntu antes de tomar una instantánea. Yo probablemente podría haber llegado lejos con tan solo copiar el tamaño del sistema de archivos se redondea a la unidad más cercana de 16 mb, pero yo quería jugar a lo seguro.

Así, 128 veces 16MB trozos = 2GB:

$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128

He copiado en bloques de 16 MB, porque con EBS, usted paga por cada uno leer y escribir, así que quería reducir el número de ellos tanto como sea posible. No sé si hacerlo de esta forma, lo hizo, pero probablemente no duele.

A continuación, necesitamos cambiar el tamaño del sistema de archivos que hemos copiado al nuevo volumen para que se utiliza todo el espacio disponible en el volumen.

$ sudo resize2fs -p /dev/sdg

Finalmente, verificación, para asegurarse de que todo está bien:

$ sudo e2fsck -f /dev/sdg

Eso es todo lo que necesitamos hacer en este equipo, a pesar de que no podía herir a montar el nuevo volumen, así como una prueba. Sin embargo, este paso es casi seguro opcional, como e2fsck debe haber capturado los problemas.

Ahora necesitamos una instantánea del volumen de nuevo, y crear una AMI basado en él. Hemos terminado con la máquina, así que usted puede terminar si te gusta.

Asegúrese de que el pequeño volumen se desmonta si se han montado, y, a continuación, tomar una instantánea de la misma. De nuevo, usted puede hacer esto en la consola de administración.

El último paso requiere de la línea de comandos ec2 herramientas.

EDITAR:

Desde esta respuesta fue publicado de la consola de AWS le permite simplemente haga clic derecho en una instantánea y seleccione Crear Imagen de la Instantánea. Usted todavía necesita para seleccionar el Kernel apropiado ID. Si no aparece en la lista, asegúrese de que ha seleccionado la arquitectura apropiada.

Utilizamos el ec2-registro solicitud de registro de un AMI basado en la instantánea que acaba de hacer, así que escribir el complemento xxxxxxxx valor de la instantánea que tomó.

A continuación, usted debe utilizar un comando como:

ec2-register -C cert.pem -K sk.pem -n The_Name_of_Your_New_Image
-d Your_Description_of_This_New_AMI --kernel aki-xxxxxxxx
-b "/dev/sda1=snap-xxxxxxxx" --root-device-name /dev/sda1

Por supuesto, que deba reemplazar el núcleo de IDENTIFICACIÓN con la que escribió en el comienzo y el IDENTIFICADOR de instantánea con la que usted ha creado en el paso anterior. También es necesario apuntar a su clave secreta (llamado sk.pem) anterior, y su x509 cert (llamado cert.pem). Por supuesto, puedes elegir lo que quieras para el nombre y la descripción.

Espero que esto ayude.

0voto

kasdega Puntos 101

Yo quería reducir el tamaño del volumen que se utiliza por un general de la instancia de EC2. He seguido pasos similares a los de otras respuestas aquí, pero se encontró con un problema. Así que aquí está lo que he tenido que hacer para reducir mi volumen de la root...

En la Consola de AWS

 1. Stop the source EC2 instance
 2. Create a snapshot of the volume you want to shrink
 3. Use the snapshot to create a new 'source' volume
 4. Created a new volume with smaller size (made sure it was big enough for the data on source)
 5. Attached both volumes to any EC2 instance (mine were /dev/sdf = source & /dev/sdg = target)
 6. Start the EC2 instance

En la instancia de EC2

 7. sudo su -   (everything from here is run as root)
 8. mkdir /source /target
 9. mount -t ext4 /dev/sdf /source
 10. mkfs.ext4 /dev/sdg
 11. mount -t ext4 /dev/sdg /target
 12. rsync -aHAXxSP /source/ /target 
     ** notice that there is no trailing '/' after target if 
       you put one there your data will be copied to 
       /target/source and you will have to move it up a directory
 13. cat /boot/grub/grub.conf  (indicated that grub is using root=LABEL=/)
 14. cat /source/etc/fstab (indicated that fstab was also using LABEL=/)
 15. e2label /dev/sdg /
 16. umount /source
 17. umount /target

De vuelta en la Consola de AWS

 18. Stop the instance
 19. Detach ALL volumes from the instance
 20. Attach the 'target' volume to the instance using /dev/sda1 as the device
 21. Start the instance

Aquí es donde nos topamos con el problema de que no ha sido mencionado como puedo encontrar. La instancia comenzó bien, genial! Pero cuando traté de ssh a la instancia, no podía conectarse. Después de muchas variaciones de los pasos anteriores, finalmente me decidí a probar el uso de la root de volumen de un recién girar instancia de EC2.

En la Consola de AWS

 1. Create a new EC2 instance with the right sized root volume
 2. Stop the new instance
 3. Detach the /dev/sda1 volume from the new instance
    ** used the 'source' volume from before & the new volume we just detached
 4. Attached both volumes to the original EC2 instance (/dev/sdf & /dev/sdg)
 5. Start the instance with the attached volumes

En la instancia de EC2

 1. sudo su - 
 2. mkdir /source /target (only need to do this if you don't already have these directories)
 3. mount -t ext4 /dev/sdf /source
 4. mount -t ext4 /dev/sdg /target (no need to create a file system because it is already there)
 5. rsync -aHAXxSP /source/ /target 
 6. umount /source
 7. umount /target

De vuelta en la Consola de AWS

 1. Stop the instance
 2. Detach the 'source' and 'target' volumes from instance
 3. Attach the 'target' volume to the instance from step 1 using /dev/sda1 as the device
 4. Start the instance
 5. ** we use an elastic IP so we just reassigned the IP to the new instance

Espero que esto ayude a alguien

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: