Amazon EBS und NVMe auf Linux-Instances
EBS-Volumes werden als NVMe-Blockgeräte auf Instances bereitgestellt, die auf dem Nitro-System basieren. Die Gerätenamen sind /dev/nvme0n1
, /dev/nvme1n1
usw. Die Gerätenamen, die Sie in einer Blockgerätezuordnung angeben, werden durch NVMe-Gerätenamen () erse (/dev/nvme[0-26]n1
). Der Blockgerät-Treiber kann NVMe-Gerätenamen in einer anderen Reihenfolge zuweisen, als Sie es für die Volumes in der Blockgerät-Zuweisung angegeben haben.
Die in Amazon EBS-Produktdetails
Informationen zu EBS-Volumes und NVME-auf-Windows-Instances finden Sie im Benutzerhandbuch für Windows-Instances.
Inhalt
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öherRed 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
Debian GNU/Linux 9 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.
So prüfen Sie, ob Ihre Instance über den NVMe-Treiber verfügt
Sie können mit dem folgenden Befehl bestätigen, dass Ihre Instance über den NVMe-Treiber verfügt.
-
Amazon Linux, RHEL, CentOS und SUSE Linux Enterprise Server
$
modinfo nvmeWenn die Instance über den NVMe-Treiber verfügt, gibt der Befehl Informationen über den Treiber zurück.
-
Amazon Linux 2 und Ubuntu
$
ls /sys/module/ | grep nvmeWenn die Instance über den NVMe-Treiber verfügt, gibt der Befehl die installierten Treiber zurück.
So aktualisieren Sie den NVMe-Treiber
Wenn Ihre Instance über den NVMe-Treiber verfügt, können Sie den Treiber mithilfe des folgenden Verfahrens auf die neueste Version aktualisieren.
-
Verbinden Sie sich mit der Instance.
-
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
-
-
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 daslinux-aws
-Paket, um die aktuelle Version zu erhalten:[ec2-user ~]$
sudo apt-get install --only-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
-
Starten Sie Ihre Instance neu, um die neueste Kernelversion zu laden.
sudo reboot
-
Stellen Sie nach dem Neustart eine neue Verbindung zu Ihrer Instance her.
Identifizieren des EBS-Geräts
EBS verwendet Single-Root-I/O-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 1. 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. Darüber hinaus kann der Gerätename, der vom Blockgerät-Treiber zugewiesen wird, von dem in der Blockgerät-Zuweisung angegebenen Namen abweichen.
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
- oderRunInstances
-API-Aufrufen im herstellerspezifischen Datenfeld der NVMe-Controller-ID erfasst. Mit Amazon Linux-AMIs ab der Version 2017.09.01 stellen wir eineudev
-Regel zur Verfügung, die diese Daten liest und einen symbolischen Link zur Blockgerät-Zuweisung erstellt. -
Die EBS-Volume-ID und der Einhängepunkt sind zwischen Instance-Statusänderungen stabil. Der NVMe-Gerätename kann sich je nach Reihenfolge ändern, in der die Geräte während des Instance-Starts reagieren. Wir empfehlen die Verwendung der EBS-Volume-ID und des Einhängepunkts zur konsistenten Geräteerkennung.
-
Bei NVMe EBS-Volumes ist die EBS-Volume-ID als Seriennummer in der Gerätekennung festgelegt. Verwenden Sie den Befehl
lsblk -o +SERIAL
, um die Seriennummer aufzulisten. -
Das Format des NVMe-Gerätenamens kann je nachdem, ob das EBS-Volume während oder nach dem Start der Instance angeschlossen wurde, variieren. NVMe-Gerätenamen für Volumes, die nach dem Instance-Start verbunden sind, umfassen das
/dev/
-Präfix, während NVMe-Gerätenamen für Volumes, die während des Instance-Starts verbunden sind, das/dev/
Präfix nicht einschließen. Wenn Sie ein Amazon Linux oder FreeBSD AMI verwenden, verwenden Sie densudo ebsnvme-id /dev/nvme
-Befehl für einen konsistenten NVMe-Gerätenamen. Verwenden Sie für andere Verteilungen den Befehl0
n1 -usudo ebsnvme-id /dev/nvme
, um den NVMe-Gerätenamen zu ermitteln.0
n1 -u -
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 Bereitstellen eines Amazon EBS-Volumes zur Verwendung in 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:
Das folgende Beispiel zeigt den Befehl und die Ausgabe für ein Volume, das beim Instance-Start verbunden ist. Beachten Sie, dass der Name des NVMe-Gerätenamens nicht das /dev/
-Präfix einschließt.
[ec2-user ~]$
sudo /sbin/ebsnvme-id /dev/nvme
0
n1Volume ID: vol-01324f611e2463981 sda
Das folgende Beispiel zeigt den Befehl und die Ausgabe eines Volumes, der nach dem Instance-Start verbunden ist. Beachten Sie, dass der NVMe-Gerätename das /dev/
-Präfix einschließt.
[ec2-user ~]$
sudo /sbin/ebsnvme-id /dev/nvme
1
n1Volume ID: vol-064784f1011136656 /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.
FreeBSD-AMIs
Ab FreeBSD 12.2-RELEASE können Sie den Befehl ebsnvme-id wie oben gezeigt ausführen. Übergeben Sie entweder den Namen des NVMe-Geräts (z. B. nvme0
) oder des Festplattengeräts (z. B. nvd0
oder nda0
). FreeBSD erstellt auch symbolische Links zu den Datenträgern (z. B. /dev/aws/disk/ebs/
volume_id
).
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-Distribution. Hinweise zum Download und zur Installation anderer Verteilungen finden Sie in der für Ihre Verteilung spezifischen Dokumentation.
Im folgenden Beispiel werden Volume-ID und NVMe-Gerätename für ein Volume abgerufen, das beim Instance-Start angehängt wurde. Beachten Sie, dass der Name des NVMe-Gerätenamens nicht das /dev/
-Präfix einschließt. 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/nvme
0
n1NVME 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 "sda
..."
Im folgenden Beispiel werden Volume-ID und NVMe-Gerätename für ein Volume abgerufen, das nach dem Instance-Start angeschlossen wurde. Beachten Sie, dass der NVMe-Gerätename das /dev/
-Präfix einschließt.
[ec2-user ~]$
sudo nvme id-ctrl -v /dev/nvme
1
n1NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn :
volabcdef01234567890
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 Bereitstellen eines Amazon EBS-Volumes zur Verwendung in 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/nvme
1
n1
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 Linux-Instance beschrieben.
I/O-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 I/O-Operationen. Das Standard-Timeout beträgt 30 Sekunden und kann mit dem Boot-Parameter nvme_core.io_timeout
geändert werden. Bei den meisten Linux-Kerneln vor Version 4.6 lautet dieser Parameter nvme.io_timeout
.
Wenn die I/O-basierte Latenz den Wert dieses Timeout-Parameters überschreitet, wird der Linux-NVMe-Treiber die I/O nicht ausführen und einen Fehler an das Dateisystem oder die Anwendung zurückgeben. Abhängig von der I/O-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-Distribution ü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.
Abort
command
Der Befehl Abort
ist ein NVMe-Admin-Befehl, der ausgegeben wird, um einen bestimmten Befehl abzubrechen, der zuvor an den Controller gesendet wurde. Dieser Befehl wird normalerweise vom Gerätetreiber an Speichergeräte ausgegeben, die den Schwellenwert für den I/O-Betriebs-Timeout überschritten haben. Amazon-EC2-Instance-Typen, die den Abort
-Befehl unterstützen, brechen standardmäßig einen bestimmten Befehl ab, der zuvor an den Controller des angeschlossenen Amazon-EBS-Geräts gesendet wurde, an das ein Abort
-Befehl ausgegeben wird.
Die folgenden Instance-Typen unterstützen den Abort
-Befehl für alle angehängten Amazon-EBS-Volumes standardmäßig: R5b
, R6i
, M6i
, M6a
, C6gn
, C6i
, X2gd
, X2iezn
, Im4gn
, Is4gen
.
Andere Instance-Typen ergreifen keine Maßnahmen, wenn Abort
-Befehle an angehängte Amazon-EBS-Volumes ausgegeben werden.
Amazon-EBS-Geräte mit NVMe-Geräteversion 1.4
oder höher unterstützen den Abort
-Befehl.
Weitere Informationen finden Sie im Abschnitt 5.1 Befehl Abort der NVM-Express-Basisspezifikation