环境:Debian Bullseye,撰写本文时为最新版本,nvme-cli 1.12
我对 NVMe 完全陌生,目前正在尝试正确配置 NVMe SSD。据我所知,我不需要元数据,但是我想使用T10-PI保护信息。关于这个主题我有两个问题:
首先,我想知道如何查明是否已为特定设备或命名空间启用该保护。我知道在格式化设备或命名空间时可以启用或禁用 T10-PI,但我不知道如何获取其当前状态。我阅读了各种命令的手册页的大部分内容nvme
,并尝试在一定程度上理解 NVMe 规范,但无济于事。我似乎无法发现它。
我只在特定设置下遇到这个问题;对于我感兴趣的其他设置,很快就找到了如何读取其当前状态或值。
其次,我不确定如何启用这种保护。从理论上讲,从阅读来看man nvme-format
,这一点很清楚。我只需将-i <n>
参数添加到格式命令即可获得类似的内容:
nvme format /dev/nvme0 -l 3 -i 1
有问题的磁盘提供 6 种 LBA 模式,模式3
是我想要的模式:每扇区 4096 字节,无元数据;因此-l 3
参数。-i 1
打开 T10-PI。
当我发出上面的命令时,它会被执行而不会出现错误消息。之后,smartctl -x /dev/nvme0
显示当前 LBA 大小为4096
;nvme id-ns /dev/nvme0n1
确认模式3
正在按预期使用。到目前为止,一切都很好。
但以下内容却非常可疑:
root@gaia ~/scripts # nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 PHFT640100G7800CGN INTEL SSDPEDMD800G4 1 800.17 GB / 800.17 GB 4 KiB + 0 B 8DV10171
下Format
,就显示出来了4 KiB + 0 B
。为什么?据我了解,T10-PI 每个 LBA 至少需要 8 个字节的元数据。因此,我不确定到底发生了什么。
是否nvme format /dev/nvme0 -l 3 -i 1
只是禁用 PI(因为没有元数据,因此没有空间)?或者 PI 已启用,但nvme list
仅显示“真实”元数据大小(不包括 PI 所需的“隐式”字节)?
我需要使用-l 4
而不是-l 3
with吗nvme format
?-l 4
表示 4096 字节 LBA 大小 + 8 字节元数据。如果我需要使用-l 4
,为什么nvme format -l 3 -i 1
不会因错误的命令行参数而抛出错误(如果我们没有元数据,我们无法打开T10-PI)?