10/15 款服务器配置有货即时交付免安装费

存储与 RAID

使用 smartctl 和 nvme-cli 检查硬盘健康状况

安装 smartmontools 和 nvme-cli,读懂 HDD 和 NVMe SSD 上预示故障的指标,设置定期自检和告警,并在需要更换硬盘时提供正确的数据。

阅读约 6 分钟更新于 UbuntuDebianAlmaLinuxRocky LinuxProxmox VE

适用于
UbuntuDebianAlmaLinuxRocky LinuxProxmox VE
阅读时间
6 分钟
更新日期

遇到问题?工程师 7×24 小时为您解答

本页目录

每台 DediJet 服务器在加入就绪服务器池之前,都会在烤机测试期间通过 SMART 和 NVMe 健康检查。但硬盘仍会磨损,偶尔也会发生故障,而且通常会先发出预警。有两个工具可以读取这些预警:适用于所有类型硬盘的 smartctl(来自 smartmontools),以及适用于 NVMe 硬盘的 nvme-cli。

安装工具

在 Ubuntu 和 Debian 上:

Shell
apt update
apt install -y smartmontools nvme-cli

在 AlmaLinux 和 Rocky Linux 上:

Shell
dnf install -y smartmontools nvme-cli

Proxmox VE 已自带 smartmontools。列出硬盘及其序列号;ROTA = 1 表示机械硬盘(HDD):

Shell
lsblk -d -o NAME,MODEL,SERIAL,SIZE,ROTA,TRAN

读取 HDD 和 SATA SSD 的 SMART 数据

Shell
smartctl -a /dev/sda

先看 SMART overall-health self-assessment test result 这一行。FAILED 表示必须更换该硬盘。PASSED 仅表示尚无任何属性超过厂商设定的阈值,因此还需查看各项属性,以 RAW_VALUE 列为准:

输出
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       1874
194 Temperature_Celsius     0x0002   200   200   000    Old_age   Always       -       31
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0
属性含义需处理的情况
5 Reallocated_Sector_Ct已被备用扇区替换的坏扇区非零且在两次检查之间持续增长
197 Current_Pending_Sector等待重映射的不可读扇区任何非零值
198 Offline_Uncorrectable离线扫描中出错的扇区任何非零值
199 UDMA_CRC_Error_Count硬盘与控制器之间的传输错误,通常由线缆或背板引起持续增加:请提交工单,问题出在传输路径而非存储介质
194 Temperature_Celsius硬盘当前温度超过硬盘规格书中的最高温度

属性名称和编号因厂商而异,SAS 硬盘则改为报告 Elements in grown defect list。如需查看完整信息(包括硬盘自身的错误日志),请使用 smartctl -x。

读取 NVMe 健康信息

Shell
smartctl -a /dev/nvme0
nvme smart-log /dev/nvme0

两者读取的是同一份健康日志。/dev/nvme0 是控制器;/dev/nvme0n1 是其命名空间,也就是您进行分区的块设备。

输出
Critical Warning:                   0x00
Temperature:                        38 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    1%
Data Units Written:                 5,322,198 [2.72 TB]
Unsafe Shutdowns:                   3
Media and Data Integrity Errors:    0
Error Information Log Entries:      0
  • Critical Warning(严重警告)必须为 0x00。任何其他值(备用块低于阈值、温度异常、可靠性下降、只读模式)都需要立即处理。
  • Available Spare(可用备用块)是用于替换的备用块储备。一旦低于阈值,说明硬盘已接近寿命终点。
  • Percentage Used(已用寿命百分比)是厂商对额定耐久度消耗程度的估算。该值超过 100% 后硬盘仍可能继续工作,但应计划更换。
  • Media and Data Integrity Errors(介质与数据完整性错误)应保持为 0。计数持续增长意味着硬盘已无法可靠地返回您的数据。
  • Error Information Log Entries(错误信息日志条目)经常记录一些无害事件,例如工具发送了不受支持的命令。仅凭此项不能判定硬盘故障。
  • Data Units Written(已写入数据单元)以 512,000 字节为单位计数;smartctl 会自动为您换算总量。

运行短时和长时自检

自检在硬盘固件内部运行,服务器可照常工作。短时测试通常只需两分钟或更短;长时(扩展)测试会读取整个盘面,在大容量 HDD 上可能长达数小时。测试开始时,smartctl 会显示预计耗时。

Shell
smartctl -t short /dev/sda
smartctl -t long /dev/sda
smartctl -l selftest /dev/sda

在日志中,Completed without error 是理想结果;带有 LBA 编号的 Completed: read failure 表示硬盘发现了不可读扇区。对于支持自检的 NVMe 硬盘,请使用 nvme-cli(代码 1 = 短时,2 = 扩展);其日志中的操作结果为 0 表示成功。从 smartmontools 7.4 起,smartctl 也能执行同样的操作。

Shell
nvme device-self-test /dev/nvme0 -s 1
nvme self-test-log /dev/nvme0

先备份。如果硬盘已出现待映射扇区或介质错误,请在开始长时测试之前将数据复制出来:全盘读取会给状态不佳的硬盘带来额外压力。

使用 smartd 定期检查并发送邮件告警

smartd 守护进程每 30 分钟检查一次所有硬盘,并可按计划启动自检。编辑 /etc/smartd.conf(Debian、Ubuntu)或 /etc/smartmontools/smartd.conf(AlmaLinux、Rocky Linux),替换现有的 DEVICESCAN 行,因为 smartd 会忽略该行之后的所有行:

配置文件
DEVICESCAN -a -n standby,q -s (S/../.././02|L/../../6/03) -m root -M test
  • -a 监控健康状态、属性、错误日志和自检日志。
  • -s (S/../.././02|L/../../6/03) 每天 02:00 启动一次短时测试,每周六 03:00 启动一次长时测试。在 NVMe 硬盘上,计划自检需要 smartmontools 7.5 或更高版本(可用 smartctl --version 查看);较旧的版本仍可监控 NVMe 健康状态。
  • -m root 通过 mail 命令向 root 发送告警,因此请安装邮件客户端和邮件传输代理,例如 mailutils 搭配 Postfix 或 msmtp,并在 /etc/aliases 中设置别名,将 root 的邮件转发到您自己的邮箱。
  • -M test 会在启动时发送一封测试邮件。收到邮件后即可将其删除。

重启守护进程并检查其日志。在 Ubuntu 和 Debian 上:

Shell
systemctl restart smartmontools
journalctl -u smartmontools -n 50

在 AlmaLinux 和 Rocky Linux 上,该服务名为 smartd:先执行 systemctl enable --now smartd,再执行 journalctl -u smartd -n 50。

何时提交工单

更换故障硬件是服务的一部分:根据我们的 SLA(服务等级协议),故障部件会在确诊后 4 小时内更换,7×24 小时全天候服务。出现以下任一情况时,请提交工单:

  • 整体评估结果为 FAILED,或自检失败。
  • 重映射扇区持续增长,或出现任何待映射扇区或离线无法校正的扇区。
  • NVMe 严重警告不为 0x00、备用块低于阈值,或介质错误持续增长。
  • UDMA CRC 错误计数持续增长。
  • 有硬盘从 RAID 阵列中掉线,或在 journalctl -k 中出现 I/O error 之类的内核消息或 NVMe 控制器重置。

请在第一条消息中提供以下全部信息,以加快诊断:

  1. 服务器的 IP 地址、疑似故障的硬盘,以及通过 smartctl -i 获取的该硬盘序列号。
  2. 该硬盘的 smartctl -x 完整输出,以附件文件形式提供。
  3. 使用软件 RAID 时:cat /proc/mdstat 的输出,以及必须保留的那块硬盘的序列号。
  4. 相关的内核日志行及其时间戳,以及您的数据是否已备份。

使用软件 RAID 时,请按照使用 mdadm 管理软件 RAID 1 中的说明,在更换前做好阵列准备,并在更换后重建阵列。

后续步骤

需要帮助?

拥有在用服务器的客户可在账户中提交工单,工程师 7×24 小时为您解答。

技术支持流程