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
常见场景组合命令
- 普通工作站或测试机升级
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
- 固件已经下载,只需要激活
sudo nvme fw-log /dev/nvme0
sudo nvme fw commit /dev/nvme0 --slot=1 --action=2
sudo reboot
- 设备支持立即激活
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'
这种方式可能导致设备短暂中断,不建议在系统盘或生产业务盘上直接使用。
- 系统盘是被升级的 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
不要在升级过程中卸载系统关键文件系统,也不要强制拔盘。重启前确认远程登录方式、业务停止状态和控制台访问均可用。
- 多块 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

浙公网安备 33010602011771号