J'avais la même question que vous, alors j'ai trouvé comment le faire.
Tout d'abord, je l'ai fait à partir de l'ami Ubuntu 32 bits soutenu par EBS de la région USA-Est, d'autres systèmes d'exploitation ou images peuvent fonctionner différemment. Cependant, je soupçonne que vous devriez être d'accord, tant que vous utilisez un système de fichiers ext *. Cela pourrait fonctionner sur d'autres systèmes de fichiers, mais vous devrez trouver comment les redimensionner par vous-même.
Les étapes sont essentiellement:
Attachez deux volumes à une instance en cours d'exécution, le premier basé sur l'instantané que vous souhaitez réduire et le second un volume vierge ayant la nouvelle taille que vous souhaitez réduire.
Vérifiez le système de fichiers du premier volume et réparez les erreurs.
Rétrécissez le système de fichiers sur le premier volume afin qu'il ne soit aussi grand que nécessaire pour contenir les données.
Copiez le système de fichiers du premier volume au second.
Développez le système de fichiers du deuxième volume jusqu'à sa taille maximale.
Assurez-vous que tout semble bon en vérifiant le deuxième volume pour les erreurs.
Prenez un instantané du deuxième volume.
Créez une image de machine basée sur l'instantané du deuxième volume que vous venez de prendre.
Vous devez d'abord obtenir des informations de l'ami que vous souhaitez réduire. En particulier, vous avez besoin de l'ID du noyau et de l'ID du disque virtuel, le cas échéant (l'image que j'ai rétrécie n'avait pas de disque virtuel). Toutes ces informations devraient être disponibles à partir de la console de gestion aws, dans la fenêtre AMI.
L'ID du noyau ressemble à kia-xxxxxxxx, et l'ID d'instantané ressemble à snap-xxxxxxxx, et les ID de disque virtuel ressemblent à RIA-xxxxxxxx.
Ensuite, lancez une instance Linux. J'ai lancé une instance Ubuntu. Vous pouvez utiliser une instance t1.micro si vous le souhaitez. Il ne faut pas beaucoup de pouvoir pour effectuer ces prochaines étapes.
Une fois la machine en cours d'exécution, joignez l'instantané que vous avez noté à la première étape. Dans mon cas, je l'ai attaché à / dev / sdf
Ensuite, créez un nouveau volume, ayant la taille souhaitée. Dans mon cas, j'ai créé un volume de 5 Go, car c'est la taille à laquelle je voulais le réduire. Ne créez pas ce nouveau volume à partir d'un instantané. Nous avons besoin d'un nouveau volume vierge. Ensuite, attachez-le à l'instance en cours d'exécution, dans mon cas, je l'ai attaché en tant que / dev / sdg
Ensuite, ssh dans la machine mais ne montez pas les volumes attachés.
À ce stade, je me suis trompé du côté de la paranoïa, et j'ai choisi de vérifier le système de fichiers sur le grand volume, juste pour m'assurer qu'il n'y avait pas d'erreurs. Si vous êtes sûr qu'il n'y en a pas, vous pouvez ignorer cette étape:
$ sudo e2fsck -f /dev/sdf
Ensuite, j'ai redimensionné le système de fichiers sur le grand volume afin qu'il soit seulement aussi volumineux que les données sur le disque:
$ sudo resize2fs -M -p /dev/sdf
Le -M le réduit et le -p imprime la progression.
Resize2fs devrait vous indiquer la taille du système de fichiers shrunkin. Dans mon cas, cela m'a donné la taille en blocs 4K.
Nous copions maintenant le système de fichiers shrunkin sur le nouveau disque. Nous allons copier les données en blocs de 16 Mo, nous devons donc déterminer combien de blocs de 16 Mo nous devons copier. C'est là que cette taille réduite du système de fichiers entre en jeu.
Dans mon cas, le système de fichiers réduit faisait un peu plus de 1 Go, car j'avais installé beaucoup d'autres programmes sur le système Ubuntu de base avant de prendre un instantané. J'aurais probablement pu m'en tirer en copiant simplement la taille du système de fichiers arrondie au 16 Mo le plus proche, mais je voulais jouer en toute sécurité.
Donc, 128 fois des morceaux de 16 Mo = 2 Go:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
J'ai copié en blocs de 16 Mo car avec EBS, vous payez pour chaque lecture et écriture, donc je voulais en minimiser le plus possible le nombre. Je ne sais pas si le faire de cette façon l'a fait, mais cela n'a probablement pas fait de mal.
Nous devons ensuite redimensionner le système de fichiers que nous venons de copier sur le nouveau volume afin qu'il utilise tout l'espace disponible sur le volume.
$ sudo resize2fs -p /dev/sdg
Enfin, vérifiez-le, pour vous assurer que tout va bien:
$ sudo e2fsck -f /dev/sdg
C'est tout ce que nous devons faire dans cette machine, bien que cela ne puisse pas nuire au montage du nouveau volume, juste comme test. Cependant, cette étape est presque certainement facultative, car e2fsck aurait dû détecter des problèmes.
Nous devons maintenant prendre un instantané du nouveau volume et créer une AMI en fonction de celui-ci. Nous avons terminé avec la machine, vous pouvez donc y mettre fin si vous le souhaitez.
Assurez-vous que le petit volume n'est pas monté si vous l'avez monté, puis prenez-en un instantané. Encore une fois, vous pouvez le faire dans la console de gestion.
La dernière étape nécessite les outils ec2 en ligne de commande.
MODIFIER:
Depuis que cette réponse a été publiée, la console AWS vous permet de simplement cliquer avec le bouton droit sur un instantané et de sélectionner Créer une image à partir d'un instantané. Vous devrez toujours sélectionner l'ID de noyau approprié. S'il n'apparaît pas dans la liste, assurez-vous d'avoir sélectionné l'architecture appropriée.
Nous utilisons l'application ec2-register pour enregistrer une AMI en fonction de l'instantané que vous venez de prendre, alors notez la valeur snap-xxxxxxxx de l'instantané que vous venez de prendre.
Vous devez ensuite utiliser une commande comme:
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
Vous devez bien sûr remplacer l'ID du noyau par celui que vous avez noté au début et l'ID de l'instantané par celui que vous avez créé à l'étape précédente. Vous devez également le pointer vers votre clé secrète (appelée sk.pem) ci-dessus et votre certificat x509 (appelé cert.pem). Vous pouvez bien sûr choisir ce que vous voulez pour le nom et la description.
J'espère que cela t'aides.