SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-10-19

VPS-Disk unter Linux wirklich als NVMe prüfen

Ihr Host verspricht NVMe? Prüfen Sie das im Gast mit lsblk, sysfs, nvme-cli und einem begrenzten fio-Lauf. Erfahren Sie, warum virtio die Disk verbirgt.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, August 3, 2026.

Linux unter vier Schritten auf eine NVMe-Disk prüfen

Um eine NVMe-Disk auf einem Linux-VPS zu prüfen, führen Sie vier Prüfungen in dieser Reihenfolge aus: lsblk für den Gerätenamen, das Flag rotational und den Buspfad in sysfs, nvme list für einen echten NVMe-Controller und einen kurzen fio-Lauf für die eine Kennzahl, die ein Host nicht beschönigen kann. Die ersten drei Prüfungen dauern jeweils eine Sekunde. Die letzte klärt die Frage, weil der Hypervisor auf den meisten VPS-Plattformen die physische Disk vor dem Gast verbirgt.

NVMe (non-volatile memory express) ist das Protokoll, über das Flash-Speicher mit dem PCIe-Bus (peripheral component interconnect express) kommuniziert. Es hat den für rotierende Laufwerke entwickelten SATA- und AHCI-Pfad ersetzt und ist schnell, weil es einen Warteschlangenengpass zwischen CPU und Flash beseitigt. In einer virtuellen Maschine verwenden Sie dieses Protokoll nur selten direkt. Sie greifen auf eine virtuelle Disk zu, die der Host für Sie zusammenstellt. Daher beschreibt der Gerätename im Gast einen Treiber und nicht das Speichermedium im Rack.

Schritt 1: Was zeigt lsblk?

lsblk liest die Blockgeräteliste des Kernels. Das Flag -d blendet Partitionen aus, sodass eine Zeile pro Datenträger angezeigt wird.

lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODEL

Ein KVM-VPS antwortet normalerweise so:

NAME ROTA  SIZE TYPE TRAN   MODEL
vda     1   80G disk virtio

Drei Namensmuster decken fast jeden Linux-Server ab:

  • nvme0n1 ist Namespace 1 auf NVMe-Controller 0. Ihr Gast verwendet ein NVMe-Gerät, entweder physisch oder emuliert.
  • sda ist die SCSI-Schicht. Physische SATA- und SAS-Datenträger werden hier eingeordnet. Das gilt auch für den virtio-scsi-Treiber.
  • vda ist virtio-blk, der paravirtualisierte Blocktreiber, den die meisten KVM-Hosts standardmäßig verwenden.

In der Spalte TRAN (Transport) steht bei einem NVMe-Gerät nvme und bei einem SATA-Datenträger, den der Gast direkt sehen kann, sata. Bei virtio-blk geben aktuelle util-linux-Releases virtio aus. lsblk leitet diesen Wert aus dem Gerätenamen vd ab. Ältere Releases lassen die Spalte leer. In beiden Fällen gibt es für den Gast keinen physischen Transport, den er melden könnte. MODEL bleibt aus demselben Grund leer. Eine leere Modellzeichenfolge ist bei einem VPS normal und liefert keine Informationen über die Hardware.

Schritt 2: Eine rotierende Festplatte ausschließen

DISK=$(lsblk -dno NAME,TYPE | awk '$2 == "disk" { print $1; exit }')
echo "checking $DISK"
cat "/sys/block/$DISK/queue/rotational"
readlink -f "/sys/block/$DISK"

Die Datei rotational enthält 1, wenn der Kernel das Gerät als Festplatte mit rotierenden Magnetscheiben behandelt, und andernfalls 0. Auf Bare Metal stammt der Wert vom Laufwerk. Unter virtio-blk stammt er aus keiner Quelle: Die virtio-blk-Spezifikation enthält kein Feature-Bit für den Medientyp oder die Rotationsgeschwindigkeit, und der Linux-virtio-blk-Treiber markiert jede Festplatte als rotierend. Ein vda liefert daher normalerweise 1, selbst auf einem Host mit ausschließlich Flash-Speicher, sofern es nicht jemand mit einer udev-Regel auf 0 gesetzt hat. Bei einem sda unter virtio-scsi entspricht der Wert der Konfiguration des Hosts. Innerhalb eines VPS kann dieses Flag daher nicht feststellen, ob eine Festplatte vorhanden ist oder nicht. Ein 1 allein ist kein Grund für ein Support-Ticket. Der folgende fio-Test beantwortet diese Frage.

readlink -f löst den Sysfs-Symlink auf und gibt den Bus aus, an dem das Gerät angeschlossen ist:

/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda

Das Wort virtio in diesem Pfad ist die Antwort für diesen Schritt. Ein NVMe-Gerät liefert einen Pfad mit nvme, beispielsweise /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1, und eine direkt angeschlossene ATA-Festplatte liefert einen Pfad mit ata1. Dies ist dieselbe Information, die lsblk ausgegeben hat, stammt jedoch direkt aus dem Kernel und nicht aus einer formatierten Spalte. Das ist hilfreich, wenn das Feld TRAN leer ist.

Schritt 3: nvme-cli und den PCI-Bus abfragen

sudo apt update
sudo apt install -y nvme-cli pciutils
sudo nvme list || echo "nvme-cli found no NVMe device"
lspci | grep -i -e nvme -e 'non-volatile' || echo "no NVMe controller on this guest's PCI bus"

nvme list gibt eine Zeile pro Namespace aus, einschließlich der Seriennummer, der Modellbezeichnung und der Firmware-Version des Controllers. Eine leere Tabelle bedeutet, dass Ihrem Gast kein NVMe-Gerät präsentiert wird. lspci gibt keine passende Zeile aus. Das bestätigt dasselbe aus der anderen Richtung: Der virtuelle PCI-Bus, den Ihr Gast sehen kann, enthält keinen NVMe-Controller. Beide leeren Ergebnisse sind auf einem virtio-VPS normal. Keines von beiden ist ein Beleg dafür, dass auf dem Host keine NVMe-Laufwerke vorhanden sind.

Wenn ein Namespace angezeigt wird, geht nvme-cli weiter. sudo nvme id-ctrl /dev/nvme0 gibt die Identität des Controllers aus. sudo nvme smart-log /dev/nvme0n1 gibt die Temperatur, die Betriebsstunden seit dem Einschalten und den Prozentsatz der angegebenen Schreibdauer aus, der bereits verbraucht wurde. Führen Sie diese Befehle nur aus, wenn nvme list tatsächlich ein Gerät aufgelistet hat. Beide Befehle benötigen einen echten /dev/nvme*-Knoten zum Öffnen.

Warum ein echter NVMe-Host weiterhin /dev/vda anzeigt

Der Hypervisor legt fest, welches Gerätemodell Ihr Gastbetriebssystem sieht. Diese Auswahl ist unabhängig vom darunterliegenden Speichermedium. Drei Konfigurationen sind üblich.

  • virtio-blk oder virtio-scsi über eine Datei, ein logisches Volume oder ein ZFS-Dataset, das auf NVMe-Laufwerken liegt. Sie sehen vda oder sda. Der Speicher ist NVMe. Das Gastbetriebssystem kann das nicht erkennen.
  • Ein emulierter NVMe-Controller vor einem beliebigen Speicher. Sie sehen nvme0n1, selbst wenn die Daten auf einem SATA-Array oder auf einem Netzwerk-Volume zwei Racks entfernt gespeichert werden.
  • PCIe-Passthrough, bei dem der Host einen physischen Controller an ein Gastbetriebssystem übergibt. Sie sehen ein echtes nvme0n1 mit einer echten Modellbezeichnung. Bei gemeinsam genutzten VPS-Tarifen ist das selten, weil die Karte dann ausschließlich diesem Kunden zugewiesen ist.

Der Gerätename kann Sie daher in beide Richtungen täuschen. Zusätzlich kann der Host zwischen Ihren Schreibvorgängen und dem Flash einen Write-Back-Cache, eine RAID-Schicht oder ein repliziertes Netzwerk-Volume einsetzen. Jede dieser Schichten verändert die erzielte Leistung, ohne einen einzigen Namen in /sys zu ändern. Deshalb ist der Name der Ausgangspunkt, aber nicht das Ergebnis der Analyse. Wenn Sie noch einen Tarif auswählen, erklärt der Unterschied zwischen NVMe- und SATA-SSD-Speicher, wofür sich die einzelnen Leistungsstufen tatsächlich lohnen.

Die ehrliche Messgröße ist die Latenz. Messen Sie sie daher.

fio (flexible I/O tester) führt echte Lesevorgänge gegen eine echte Datei aus und gibt an, wie lange jeder Vorgang gedauert hat. Kleine zufällige Lesevorgänge sind hier die passende Arbeitslast, weil sie die Round-Trip-Zeit zum Medium sichtbar machen und nicht durch Read-Ahead bedient werden können.

Erstellen Sie zuerst die Testdatei und prüfen Sie, ob dieses Dateisystem ungepuffertes I/O akzeptiert. --direct=1 öffnet die Datei mit O_DIRECT und umgeht dadurch den Page Cache. Ohne diese Option messen Sie den eigenen RAM und erhalten Werte, die kein Datenträger erreichen kann.

sudo apt install -y fio
fio --name=prep --filename=/var/tmp/nvme-check.tmp --size=256M --bs=1M --rw=write --direct=1 --end_fsync=1 > /dev/null \
  && echo "unbuffered writes work here, the timing test is valid" \
  || echo "this filesystem refuses direct=1, so the timing test below will not run"

Wenn dabei die Ablehnung ausgegeben wurde, liegt der gewählte Pfad auf einem Dateisystem ohne O_DIRECT-Unterstützung. Container-Overlay-Dateisysteme und einige Netzwerkdateisysteme verhalten sich so. Wählen Sie ein Verzeichnis auf dem Root-Dateisystem des VPS und versuchen Sie es erneut. Wenn dabei eine Erfolgsmeldung ausgegeben wurde, starten Sie die Messung:

fio --name=randread4k --filename=/var/tmp/nvme-check.tmp --bs=4k --rw=randread \
  --direct=1 --iodepth=1 --numjobs=1 --runtime=20 --time_based --group_reporting \
  || echo "fio stopped early, read its first line for the reason"
rm -f /var/tmp/nvme-check.tmp

Der Test ist absichtlich begrenzt: ein Job, eine Warteschlangentiefe von 1, zwanzig Sekunden und 256 MB Daten. Dadurch wird die Festplatte nicht gefüllt und es entsteht kein Missbrauchsverdacht. Die Warteschlangentiefe 1 ist für diese Frage ebenfalls die ehrliche Einstellung, weil ein langsames Gerät sich bei tiefen Warteschlangen hinter Parallelität verbergen kann, während die Latenz hoch bleibt.

Fio-Ausgabe lesen

Zwei Zeilen sind relevant. Die Zusammenfassungszeile sieht wie read: IOPS=9012, BW=35.2MiB/s aus. Darunter gibt fio einen clat-Block aus. clat ist die Abschlusslatenz: die Zeit zwischen der Übergabe eines Lesevorgangs durch fio und der Rückgabe der Daten durch den Kernel. Lesen Sie den Wert avg. Lesen Sie anschließend das 99.00th-Perzentil in der Liste clat percentiles. Der Durchschnitt zeigt die Speicherklasse. Das 99. Perzentil zeigt, wie langsam das langsamste 1 Prozent der Lesevorgänge war. Bei einem gemeinsam genutzten Host wird eine Auslastung dort meist zuerst sichtbar.

Fio gibt Latenzen bei kleinen Werten in Mikrosekunden aus. Bei größeren Werten wechselt es zu Millisekunden. Prüfen Sie die Einheit in der vorherigen Zeile, bevor Sie Werte vergleichen.

Welche Zahlen unterscheiden NVMe-Klasse von SATA-Klasse

Die unten aufgeführten Zahlen sind typische, veröffentlichte Werte für 4k-Random-Reads bei einem einzelnen Job und einer Queue Depth von 1. Sie stammen aus Herstellerdokumentationen und Community-Benchmarks mit Stand August 2026. Es handelt sich um Vergleichswerte, nicht um Messungen von Ihrem Server.

DiagrammTypical 4k random read latency at queue depth 1, by storage class
Die Daten hinter diesem Diagramm
[
  {
    "label": "Local NVMe",
    "avg_latency_us": 110
  },
  {
    "label": "Local SATA SSD",
    "avg_latency_us": 320
  },
  {
    "label": "Network block storage",
    "avg_latency_us": 900
  }
]
DiagrammTypical 4k random read IOPS at queue depth 1, by storage class
Die Daten hinter diesem Diagramm
[
  {
    "label": "Local NVMe",
    "iops": "9,000"
  },
  {
    "label": "Local SATA SSD",
    "iops": "3,100"
  },
  {
    "label": "Network block storage",
    "iops": "1,100"
  }
]

Ein lokales NVMe-Volume beantwortet einen 4k-Random-Read in etwa 110 Mikrosekunden und erreicht bei einer Queue Depth von 1 etwa 9,000 IOPS. Eine lokale SATA-SSD liegt bei etwa 320 Mikrosekunden und 3,100 IOPS. Netzwerkgebundener Blockspeicher landet bei etwa 900 Mikrosekunden und 1,100 IOPS, da ein Lesezugriff, der keinen hostseitigen Cache trifft, das Netzwerk durchqueren muss, bevor er den Flash-Speicher erreicht.

Bei einer Queue Depth von 1 sind diese beiden Spalten nahezu die gleiche Tatsache, nur anders ausgedrückt: Wenn jeweils nur ein Lesezugriff gleichzeitig läuft, ergibt sich der Durchsatz grob aus eins geteilt durch die Latenz, abzüglich des Overheads pro Anfrage. Wenn Ihr Durchschnittswert näher bei 110 als bei 320 Mikrosekunden liegt, verwenden Sie Speicher der NVMe-Klasse, unabhängig davon, wie lsblk das Gerät bezeichnet. Liegt der Wert näher bei 900 Mikrosekunden, befindet sich entweder etwas Langsameres als lokaler Flash-Speicher im Pfad, oder der Host begrenzt die IOPS Ihres Volumes, was Hypervisoren wie QEMU unabhängig vom zugrunde liegenden Speicher tun können. In beiden Fällen liefert Ihr Volume keine Latenz der NVMe-Klasse, ungeachtet dessen, was auf der Bestellseite über die Laufwerke des Hosts steht.

Führen Sie den Test mehr als einmal aus, bevor Sie sich beschweren

Ein einzelner Durchlauf ist eine Stichprobe, kein Ergebnis. Ein VPS verwendet gemeinsam genutzte Datenträger. Ein ausgelasteter Nachbar kann Ihre Latenz zehn Minuten lang verdoppeln und anschließend wieder verschwinden. Einige Plattformen gewähren außerdem Burst-Guthaben. Dadurch sehen die ersten Minuten eines Tests hervorragend aus. Führen Sie denselben Befehl drei- oder viermal zu verschiedenen Tageszeiten aus. Vergleichen Sie das schlechteste Ergebnis, nicht das beste. Ein einzelner schlechter Durchlauf ist eine Momentaufnahme. Ein Muster ist ein Fehler, für den sich ein Support-Ticket lohnt. Mit drei mit Zeitstempeln versehenen fio-Ausgaben wird das Ticket besser bearbeitet. Ein umfassenderes Bild, das neben dem Datenträger auch CPU und Netzwerk abdeckt, erhalten Sie mit einem vollständigen VPS-Benchmark-Durchlauf.

Was Sie mit dem Ergebnis tun sollten

Liegt die Latenz im NVMe-Bereich, müssen Sie sich nicht weiter mit dem Gerätenamen beschäftigen. Fahren Sie mit dem nächsten Schritt fort. vda ist keine Herabstufung. Es ist der schnellste virtuelle Festplattentreiber, den die meisten Hosts anbieten, und genau diesen sollten Sie verwenden.

Liegt die Latenz bei einem Tarif, der als lokales NVMe verkauft wird, im Bereich von Netzwerk-Storage, haben Sie eine konkrete und reproduzierbare Grundlage: den exakten fio-Befehl, die durchschnittliche Abschlusslatenz und die Zeitpunkte, zu denen Sie den Test ausgeführt haben. Daraus ergibt sich ein Support-Ticket und keine Diskussion in einem Forum. Bevor Sie das Ticket senden, stellen Sie sicher, dass der Datenträger nicht einfach voll oder stark fragmentiert ist. Prüfen Sie außerdem, dass während des Tests kein Prozess auf dem System intensiv schreibt.

Führen Sie diese Prüfung am Tag der Bereitstellung aus, nicht erst dann, wenn sich etwas langsam anfühlt. So haben Sie eine Baseline, mit der Sie später vergleichen können. Die Prüfung passt gut zu den ersten zehn Minuten auf einem neuen VPS, zusammen mit der Einrichtung der Firewall und der SSH-Schlüssel. Wenn der Unterschied zwischen den Storage-Klassen noch unklar ist, erklärt was ein SSD-VPS tatsächlich bietet die technischen Grundlagen dieses Themas.

FAQ

Warum zeigt lsblk /dev/vda an, obwohl mein Host NVMe angibt?

Weil vda den virtio-blk-Treiber in Ihrem Gast bezeichnet, nicht die Hardware auf dem Host. Ein KVM-Hypervisor stellt ein paravirtualisiertes Blockgerät bereit, das von einer Datei, einem logischen Volume oder einem Dataset unterstützt wird. Dieser zugrunde liegende Speicher kann auf NVMe-Laufwerken liegen, ohne dass der Gast davon erfährt. Der Name beschreibt die Virtualisierungsschicht. Nur eine Latenzmessung beschreibt das Speichermedium.

Beweist rotational 0, dass ich eine NVMe-Festplatte habe?

Nein. /sys/block/<dev>/queue/rotational mit dem Wert 0 bedeutet, dass der Kernel das Gerät nicht als Gerät mit rotierenden Magnetscheiben behandelt. In einem VPS ist dies jedoch eine Einstellung und keine Messung. virtio-blk verfügt über kein Feature-Bit für den Medientyp. Der Linux-Treiber virtio-blk meldet für jedes Laufwerk 1, sofern dies nicht überschrieben wird. Ein 0 an dieser Stelle bedeutet daher meist, dass jemand den Wert manuell gesetzt hat. Damit lässt sich NVMe weder von einer SATA-SSD noch lokaler Flash-Speicher von einem Netzwerk-Volume unterscheiden. Auch ein 1 in einem VPS beweist nicht, dass eine Festplatte verwendet wird. Orientieren Sie sich daher an der fio-Latenz und nicht an diesem Flag.

Warum ist die Ausgabe von nvme list auf meinem VPS leer?

Weil für Ihren Gast kein NVMe-Controller bereitgestellt wird. nvme list und lspci lesen beide aus, was die virtuelle Maschine sehen kann. Ein virtio-blk- oder virtio-scsi-Laufwerk stellt keinen NVMe-Controller zur Aufzählung bereit. Eine leere Tabelle ist bei den meisten VPS-Tarifen das normale Ergebnis. Sie beweist nicht, dass auf dem Host keine NVMe-Laufwerke vorhanden sind. Installieren Sie nvme-cli mit sudo apt install -y nvme-cli. Rechnen Sie mit einer leeren Tabelle, sofern kein Controller durchgereicht wurde.

Welches fio-Ergebnis gilt als Speicher der NVMe-Klasse?

Bei einer Warteschlangentiefe von 1, 4k-Random-Reads und --direct=1 entspricht eine durchschnittliche Abschlusslatenz von ungefähr 110 Mikrosekunden der NVMe-Klasse. Daraus ergeben sich ungefähr 9,000 IOPS. Ungefähr 320 Mikrosekunden weisen auf eine SATA-SSD hin. Ungefähr 900 Mikrosekunden weisen auf netzwerkgebundenen Speicher hin, bei dem Lesezugriffe, die nicht aus dem Cache des Hosts bedient werden, einen Netzwerk-Hop durchlaufen. Sie können auch auf ein Volume hinweisen, dessen Leistung der Host begrenzt. Dies sind typische veröffentlichte Bereiche für August 2026. Vergleichen Sie daher Größenordnungen statt exakter Werte. Wiederholen Sie den Test zu unterschiedlichen Uhrzeiten, bevor Sie eine Schlussfolgerung ziehen.

War dieser Artikel hilfreich?