最近我在我的 Linux 计算机上安装了一个 NVMe 驱动器,我注意到它被列为/dev/nvme0
并且它的分区是/dev/nvme0p1
. 我知道它与 SATA 驱动器的接口不同,但它以这种方式列出的原因是什么?似乎调用驱动器/dev/sd$LETTER$PARTITIONNUMBER
是标准,即使事物有不同的标准,如 SCSI,这打破了这一点,除了不同的名称之外,还使用数字而不是字母来表示驱动器和分区号前的 ap。
最近我在我的 Linux 计算机上安装了一个 NVMe 驱动器,我注意到它被列为/dev/nvme0
并且它的分区是/dev/nvme0p1
. 我知道它与 SATA 驱动器的接口不同,但它以这种方式列出的原因是什么?似乎调用驱动器/dev/sd$LETTER$PARTITIONNUMBER
是标准,即使事物有不同的标准,如 SCSI,这打破了这一点,除了不同的名称之外,还使用数字而不是字母来表示驱动器和分区号前的 ap。
/dev/sd
最初用于使用sd-bus
驱动程序的设备,它是 SCSI 设备的驱动程序(sd
字面意思是 SCSI 磁盘)。现在它用于 SCSI 磁盘、SATA 磁盘和 USB 磁盘。原因似乎是现在几乎所有设备都在非 SCSI 总线之上使用 SCSI 命令协议(内核使用 libata 平等对待所有 ATA 设备,并假装它们是 SCSI 设备 - 感谢@grawity),因此我们将所有这些设备视为/dev/sd
.但并非所有存储设备都是
/dev/sd
。/dev/hd
并且/dev/xvd
仍在使用 - 前者用于 PATA/IDE 磁盘,后者用于云存储设备(虚拟磁盘等),它们都有不同的驱动程序和命名。你看不到它们是因为虚拟存储只在云/虚拟机管理程序上(你可能不使用任何)并且因为 PATA/IDE 磁盘变得越来越稀有并且在大多数现代机器上内核实际上使用ide-scsi
驱动程序来翻译它到 SCSI 协议(归功于@Wumpus Q. Wumbley)。其他示例包括用于 SD/eMMC/裸 NAND/NOR 设备并具有与云存储中的虚拟磁盘
/dev/mmcblkXpY
相同的命名方案的名称(额外示例归功于@Jan Dorniak)。/dev/nvme
/dev/vd
在你的例子中,它被调用
/dev/nvme
是因为磁盘通过 NVME 端口连接并使用nvme
Linux 上的驱动程序。您可以将其/dev/<something>
视为使用<something>
驱动程序的设备。所有的设备驱动程序和命名都有自己的标准,并不是所有的标准都适用,所以如果 NVME 设备的命名是这样的话,那完全没问题。nvme
未翻译成的原因scsi
是这两个协议差异太大,这样的实现太复杂(请参阅@grawity 和@Vality 的评论以获取更多详细信息)。除了其他答案之外,请注意 NVMe 具有不适合/dev/sd<letter(s)><number>模式的命名空间概念。例如,在我的系统上: