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

use*_*689 7 smartctl hdparm nvme

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

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

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

# hdparm -I /dev/nvme0n1
/dev/nvme0n1:
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

我可以跑

# smartctl --all /dev/nvme0n1
Run Code Online (Sandbox Code Playgroud)

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

我装了nvme-cli,跑nvme get-feature -f 0-f 0xe并从驱动器得到了一些功能,但没有对TRIM类型。

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

在 Linux 中是否有一种方法可以查询 NVMe 设备,以获取hdparm -I如果它不是 NVMe 时会显示的其他任何内容的列表,smartctl并且nvme似乎没有涵盖?

小智 7

据我了解,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
Run Code Online (Sandbox Code Playgroud)

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

nvme id-ctrl /dev/nvme0 -H
nvme id-ns /dev/nvme0n1 -H
nvme show-regs /dev/nvme0n1 -H
Run Code Online (Sandbox Code Playgroud)