
坑边闲话在当今的数据中心和个人计算领域NVMeNon-Volatile Memory Express固态硬盘已经成为高性能存储的事实标准。作为一种基于 PCIe 接口的存储协议NVMe 相比传统的 SATA 接口提供了更低的延迟、更高的带宽和更强的并发性能。然而要充分发挥 NVMe 设备的潜力管理和监控这些设备变得至关重要。这就是nvme-cli发挥作用的地方。1. nvme-cli 的诞生与发展·nvme-cli是一个专为 Linux 系统设计的开源 NVMe 管理命令行工具最初由 Keith Busch当时就职于 Intel在 2014-2015 年创建并维护至今。Keith Busch 是 Linux NVMe 驱动开发的核心人物他不仅开发了内核驱动还创建了这个用户空间工具来管理 NVMe 设备。项目托管在 GitHub 上的 linux-nvme 组织下https://github.com/linux-nvme/nvme-cli采用 GPLv2 许可证。多年来这个项目得到了来自 Intel、三星、Western Digital、Solidigm 等众多存储厂商的贡献已经成为 NVMe 设备管理的行业标准工具。nvme-cli的设计哲学是严格遵循 NVMe 规范所有命令和输出都直接对应规范中定义的数据结构。这意味着用户只需要参考 NVMe 官方规范可从 nvmexpress.org 获取就能理解工具输出中的所有缩写和字段含义。从技术架构上看nvme-cli通过 Linux 内核的 IOCTL 接口与 NVMe 设备通信直接发送 NVMe 原生命令到设备。它依赖于libnvme库来处理底层的 NVMe 协议通信支持 Linux 内核 4.15 及更高版本nvme-cli 2.x 版本。2. 项目结构与构建系统·nvme-cli 采用现代化的构建系统 Meson同时也提供了 Makefile 包装器以保持向后兼容。项目的核心依赖包括libnvme/libnvme-mi必需依赖处理 NVMe 协议通信json-c可选依赖用于 JSON 格式输出和插件支持项目支持多种构建方式使用 Meson 直接构建使用 Makefile 包装器使用 samurai 和 muon 构建静态二进制适用于较旧系统构建命令示例# 标准构建 $ meson setup .build $ meson compile -C .build # sudo meson install -C .build # 使用 Makefile $ make # sudo make install # 构建静态二进制 $ make static2.1 插件架构·nvme-cli 采用灵活的插件架构允许硬件厂商添加特定的扩展命令。项目通过宏定义简化了插件开发过程类似于 Linux 内核的 ftrace 组件。核心概念包括命令定义在nvme-builtin.h中使用 ENTRY 宏定义命令插件结构使用PLUGIN和COMMAND_LIST宏定义插件及其子命令回调函数实现具体的命令处理逻辑目前已有众多厂商提供了插件支持包括 Intel、三星、WDC、Solidigm、Micron 等。2.2 安装与基本使用·nvme-cli 已被包含在几乎所有主流 Linux 发行版中安装非常简单# Debian/Ubuntu sudo apt-get install nvme-cli # Fedora/RHEL/CentOS sudo dnf install nvme-cli # Arch Linux sudo pacman -S nvme-cli # Alpine Linux sudo apk add nvme-cli基本使用方法# 查看帮助 nvme help # 查看手册页 man nvme # 查看所有 NVMe 设备 nvme list所有命令遵循统一的返回约定成功返回 0失败返回 1。3. nvme 核心子命令详解·nvme-cli 提供了丰富的子命令集涵盖设备识别、健康监控、固件管理、命名空间操作等各个方面。以下是最重要和最常用的命令。3.1 设备枚举与信息查询·3.1.1 nvme list·列出系统中所有 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输出字段说明Node设备节点路径SN序列号Model设备型号Namespace命名空间 IDUsage已用空间/总容量FormatLBA 格式扇区大小 元数据大小FW Rev固件版本3.1.2 nvme list-subsys·显示 NVMe 子系统信息包括控制器和命名空间的层次结构sudo nvme list-subsys这个命令特别适用于理解 NVMe-oFNVMe over Fabrics环境中的拓扑结构。3.2 设备识别命令·3.2.1nvme id-ctrl·获取控制器的详细信息这是了解 NVMe 设备能力的核心命令sudo nvme id-ctrl /dev/nvme0关键输出字段vid/ssvid供应商 ID 和子系统供应商 IDsn序列号mn型号名称fr固件版本mdts最大数据传输大小oacs可选管理命令支持位图sqes/cqes提交/完成队列入口大小nn命名空间数量oncs可选 NVM 命令支持fuses融合操作支持vwc易失性写缓存使用-H选项可以获得人类可读的格式sudo nvme id-ctrl -H /dev/nvme0检查特定功能支持示例# 检查是否支持 Format NVM 命令OACS bit 1 sudo nvme id-ctrl -H /dev/nvme0 | grep oacs -A 113.2.2nvme id-ns·获取命名空间的详细信息sudo nvme id-ns /dev/nvme0n1重要字段nsze命名空间大小逻辑块数ncap命名空间容量nuse命名空间使用量nlbaf支持的 LBA 格式数量flbas格式化的 LBA 大小dps端到端数据保护设置nmic命名空间多路径和共享能力LBA Format支持的 LBA 格式列表扇区大小查看支持的 LBA 格式sudo nvme id-ns -H /dev/nvme0n1 | grep LBA Format输出示例LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes - Relative Performance: 0 Best (in use) LBA Format 1 : Metadata Size: 8 bytes - Data Size: 512 bytes - Relative Performance: 0 Best LBA Format 2 : Metadata Size: 0 bytes - Data Size: 4096 bytes - Relative Performance: 0 Best LBA Format 3 : Metadata Size: 8 bytes - Data Size: 4096 bytes - Relative Performance: 0 Best3.3 健康监控与日志·3.3.1nvme 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% 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关键字段解读critical_warning关键警告位非零表示有问题Bit 0: 可用备用空间低于阈值Bit 1: 温度高于或低于阈值Bit 2: 可靠性降级Bit 3: 只读模式Bit 4: 易失性内存备份失败temperature当前温度摄氏度available_spare可用备用空间百分比percentage_used磨损程度百分比0-100%这是最重要的寿命指标data_units_read/written数据读写量单位512KBpower_on_hours通电时长unsafe_shutdowns非安全关机次数media_errors介质错误数使用-H选项获得更详细的解释sudo nvme smart-log -H /dev/nvme0n13.3.2nvme error-log·获取错误日志页sudo nvme error-log /dev/nvme0n1可以使用grep过滤特定错误sudo nvme error-log /dev/nvme0n1 | grep -i error3.3.3nvme fw-log·查看固件更新历史sudo nvme fw-log /dev/nvme03.3.4nvme get-log·通用日志页获取命令可以获取各种日志# 获取遥测日志 sudo nvme get-log /dev/nvme0 --log-id7 --log-len512 # 获取特定供应商日志 sudo nvme get-log /dev/nvme0 --log-id0xC0 --log-len40963.3.5nvme telemetry-log·获取主机发起的遥测日志sudo nvme telemetry-log /dev/nvme0 --output-filetelemetry.bin3.3.6nvme endurance-log·查看耐久性日志需设备支持sudo nvme endurance-log /dev/nvme0n13.4 固件管理·3.4.1nvme fw-download·下载固件镜像到设备sudo nvme fw-download /dev/nvme0 --fwfirmware.bin3.4.2nvme fw-commit·激活下载的固件NVMe 1.2 使用此命令# 立即激活重置后生效 sudo nvme fw-commit /dev/nvme0 -s 0 -a 1 # 下次重置时激活 sudo nvme fw-commit /dev/nvme0 -s 0 -a 2 # 立即激活无需重置 sudo nvme fw-commit /dev/nvme0 -s 0 -a 3参数说明-s, --slot固件槽位0-7-a, --action激活动作0: 仅下载1: 下载并在下次重置时激活2: 激活指定槽位3: 激活指定槽位立即生效3.4.3nvme fw-activate·旧版本 NVMe 1.2的固件激活命令。3.5. 特性管理·3.5.1nvme get-feature·获取设备特性# 获取所有特性 sudo nvme get-feature /dev/nvme0 --feature-id0 --sel0 # 获取易失性写缓存状态 sudo nvme get-feature /dev/nvme0 --feature-id0x06 # 获取温度阈值 sudo nvme get-feature /dev/nvme0 --feature-id0x04常用特性 ID0x01: Arbitration0x02: Power Management0x04: Temperature Threshold0x05: Error Recovery0x06: Volatile Write Cache0x07: Number of Queues0x0A: Write Atomicity3.5.2 nvme set-feature·设置设备特性# 启用易失性写缓存 sudo nvme set-feature /dev/nvme0 --feature-id0x06 --value1 # 设置温度阈值例如 70°C 343K sudo nvme set-feature /dev/nvme0 --feature-id0x04 --value3433.6. 命名空间管理·3.6.1nvme create-ns·创建新的命名空间sudo nvme create-ns /dev/nvme0 --nsze2097152 --ncap2097152 --flbas0 --dps0参数说明--nsze命名空间大小逻辑块数--ncap命名空间容量--flbas格式化 LBA 大小--dps数据保护设置3.6.2nvme delete-ns·删除命名空间sudo nvme delete-ns /dev/nvme0 --namespace-id23.6.3nvme attach-ns·将命名空间附加到控制器sudo nvme attach-ns /dev/nvme0 --namespace-id1 --controllers03.6.4nvme detach-ns·从控制器分离命名空间sudo nvme detach-ns /dev/nvme0 --namespace-id1 --controllers03.6.5nvme list-ns·列出所有命名空间 IDsudo nvme list-ns /dev/nvme03.6.6nvme get-ns-id·获取块设备的命名空间 IDnvme get-ns-id /dev/nvme0n13.7 格式化与安全擦除·3.7.1nvme format·格式化命名空间这是一个危险操作会删除所有数据# 基本格式化使用默认 LBA 格式 sudo nvme format /dev/nvme0n1 # 指定 LBA 格式例如切换到 4KB 扇区 sudo nvme format /dev/nvme0n1 --lbaf2 # 使用块大小指定格式 sudo nvme format /dev/nvme0n1 --block-size4096 # 格式化时进行安全擦除 sudo nvme format /dev/nvme0n1 --ses1安全擦除选项--ses0: 不进行安全擦除仅 TRIM/解除分配1: 用户数据擦除物理擦除耗时较长2: 加密擦除更换加密密钥快速完成格式化前检查支持的 LBA 格式sudo nvme id-ns -H /dev/nvme0n1 | grep LBA Format3.7.2nvme sanitize·更彻底的数据清除操作# 块擦除 sudo nvme sanitize /dev/nvme0 --sanact2 # 覆盖写入 sudo nvme sanitize /dev/nvme0 --sanact3 # 加密擦除 sudo nvme sanitize /dev/nvme0 --sanact4 # 退出失败模式 sudo nvme sanitize /dev/nvme0 --sanact1检查 sanitize 支持情况sudo nvme id-ctrl /dev/nvme0 | grep -i sanitize查看 sanitize 状态sudo nvme sanitize-log /dev/nvme03.8. I/O 操作命令·3.8.1nvme read·从命名空间读取数据sudo nvme read /dev/nvme0n1 --start-block0 --block-count8 --data-size4096 --dataoutput.bin3.8.2nvme write·向命名空间写入数据sudo nvme write /dev/nvme0n1 --start-block0 --block-count8 --data-size4096 --datainput.bin3.8.3nvme compare·比较命名空间数据与缓冲区sudo nvme compare /dev/nvme0n1 --start-block0 --block-count8 --data-size4096 --datacompare.bin3.8.4nvme flush·刷新易失性写缓存sudo nvme flush /dev/nvme0n13.8.5nvme dsm·数据集管理包括 TRIM/Deallocate# TRIM 操作 sudo nvme dsm /dev/nvme0n1 --ad --slbs0,1,2,3 --blocks8,8,8,83.9. 性能与电源管理·3.9.1 nvme reset·重置 NVMe 控制器sudo nvme reset /dev/nvme03.9.2 nvme subsystem-reset·重置子系统sudo nvme subsystem-reset /dev/nvme03.9.3 nvme show-regs·显示控制器寄存器sudo nvme show-regs /dev/nvme0可以查看特定寄存器# 控制器配置 sudo nvme get-property /dev/nvme0 --offset0x14 # 控制器状态 sudo nvme get-property /dev/nvme0 --offset0x1c3.10. NVMe over Fabrics (NVMe-oF)·3.10.1nvme discover·发现 NVMe-oF 目标# TCP 传输 sudo nvme discover -t tcp -a 192.168.1.100 -s 4420 # RDMA 传输 sudo nvme discover -t rdma -a 192.168.1.100 -s 4420 # FC 传输 sudo nvme discover -t fc -a nn-0x20000090fa17c141:pn-0x10000090fa17c1413.10.2 nvme connect·连接到 NVMe-oF 目标# 连接到 TCP 目标 sudo nvme connect -t tcp -n nqn.2021-08.com.example:subsystem1 -a 192.168.1.100 -s 4420 # 使用主机 NQN sudo nvme connect -t tcp -n nqn.2021-08.com.example:subsystem1 -a 192.168.1.100 -s 4420 -q nqn.2021-08.com.example:host13.10.3 nvme connect-all·自动连接所有发现的目标sudo nvme connect-all -t tcp -a 192.168.1.1003.10.4 nvme disconnect·断开 NVMe-oF 连接sudo nvme disconnect -n nqn.2021-08.com.example:subsystem1断开所有连接sudo nvme disconnect-all3.11. 高级和调试命令·3.11.1nvme admin-passthru·发送任意管理命令sudo nvme admin-passthru /dev/nvme0 --opcode0x06 --namespace-id1 --data-len4096 --cdw100 --cdw1103.11.2 nvme io-passthru·发送任意 I/O 命令sudo nvme io-passthru /dev/nvme0n1 --opcode0x02 --namespace-id1 --data-len40963.11.3 nvme self-test·执行设备自检# 短自检 sudo nvme device-self-test /dev/nvme0 --namespace-id0xFFFFFFFF --self-test-code1 # 长自检 sudo nvme device-self-test /dev/nvme0 --namespace-id0xFFFFFFFF --self-test-code2查看自检日志sudo nvme self-test-log /dev/nvme03.12. 输出格式控制·nvme-cli 支持多种输出格式方便不同场景使用# JSON 格式适合脚本解析 sudo nvme list -o json # 标准输出默认 sudo nvme list -o normal # 二进制格式 sudo nvme id-ctrl /dev/nvme0 --raw-binary id-ctrl.bin4. 配置文件·nvme-cli支持持久化配置配置文件位置持久配置/etc/nvme/discovery.conf旧格式/etc/nvme/config.json新格式JSON临时配置/run/nvme/易失性配置用于协调工具间的访问JSON 配置示例[ { hostnqn: nqn.2014-08.org.nvmexpress:uuid:242d4a24-2484-4a80-8234-d0169409c5e8, hostid: 242d4a24-2484-4a80-8234-d0169409c5e8, subsystems: [ { nqn: nqn.2021-08.com.example:subsystem1, ports: [ { transport: tcp, traddr: 192.168.1.100, trsvcid: 4420 } ] } ] } ]5. 供应商特定命令·nvme-cli 支持众多供应商的扩展命令通过插件机制实现。常见供应商插件5.1 Intel/Solidigm·# Intel 温度统计 sudo nvme intel temp-stats /dev/nvme0 # Intel 市场名称 sudo nvme intel market-name /dev/nvme0 # Solidigm 遥测日志解析 sudo nvme solidigm parse-telemetry-log /dev/nvme05.2 Western Digital (WDC)·# WDC 驱动日志 sudo nvme wdc drive-log /dev/nvme0 # WDC 智能日志 sudo nvme wdc cu-smart-log /dev/nvme0 # WDC 固件激活历史 sudo nvme wdc vs-fw-activate-history /dev/nvme05.3 Samsung·# Samsung 扩展 SMART 日志 sudo nvme samsung smart-log-add /dev/nvme0 # Samsung 获取日志 sudo nvme samsung get-log /dev/nvme05.4 Micron·# Micron 选择下载 sudo nvme micron select-download /dev/nvme0 # Micron 清除 PCIe 错误 sudo nvme micron clear-pcie-correctable-errors /dev/nvme06. 实用技巧与最佳实践·6.1 健康监控脚本·#!/bin/bash # nvme-health-check.sh DEVICE$1 if [ -z $DEVICE ]; then echo Usage: $0 nvme-device exit 1 fi echo NVMe Health Check for $DEVICE echo # 检查关键警告 CRITICAL_WARNING$(sudo nvme smart-log $DEVICE | grep critical_warning | awk {print $3}) if [ $CRITICAL_WARNING ! 0 ]; then echo WARNING: Critical warning detected: $CRITICAL_WARNING fi # 检查温度 TEMP$(sudo nvme smart-log $DEVICE | grep ^temperature | awk {print $3}) echo Current Temperature: ${TEMP}°C # 检查磨损程度 PERCENTAGE_USED$(sudo nvme smart-log $DEVICE | grep percentage_used | awk {print $3} | tr -d %) echo Wear Level: ${PERCENTAGE_USED}% if [ $PERCENTAGE_USED -gt 80 ]; then echo WARNING: Device wear level exceeds 80% fi # 检查介质错误 MEDIA_ERRORS$(sudo nvme smart-log $DEVICE | grep media_errors | awk {print $3}) echo Media Errors: $MEDIA_ERRORS if [ $MEDIA_ERRORS -gt 0 ]; then echo WARNING: Media errors detected fi # 检查非安全关机 UNSAFE_SHUTDOWNS$(sudo nvme smart-log $DEVICE | grep unsafe_shutdowns | awk {print $3}) echo Unsafe Shutdowns: $UNSAFE_SHUTDOWNS6.2 自动化监控集成·将 nvme-cli 集成到监控系统如 Prometheus、Nagios# 导出 JSON 格式供监控工具解析 sudo nvme smart-log -o json /dev/nvme0 | jq .temperature, .percentage_used6.3 固件更新流程·#!/bin/bash # 安全的固件更新流程 DEVICE/dev/nvme0 FIRMWAREnew_firmware.bin # 1. 备份当前固件信息 sudo nvme fw-log $DEVICE fw_log_before.txt # 2. 下载固件 echo Downloading firmware... sudo nvme fw-download $DEVICE --fw$FIRMWARE # 3. 提交并激活下次重置时 echo Committing firmware... sudo nvme fw-commit $DEVICE -s 0 -a 1 # 4. 重置控制器 echo Resetting controller... sudo nvme reset $DEVICE # 5. 等待设备就绪 sleep 10 # 6. 验证固件版本 sudo nvme id-ctrl $DEVICE | grep fr sudo nvme fw-log $DEVICE fw_log_after.txt6.4 性能调优·# 检查队列深度 sudo nvme get-feature /dev/nvme0 --feature-id0x07 # 启用易失性写缓存提高性能 sudo nvme set-feature /dev/nvme0 --feature-id0x06 --value1 # 设置电源状态平衡性能和功耗 sudo nvme set-feature /dev/nvme0 --feature-id0x02 --value06.5 安全擦除最佳实践·完整的安全擦除流程# 方法 1: 使用 Sanitize推荐2021 新设备 sudo nvme sanitize /dev/nvme0 --sanact2 # 块擦除 # 方法 2: 使用 Format 安全擦除 sudo nvme format /dev/nvme0n1 --ses1 # 用户数据擦除 # 方法 3: 加密擦除最快 sudo nvme format /dev/nvme0n1 --ses2 # 加密擦除 # 方法 4: 完整的命名空间重建流程 # a. 分离命名空间 sudo nvme detach-ns /dev/nvme0 --namespace-id1 --controllers0 # b. 删除命名空间 sudo nvme delete-ns /dev/nvme0 --namespace-id1 # c. 创建新命名空间 sudo nvme create-ns /dev/nvme0 --nsze0xFFFFFFFF --ncap0xFFFFFFFF --flbas0 # d. 附加命名空间 sudo nvme attach-ns /dev/nvme0 --namespace-id1 --controllers0 # e. 重置设备 sudo nvme reset /dev/nvme06.6 故障排查·# 检查设备是否可访问 sudo nvme list # 查看详细错误信息 sudo nvme error-log /dev/nvme0 # 检查控制器寄存器 sudo nvme show-regs /dev/nvme0 # 查看内核日志 dmesg | grep -i nvme # 验证驱动版本 modinfo nvme7. 常见使用场景·7.1数据中心设备健康监控·# 定期检查所有 NVMe 设备 for device in $(nvme list | grep /dev/nvme | awk {print $1}); do echo Checking $device sudo nvme smart-log -o json $device | jq { device: $device, temperature: .temperature, percentage_used: .percentage_used, media_errors: .media_errors, critical_warning: .critical_warning } done7.2固件批量更新·# 批量更新同型号设备 MODELSAMSUNG MZVLB256 FIRMWAREfirmware.bin for device in $(nvme list | grep $MODEL | awk {print $1} | sed s/n.*//); do echo Updating $device sudo nvme fw-download $device --fw$FIRMWARE sudo nvme fw-commit $device -s 0 -a 1 done7.3性能基准测试准备·# 1. 确保设备使用最佳 LBA 格式 sudo nvme id-ns -H /dev/nvme0n1 | grep Relative Performance: 0 Best # 2. 启用写缓存 sudo nvme set-feature /dev/nvme0 --feature-id0x06 --value1 # 3. 预处理写入满盘 sudo fio --namepreconditioning --filename/dev/nvme0n1 \ --rwwrite --bs128k --iodepth32 --size100%7.4NVMe-oF 存储部署·# 服务端配置target sudo modprobe nvmet sudo modprobe nvmet-tcp # 创建子系统 mkdir -p /sys/kernel/config/nvmet/subsystems/subsys1 echo 1 /sys/kernel/config/nvmet/subsystems/subsys1/attr_allow_any_host # 配置命名空间 mkdir -p /sys/kernel/config/nvmet/subsystems/subsys1/namespaces/1 echo /dev/nvme0n1 /sys/kernel/config/nvmet/subsystems/subsys1/namespaces/1/device_path echo 1 /sys/kernel/config/nvmet/subsystems/subsys1/namespaces/1/enable # 创建端口 mkdir -p /sys/kernel/config/nvmet/ports/1 echo tcp /sys/kernel/config/nvmet/ports/1/addr_trtype echo 192.168.1.100 /sys/kernel/config/nvmet/ports/1/addr_traddr echo 4420 /sys/kernel/config/nvmet/ports/1/addr_trsvcid # 客户端连接 sudo nvme discover -t tcp -a 192.168.1.100 -s 4420 sudo nvme connect -t tcp -n subsys1 -a 192.168.1.100 -s 4420# 客户端扫描并发现 nvme target sudo nvme discover -t tcp -a 10.2.1.33 -s 4420 # 客户端使用 tcp 挂载 sudo nvme connect \ -t tcp \ -a h12-truenas \ -s 4420 \ -n nqn.2019-08.cn.littlenewton:uuid:fe3a0ec3-6085-4231-98ea-1d023f27e2d3:synology-abb # 客户端主动断开连接 (需要先 umount) sudo nvme s -n nqn.2019-08.cn.littlenewton:uuid:fe3a0ec3-6085-4231-98ea-1d023f27e2d3:test-nvme8. 与 NVMe 规范的对应关系·nvme-cli 的一大优势是其输出直接对应 NVMe 规范。以下是一些关键映射nvme-cli 命令NVMe 规范对应Admin Command Opcodeid-ctrlIdentify (CNS01h)06hid-nsIdentify (CNS00h)06hsmart-logGet Log Page (LID02h)02herror-logGet Log Page (LID01h)02hfw-logGet Log Page (LID03h)02hget-featureGet Features0Ahset-featureSet Features09hformatFormat NVM80hfw-downloadFirmware Image Download11hfw-commitFirmware Commit10hcreate-nsNamespace Management (SEL0)0Dhdelete-nsNamespace Management (SEL1)0Dhattach-nsNamespace Attachment (SEL0)15hdetach-nsNamespace Attachment (SEL1)15h所有输出字段的缩写都可以在 NVMe 规范中找到对应说明。例如OACSOptional Admin Command SupportONCSOptional NVM Command SupportSQESSubmission Queue Entry SizeCQESCompletion Queue Entry Size9. 社区与贡献·nvme-cli是一个活跃的开源项目GitHubhttps://github.com/linux-nvme/nvme-cli邮件列表linux-nvmelists.infradead.org维护者Keith Busch (kbuschkernel.org)许可证GPLv2贡献方式提交 Pull Request 到 GitHub发送补丁到邮件列表遵循 Linux 内核贡献指南10. 总结·nvme-cli 是 Linux 下管理 NVMe 设备的标准工具具有以下特点优势完全符合 NVMe 规范输出直接对应规范定义功能全面涵盖设备管理的方方面面活跃的社区支持和持续更新主流发行版内置支持支持供应商扩展插件多种输出格式人类可读、JSON、二进制支持 NVMe-oF网络存储关键应用场景日常设备健康监控固件更新管理性能调优配置数据安全擦除命名空间管理故障诊断与日志分析NVMe-oF 存储部署最佳实践定期检查 SMART 日志监控设备健康谨慎使用 format 和 sanitize 命令固件更新前做好备份和验证将监控集成到自动化系统参考 NVMe 规范理解输出含义使用 JSON 输出便于脚本化处理无论是数据中心管理员、系统工程师还是存储开发者nvme-cli 都是不可或缺的工具。通过深入掌握其功能可以更好地发挥 NVMe 设备的性能潜力确保存储系统的稳定可靠运行。参考资源·官方文档nvme-cli GitHub: https://github.com/linux-nvme/nvme-cliNVMe 规范: https://nvmexpress.orgLinux 内核文档: https://www.kernel.org/doc/html/latest/手册页man nvmeman nvme-command例如man nvme-smart-log社区资源Linux NVMe 邮件列表: linux-nvmelists.infradead.orgNVMe Express 组织: https://nvmexpress.orgGitHub Issues: https://github.com/linux-nvme/nvme-cli/issues相关工具libnvme: NVMe 协议库fio: I/O 性能测试工具blktrace: 块设备追踪工具smartmontools: SMART 监控工具本文基于 nvme-cli 2.x 版本编写具体命令输出和可用选项可能因版本而异。建议使用nvme help和相应的手册页获取最新信息。