什么是 smartctl?
smartctl 是 SMART 自我监控、分析和报告技术 的命令行工具,现代硬盘(包括 SSD 和 HDD)内部都包含一个监控系统,可以持续监测自身的运行状态,例如温度、坏块数量、通电时间、读写错误率等。

smartctl 的作用就是与硬盘的 SMART 系统通信,读取这些数据,并以人类可读的格式展示出来,通过分析这些数据,你可以:
- 提前发现硬盘故障:在硬盘彻底崩溃前,通过警告信息(如
Reallocated_Sector_Ct增长)及时备份数据。 - 监控硬盘性能:查看温度、读写错误率等,确保硬盘在良好状态下运行。
- 获取硬盘信息:如型号、固件版本、序列号、容量等。
- 进行硬盘测试:对硬盘进行短时间或长时间的自我测试。
前提条件:启用 SMART
在使用 smartctl 之前,必须确保硬盘的 SMART 功能是启用的,你可以使用以下命令来检查和启用。
检查当前 SMART 状态:
sudo smartctl -i /dev/sda
如果输出中 SMART support is: Enabled,说明已经启用,如果是 Disabled,则需要手动启用。

启用 SMART(需要 root 权限):
# 方法一:使用 smartctl 直接启用(推荐) sudo smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda # 方法二:通过 hdparm 启用(传统方法) sudo hdparm -S 126 -B 254 /dev/sda
--smart=on:开启 SMART 功能。--offlineauto=on:允许在硬盘不忙时自动进行离线测试。--saveauto=on:保存 SMART 设置,重启后仍然有效。
smartctl 常用命令及示例
smartctl 的基本语法是 smartctl [选项] 设备,设备通常是 /dev/sda, /dev/sdb, /dev/nvme0n1 等。
示例 1:显示硬盘的总体健康状态
这是最常用、最直接的命令,用于快速判断硬盘是否健康。
sudo smartctl -H /dev/sda
输出解读:

smartctl 7.2 2025-12-05 r5338 [x86_64-linux-5.15.0-78-generic] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Device Model: Samsung SSD 870 EVO 1TB
Serial Number: S3Z8NB0K123456
LU WWN Device Id: 5 5cd3 6e03 12345678
Firmware Version: 2B2Q
User Capacity: 1,000,203,000,192 bytes [1.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: Solid State Device
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-3 T13/2161-D revision 4
SATA Version is: SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed Nov 15 10:30:00 2025 CST
SMART support is: Enabled
SMART support is: Available
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
PASSED, failing now would be surprising.
- 关键信息:
SMART overall-health self-assessment test result: PASSED,如果这里是FAILED,说明硬盘已经有严重问题,应立即备份数据并更换。
示例 2:显示硬盘的详细信息
这个命令会显示硬盘的型号、序列号、固件版本、容量等基本信息。
sudo smartctl -i /dev/sda
示例 3:显示 SMART 属性表(最重要的部分)
这是 smartctl 输出中最核心的内容,列出了硬盘的各项关键指标。
sudo smartctl -A /dev/sda
输出解读(部分关键属性):
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 100 100 016 Pre-fail Always - 0
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 8750
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 150
194 Temperature_Celsius 0x0022 032 045 000 Old_age Always - 32 (Min/Max 24/42)
...
关键字段解释:
- ID#:属性的唯一标识符,不同厂商的硬盘,相同 ID 的属性含义可能不同,但大部分是通用的。
- ATTRIBUTE_NAME:属性的名称,如
Reallocated_Sector_Ct(重分配扇区数)。 - VALUE:当前值,通常是 0-255 之间的整数,越大越好。
- WORST:记录以来的最差值。
- THRESH:阈值。
VALUE低于此值,硬盘会被标记为 "Failing"。 - TYPE:
Pre-fail(预失效) 表示此属性值下降预示着硬盘可能即将故障。Old_age(老化) 表示是正常磨损。 - RAW_VALUE:原始值,这是最重要的数据,因为它不受厂商标准化影响。
- ID 5 (Reallocated_Sector_Ct):重分配扇区数,如果这个值大于 0,说明硬盘已经有坏块并被系统替换。任何增长都值得警惕。
- ID 9 (Power_On_Hours):通电时间(小时)。
- ID 194 (Temperature_Celsius):当前温度,硬盘温度过高会严重影响寿命。
- ID 200 (Write_Error_Rate):写入错误率。
示例 4:运行硬盘自我测试
你可以让硬盘运行内置的测试程序来检查其健康状况。
# 1. 运行短测试 (耗时约 1-2 分钟) sudo smartctl -t short /dev/sda # 2. 运行扩展测试 (耗时约几十分钟到数小时) sudo smartctl -t long /dev/sda # 3. 运行 conveyance 测试 (运输测试,约 10 分钟) sudo smartctl -t conveyance /dev/sda
如何查看测试状态和结果?
测试是异步在硬盘后台进行的,你可以使用以下命令来查看进度:
sudo smartctl -c /dev/sda
测试完成后,使用 -l selftest 查看详细日志:
sudo smartctl -l selftest /dev/sda
示例 5:显示错误日志
如果硬盘出现了问题,可以查看它的错误日志。
sudo smartctl -l error /dev/sda
示例 6:以 JSON 格式输出 (适合脚本)
如果你想在脚本中处理 smartctl 的输出,JSON 格式非常方便。
sudo smartctl -j -A /dev/sda
总结与最佳实践
| 命令 | 用途 | 示例 |
|---|---|---|
sudo smartctl -H /dev/sda |
快速检查健康状态 | PASSED 或 FAILED |
sudo smartctl -i /dev/sda |
查看硬盘基本信息 | 型号、序列号、容量等 |
sudo smartctl -A /dev/sda |
查看详细的 SMART 属性 | 关注 RAW_VALUE,特别是 Reallocated_Sector_Ct 和 Temperature |
sudo smartctl -t short /dev/sda |
运行短时间自我测试 | 快速检查 |
sudo smartctl -l selftest /dev/sda |
查看自我测试日志 | 检查测试是否通过 |
sudo smartctl -l error /dev/sda |
查看硬盘错误日志 | 诊断问题 |
最佳实践建议:
- 定期检查:可以将
sudo smartctl -H /dev/sda命令加入到 cron 定时任务中,每周或每月自动检查一次,并通过邮件或日志系统报告结果。 - 关注关键属性:重点监控
Reallocated_Sector_Ct,Current_Pending_Sector,Uncorrectable_Error_Cnt,Temperature_Celsius等属性,任何非零值(尤其是持续增长)都应引起重视。 - 保持低温:确保硬盘通风良好,温度过高是 SSD 和 HDD 的大敌。
- 备份,备份,再备份:
smartctl是预警工具,不是救世主,一旦发现硬盘有故障迹象(SMART 报警或出现坏块),应立即更换硬盘并从备份中恢复数据,不要依赖即将死亡的硬盘。
