什么是nvme命名空间?它们如何运作?


18

我最近开始支持使用内置nvme ssds安装在设备上的Linux。我注意到设备文件有一个额外的数字,除了标识驱动器号和分区号的数字。IDE / SATA / SCSI驱动器通常仅具有驱动器号和分区号。

例如:/ dev / nvme0n1p2

我想知道n1部分是什么,经过一番搜索后,它看起来像标识了一个nvme'命名空间'。它的定义有点模糊:“ NVMe命名空间是一定数量的非易失性存储器(NVM),可以将其格式化为逻辑块。”

那么,这是否像在硬件控制器级别定义的分区那样,而不是在MBR或GPT分区表中?名称空间可以跨多个物理nvme ssd吗?例如,您能否创建一个名称空间,将多个ssd的存储汇集到一个逻辑名称空间中,类似于RAID 0?

对于使用分区表或LVM或可以管理多个卷(例如ZFS,Btrfs等)的文件系统无法实现的NVME命名空间,您将如何处理?

此外,为什么命名空间编号似乎从1开始而不是0?这与NVME在较低级别上跟踪名称空间编号有关(例如,分区也从1开始,而不是0,因为这是设置分区号的标准的方式,因此Linux内核仅使用分区号)存储在磁盘上的是-我猜nvme的工作方式相同吗?)

Answers:


17

在NVM Express和相关标准中,控制器提供对访问一个或多个命名空间的存储的访问。只要有足够的空间(或基础存储支持精简配置),就可以通过控制器创建和删除名称空间,并且多个控制器可以提供对共享名称空间的访问。据我所知,标准并未规定底层存储的组织方式。

但是,典型的NVMe SSD无法组合,因为它们每个都提供自己的存储和连接到PCI Express端口的控制器,并且访问点是名称空间上方的控制器-因此,名称空间不能将多个控制器分组(多个控制器可以提供对共享名称空间的访问)。最好将名称空间视为类似于企业存储(SAN等)中使用的SCSI LUN。

命名空间编号从1开始,因为这是每个控制器的命名空间标识符的工作方式。命名空间还具有更长的全局唯一标识符。

可以使用以下nvme命令来操作命名空间,该命令提供对低级别NVMe功能的支持,包括:

  • 格式化,执行低级格式化并允许使用各种功能(安全擦除,LBA格式选择...);
  • 附加和分离,这允许将控制器附加到名称空间或从名称空间分离(如果它们支持,并且名称空间允许)。

在笔记本电脑或台式机NVMe驱动器中不会出现挂接和拆离的情况。您可以将其与NVMe存储托架(例如Dell EMC出售的NVMe存储托架)一起使用,以取代过去的iSCSI SAN。

有关详细信息,请参阅NVM Express标准(它们相对容易阅读),有关本教程的简要介绍,请参见NVM Express教程


我注意到Linux“ nvme”命令除了支持删除/创建名称空间外,还提供了附加/分离和格式化名称空间的概念(这似乎与写入名称空间的文件系统的格式化操作是分开的)。您能否提供有关这些操作是什么的任何信息?
JeffFromOhio,

3
看到我更新的答案。
史蒂芬·基特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.