Jef*_*hio 33 linux devices nvme
我最近开始支持安装在带有内置 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 的工作方式相同吗?)
Ste*_*itt 25
在 NVM Express 和相关标准中,控制器可以访问划分为一个或多个命名空间的存储。命名空间可以通过控制器创建和删除,只要它们有空间(或底层存储支持精简配置),并且多个控制器可以提供对共享命名空间的访问。据我所知,标准没有指定底层存储的组织方式。
然而,典型的 NVMe SSD 不能组合,因为它们每个都提供自己的存储和连接到 PCI Express 端口的控制器,而接入点是控制器,在命名空间之上——因此命名空间不能组合多个控制器(多个控制器可以提供对共享命名空间的访问)。最好将命名空间视为类似于企业存储(SAN 等)中使用的 SCSI LUN 的东西。
命名空间编号从 1 开始,因为这是每个控制器命名空间标识符的工作方式。命名空间还有更长的、全局唯一的标识符。
可以使用该nvme命令操作命名空间,该命令提供对低级 NVMe 功能的支持,包括:
您在笔记本电脑或台式机 NVMe 驱动器中不会遇到连接和分离的问题。您可以将它与 NVMe 存储托架一起使用,例如 Dell EMC 出售的那些,它们取代了过去的 iSCSI SAN。
有关详细信息,请参阅NVM Express 标准(它们相对容易阅读),以及此 NVM Express 教程演示文稿以获得很好的介绍。
从马嘴里说出来:
主机软件希望将 NVMe SSD 分解为多个命名空间的原因有很多:逻辑隔离、多租户、安全隔离(每个命名空间加密)、出于恢复目的而写保护命名空间、过度配置以提高写入性能和耐用性等等。
您可以使用命令检查名称空间支持哪些功能nvme,例如通过:
# nvme id-ns -H /dev/nvme0n1
NVME Identify Namespace 1
[..]
LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes
- Relative Performance: 0x2 Good (in use)
LBA Format 1 : Metadata Size: 0 bytes - Data Size: 4096 bytes
- Relative Performance: 0x1 Better
Run Code Online (Sandbox Code Playgroud)
您可以检查您的设备支持多少个命名空间,如下所示:
# nvme id-ctrl -H /dev/nvme0 | grep nn
nn : 1
Run Code Online (Sandbox Code Playgroud)
查看NVMe 基本规范 1.4b,它定义有效的 NSID 大于 0:
有效 NSID 是可用于引用 NVM 子系统中存在的命名空间的可能 NSID 范围。任何 NSID 均有效,除非该 NSID 为 0h 或大于识别控制器数据结构中报告的命名空间字段数量(请参阅图 251)。NSID FFFFFFFFh 是一个广播值,用于指定所有命名空间。无效 NSID 是任何既不是有效 NSID 也不是广播值的值。
(第 6.1.2 节有效和无效 NSID)
将 0 作为无效值的优点是您可以使用 0 来终止命名空间 ID 数组(参见第 4.10 节命名空间列表)。
| 归档时间: |
|
| 查看次数: |
12331 次 |
| 最近记录: |