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.
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ö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
-
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 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-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
- 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. -
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/nvme
1
n1Volume 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/nvme
1
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 "/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/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 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.