Das Vergrößern einer EC2-Instanz ist einfach wie ein Atemzug (erstellen Sie beispielsweise eine AMI, starten Sie eine Instanz davon und ändern Sie dann die Speichergröße).
Das Reduzieren wird jedoch schwieriger. Ich möchte die Größe eines EBS-Stammvolumes (Elastic Block Store) einer Amazon Web Services (AWS) EC2-Instanz reduzieren. Es gibt ein paar alte High-Level-Verfahren im Netz. Die detailliertere Version, die ich gefunden habe, ist eine einjährige Antwort auf eine StackOverflow-Frage: Wie kann ich meine EBS-Volumenkapazität reduzieren? Die Schritte haben ein ziemlich hohes Niveau:
Erstellen Sie ein neues EBS-Volume mit der gewünschten Größe (z. B. / dev / xvdg).
Starten Sie eine Instanz und hängen Sie beide EBS-Volumes an
Überprüfen Sie das Dateisystem (des ursprünglichen Root-Volumes): (zB) e2fsck -f / dev / xvda1
Verkleinere das ursprüngliche Root-Volume maximal: (zB ext2 / 3/4) resize2fs -M -p / dev / xvda1
Kopieren Sie die Daten mit dd:
Wähle eine Blockgröße (ich mag 16MB)
Berechnen Sie die Anzahl der Chunks (unter Verwendung der Anzahl der Blöcke aus der Ausgabe von resize2fs): blocks * 4 / (chunk_size_in_mb * 1024) - Runden Sie aus Sicherheitsgründen ein bisschen auf
Kopieren Sie die Daten: (zB) dd if = / dev / xvda1 ibs = 16M von = / dev / xvdg obs = 16M count = 80
Ändern Sie die Größe des Dateisystems auf dem neuen (kleineren) EBS-Volume: (z. B.) resize2fs -p / dev / xvdg
Überprüfen Sie das Dateisystem (des ursprünglichen Root-Volumes): (zB) e2fsck -f / dev / xvdg
Trennen Sie Ihr neues EBS-Root-Volume und hängen Sie es an Ihre ursprüngliche Instanz an
Ich kann keine detaillierte schrittweise Anleitung finden.
Mein EBS-Root-Volume ist an eine HVM-Ubuntu-Instanz angehängt.
Jede Hilfe wäre sehr dankbar.
quelle
Antworten:
In der AWS Console:
Stoppen Sie die Instanz, deren Größe Sie ändern möchten
Erstellen Sie einen Snapshot des aktiven Volumes und erstellen Sie dann aus diesem Snapshot ein "General Purpose SSD" -Volume.
Erstellen Sie ein anderes "General Purpose SSD" -Volume mit der gewünschten Größe.
Fügen Sie diese 3 Volumes der Instanz wie folgt hinzu:
Starten Sie die Instanz.
Melden Sie sich über SSH bei der neuen Instanz an.
erstelle diese neuen Verzeichnisse:
mkdir /source /target
mkfs.ext4 /dev/xvdf
mount -t ext4 /dev/xvdf /target
e2label /dev/xvdf /
mount -t ext4 /dev/xvdg /source
rsync -ax /source/ /target
Hinweis: Es gibt kein "/" nach "/ target". Möglicherweise sind auch einige Fehler bei Symlinks und Attributen aufgetreten, die Größenänderung war jedoch weiterhin erfolgreich
umount /target
umount /source
Zurück in AWS Console: Stoppen Sie die Instanz und trennen Sie alle Volumes.
Hängen Sie das neue Volume mit der folgenden Größe an die Instanz an: "/ dev / sda1"
Starten Sie die Instanz und sie sollte hochfahren.
SCHRITT 10 IST WICHTIG : Beschriften Sie das neue Volume wie oben erwähnt mit "e2label". Andernfalls wird die Instanz in aws gebootet, besteht jedoch die Verbindungsprüfung nicht.
quelle
Keine der anderen Lösungen funktioniert, wenn das Volume als Root-Gerät (bootfähig) verwendet wird.
Auf dem neu erstellten Datenträger fehlt die Startpartition. Daher muss GRUB installiert und einige Flags ordnungsgemäß eingerichtet sein, bevor eine Instanz es als Root-Volume verwenden kann.
Meine (bis heute funktionierende ) Lösung zum Verkleinern eines Root-Volumes ist:
Hintergrund: Wir haben eine Instanz A, deren Root-Volume wir verkleinern möchten. Nennen wir dieses Volumen VA. Wir möchten VA von 30 GB auf 10 GB verkleinern
HINWEIS: Die folgenden Schritte werden hauptsächlich von der @ bill-Lösung ausgeführt:
Stoppen Sie die Instanz, deren Größe Sie ändern möchten (A).
Erstellen Sie einen Snapshot der Volume-VA und erstellen Sie dann aus diesem Snapshot ein "General Purpose SSD" -Volume. Diesen Band nennen wir es VASNAP.
Starten Sie eine neue Instanz mit Amazon Linux. Diese Instanz wird C genannt. Mit dieser Instanz wird der Inhalt von VASNAP nach VB kopiert. Wir könnten wahrscheinlich auch Instanz A verwenden, um diese Schritte auszuführen, aber ich bevorzuge es, dies auf einem unabhängigen Computer auszuführen.
Hängen Sie die folgenden Volumes an Instanz C. / dev / xvdf für VB an. / dev / xvdg für VASNAP.
Starten Sie Instanz C neu.
Melden Sie sich über SSH bei Instanz C an.
Erstellen Sie diese neuen Verzeichnisse:
mkdir /source /target
mkfs.ext4 /dev/xvdf1
Wenn keine Fehler auftreten, fahren Sie mit Schritt 11 fort. Andernfalls müssen
/dev/xvdf1
Sie die Partition wie folgt erstellen:i) Wenn
/dev/xvdf1
es aus irgendeinem Grund nicht gibt, müssen Sie es erstellen. Zuerst eingeben:sudo fdisk /dev/xvdf
.ii) Wischen Sie die Festplatte ab, indem Sie Folgendes eingeben:
wipefs
iii) Erstellen Sie eine neue Partition, indem Sie Folgendes eingeben:
n
iv) Geben Sie ein
p
, um eine primäre Partition zu erstellenv) Halten Sie die Eingabetaste gedrückt, um mit den Standardeinstellungen fortzufahren.
vi) Wenn Sie erneut nach einem Befehl gefragt werden, drücken Sie die Eingabetaste
w
, um die Änderungen zu schreiben und den Vorgang zu beenden.vii) Stellen Sie sicher, dass Sie über die
/dev/xvdf1
Partition verfügen, indem Sie folgende Schritte ausführen :lsblk
Sie sollten etwas sehen wie:
Fahren Sie nun mit Schritt 11 fort.
mount -t ext4 /dev/xvdf1 /target
e2label /dev/xvdf1 /
mount -t ext4 /dev/xvdg1 /source
rsync -vaxSHAX /source/ /target
Hinweis: Es gibt kein "/" nach "/ target". Möglicherweise sind auch einige Fehler bei Symlinks und Attributen aufgetreten, die Größenänderung war jedoch weiterhin erfolgreich
umount /target
Zurück in der AWS-Konsole: Entfernen Sie VB von Instanz C und VA von A.
Hängen Sie das neue Volume (VB) wie folgt an die Instanz an: "/ dev / xvda"
Boot-Instanz A, jetzt ist es Root-Gerät 10 GB :)
Löschen Sie beide Instanzen B und C sowie alle Volumes mit Ausnahme von VB, das jetzt das Stammvolume von Instanz A ist.
quelle
/dev/sda1
anstelle von/dev/xvda
@RubenSerrate anhängen?Die folgenden Schritte haben bei mir funktioniert
Schritt 1. Erstellen Sie einen Snapshot des Root-EBS-Volumes und erstellen Sie ein neues Volume aus dem Snapshot (nennen wir diese Volume-Kopie).
Schritt 2. Erstellen Sie eine neue Instanz mit dem ebs-Root-Volume mit der gewünschten Größe. (Nennen wir das Volume "Größe ändern".) Dieses EBS-Volume verfügt über die richtige Partition zum Booten. (Das Erstellen eines neuen ebs-Volumes von Grund auf hat bei mir nicht funktioniert.)
Schritt 3. Fügen Sie einer Instanz eine Größenänderung des Volumes und eine Kopie des Volumes hinzu.
Schritt 4. Formatieren Sie die Volume-Größe.
Hinweis: Stellen Sie sicher, dass das Partitionsvolumen
/dev/xvdf1
nicht eingegeben wird/dev/xvdf
Schritt 5. Mounten Sie die Volume-Größenänderung und kopieren Sie mkdir / mnt / copy mkdir / mnt / resize
Schritt 6. Kopieren Sie die Dateien
Schritt 7. Stellen Sie sicher, dass e2label mit dem Root-Volume identisch ist
Schritt 8. Aktualisieren Sie die Datei grub.conf auf der Volume-Kopie, um sie an das neue Volume udid anzupassen
Suchen und ersetzen Sie uudid in /boot/grub/grub.cfg
Schritt 9. Hängen Sie die Volumes aus
Schritt 10. Hängen Sie ein neues EBS-Volume mit geänderter Größe an instance / dev / sda1 an
quelle
blkid
ohnesudo
gibt zwischengespeicherte Ergebnisse zurück, ohne sie zu validieren. Es sieht also so aus, als hätte sich die UUID nicht geändert.Hier ist ein alternativer Ansatz;
Hängen Sie das alte EBS-Volume an eine laufende EC2-Instanz an und hängen Sie es an. Wenn Sie ein Startvolume kopieren möchten, sollten Sie es auf einer anderen Instanz ausführen, wobei das alte Volume als Daten bereitgestellt und nicht als Live-System verwendet wird.
Erstellen Sie ein neues EBS-Volume mit der gewünschten Größe.
Hängen Sie das neue Volume an die Instanz an und formatieren Sie darauf (vorsichtig) ein neues Dateisystem (z. B. mit mkfs). Montiere es.
Kopieren Sie den alten Dateisysteminhalt vom alten auf das neue Volume:
Hängen Sie das neue Volume aus und trennen Sie es von der Instanz.
Wenn Sie das Root-Dateisystem kopiert haben, dann:
Erstellen Sie einen EBS-Snapshot des neuen Volumes.
Registrieren Sie den Snapshot als neues AMI.
quelle