使用非 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