Smartmontools是一款开源的硬盘健康监测工具集,支持ATA/SATA、SCSI/SAS、NVMe等多种接口的存储设备。它能够读取硬盘的S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)数据,帮助用户提前发现硬盘可能出现的故障。
Smartmontools包含两个主要组件:
smartctl:命令行工具,用于查询和控制存储设备的S.M.A.R.T.状态。
smartd:守护进程,用于定期监控磁盘健康状况并执行预定义操作。
以RockyLinux为例,我们可以通过yum/dnf命令来安装它
|
1 |
dnf install smartmontools |
smartctl命令与核心参数,我这里以smartctl 7.1版本进行说明
Usage: smartctl [options] device
===== SHOW INFORMATION OPTIONS 信息显示选项=====
-h, --help, --usage:显示帮助
-V, --version, --copyright, --license:显示具体版本信息
-i, --info:显示设备基本信息,如smartctl -i /dev/sda
--identify[=[w][nvb]]:显示底层IDENTIFY数据,如smartctl --identify=w /dev/sda
-g NAME, --get=NAME:获取设备设置情况,可选值all, aam, apm, dsn, lookahead, security, wcache, rcache, wcreorder, wcache-sct,如smartctl -g wcache /dev/sda
-a, --all:显示所有SMART信息,如smartctl -i /dev/sda
-x, --xall:显示更全面的设备信息,加强版-a
--scan:扫描系统中的设备
--scan-open:扫描系统中的设备并验证
===== SMARTCTL RUN-TIME BEHAVIOR OPTIONS 运行时行为选项=====
-j, --json[=[cgiosuv]]:以JSON格式输出结果,便于脚本解析,如smartctl -j -a /dev/sda、smartctl -j=cgi -a /dev/sda
-q TYPE, --quietmode=TYPE:静默模式,可选参数为errorsonly(只显示错误)、silent(不输出任何信息)、noserial(隐藏序列号),如smartctl -q errorsonly -H /dev/sda,
-d TYPE, --device=TYPE:指定设备类型,可选参数如下ata, scsi[+TYPE], nvme[,NSID], sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbprolific, usbsunplus, sntjmicron[,NSID], intelliprop,N[+TYPE], marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, aacraid,H,L,ID, cciss,N, auto, test
-T TYPE, --tolerance=TYPE:容错级别,可选参数normal(默认)、conservative(保守)、permissive(宽松)、verypermissive(非常宽松)
-b TYPE, --badsum=TYPE:校验错误处理,warn(默认)、exit(直接退出)、ignore(忽略)
-r TYPE, --report=TYPE:报告模式,如smartctl -r ioctl -a /dev/sda
-n MODE[,STATUS], --nocheck=MODE[,STATUS]:不检查条件,如never(总是检查)、sleep(睡眠时不检查)、standby(待机时不检查)、idle(空闲时不检查)
===== DEVICE FEATURE ENABLE/DISABLE COMMANDS 设备功能启用禁用选项=====
-s VALUE, --smart=VALUE:启用/禁用SMART功能,如smartctl -s off /dev/sda
-o VALUE, --offlineauto=VALUE:启用/禁用自动进行后台健康扫描
-S VALUE, --saveauto=VALUE:SMART属性是否定期自动保存到硬盘,如smartctl -S on /dev/sda
-s NAME[,VALUE], --set=NAME[,VALUE]:启用/禁用高级功能设置
===== READ AND DISPLAY DATA OPTIONS 读取数据选项=====
-H, --health:健康状态检查,常用的命令,如smartctl -H /dev/sda,常见的输出结果SMART overall-health self-assessment test result: PASSED
-c, --capabilities:显示设备支持的SMART功能
-A, --attributes:显示详细的健康属性表,常用的命令
-f FORMAT, --format=FORMAT:属性输出格式,如16进制smartctl -f hex -A /dev/sda
-l TYPE, --log=TYPE:查看日志,可用选项error, selftest, selective, directory[,g|s],xerror[,N][,error], xselftest[,N][,selftest], background,sasphy[,reset], sataphy[,reset], scttemp[sts,hist],scttempint,N[,p], scterc[,N,M], devstat[,N], defects[,N], ssd,gplog,N[,RANGE], smartlog,N[,RANGE], nvmelog,N,SIZE
-v N,OPTION , --vendorattribute=N,OPTION:特殊属性显示设置
-F TYPE, --firmwarebug=TYPE:固件bug规避,可用选项none, nologdir, samsung, samsung2, samsung3, xerrorlba, swapid
-P TYPE, --presets=TYPE:设备预设,可用选项use, ignore, show, showall
-B [+]FILE, --drivedb=[+]FILE:加载自定义设备驱动库
===== DEVICE SELF-TEST OPTIONS 设备自检选项=====
-t TEST, --test=TEST:执行自建测试,可用选项 offline, short, long, conveyance, force, vendor,N,select,M-N, pending,N, afterselect,[on|off]
-C, --captive:模式测试,测试期间禁止其他I/O操作,必须配合-t使用,如smartctl -t long -C /dev/sda
-X, --abort:中止测试
常用的一些例子
快速健康检查,包含关键指标、坏道、待映射扇区、CRC错误、温度
|
1 |
smartctl -H -A -l error /dev/sdX | grep -EA10 "SMART overall-health|Reallocated|Pending|CRC|Temperature" |
查看NVMe寿命和关键指标
|
1 |
smartctl -a -d nvme /dev/nvme0n1 | grep -E "Model|Serial|Temperature|Available_Spare|Percentage_Used|Data_Units_Read" |
USB外接硬盘检测,例如
|
1 |
smartctl -d auto -a /dev/sdd |
快速状态检查
|
1 |
smartctl -H /dev/sdX |
查看错误记录
|
1 |
smartctl -l error /dev/sdX |
检查坏道情况
|
1 |
smartctl -A /dev/sdX | grep -E "Reallocated|Pending" |
运行短自建验证
|
1 |
smartctl -t short /dev/sdX |
进行短自建验证后等待几分钟查看结果
|
1 |
smartctl -l selftest /dev/sdX |
保存历史记录
|
1 |
smartctl -a /dev/sdX > smart_$(date +%F).log |
查看温度变化趋势(需硬盘支持)
|
1 |
smartctl -l scttemp /dev/sdX | grep "Temperature History" -A 10 |
自动监控SMART状态
为了随时跟踪设备的状态,也可以配置smartd,这是smartmontools附带的后台守护进程。它可以自动运行测试,并在设备故障时通过电子邮件通知。我这里使用smartctl 7.0版本,smartd配置文件/etc/smartmontools/smartd.conf,老版本的配置文件/etc/smartd.conf,不同版本之间可能存在差异。
如没有特殊要求,可直接启动服务
|
1 |
systemctl enable smartd --now |
在默认配置文件中已经配置了如下内容
|
1 |
DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q |
该配置作用是扫描所有设备,只检查健康状态(-H),异常时发送邮件给root用户(-m root),并忽略休眠中的设备(-n standby,10,q)。
自检计划,可追加以下配置,每日2点短测试,每周六2点执行长测试
|
1 |
-s (S/../.././02|L/../../6/03) |
smartctl是一个强大的工具,用于监控和维护Linux上的存储设备健康状态。通过本教程你可以主动检查驱动器的潜在问题,执行诊断测试,可将检测结果输出传递给AI工具,帮助其分析设备使用情况等。
原文链接:Linux硬盘健康检测命令之Smartmontools,转载请注明来源!




