Zugriff auf Speicher auf einer EC2-Instanz?


7

Ich verwende eine große EC2-Instanz, habe aber gerade festgestellt, dass mir der versprochene Speicherplatz nicht zur Verfügung steht. Ich bekomme nur 8 Gigs, wenn es heißt, ich sollte 850 GB haben.

Soweit ich weiß, sollten mir zwei zusätzliche 420-GB-Laufwerke zum Formatieren / Mounten zum Einrichten zur Verfügung stehen, aber ich kann sie anscheinend nicht finden. Wenn ich in das Dev-Verzeichnis schaue, ist es nicht da. Ich habe versucht, "df -h" einzugeben und es wurde auch nicht angezeigt.

Muss ich etwas tun, um Zugriff auf die Laufwerke zu erhalten?

Wenn es hilft, verwende ich das Standard-Amazon Linux-Image.


1
Sie möchten keine Daten im Instanzbasisspeicher speichern, es sei denn, sie sind repliziert oder können problemlos wiederhergestellt werden. Was meinst du mit "Standard Amazon Linux Image"? Meines Wissens gibt es so etwas nicht.
Bart De Vos

Es gibt eine ec2 Linux-Instanz, die von Amazon selbst erstellt wurde. Es ist wie das offizielle, denke ich. Ich dachte, der Speicher ist dauerhaft? Ich habe einen Terminierungsschutz, damit ich die Box nicht durch Fehler herunterfahre. Aber ich verwende sie so ziemlich als MySQL-Backend für meine Websites.
Lostsoul

EBS-Instanzen sind persistent. Instanzspeicherinstanzen sind kurzlebig.
Ceejayoz

Antworten:


8

Um auf den kurzlebigen Speicher (Instanzspeicher) zuzugreifen, den Amazon mit einer EC2-Instanz enthält, müssen Sie ihn beim Starten einer Instanz definieren. Mit den EC2-Befehlszeilentools müssen Sie lediglich das Optionsflag -b oder --block-device-Mapping einschließen.

Dieser Befehl würde beispielsweise eine einzelne m1.large-Instanz in us-east-1a starten, wobei ephemeral0 und ephemeral1 sdb1 bzw. sdb2 zugeordnet sind und die folgenden Optionen:

  • ami-id
  • (-n) Anzahl der zu startenden Instanzen
  • (-t) Instanztyp
  • (-z) Verfügbarkeitszone
  • (-b) Blockgerätezuordnung
  • (-g) Sicherheitsgruppe
  • (-k) Schlüsselname

- -

ec2-run-instances ami-id -n 1 -t m1.large -z us-east-1a -b "/dev/sdb1=ephemeral0" -b "/dev/sdb2=ephemeral1" -g security_group -k key_name

Anschließend können Sie die Geräte formatieren und mounten. (Wiederholen Sie jeden Befehl einmal für jedes Gerät)

sudo mkfs /dev/sdb[1..n]

sudo mkdir -p /media/ephemeral[0...n]

Sie können dann entweder die folgenden zwei Zeilen zu Ihrer / etc / fstab hinzufügen (Sie können Ihre Mount-Optionen, Ihr Dateisystem usw. jederzeit anpassen).

/dev/sdb1   /media/ephemeral0 auto defaults,comment=cloudconfig 0 2
/dev/sdb2   /media/ephemeral1 auto defaults,comment=cloudconfig 0 2

Und montieren Sie die Geräte

sudo mount /media/ephemeral0
sudo mount /media/ephemeral1

Oder mounten Sie die Geräte einfach, ohne diese Geräte zur fstab-Datei hinzuzufügen

sudo mount -t ext3 /dev/sdb1 /media/ephemeral0
sudo mount -t ext3 /dev/sdb2 /media/ephemeral1

Überprüfen

df -h

Beispielausgabe:

[ec2-user@ip-10-251-159-223 media]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  883M  7.0G  12% /
tmpfs                 3.7G   48K  3.7G   1% /dev/shm
/dev/xvdb1            414G  199M  393G   1% /media/ephemeral0
/dev/xvdb2            414G  199M  393G   1% /media/ephemeral1
[ec2-user@ip-10-251-159-223 media]$

Übrigens, sobald Sie Ihre Instanz angepasst haben. Erstellen Sie basierend auf dieser Instanz Ihre eigene AMI. Wenn Sie eine Instanz von der resultierenden AMI aus starten, ist der kurzlebige Speicher bereits konfiguriert.

Schauen Sie sich auch die Dokumentation auf der AWS-Website an.

Dokumentation der Amazon Command Line Tools

Viel Glück!


Hey, tut mir leid, es hat so lange gedauert, bis ich endlich dazu gekommen bin und es hat perfekt funktioniert. Vielen Dank für Ihre tollen Anweisungen.
Lostsoul

1
Beachten Sie, dass ich für meine Ubuntu-Instanz /dev/sdbund /dev/sdcNICHT /dev/sdb1und verwenden musste /dev/sdb2(andernfalls wird der Status aufgrund eines Systemstartfehlers sofort "beendet").
Dan Nissenbaum

Ich weiß nicht, ob AlanZs Verweis auf /dev/scb1und /dev/sdb2früher korrekt ist oder nicht, aber es ist derzeit nicht korrekt. Ich zögere, seine Antwort zu bearbeiten, was ansonsten großartig ist. Aber @ DanNissenbaums Kommentar ist richtig (und wichtig).
Mdahlman

2

Der zusätzliche Platz sollte unter montiert werden /mnt. Beachten Sie jedoch, dass beim Beenden Ihrer Instanz alles darauf verschwindet. Wenn Sie also Ihre Daten beibehalten möchten, müssen Sie zusätzliche Schritte ausführen. Beispielsweise möchten Sie möglicherweise ein zusätzliches EBS-Volume erstellen, es bei jedem Start der Instanz bereitstellen und alle Ihre persistenten Daten darauf speichern. Ich persönlich verwende den Speicherplatz von / mnt nur für temporäre Dateien.


Früher hatte ich eine Instanz, in der ich ein EBS-Mount eingerichtet habe, aber es kostet viel, weil meine Datenbank viele Lese- / Schreibvorgänge enthält. Ich dachte, der Speicher, den wir mit der Instanz erhalten, ist auch persistent? Ich habe einen Kündigungsschutz dagegen und verwende ihn im Grunde genommen zum Speichern einer sehr großen Datenbank, die ich hoste. Wenn ich unter / mnt schaue, ist es total leer.
Lostsoul

@Lostsoul: /mntsoll leer sein, geh einfach dorthin und df .solltest du all deinen Speicher sehen. Beachten Sie auch, dass dieser Speicher "Thin Provisioning" ist, dh bei der ersten Verwendung physisch zugewiesen wird, sodass beim ersten Laden Ihrer Datenbank möglicherweise eine langsame Leistung auftritt. Sie können dies beschleunigen, indem Sie eine große Datei mit der ungefähren Größe Ihrer Datenbank erstellen und dann löschen.
Dtoubelis

ok, ich werde versuchen, eine Datei zu erstellen und zu sehen, wie es geht, aber ich bin einfach in den Ordner gegangen und habe versucht, die df zu verwenden. Befehl und es zeigt nur meine Root-Partition (/ dev / xvda1 8256952 1930904 6242164 24% /) Ich werde es versuchen und Sie später heute Abend wissen lassen. Vielen Dank Dmitri.
Lostsoul

@Lostsoul: Bitte überprüfen Sie diesen Link und gehen Sie zum Abschnitt " Instanzspeicher ". Der genaue Speicherort des Instanzspeichers hängt vom Instanztyp ab, und Sie müssen ihn möglicherweise doch manuell bereitstellen, sodass er nicht immer darunter liegt /mnt.
Dtoubelis

0

Wenn Sie dies speziell auf dem Root-Volume sehen, sollten Sie darauf achten, dass bei einigen AMIs die Cloud-Init-Skripte nicht ordnungsgemäß eingerichtet sind, um Ihren Root-FS zu erweitern und den verfügbaren Speicherplatz zu füllen. Beispielsweise wurde das AMI ursprünglich mit einem Root-Volume von 8 GiB erstellt. Sie ändern es beim Erstellen einer neuen Instanz in eine größere Größe, aber wenn Sie es ausführen df -h, werden immer noch nur 8 GiB angezeigt.

Ich habe dies insbesondere bei einigen CentOS-AMIs gesehen, aber ich habe es eine Weile nicht mehr verwendet, daher bin ich mir nicht sicher, ob es immer noch ein häufiges Problem ist.

In diesen Fällen reicht eine manuelle Online-Größenänderung normalerweise für mich aus.

Überprüfen Sie zunächst, ob Ihr Root-FS die gesamte Festplatte (/ dev / xvda) oder eine Partition (/ dev / xvda1) verwendet: mount -l|grep 'on / '

Angenommen, es wird die gesamte Festplatte (xvda) verwendet, können Sie versuchen, die Größe online zu ändern: resize2fs /dev/xvda... dann versuchen Sie es df -herneut und geben Sie dem nächsten Kollegen / Familienmitglied einen High-Five- Wert .

In der anderen Situation ... Ich glaube nicht, dass dies passiert ist, wenn der Setup-Prozess die Festplatte tatsächlich partitioniert hat. Es würde nicht schaden, es zu versuchen resize2fs /dev/xvda1, aber ich vermute, Sie müssten zuerst die Größe der Partition erweitern, damit sie etwas tun kann. Ihre beste Wette wäre so etwas parted.


(Übrigens weiß ich, dass dies wahrscheinlich nicht die genaue Situation ist, in der sich das OP befand, aber es kann damit zusammenhängen.)
Tom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.