GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué Linux enumera las unidades NVMe como /dev/nvme0 en lugar de /dev/sda?

/dev/sd se usó originalmente para dispositivos que usan el sd-bus controlador, que es el controlador para dispositivos SCSI (y sd literalmente significa disco SCSI). Hoy en día se utiliza para discos SCSI, discos SATA y discos USB. La razón parece ser que ahora casi todos los dispositivos usan el protocolo de comando SCSI en la parte superior del bus que no es SCSI (el kernel trata a todos los dispositivos ATA por igual usando libata y finge que son dispositivos SCSI; crédito para @grawity), y por lo tanto vemos todos estos dispositivos como /dev/sd .

Pero no todos los dispositivos de almacenamiento son /dev/sd . /dev/hd y /dev/xvd todavía se utilizan:el primero para discos PATA/IDE y el último para dispositivos de almacenamiento en la nube (discos virtuales, etc.) y todos tienen diferentes controladores y nombres. No los ve porque el almacenamiento virtual está solo en nubes/hipervisores (y probablemente no use ninguno) y porque los discos PATA/IDE son cada vez más escasos y en la mayoría de las máquinas modernas el kernel en realidad usa ide-scsi controlador para traducirlo al protocolo SCSI (crédito a @Wumpus Q. Wumbley).

Otros ejemplos incluyen /dev/mmcblkXpY que es para dispositivos SD/eMMC/bare NAND/NOR y tiene el mismo esquema de nombres que /dev/nvme y /dev/vd que se usa nuevamente para discos virtuales en almacenamiento en la nube (crédito a @Jan Dorniak por los ejemplos adicionales).

En tu caso , se llama /dev/nvme porque el disco está conectado a través de un puerto NVME y usa el nvme controlador en Linux. Puedes pensar en /dev/<something> como un dispositivo que usa <something> conductor. Todos los controladores y nombres de dispositivos tienen sus propios estándares, no es un estándar para todos ellos, por lo que está completamente bien si el nombre de los dispositivos NVME es así. Y la razón por la que nvme no está traducido a scsi también es que los dos protocolos son demasiado diferentes y tal implementación sería demasiado compleja (consulte los comentarios de @grawity y @Vality para obtener información más detallada).


Además de la otra respuesta, tenga en cuenta que NVMe tiene el concepto de espacios de nombres que no encajarían en /dev/sd patrón. Por ejemplo, en mi sistema:

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

Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  3. ¿Cuándo usar /dev/random Vs /dev/urandom?

  4. Linux:¿Qué significa la letra 'u' en /dev/urandom?

  5. Cómo mapear dispositivos /dev/sdX y /dev/mapper/mpathY desde el dispositivo /dev/dm-Z

tty (/dev/tty) vs pts (/dev/pts) en Linux

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

¿Está mal vincular /dev/random a /dev/urandom en Linux?

¿Por qué en algunos sistemas Linux, el sistema de archivos raíz aparece como /dev/root en lugar de /dev/<nodo de dispositivo real> en mtab?

Diferencias entre /dev/sda y /dev/sda1