Nvme-CLI

Nvme-CLI

安装

sudo apt install nvme-cli
nvme --version

常用命令

命令 功能
nvme list 列出系统中所有 NVMe 设备
nvme smart-log /dev/nvme0 获取特定设备的健康信息
nvme id-ctrl /dev/nvme0 查询控制器详细信息
nvme id-ns /dev/nvme0 获取命名空间信息
nvme fw-download /dev/nvme0 --fw=firmware-image.bin 下载固件镜像
nvme fw-commit /dev/nvme0 --slot=1 提交固件更新
nvme create-ns /dev/nvme0 --size=1000000 --nsze=1000000 创建新的命名空间
nvme delete-ns /dev/nvme0 --namespace-id=1 删除命名空间
nvme error-log /dev/nvme0 获取错误日志
`nvme smart-log /dev/nvme0 grep temperature`

详细命令

假设设备为:/dev/nvme0

命名空间为:/dev/nvme0n1

命令 含义 具体样例
nvme version 查看 nvme-cli 版本 nvme version
nvme help 查看所有可用命令 nvme help
nvme list 列出系统中的 NVMe 控制器和命名空间 sudo nvme list
nvme list-subsys 查看 NVMe 子系统及控制器拓扑 sudo nvme list-subsys
nvme id-ctrl 查看控制器信息,如型号、序列号、固件版本 sudo nvme id-ctrl /dev/nvme0
nvme id-ns 查看命名空间信息,如容量、LBA 大小 sudo nvme id-ns /dev/nvme0n1
nvme smart-log 查看 SMART/健康信息,如温度、寿命、读写量、错误数 sudo nvme smart-log /dev/nvme0
nvme log smart 新版查看 SMART 日志的写法 sudo nvme log smart /dev/nvme0
nvme error-log 查看 NVMe 错误日志 sudo nvme error-log /dev/nvme0
nvme fw-log 查看固件槽位和固件版本信息 sudo nvme fw-log /dev/nvme0
nvme get-log 获取指定日志页 sudo nvme get-log /dev/nvme0 --log-id=2 --log-len=512
nvme self-test 启动设备自检,具体支持情况取决于设备 sudo nvme self-test /dev/nvme0 --stc=1
nvme self-test-log 查看设备自检结果 sudo nvme self-test-log /dev/nvme0
nvme device-self-test 新版设备自检命令 sudo nvme device-self-test /dev/nvme0 --self-test-code=1
nvme get-feature 查询控制器特性参数 sudo nvme get-feature /dev/nvme0 --feature-id=0x0c
nvme set-feature 设置控制器特性参数 sudo nvme set-feature /dev/nvme0 --feature-id=0x0c --value=1
nvme show-regs 查看控制器寄存器 sudo nvme show-regs /dev/nvme0
nvme flush 将缓存中的数据刷新到介质 sudo nvme flush /dev/nvme0n1
nvme dsm 执行数据集管理操作,常用于释放/Trim sudo nvme dsm /dev/nvme0n1 --ad=1
nvme format 格式化命名空间,可能清除数据 sudo nvme format /dev/nvme0n1
nvme sanitize 执行设备级数据清理 sudo nvme sanitize /dev/nvme0 --sanact=2
nvme reset 重置 NVMe 控制器 sudo nvme reset /dev/nvme0
nvme ns-rescan 重新扫描命名空间 sudo nvme ns-rescan /dev/nvme0
nvme fw-download 下载固件到控制器 sudo nvme fw-download /dev/nvme0 --fw=firmware.bin
nvme fw-commit 提交并激活已下载的固件 sudo nvme fw-commit /dev/nvme0 --slot=1 --action=1
nvme read 发送 NVMe 读命令,通常用于底层调试 sudo nvme read /dev/nvme0n1 --start-block=0 --block-count=1 --data-size=4096
nvme write 发送 NVMe 写命令,可能覆盖数据 sudo nvme write /dev/nvme0n1 --start-block=0 --block-count=1 --data=block.bin
nvme discover 发现 NVMe-oF 目标 sudo nvme discover -t tcp -a 192.168.1.10 -s 8009
nvme connect 连接 NVMe-oF 目标 sudo nvme connect -t tcp -n nqn.2026-01.example:subsystem -a 192.168.1.10 -s 4420
nvme disconnect 断开 NVMe-oF 连接 sudo nvme disconnect -n nqn.2026-01.example:subsystem

最常用的健康检查组合:

sudo nvme list
sudo nvme id-ctrl /dev/nvme0
sudo nvme id-ns /dev/nvme0n1
sudo nvme smart-log /dev/nvme0
sudo nvme error-log /dev/nvme0
sudo nvme fw-log /dev/nvme0

常见场景组合命令

  1. 普通工作站或测试机升级
sudo nvme list
sudo nvme id-ctrl /dev/nvme0
sudo nvme smart-log /dev/nvme0
sudo nvme fw download /dev/nvme0 --fw=/tmp/firmware.bin
sudo nvme fw commit /dev/nvme0 --slot=1 --action=1
sudo reboot
  1. 固件已经下载,只需要激活
sudo nvme fw-log /dev/nvme0
sudo nvme fw commit /dev/nvme0 --slot=1 --action=2
sudo reboot
  1. 设备支持立即激活
sudo nvme fw download /dev/nvme0 --fw=/tmp/firmware.bin
sudo nvme fw commit /dev/nvme0 --slot=1 --action=3
sudo nvme id-ctrl /dev/nvme0 | grep '^fr'

这种方式可能导致设备短暂中断,不建议在系统盘或生产业务盘上直接使用。

  1. 系统盘是被升级的 NVMe 盘

推荐流程:

sudo nvme id-ctrl /dev/nvme0 | grep '^fr'
sudo nvme fw download /dev/nvme0 --fw=/tmp/firmware.bin
sudo nvme fw commit /dev/nvme0 --slot=1 --action=1
sudo sync
sudo reboot

不要在升级过程中卸载系统关键文件系统,也不要强制拔盘。重启前确认远程登录方式、业务停止状态和控制台访问均可用。

  1. 多块 NVMe 设备,避免刷错盘
sudo nvme list
sudo nvme id-ctrl /dev/nvme0 | egrep 'sn|mn|fr'
sudo nvme id-ctrl /dev/nvme1 | egrep 'sn|mn|fr'

确认序列号、型号后再操作:

sudo nvme fw download /dev/nvme1 --fw=/tmp/firmware.bin
sudo nvme fw commit /dev/nvme1 --slot=1 --action=1

高级配置

持久化配置
NVMe-CLI 支持两种配置存储方式:

传统格式:/etc/nvme/discovery.conf
JSON 格式:/etc/nvme/config.json
JSON 格式配置示例:

[
  {
    "hostnqn": "nqn.2014-08.org.nvmexpress:uuid:242d4a24-2484-4a80-8234-d0169409c5e8",
    "hostid": "242d4a24-2484-4a80-8234-d0169409c5e8",
    "subsystems": [
      {
        "nqn": "nqn.2014-08.org.nvmexpress:uuid:example",
        "transport": "tcp",
        "traddr": "192.168.1.100",
        "trsvcid": "4420"
      }
    ]
  }
]

临时配置管理
临时配置存储在 /run/nvme/ 目录,适用于第三方工具协调资源访问。创建临时配置时,建议使用原子操作:

## 创建临时文件(无 .json 扩展名)

echo '{"application": "test", "config": "temporary"}' > /run/nvme/temp-config

## 原子重命名添加 .json 扩展名

mv /run/nvme/temp-config /run/nvme/temp-config.json

QA

Q : 权限不足

A :

# 使用 sudo 运行管理命令
sudo nvme list
 
# 或添加用户到 disk 组
sudo usermod -aG disk $USER

Q: 设备未识别

A:

# 检查设备是否存在
ls /dev/nvme*
 
# 检查内核模块
lsmod | grep nvme
 
# 加载 NVMe 模块
sudo modprobe nvme
posted @ 2026-11-08 21:52  aswd  阅读(2)  评论(0)    收藏  举报