Warum listet Linux NVMe-Laufwerke als /dev/nvme0 anstelle von /dev/sda auf?

Kürzlich habe ich ein NVMe-Laufwerk auf meinem Linux-Computer installiert und festgestellt, dass es als /dev/nvme0 aufgeführt ist und seine Partition /dev/nvme0p1 ist. Ich bin mir bewusst, dass es eine andere Schnittstelle als SATA-Laufwerke ist, aber was ist der Grund, warum es so aufgeführt ist? Es scheint, als ob das Aufrufen von Laufwerken /dev/sd$LETTER$PARTITIONNUMBER der Standard ist, auch wenn die Dinge unterschiedliche Standards wie SCSI haben, und dies bricht dies, indem Zahlen anstelle von Buchstaben verwendet werden, um das Laufwerk und ein p vor der Partitionsnummer zu bezeichnen, zusätzlich zu der anderen Namen.

Author: Fanatique, 2019-06-17

2 answers

/dev/sd wurde ursprünglich für Geräte verwendet, die den Treiber sd-bus verwenden, der der Treiber für SCSI-Geräte ist (und sd buchstäblich für SCSI Disk steht). Heutzutage wird es für SCSI-Festplatten, SATA-Festplatten und USB-Festplatten verwendet. Der Grund scheint zu sein, dass jetzt fast alle Geräte das SCSI-Befehlsprotokoll über dem Nicht-SCSI-Bus verwenden (der Kernel behandelt alle ATA-Geräte gleichermaßen mit libata und gibt vor, dass es sich um SCSI - Geräte handelt-Kredit an @grawity), und daher sehen wir alle diese Geräte als /dev/sd.

Aber nicht alle Speichergeräte sind /dev/sd. /dev/hd und /dev/xvd werden weiterhin verwendet-erstere für PATA/IDE-Laufwerke und letztere für Cloud-Speichergeräte (virtuelle Festplatten usw.) und Sie alle haben unterschiedliche Treiber und benennen. Sie sehen sie nicht, weil sich virtueller Speicher nur auf Clouds / Hypervisoren befindet (und Sie wahrscheinlich keinen verwenden) und weil PATA / IDE-Festplatten immer seltener werden und auf den meisten modernen Computern der Kernel tatsächlich verwendet ide-scsi Treiber, um es in das SCSI-Protokoll zu übersetzen (kredit an @Wumpus Q. Wumbley).

Weitere Beispiele sind /dev/mmcblkXpY für SD / eMMC / bare NAND / NOR-Geräte mit dem gleichen Namensschema wie /dev/nvme und /dev/vd, das wiederum für virtuelle Festplatten im Cloud-Speicher verwendet wird (Gutschrift an @Jan Dorniak für die zusätzlichen Beispiele).


In Ihrem Fall heißt es /dev/nvme, da die Festplatte über einen NVME-Port verbunden ist und unter Linux den nvme - Treiber verwendet. Sie können sich /dev/<something> einfach als ein Gerät vorstellen, das den <something> - Treiber verwendet. Aller gerätetreiber und Benennungen haben ihre eigenen Standards, es ist kein Standard für alle, daher ist es völlig in Ordnung, wenn die Benennung für NVME-Geräte so ist. Und der Grund, warum nvme nicht auch in scsi übersetzt wird, ist, dass die beiden Protokolle zu unterschiedlich sind und eine solche Implementierung zu komplex wäre (weitere Informationen finden Sie in den Kommentaren von @grawity und @Vality).

 72
Author: Fanatique,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-06-20 09:27:36

Beachten Sie zusätzlich zu der anderen Antwort, dass NVMe das Konzept von Namespaces hat, die nicht in das Muster /dev/sd. Zum Beispiel auf meinem system:

$ ls -1 /dev/nvme*
/dev/nvme0
/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2
 9
Author: Roman Odaisky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-06-17 23:33:46