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
- Erstellen Sie eine neue ec2-Instanz, B, mit demselben Betriebssystem wie die Instanz A. Wählen Sie als Speicher ein Volume, das dem VA-Typ entspricht, jedoch eine Größe von 10 GB hat. (oder was auch immer Ihre Zielgröße ist). Jetzt haben wir also eine Instanz B, die dieses neue Volume (nennen wir es VB) als Root-Volume verwendet.
- Sobald die neue Instanz (B) ausgeführt wird. Stoppen Sie es und entfernen Sie das Root-Volume (VB).
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
- Formatieren Sie die Hauptpartition von VB mit einem ext4-Dateisystem:
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 erstellen
v) 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:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 250G 0 disk
└─xvda1 202:1 0 250G 0 part
xvdf 202:80 0 80G 0 disk
└─xvdf1 202:81 0 80G 0 part
xvdg 202:96 0 250G 0 disk
└─xvdg1 202:97 0 250G 0 part
Fahren Sie nun mit Schritt 11 fort.
- Hänge es in dieses Verzeichnis ein:
mount -t ext4 /dev/xvdf1 /target
- Dies ist sehr wichtig. Das Dateisystem benötigt ein e2label für Linux, um es zu erkennen und zu booten. Verwenden Sie "e2label / dev / xvda1" auf einer aktiven Instanz, um zu sehen, wie es aussehen soll. In diesem Fall lautet das Label: "/"
e2label /dev/xvdf1 /
- VASNAP einbinden auf / Quelle:
mount -t ext4 /dev/xvdg1 /source
- Kopieren Sie den Inhalt:
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 VB:
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.