Amazon Elastic Compute Cloud
Benutzerhandbuch für Linux-Instances

Amazon EBS und NVMe auf Linux-Instances

EBS-Volumes werden als NVMe-Blockgeräte auf Nitro-basierenden Instances angezeigt. Die Gerätenamen sind /dev/nvme0n1, /dev/nvme1n1 usw. Die Gerätenamen, die Sie in einer Blockgerätezuordnung angeben, werden durch NVMe-Gerätenamen (/dev/nvme[0-26]n1) ersetzt. Der Blockgerät-Treiber kann NVMe-Gerätenamen in einer anderen Reihenfolge als der zuweisen, die Sie für die Volumes in der Blockgerät-Zuweisung angegeben haben.

Anmerkung

Die in Amazon EBS-Produktdetails angegebenen EBS-Leistungsgarantien gelten unabhängig von der Blockgeräteschnittstelle.

Installieren oder Aktualisieren des NVMe-Treibers

Für den Zugriff auf NVMe-Volumes müssen die NVMe-Treiber installiert sein. Instances können NVMe-EBS-Volumes, NVMe-Instance-Speichervolumes, beide Arten von NVMe-Volumes oder keine NVMe-Volumes unterstützen. Weitere Informationen finden Sie unter Zusammenfassung der Netzwerk- und Speicherfunktionen.

Die folgenden AMIs enthalten die erforderlichen NVMe-Treiber:

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03

  • Ubuntu 14.04 (mit linux-aws-Kernel) oder höher

  • Red Hat Enterprise Linux 7.4 oder höher

  • SUSE Linux Enterprise Server 12 SP2 oder höher

  • CentOS 7.4.1708 oder höher

  • FreeBSD 11.1 oder höher

Weitere Informationen über NVMe-Treiber bei Windows-Instances finden Sie unter Amazon EBS und NVMe bei Windows-Instances im Amazon EC2-Benutzerhandbuch für Windows-Instances.

Wenn Sie ein AMI verwenden, das den NVMe-Treiber nicht enthält, können Sie den Treiber auf Ihrer Instance installieren, indem Sie wie folgt vorgehen.

So installieren Sie den NVMe-Treiber

  1. Verbinden Sie sich mit der Instance.

  2. Aktualisieren Sie den Cache der Paketverwaltung, um die erforderlichen Paketaktualisierungen herunterzuladen.

    • Für Amazon Linux 2, Amazon Linux, CentOS und Red Hat Enterprise Linux:

      [ec2-user ~]$ sudo yum update -y
    • Für Ubuntu und Debian:

      [ec2-user ~]$ sudo apt-get update -y
  3. Ubuntu 16.04 und höher umfasst das linux-aws-Paket, das die von den Nitro-basierten Instances erforderten NVMe- und ENA-Treiber enthält. Aktualisieren Sie das linux-aws-Paket, um die aktuelle Version zu erhalten:

    [ec2-user ~]$ sudo apt-get upgrade -y linux-aws

    Für Ubuntu 14.04 können Sie das aktuelle linux-aws-Paket wie folgt installieren:

    [ec2-user ~]$ sudo apt-get install linux-aws
  4. Starten Sie Ihre Instance neu, um die neueste Kernelversion zu laden.

    sudo reboot
  5. Stellen Sie nach dem Neustart eine neue Verbindung zu Ihrer Instance her.

Identifizieren des EBS-Geräts

EBS verwendet Single-Root-E/A-Virtualisierung (SR-IOV), um Volume-Anhänge auf Nitro-basierenden Instances mit der NVMe-Spezifikation bereitzustellen. Diese Geräte benötigen Standard-NVMe-Treiber auf dem Betriebssystem. Diese Treiber erkennen angeschlossene Geräte in der Regel, indem sie den PCI-Bus während des Instance-Starts scannen und Geräteknoten basierend auf der Reihenfolge, in der die Geräte reagieren, erstellen, und nicht darauf, wie die Geräte in der Blockgerät-Zuweisung angegeben sind. Unter Linux folgen NVMe-Gerätenamen dem Muster /dev/nvme<x>n<y>, wobei <x> die Aufzählungsreihenfolge ist und für EBS <y> 1 ist. Gelegentlich können Geräte bei nachfolgenden Instance-Starts auf die Erkennung in einer anderen Reihenfolge reagieren, was dazu führt, dass sich der Gerätename ändert.

Wir empfehlen Ihnen, für Ihre EBS-Volumes innerhalb Ihrer Instance stabile IDs zu verwenden, wie beispielsweise eine der folgenden:

  • Für Nitro-basierende Instances werden Blockgerät-Zuweisungen, die in der Amazon EC2-Konsole angegeben sind, beim Anfügen eines EBS-Volume oder während AttachVolume- oder RunInstances-API-Aufrufen im herstellerspezifischen Datenfeld der NVMe-Controller-ID erfasst. Mit Amazon Linux-AMIs ab der Version 2017.09.01 stellen wir eine udev-Regel zur Verfügung, die diese Daten liest und einen symbolischen Link zur Blockgerät-Zuweisung erstellt.

  • Bei NVMe EBS-Volumes ist die EBS-Volume-ID als Seriennummer in der Gerätekennung festgelegt.

  • Beim Formatieren eines Geräts wird eine UUID erzeugt, die für die gesamte Lebensdauer des Dateisystems erhalten bleibt. Gleichzeitig kann eine Gerätebezeichnung angegeben werden. Weitere Informationen finden Sie unter Verfügbarmachen eines Amazon EBS-Volumes für die Verwendung auf Linux und Starten vom falschen Volume aus.

Amazon Linux-AMIs

Mit Amazon Linux-AMI 2017.09.01 oder höher (inklusive Amazon Linux 2) können Sie den Befehl ebsnvme-id wie folgt ausführen, um den NVMe-Gerätenamen einer Volume-ID zuzuordnen und umgekehrt:

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-01324f611e2463981 /dev/sdf

Amazon Linux erstellt auch eine symbolische Verknüpfung vom Gerätenamen in der Blockgerätezuordnung (zum Beispiel /dev/sdf) zum NVMe-Gerätenamen.

Andere Linux-AMIs

Mit einer Kernel-Version von 4.2 oder höher können Sie den Befehl nvme id-ctrl wie folgt ausführen, um ein NVMe-Gerät einer Volume-ID zuzuordnen. Installieren Sie zunächst das NVMe-Befehlszeilenpaket, nvme-cli, unter Verwendung der Paketverwaltungstools für Ihre Linux-Verteilung.

Im folgenden Beispiel werden Volume-ID und Gerätename abgerufen. Der Gerätename ist über die für den Anbieter des NVMe-Controllers spezifische Extension (Bytes 384:4095 der Controller-ID) verfügbar:

[ec2-user ~]$ sudo nvme id-ctrl -v /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : vol01234567890abcdef mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."

Der Befehl lsblk führt die verfügbaren Geräte und, falls vorhanden, ihre Mountingpunkte auf. Damit können Sie bestimmen, welchen Gerätenamen Sie verwenden müssen. In diesem Beispiel ist /dev/nvme0n1p1 als Root-Gerät gemountet, und /dev/nvme1n1 ist angefügt, aber nicht gemountet.

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:3 0 100G 0 disk nvme0n1 259:0 0 8G 0 disk nvme0n1p1 259:1 0 8G 0 part / nvme0n1p128 259:2 0 1M 0 part

Arbeiten mit NVMe EBS-Volumes

Weitere Informationen zum Formatieren und Mounten eines NVMe EBS-Volumes finden Sie unter Verfügbarmachen eines Amazon EBS-Volumes für die Verwendung auf Linux.

Wenn Sie den Linux-Kernel 4.2 oder neuer verwenden, werden alle Änderungen, die Sie an der Volume-Größe eines NVMe EBS-Volumes vornehmen, automatisch in der Instance reflektiert. Bei älteren Linux-Kernels müssen Sie möglicherweise das EBS-Volume trennen und wieder verbinden oder die Instance neu starten, damit die Änderung reflektiert wird. Bei Linux-Kernel 3.19 oder neuer können Sie mit dem Befehl hdparm einen Rescan des NVMe-Geräts erzwingen:

[ec2-user ~]$ sudo hdparm -z /dev/nvme1n1

Wenn Sie ein NVMe-EBS-Volume trennen, hat die Instance keine Gelegenheit, die Dateisystemzwischenspeicher oder Metadaten vor dem Trennen des Volumes zu löschen. Daher sollten Sie ein NVMe-EBS-Volume vor dem Trennen zuerst synchronisieren und sein Mounting aufheben. Wenn das Volume nicht getrennt werden kann, können Sie einen force-detach-Befehl verwenden, wie in Trennen eines Amazon EBS-Volumes von einer Instance beschrieben.

E/A-Betriebs-Timeout

EBS-Volumes, die an Nitro-basierenden Instances angefügt sind, nutzen den Standard-NVMe-Treiber, der durch das Betriebssystem bereitgestellt wird. In den meisten Betriebssystemen gilt ein Timeout für an NVMe-Geräte übergebene E/A-Operationen. Das Standard-Timeout beträgt 30 Sekunden und kann mit dem Boot-Parameter nvme_core.io_timeout geändert werden. Bei Linux-Kerneln vor Version 4.6 lautet dieser Parameter nvme.io_timeout.

Wenn die E/A-basierte Latenz den Wert dieses Timeout-Parameters überschreitet, wird der Linux-NVMe-Treiber die E/A nicht ausführen und einen Fehler an das Dateisystem oder die Anwendung zurückgeben. Abhängig von der E/A-Operation kann Ihr Dateisystem oder Ihre Anwendung den Fehler erneut wiederholen. In einigen Fällen kann es vorkommen, dass Ihr Dateisystem als schreibgeschützt wieder gemountet wird.

Für eine Erfahrung, die mit der bei an Xen-Instances angefügten EBS-Volumen vergleichbar ist, sollte für nvme_core.io_timeout der höchstmögliche Wert festgelegt werden. Für aktuellen Kernel ist der Höchstwert 4294967295, während für frühere Kernels maximal 255. Abhängig von der Linux-Version ist das Timeout möglicherweise bereits auf den unterstützten Höchstwert festgelegt. Beispiel: Für Amazon Linux AMI 2017.09.01 und höher ist als Timeout standardmäßig 4294967295 festgelegt.

Sie können den Maximalwert für Ihre Linux-Verteilung überprüfen, indem Sie einen höheren Wert als den vorgeschlagenen Maximalwert in /sys/module/nvme_core/parameters/io_timeout eintragen und nach dem Fehler Numerical result out of range (Numerisches Ergebnis außerhalb des Bereichs) suchen, wenn Sie versuchen, die Datei zu speichern.