如何用nvme-cli检查香港服务器SSD健康状态及关键输出指标
本文面向香港服务器验收与运维人员,介绍使用nvme-cli核对NVMe SSD身份、SMART与错误日志的方法,重点解读严重告警、备用空间、寿命消耗、介质错误和温度记录,并说明自检、留证及同条件复测流程。

验收香港服务器的NVMe SSD硬盘时,最容易忽略的误区是:看到critical_warning: 0便认定硬盘正常。这个字段只能说明当前没有触发严重告警,不能代替对备用空间、寿命消耗、介质错误、过温记录和错误日志的检查。
正确的验收方法是:先确认设备身份,再读取SMART和错误日志,将critical_warning、available_spare、percentage_used、media_errors等指标放在一起判断,最后保存原始输出并对异常项复测。
以下命令适用于Linux直接识别NVMe设备,或虚拟机已经透传NVMe控制器的环境。除可选的设备自检外,主要检查均为只读操作,不会修改磁盘数据。
先明确NVMe SSD验收标准
NVMe SSD没有脱离型号、交付状态和使用历史的统一温度、通电时间或累计写入量标准。验收时可按下表建立正常与异常分界:
| 验收项目 | 正常判断 | 异常或待确认情况 |
|---|---|---|
| 设备身份 | 型号、序列号、容量、固件与交付信息一致 | 型号或容量不符,设备无法识别 |
critical_warning |
0x00或0 |
任意非零值均需解析告警位 |
available_spare |
不低于available_spare_threshold |
低于阈值或触发备用空间告警 |
percentage_used |
与交付状态和使用历史相符 | 接近或达到100时需核对耐久度与更换计划 |
media_errors |
验收时优先要求为0 | 非零或复测后继续增长 |
num_err_log_entries |
结合具体错误内容判断 | 持续增长,或存在介质、数据完整性错误 |
| 温度 | 低于设备自身警告和临界阈值 | 持续告警,或过温累计时间增加 |
| 自检结果 | 已完成且未发现错误 | 失败、中止或报告故障段 |
percentage_used达到100不代表SSD会立即离线,而是控制器估算的额定耐久度已经消耗完毕。反过来,即使该值较低,也不能抵消介质错误、可靠性降低或只读告警。
确认nvme-cli和实际设备
先查看Linux发行版及nvme-cli状态:
cat /etc/os-release
command -v nvme
nvme version
Ubuntu、Debian可安装:
sudo apt update
sudo apt install -y nvme-cli
使用DNF的RHEL、Rocky Linux、AlmaLinux等系统可执行:
sudo dnf install -y nvme-cli
安装通常不需要重启,但生产环境存在软件变更审批时,应先按现有流程确认。
不要直接假设系统盘就是/dev/nvme0n1,应先列出控制器、命名空间和磁盘属性:
sudo nvme list
lsblk -d -o NAME,MODEL,SERIAL,SIZE,ROTA,TRAN
常见命名中,/dev/nvme0是控制器,/dev/nvme0n1是命名空间。本文示例设置为:
CTRL=/dev/nvme0
香港服务器如有多块NVMe SSD硬盘,应分别检查/dev/nvme0、/dev/nvme1等控制器,不能只检查系统盘。随后读取设备身份:
sudo nvme id-ctrl -H "$CTRL"
重点核对mn、sn、fr对应的型号、序列号和固件版本,并确认是否声明支持自检、温度阈值等能力。虚拟机如果只显示普通虚拟磁盘而没有NVMe控制器,则无法通过本机命令判断底层物理SSD健康状态,需要由宿主机侧提供对应日志。
读取SMART并判断关键指标
执行核心检查:
sudo nvme smart-log -H "$CTRL"
需要保存结构化结果时使用:
sudo nvme smart-log "$CTRL" -o json
不同nvme-cli版本的字段名称和显示格式可能略有差异,但判断方法一致。
critical_warning:正常应为0。常见位含义为0x01备用空间不足、0x02温度超限、0x04可靠性降低、0x08进入只读状态、0x10易失性内存备份设备异常。多个问题可以叠加,任何非零值都应留证并解析。available_spare:必须与available_spare_threshold比较。前者低于后者时会触发严重告警。percentage_used:表示厂商依据写入、擦除和介质特性估算的寿命消耗。若交付声称使用全新SSD,而该值、通电时间或写入量明显不符合描述,应要求核对设备历史。media_errors:表示控制器检测到的不可恢复数据完整性错误。非零不一定证明当前仍在故障,但必须结合错误日志并复测。num_err_log_entries:属于累计值,其中可能包含不支持的管理命令等非介质错误,不能单独用于判定硬盘损坏。- 温度记录:当前温度应与
id-ctrl提供的设备警告和临界阈值比较。warning_temp_time或critical_comp_time非零,说明历史上可能出现过温运行;当前温度恢复正常不能消除这段记录。
data_units_read和data_units_written不是直接以GB或TB表示。一个数据单位对应1000个512字节单位,十进制TB可按下式估算:
累计TB ≈ data_units数值 × 512000 ÷ 1000000000000
部分新版nvme-cli会在-H输出中附带可读容量。累计写入量本身不是故障,需要结合SSD额定耐久度、业务时间和交付状态判断。
用错误日志区分历史记录与持续故障
读取最近的错误日志条目:
sudo nvme error-log "$CTRL" -e 64
重点查看有效条目中的error_count、status_field、lba和命令信息。空条目通常由零值填充,历史错误也可能来自不支持的管理命令。以下情况应优先处理:
media_errors非零,且错误日志指向介质或数据完整性问题;- 相同LBA或相同状态错误重复出现;
- 两次采集之间错误计数继续增长;
- 同时出现可靠性降低、备用空间不足或只读告警。
如果命令提示设备不存在,应重新执行nvme list确认控制器路径;提示权限不足时使用sudo。不要通过反复重启清除现场后再取证。
维护窗口内可选短自检
自检会增加控制器检测负载,可能影响I/O延迟。业务繁忙、阵列正在重建或设备能力不明确时,不要直接执行。先确认命令和控制器支持情况:
nvme device-self-test --help
sudo nvme id-ctrl -H "$CTRL" | grep -i "self-test"
确认支持后,可在维护窗口启动短自检并读取结果:
sudo nvme device-self-test "$CTRL" --self-test-code=1
sudo nvme self-test-log "$CTRL"
验收成功标准是测试完成且未报告错误。若返回Invalid Opcode或“不支持”类提示,通常表示控制器、固件或虚拟化层未提供该功能,不能仅凭该提示判定SSD故障。
留证、复测并确认交付结果
建议使用UTC时间保存检查环境、设备身份和原始日志:
CTRL=/dev/nvme0
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
DIR="$HOME/nvme-check-$STAMP"
umask 077
mkdir -p "$DIR"
uname -a > "$DIR/system.txt"
nvme version > "$DIR/nvme-version.txt"
sudo nvme list -o json > "$DIR/nvme-list.json"
sudo nvme id-ctrl -H "$CTRL" > "$DIR/id-ctrl.txt"
sudo nvme smart-log "$CTRL" -o json > "$DIR/smart-log.json"
sudo nvme error-log "$CTRL" -e 64 > "$DIR/error-log.txt"
sha256sum "$DIR"/* > "$DIR/SHA256SUMS"
日志可能包含SSD序列号,对外提交副本前应脱敏,原件保存在受控目录。复测应保持同一控制器、同一nvme-cli版本和相近业务负载,并记录两次采集的UTC时间。
如果严重告警持续存在,或media_errors、错误日志计数、过温累计时间继续增加,应先备份业务数据,避免执行写入压测、固件升级、format或sanitize等可能改变现场的操作。最后将两次日志、设备身份、测试条件和时间点一并提交处理,并确认实际型号、容量、固件及健康状态与香港服务器交付信息一致。