使用此 Linux 命令行工具了解有关 NVMe 驱动器的更多信息

nvme-cli 命令有许多有用的选项,是掌控数据管理方式的绝佳方法。
48 位读者喜欢此文章。
Command line prompt

Opensource.com

NVMe 代表非易失性存储器高速,指的是软件和存储通过 PCIe 和其他协议(包括 TCP)进行通信的方式。它是一个由非营利组织领导的开放规范,并定义了几种形式的固态存储。

我的笔记本电脑和台式机都配备了 NVMe 驱动器。它们速度很快。我喜欢我的计算机启动速度以及它们读取和写入数据的速度。没有明显的延迟。

我也很快对驱动这种超快速存储的技术感到好奇,所以我做了一些调查。我了解到,与通过 SATA 甚至 SSD 驱动器相比,NVMe 驱动器消耗的功率更少,同时提供更快的数据访问速度。 这很有趣,但我想了解更多关于我的特定 NVMe 驱动器的信息,并且想知道它们与其他驱动器相比如何。 我可以安全地擦除驱动器吗? 我该如何检查其完整性?

这些问题引导我进行了互联网搜索,找到了一个开源项目,其中包含一组用于管理 NVMe 驱动器的工具。 它被称为 nvme-cli

安装 nvme-cli

您可以从发行版的软件包管理器安装 nvme-cli。 例如,在 Fedora、CentOS 或类似系统上

$ sudo dnf install nvme-cli

在 Debian、Mint、Elementary 和类似系统上

$ sudo apt install nvme-cli

浏览 NVMe 驱动器

为我的发行版安装 nvme-cli 后,我想浏览我的驱动器。nvme-cli 没有手册页,但是您可以通过输入 nvme help 获得很多帮助

$ nvme help
nvme-1.14
usage: nvme <command> [<device>] [<args>]

The '<device>' may be either an NVMe character device (ex: /dev/nvme0) or an
nvme block device (ex: /dev/nvme0n1).

The following are all implemented sub-commands:
 list List all NVMe devices and namespaces on machine
 list-subsys List nvme subsystems
 id-ctrl Send NVMe Identify Controller
 id-ns Send NVMe Identify Namespace, display structure
 id-ns-granularity Send NVMe Identify Namespace Granularity List, display structure
 list-ns Send NVMe Identify List, display structure
 list-ctrl Send NVMe Identify Controller List, display structure
 nvm-id-ctrl Send NVMe Identify Controller NVM Command Set, display structure
 primary-ctrl-caps Send NVMe Identify Primary Controller Capabilities
[...]

列出所有 NVMe 驱动器

sudo nvme list 命令列出您机器上的所有 NVMe 设备和命名空间。 我使用了它,并在 /dev/nvme0n1 找到了一个 NVMe 驱动器。 这是输出

$ sudo nvme list

Node SN Model Namespace Usage Format FW Rev

--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------

/dev/nvme0n1    S42GMY9M141281 SAMSUNG MZVLB256HAHQ-000L7 1 

214.68 GB / 256.06 GB 512  B + 0 B 0L2QEXD7

我有一个名为 nvme0n1 的驱动器。 它列出了序列号、品牌、大小、固件修订版等等。

您可以使用 id-ctrl 子命令获取有关驱动器及其支持的功能的更多信息

$ sudo nvme id-ctrl /dev/nvme0n1
NVME Identify Controller:
vid : 0x144d
ssvid : 0x144d
sn : S42GMY9M141281
mn : SAMSUNG MZVLB256HAHQ-000L7
fr : 0L2QEXD7
rab : 2
ieee : 002538
cmic : 0
mdts : 9
cntlid : 0x4
ver : 0x10200
rtd3r : 0x186a0
rtd3e : 0x7a1200
[...]

驱动器健康状况

您可以使用 smart-log 子命令读取驱动器的整体运行状况

$ sudo nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
critical_warning : 0
temperature : 21 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 2%
endurance group critical warning summary: 0
data_units_read : 5,749,452
data_units_written : 10,602,948
host_read_commands : 77,809,121
host_write_commands : 153,405,213
controller_busy_time : 756
power_cycles : 1,719
power_on_hours : 1,311
unsafe_shutdowns : 129
media_errors : 0
num_err_log_entries : 1,243
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1 : 21 C
Temperature Sensor 2 : 22 C
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0

这为您提供驱动器的当前温度、到目前为止的使用小时数、不安全关机的次数等等。

格式化 NVMe 驱动器

您可以使用 nvme-cli 格式化 NVMe 驱动器,但请注意:这会擦除驱动器上的所有数据! 如果您的驱动器上有重要数据,您必须先备份它,然后再执行此操作,否则您将会丢失数据。 子命令是 format

$ sudo nvme format /dev/nvme0nX

(为了安全起见,我将驱动器的实际位置替换为 X,以防止复制粘贴错误。 将 X 更改为 1 或在 nvme list 的结果中列出的相应位置。)

安全擦除 NVMe 驱动器

当您准备出售或处置 NVMe 计算机时,您可能希望安全地擦除驱动器。 此处的警告与格式化过程相同:首先备份重要数据,因为此命令会擦除它!

$ sudo nvme sanitize /dev/nvme0nX

尝试 nvme-cli

nvme-cli 命令是在 GPLv2 许可证下发布的。 这是一个强大的命令,具有许多有用的选项,是掌控数据管理方式的绝佳方法。

接下来阅读什么
标签
User profile image.
教育家、企业家、开源倡导者、终身学习者、Python 教师。 教育心理学硕士,教育领导学硕士,Linux 系统管理员。

9 条评论

伟大的发现,刚刚尝试过。

很高兴您发现它有用。 我有两台带有 NVMe 驱动器的 Linux 计算机。 我的 System76 笔记本电脑有一个 Samsung SSD 970 EVO 250GB,另一台计算机是 Intel NUC,它有一个 Crucial 1 TB NVMe 驱动器。 我已经通过“nvme-cli”实用程序了解了一些关于每个驱动器的细微之处。

回复 ,作者 alanfd_oss

很棒的文章! 我不知道有这组命令来检查 NVMe 驱动器。 我的台式机里有一个 NVMe。 看起来我目前还不错

$ sudo nvme smart-log /dev/nvme0
NVME 设备 Smart Log:nvme0 命名空间 id:ffffffff
critical_warning : 0
温度:35 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 2%
耐力组关键警告摘要:0
data_units_read : 7,336,493
data_units_written : 17,442,001
host_read_commands : 59,730,342
host_write_commands : 173,036,281
controller_busy_time : 244
power_cycles : 1,271
power_on_hours : 1,249
unsafe_shutdowns : 37
media_errors : 0
num_err_log_entries : 1
警告温度时间:0
关键复合温度时间:0
热管理 T1 Trans Count : 0
热管理 T2 Trans Count : 0
热管理 T1 总时间:0
热管理 T2 总时间:0

这是我的
NVME 设备 Smart Log:nvme0n1 命名空间 id:ffffffff
critical_warning : 0
温度:36 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
耐力组关键警告摘要:0
data_units_read : 6,413,373
data_units_written : 18,311,308
host_read_commands : 19,884,112
host_write_commands : 26,224,405
controller_busy_time : 4,489
power_cycles : 2,052
power_on_hours : 296
unsafe_shutdowns : 53
media_errors : 0
num_err_log_entries : 0
警告温度时间:0
关键复合温度时间:0
温度传感器 1 : 36 C
温度传感器 2 : 38 C
热管理 T1 Trans Count : 0
热管理 T2 Trans Count : 0
热管理 T1 总时间:0
热管理 T2 总时间:0

回复 ,作者 Jim Hall

您关于格式化 nvme 驱动器的部分:当您格式化它时,您要格式化成的格式是什么? Fat32? Ext4? 您能详细说明一下您要将驱动器格式化成什么格式吗? 以及你将如何做到这一点? 从什么格式化(我猜是未格式化)到什么格式? 你将如何选择你想要的格式?

此外,如果您可以添加一个关于升级 nvme 驱动器固件的部分,那就太好了。 因为正如许多 Linux 用户都知道的那样,制造这些驱动器的大多数公司都提供了方便的驱动程序,仅用于在 MICROSOFT WINDOWS 平台上更新固件。 Linux 似乎对他们来说并不存在。

我需要升级一个新 Sabrent Rocket 4 Plus nvme 驱动器的固件,但我感到非常不稳定,不确定我是否真的可以使用 nvme-cli 来做到这一点。 我不想烧毁或毁坏驱动器。

我已经解压缩了该公司提供的 Windows 驱动程序,但我没有在那里看到点图像 (.img) 文件。 第一次尝试这样做,一切都相当令人困惑。

我将我的驱动器格式化为 ext4。 请参考此链接以获取更多帮助,https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/。 我还发现了一篇关于 Phoronix 的文章 https://www.phoronix.com/scan.php?page=article&item=sabrent-rocket4-linux&num=1,其中专门提到了您的驱动器。 我很幸运,我的笔记本电脑来自 System76,他们使用的零件是专为 Linux 设计的。 我专门用 nvme-cli 重新格式化的第二个驱动器位于 Intel NUC 中,我为其配备了 Samsung 970 EVO Plus。 后来我在该驱动器上毫无问题地安装了 Windows 10,并且它的固件通过 NUC 中的 Intel 固件更新实用程序进行了更新。 我使用过的第三个 NVME 驱动器是 Crucial P5 1TB 3D NAND NVMe 内部 SSD,我已经在所有三个驱动器上使用了“nvme-cli”实用程序。

谢谢你的回复,我还没有看过 Phoronix 的基准评测。

我担心的是更新 Sabrent 驱动器的固件。 我认为我无法做到这一点,因为唯一的更新实用程序是针对 Windows 的。

我打电话给他们的技术支持,看看他们是否会给我一个更新的镜像文件,你可以猜到他们的反应。

如果有人知道如何使用nvme-cli更新Sabrent驱动器的方法,(不用把驱动器从我的Linux电脑中取出,放到一台可能没有M.2 PCIe插槽的Windows笔记本电脑里)我很想知道。

回复 by Don Watkins

买一个硬盘盒。Sabrent为M.2 PCIe NVMe驱动器制造硬盘盒,然后用别人的Windows电脑进行更新。它们的价格低于30美元。

回复 by watchpocket

Creative Commons License此作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.