列出 NVMe 驱动器的功能(例如用于非 NVME 的 hdparm -I)

列出 NVMe 驱动器的功能(例如用于非 NVME 的 hdparm -I)

使用非 NVMe 驱动器,我可以运行:

# hdparm -I /dev/whatever | grep TRIM
Data Set Management TRIM supported (limit 8 block)
Deterministic read data after TRIM

使用 Samsung 960 EVO 1TB NVMe 驱动器 (PCI Express),我得到:

# hdparm -I /dev/nvme0n1
/dev/nvme0n1:
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device

我可以跑

# smartctl --all /dev/nvme0n1

并获取有关驱动器的一些信息,但没有获取有关 TRIM 类型的信息。

我安装了nvme-cli,然后运行nvme get-feature -f 0-f 0xe从驱动器中获取了一些功能,但没有关于 TRIM 类型的信息。

Linux 中有没有办法查询 NVME 设备,列出它支持的 TRIM 类型?

Linux 中有没有一种方法可以查询 NVMe 设备,获取hdparm -I如果不是 NVMe 则显示的其他内容的列表,smartctl而这nvme似乎没有涵盖?

答案1

据我了解,TRIM相当于NVME数据集管理(DSM)Deallocate。如果支持,它可以应用于 256 个区域,每个区域的大小最多为 16 个块。

查看id-ctrl命令 oncs.bit2(如果支持)。

# nvme id-ctrl /dev/nvme1 -H
oncs    : 0x6
  [5:5] : 0 Reservations Not Supported
  [4:4] : 0 Save and Select Not Supported
  [3:3] : 0 Write Zeroes Not Supported
  [2:2] : 0x1   Data Set Management Supported
  [1:1] : 0x1   Write Uncorrectable Supported
  [0:0] : 0 Compare Not Supported

这些命令可以为您提供有关 NVME 设备的更多信息:

nvme id-ctrl /dev/nvme0 -H
nvme id-ns /dev/nvme0n1 -H
nvme show-regs /dev/nvme0n1 -H

答案2

要回答OP的问题(它支持什么类型的TRIM),首先,所有符合要求的NVME磁盘应该至少是DRAT(Deterministic Read After Trim)。

这是章节中的引用3.2.3.2.1 解除分配或未写入的逻辑块NVM Express® NVM 命令集规范修订版 1.0c 2022 年 10 月 3 日

从已释放的逻辑块中读取的值应是确定性的;具体地,在该逻辑块发生写操作之前,该逻辑块的后续读取返回的值应该是相同的。

要了解磁盘的修剪块读取的值,请执行如下命令:

# nvme id-ns /dev/nvme0n1 -H | grep -A 4 "dlfeat"
dlfeat  : 1
  [4:4] : 0     Guard Field of Deallocated Logical Blocks is set to 0xFFFF
  [3:3] : 0     Deallocate Bit in the Write Zeroes Command is Not Supported
  [2:0] : 0x1   Bytes Read From a Deallocated Logical Block and its Metadata are 0x00

相关内容