web-dev-qa-db-fra.com

Pourquoi Linux List NVME lance-t-il comme / dev / nvme0 au lieu de / dev / sda?

Récemment, j'ai installé un lecteur NVME dans mon ordinateur Linux et j'ai remarqué qu'il est répertorié comme /dev/nvme0 et sa partition est /dev/nvme0p1. Je suis conscient que c'est une interface différente de celle de SATA, mais quelle est la raison pour laquelle il est répertorié de cette façon? Il semble que l'appelant des lecteurs /dev/sd$LETTER$PARTITIONNUMBER est la norme, même lorsque les choses ont des normes différentes telles que SCSI, ce qui enfreint que, 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.

57
user1030296

/dev/sd a été utilisé à l'origine pour les appareils utilisant le sd-bus Pilote, qui est le pilote pour les périphériques SCSI (et sd représente littéralement le disque SCSI). De nos jours, il est utilisé pour les disques SCSI, les disques SATA et les disques USB. La raison semble être que maintenant presque tous les appareils utilisent le protocole de commande SCSI au-dessus du bus non SCSI (le noyau traite également tous les appareils ATA utilisant la libate et prétend qu'ils sont des périphériques SCSI - crédit à @grawity), et donc Nous voyons tous ces appareils comme /dev/sd.

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

D'autres exemples incluent /dev/mmcblkXpY qui est pour SD/EMMC/nue NAND/NOR DISPOSITIFS et a le même schéma de dénomination que /dev/nvme et /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é via un port NVME et utilise le pilote nvme sous Linux. Vous pouvez simplement penser à /dev/<something> comme un appareil qui utilise <something> chauffeur. Tous les pilotes de périphérique et les nommés ont leurs propres normes, ce n'est pas un standard pour tous, il est donc complètement correct si la nommée pour les appareils NVME est comme ça. Et la raison pour laquelle nvme _ n'est pas traduit par scsi est également que les deux protocoles sont trop différents et que cette implémentation serait trop complexe (voir les commentaires de @grawity et @vality pour plus de détails détaillés).

71
Fanatique

En plus de l'autre réponse, notez que NVME a le concept d'espaces de noms qui ne correspondraient pas dans la touche / dev/SD <lettre (s)> <numéro>. Par exemple, sur mon système:

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