Nicht genügend Speicherplatz '/' in der AWS-Instanz

28

Ich führe eine Ubuntu 11.04-Instanz für meinen Webserver in der AWS-Cloud aus. Jetzt erhalte ich, dass in / partition meines Servers kein Speicherplatz mehr vorhanden ist . df -ah sag das

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  7.8G   97M  99% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
fusectl                  0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  3.7G  112K  3.7G   1% /dev
none                     0     0     0   -  /dev/pts
none                  3.7G     0  3.7G   0% /dev/shm
none                  3.7G   80K  3.7G   1% /var/run
none                  3.7G     0  3.7G   0% /var/lock
/dev/xvdb             414G   16G  377G   4% /mnt

Jetzt habe ich diese Sache Versuche etwas mehr Platz auf für immer / Partition

  • Bereinigen Sie alle Protokolldateien für Apache.
  • Alle nicht benötigten Dateien vom Server entfernt.
  • Home-Verzeichnis bereinigen.

Trotzdem bekomme ich nicht genug Platz. Dieser Instanztyp ist m1.large mit 8 GB EBS. Jetzt bekomme ich genug Speicherplatz in / dev / xvdb .

Gibt es eine Möglichkeit, wie ich / from / dev / xvdb oder anderen Möglichkeiten Speicherplatz zuweisen kann? Bitte schlagen Sie mir die mögliche Lösung dafür vor. Ist es möglich, dieselbe / dev / xvdb- Partition mit einer anderen Instanz zu verwenden.

Sumant
quelle
1
Update 2017: Mit Amazon können Sie die Größe Ihrer Laufwerke (auch Boot-Laufwerke) heutzutage im Handumdrehen ändern! siehe meine SO-Antwort hier: stackoverflow.com/a/42791031/7022062
Dmitry Shevkoplyas

Antworten:

26

Die Antwort ist zweifach.

Umgehung: Verwenden Sie / dev / xvdb (/ mnt) für temporäre Daten

Dies ist der so genannte kurzlebige Speicher Ihrer Amazon EC2- Instanz, und seine Eigenschaften unterscheiden sich erheblich von denen des andernorts verwendeten dauerhaften Amazon EBS- Speichers. Insbesondere geht dieser kurzlebige Speicher bei Stopp- / Startzyklen verloren und kann in der Regel verloren gehen. Sie möchten also definitiv keinen dauerhaften Wert darauf legen , dh nur temporäre Daten, die Sie sich leisten können, einfach zu verlieren oder neu aufzubauen . wie eine Auslagerungsdatei oder streng temporäre Daten, die während der Berechnungen verwendet werden. Natürlich können Sie dort beispielsweise große Indizes speichern, müssen jedoch darauf vorbereitet sein, diese nach dem Löschen des Speichers erneut zu erstellen (Neustart der Instanz, Hardwarefehler usw.).

Lösung: Ändern Sie die Größe von / dev / xvda1 (/), um den gewünschten Speicherplatz zu erhalten

Dies ist der sogenannte Root-Gerätespeicher Ihrer von Amazon EBS unterstützten EC2-Instanz, der Amazon EBS insbesondere hinsichtlich Flexibilität und Haltbarkeit erleichtert , dh, die dort gespeicherten Daten sind relativ sicher und überstehen Instanzausfälle. Sie können die Flexibilität und Haltbarkeit noch weiter erhöhen, indem Sie regelmäßig Momentaufnahmen Ihres EBS-Volumes machen, das auf Amazon S3 gespeichert ist und über die bekannte Haltbarkeit von 99,999999999% verfügt.

Mit dieser Snapshot-Funktion können Sie Ihr Problem lösen, indem Sie Ihren aktuellen 8-GB-EBS-Root-Speicher (/ dev / xvda1) durch einen mehr oder weniger großen ersetzen. Der Prozess wird in Eric Hammonds ausgezeichnetem Artikel Größenänderung der Root-Festplatte auf einer laufenden EBS Boot EC2-Instanz beschrieben :

Solange Sie mit einer kurzen Ausfallzeit für die EC2-Instanz (einige Minuten) einverstanden sind, können Sie das Root-EBS-Volume durch eine größere Kopie ersetzen, ohne eine neue Instanz starten zu müssen.

Wenn Sie die von ihm beschriebenen Schritte richtig vorbereiten (ich empfehle dringend, sie zuerst mit einer EC2-Wurfinstanz zu testen, um sich mit der Prozedur vertraut zu machen, oder sie sogar über ein maßgeschneidertes Skript zu automatisieren), sollten Sie in der Lage sein, den Vorgang mit wenigen Schritten abzuschließen Minuten Ausfallzeit nur in der Tat.

Die meisten der beschriebenen Schritte können auch über die AWS Management Console ausgeführt werden, wodurch der Umgang mit den Amazon EC2-API-Tools vermieden wird . das läuft auf Folgendes hinaus:

  • Stoppen (nicht beenden!) Sie die EC2-Instanz
  • Trennen Sie das EBS-Volume von der gestoppten Instanz
  • Erstellen Sie einen Snapshot des gelösten EBS-Volumes
  • Erstellen Sie aus dem erstellten Snapshot ein neues (größeres) EBS-Volume
  • Hängen Sie das neue EBS-Volume an die EC2-Instanz an ( Wichtig ! Wenn es sich um Ihr Root-Gerät handelt, stellen Sie sicher, dass es genau den Namen des Root-Geräts der Instanz trägt, wie es erwähnt wurde, z. B. (/ dev / sda1) oder (/ dev / xdva1). Andernfalls wird es als Block-Gerät und nicht als Root-Gerät angehängt, und Sie können die Instanz nicht starten, da für die Instanz kein Root-Gerät aufgeführt ist.)
  • SSH in die laufende Instanz und bestätigen Sie alles ist in Ordnung über df -ah
    • Falls Ihr System die Größe des Dateisystems nicht automatisch geändert hat, müssen Sie dies manuell tun, wie in Erics Artikel erläutert

Viel Glück!


Alternative

In Anbetracht der Vielseitigkeit und Benutzerfreundlichkeit dieser EBS-Volumes besteht eine zusätzliche Option darin, mehr EBS-Volumes an Ihre Instanz anzuhängen und klar trennbare Problembereiche dorthin zu verschieben.

Zum Beispiel verwenden wir einige ziemlich schwere Java-Anwendungen, von denen jede 1 bis 2 GB Speicherplatz pro Version beansprucht. zu erleichtern Upgrade - Versionen und generell in der Lage sein , diese Anwendungen auf verschiedenen Instanzen in meinem Ermessen zu bewegen, habe ich sie auf dedizierten EBS - Volumes je platziert, montieren diese auf eine Instanz und Softlink sie an den gewünschten Ort, zB in der Regel /var/lib/<app>/<version>und /usr/local/<app>/<version>.

Mit dieser Methode führen wir derzeit EC2-Instanzen aus, wobei der Root-Gerätespeicher immer noch die Standardgröße von 8 GB aufweist (genau wie bei Ihnen), manchmal aber auch bis zu 8 EBS-Volumes mit unterschiedlichen Größen (1 bis 15 GB).

Sie müssen sich jedoch der potenziellen Netzwerkleistungsprobleme bewusst sein, sofern alle diese EBS-Volumes dasselbe LAN für ihre E / A verwenden, was in extremen Fällen sogar zu entsprechenden Leistungsgewinnen führen oder Ihr Netzwerk überlasten kann. Dies hängt also wie üblich davon ab auf den Anwendungsfall und die Arbeitsbelastung zur Hand.

Steffen Opel
quelle
Ich verwende / dev / xvdb, um meine Datenbank, die jetzt fast 16 GB groß ist, auf dem neuesten Stand zu halten. Also, was sollte der beste dauerhafte Speicher für diese Datenbank sein. Soll ich mich für Amazon RDS oder Amazon DynamoDB entscheiden? was ist dein Vorschlag. Ich lasse PHP-Bediener auf dieser Instanz laufen.
Sumant
2
@Sumant: Das ist nicht gut, also hast du genau das getan, was gefährlich ist, nämlich Daten auf einer Festplatte zu speichern, die im Grunde jederzeit verschwinden kann (normalerweise nicht, sollte man sie so behandeln)? Ich hoffe , ich habe keine Biene in dieser Hinsicht irreführend - seien Sie besonders vorsichtig , wenn während des Prozesses dies zu vermeiden , um Datenverlust zu mildern (Sie tun Datenbanksicherungen haben , unabhängig, nicht wahr?)!
Steffen Opel
@Sumant: Zu Ihrer Frage - Sie sollten Ihre App-Architektur (oder DB) überhaupt nicht ändern müssen, um das Speicherproblem zu beheben. Ändern Sie einfach die Größe Ihrer Root-Festplatte oder hängen Sie weitere EBS-Volumes an, wie vorgeschlagen. Wenn Sie jedoch auch Ihre DB-Ebene verbessern und entkoppeln möchten, was im Hinblick auf künftiges Wachstum grundsätzlich gut ist (aber von Anfang an mit entsprechenden Kosten verbunden ist) und vorausgesetzt, Sie führen derzeit MySQL aus, dann Amazon RDS wäre die perfekte und bequeme Wahl. Amazon DynamoDB erfordert eine vollständig neue App-Architektur und gilt nur für bestimmte Anwendungsfälle.
Steffen Opel
1
@Sumant: Beachten Sie jedoch, dass die Migration Ihrer Datenbank auf eine m1.small-RDS-Instanz möglicherweise eine langsamere Leistung aufweist als Ihre aktuelle MySQL-Version auf EC2, auf der m1.large mit entsprechenden CPU- und E / A-Leistungsvorteilen ausgeführt wird - unabhängig davon, ob dies zutrifft. hängt jedoch von Ihrer aktuellen DB-Auslastung ab. Natürlich können Sie auch größere RDS-Instanzen verwenden, um Abhilfe zu schaffen, aber Ihre Kosten erhöhen sich entsprechend.
Steffen Opel
1

Yep eine einfache Möglichkeit, es zu fstab und dann mounten, um / var / www / html / files2 / zu sagen

dann mkdir / var / www / html / files2 / website dann ln -s -d / var / www / html / website / var / www / html / files2 / website

Daniel Chay
quelle
Verwenden Sie die UUID, um die Partition mit dem Befehl blkids zu mounten, und geben Sie '/ dev / vxds /' ein, um die Partition zu erstellen. Verwenden Midnight Commander die Dateien mit F6 von einem Ordner zum anderen zu bewegen, stellen Sie sicher , den richtigen Ordner unter der Position oh Mount wählen und natürlich müssen Sie ‚mount -a‘ nach dem fstab Zugabe
Daniel Chay
0

Heute trat das gleiche Problem auf, als Sie die neue ec2-Intance erstellten. Standardmäßig ist EBS 8GB. Sie können die Größe des angehängten EBS ändern, ohne eine neue Oberfläche zu erstellen, einen Snapshot zu erstellen oder das EBS zu trennen. Sie können die folgenden drei Schritte ausführen:

  1. Ändern Sie die Größe des EBS-Volumes
  2. Partitionsgröße ändern
  3. Partitionsgröße ändern Wechseln Sie im ersten Schritt zu Ihrer AWS-Konsole und klicken Sie auf EBS, ändern Sie die gewünschte Größe und klicken Sie auf Ändern.

Für den Rest der Schritte folgen Sie bitte diesem Artikel, wenn Sie Fragen haben.

Vielen Dank!

Narendra Sharma
quelle