Ich hatte die gleiche Frage wie Sie, also habe ich herausgefunden, wie es geht.
Zuerst habe ich dies mit dem 32-Bit-EBS-gestützten Ubuntu-Ami aus der Region USA-Ost gemacht. Andere Betriebssysteme oder Images funktionieren möglicherweise anders. Ich vermute jedoch, dass Sie in Ordnung sein sollten, solange Sie ein ext * -Dateisystem verwenden. Es könnte auf anderen Dateisystemen funktionieren, aber Sie müssen selbst herausfinden, wie Sie die Größe ändern können.
Die Schritte sind im Grunde:
Hängen Sie zwei Volumes an eine ausgeführte Instanz an. Das erste basiert auf dem zu verkleinernden Snapshot und das zweite auf einem leeren Volume mit der neuen Größe, auf die Sie verkleinern möchten.
Überprüfen Sie das Dateisystem des ersten Volumes und beheben Sie alle Fehler.
Verkleinern Sie das Dateisystem auf dem ersten Volume, sodass es nur so groß ist, wie es für die Speicherung der Daten erforderlich ist.
Kopieren Sie das Dateisystem vom ersten auf den zweiten Datenträger.
Erweitern Sie das Dateisystem auf dem zweiten Volume auf seine maximale Größe.
Stellen Sie sicher, dass alles gut aussieht, indem Sie das zweite Volume auf Fehler überprüfen.
Machen Sie einen Schnappschuss des zweiten Volumens.
Erstellen Sie ein Maschinen-Image basierend auf dem Schnappschuss des zweiten Volumes, das Sie gerade aufgenommen haben.
Sie müssen zuerst einige Informationen von dem Ami erhalten, den Sie verkleinern möchten. Insbesondere benötigen Sie die Kernel-ID und ggf. die Ramdisk-ID (das von mir geschrumpfte Image hatte keine Ramdisk). Alle diese Informationen sollten über die aws-Verwaltungskonsole im AMI-Fenster verfügbar sein.
Die Kernel-ID sieht aus wie kia-xxxxxxxx, und die Snapshot-ID sieht aus wie snap-xxxxxxxx, und Ramdisk-IDs sehen aus wie RIA-xxxxxxxx.
Starten Sie als Nächstes eine Linux-Instanz. Ich habe eine Ubuntu-Instanz gestartet. Sie können eine Instanz von t1.micro verwenden, wenn Sie möchten. Es braucht nicht viel Kraft, um diese nächsten Schritte auszuführen.
Fügen Sie nach dem Start des Computers den Schnappschuss an, den Sie vom ersten Schritt an notiert haben. In meinem Fall habe ich es an / dev / sdf angehängt
Erstellen Sie dann ein neues Volume mit der gewünschten Größe. In meinem Fall habe ich ein 5-GB-Volume erstellt, da dies die Größe ist, auf die ich es verkleinern wollte. Erstellen Sie dieses neue Volume nicht aus einem Snapshot. Wir brauchen ein neues leeres Volume. Als nächstes hängen Sie es an die laufende Instanz an. In meinem Fall habe ich es als / dev / sdg angehängt
Als nächstes ssh in den Rechner, aber mounten Sie die angehängten Volumes nicht.
Zu diesem Zeitpunkt habe ich mich auf der Seite der Paranoia geirrt und mich dafür entschieden, das Dateisystem auf dem großen Datenträger zu überprüfen, um sicherzustellen, dass keine Fehler aufgetreten sind. Wenn Sie sicher sind, dass es keine gibt, können Sie diesen Schritt überspringen:
$ sudo e2fsck -f /dev/sdf
Als Nächstes habe ich das Dateisystem auf dem großen Volume so angepasst, dass es nur so groß ist wie die Daten auf der Festplatte:
$ sudo resize2fs -M -p /dev/sdf
Das -M verkleinert es und das -p gibt den Fortschritt aus.
Das resize2fs sollte Ihnen sagen, wie groß das verkleinerte Dateisystem ist. In meinem Fall gab es mir die Größe in 4K-Blöcken.
Wir kopieren nun das Shrunkin-Dateisystem auf die neue Festplatte. Wir werden die Daten in 16-MB-Blöcke kopieren, also müssen wir herausfinden, wie viele 16-MB-Blöcke wir kopieren müssen. Hier kommt die Größe des verkleinerten Dateisystems ins Spiel.
In meinem Fall betrug das verkleinerte Dateisystem etwas mehr als 1 GB, da ich viele andere Programme auf dem grundlegenden Ubuntu-System installiert hatte, bevor ich einen Schnappschuss machte. Ich hätte es wahrscheinlich vermeiden können, die Größe des Dateisystems auf die nächsten 16 MB aufgerundet zu kopieren, aber ich wollte auf Nummer sicher gehen.
Also, 128 mal 16 MB Chunks = 2 GB:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
Ich habe in Blöcken von 16 MB kopiert, weil Sie bei EBS für jedes Lesen und Schreiben zahlen, und deshalb wollte ich die Anzahl so gering wie möglich halten. Ich weiß nicht, ob das so ist, aber es hat wahrscheinlich nicht wehgetan.
Wir müssen dann die Größe des Dateisystems ändern, das wir gerade auf das neue Volume kopiert haben, damit es den gesamten verfügbaren Speicherplatz auf dem Volume nutzt.
$ sudo resize2fs -p /dev/sdg
Überprüfen Sie abschließend, ob alles in Ordnung ist:
$ sudo e2fsck -f /dev/sdg
Das ist alles, was wir in dieser Maschine tun müssen, obwohl es nicht schaden könnte, das neue Volume nur als Test zu mounten. Dieser Schritt ist jedoch mit ziemlicher Sicherheit optional, da e2fsck Probleme haben sollte.
Wir müssen jetzt einen Schnappschuss des neuen Volumes erstellen und einen darauf basierenden AMI erstellen. Wir sind mit der Maschine fertig, also können Sie sie beenden, wenn Sie möchten.
Stellen Sie sicher, dass das kleine Volume nicht gemountet ist, wenn Sie es gemountet haben, und machen Sie dann einen Schnappschuss. Auch dies können Sie in der Verwaltungskonsole tun.
Der letzte Schritt erfordert die Kommandozeilen-Tools von ec2.
BEARBEITEN:
Da diese Antwort veröffentlicht wurde, können Sie in der AWS-Konsole einfach mit der rechten Maustaste auf einen Schnappschuss klicken und "Bild aus Schnappschuss erstellen" auswählen. Sie müssen weiterhin die entsprechende Kernel-ID auswählen. Wenn es nicht in der Liste angezeigt wird, vergewissern Sie sich, dass Sie die entsprechende Architektur ausgewählt haben.
Wir verwenden die ec2-register-Anwendung, um ein AMI auf der Grundlage des gerade aufgenommenen Schnappschusses zu registrieren. Notieren Sie sich daher den Wert für snap-xxxxxxxx aus dem gerade aufgenommenen Schnappschuss.
Sie sollten dann einen Befehl verwenden wie:
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
Sie müssen natürlich die Kernel-ID durch die zu Beginn notierte und die Snapshot-ID durch die im vorherigen Schritt erstellte ID ersetzen. Sie müssen es auch auf Ihren oben genannten geheimen Schlüssel (sk.pem) und Ihr x509-Zertifikat (cert.pem) verweisen. Sie können natürlich wählen, was Sie für den Namen und die Beschreibung wollen.
Hoffe das hilft.