64 votes

Pourquoi Linux répertorie-t-il les lecteurs NVMe sous /dev/nvme0 au lieu de /dev/sda ?

Récemment, j'ai installé un disque NVMe dans mon ordinateur Linux et j'ai remarqué qu'il est répertorié en tant que /dev/nvme0 et sa partition est /dev/nvme0p1 . Je suis conscient qu'il s'agit d'une interface différente des disques SATA, mais quelle est la raison pour laquelle elle est répertoriée de cette façon ? Il semble qu'appeler les disques /dev/sd$LETTER$PARTITIONNUMBER est la norme, même lorsque les choses ont des normes différentes comme SCSI, et ceci brise cela en utilisant des chiffres au lieu de lettres pour désigner le lecteur et un p avant le numéro de partition, en plus du nom différent.

79voto

Fanatique Points 4092

/dev/sd était à l'origine utilisé pour les dispositifs utilisant le sd-bus qui est le pilote pour les périphériques SCSI (et sd signifie littéralement "disque SCSI"). Aujourd'hui, il est utilisé pour les disques SCSI, les disques SATA et les disques USB. La raison semble être que maintenant, presque tous les périphériques utilisent le protocole de commande SCSI sur un bus non-SCSI (le noyau traite tous les périphériques ATA de la même manière en utilisant libata et en prétendant qu'il s'agit de périphériques SCSI - crédit à @grawity), et donc nous voyons tous ces périphériques comme étant /dev/sd .

Mais tous les dispositifs de stockage ne sont pas /dev/sd . /dev/hd y /dev/xvd sont toujours utilisés - le premier pour les disques PATA/IDE et le second pour les périphériques de stockage en nuage (disques virtuels, etc.) et ils ont tous des pilotes et des noms différents. Vous ne les voyez pas parce que le stockage virtuel n'existe que sur les nuages / hyperviseurs (et vous n'en utilisez probablement pas) et parce que les disques PATA/IDE deviennent de plus en plus rares et que sur la plupart des machines modernes, le noyau utilise en fait les pilotes suivants ide-scsi pour le traduire en protocole SCSI (crédit à @Wumpus Q. Wumbley).

Parmi les autres exemples, citons /dev/mmcblkXpY qui est pour les périphériques SD/eMMC/bare NAND/NOR et a le même schéma de dénomination que /dev/nvme y /dev/vd qui est à nouveau utilisé pour les disques virtuels dans le stockage en nuage (crédit à @Jan Dorniak pour les exemples supplémentaires).


Dans votre cas il s'appelle /dev/nvme parce que le disque est connecté par un port NVME et utilise la technologie nvme sous Linux. Vous pouvez simplement penser à /dev/<something> comme un dispositif qui utilise <something> conducteur. Tous les pilotes et noms de périphériques ont leurs propres normes, il n'y a pas une seule norme pour tous, donc il n'y a aucun problème si le nom des périphériques NVME est comme ça. Et la raison pour laquelle nvme n'est pas traduit en scsi est que les deux protocoles sont trop différents et qu'une telle mise en œuvre serait trop complexe (voir les commentaires de @grawity et @Vality pour des informations plus détaillées).

0 votes

Les commentaires ne sont pas destinés à une discussion approfondie ; cette conversation a été déplacé vers le chat .

11voto

Roman Odaisky Points 351

En plus de l'autre réponse, notez que NVMe a le concept d'espaces de noms qui n'entrerait pas dans le cadre de l'initiative /dev/sd<lettre(s)><numéro> modèle. Par exemple, sur mon système :

$ ls -1 /dev/nvme*
/dev/nvme0
/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2

0 votes

Vous voulez dire qu'il existe des périphériques NVME avec une configuration interne telle que N peut être un nombre différent de 1. Donc /dev/nvme1n3 par exemple qui aurait alors des partitions sur lui, donc nvme1n3p5 et cela ne peut pas être exprimé comme /dev/sdb5 (où est le n3 ?).

2 votes

@Criggie C'est en effet possible, c'est juste très rare de trouver des configurations de ce type. Cela dit, bien qu'il podría soit représenté comme un autre disque, cela ajoute d'autres problèmes plus compliqués à résoudre (à savoir, le mappage de ces disques vers des dispositifs NVMe réels, et le fait que certains dispositifs NVMe peuvent reconfigurer les espaces de noms en ligne).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X