S.M.A.R.T
S.M.A.R.T 技术
S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)意思是自我监控,分析
和报告技术,也常常写成SMART。SMART是计算机硬盘驱动器(HDDs)和固态驱动器(SSDs)的监
控系统,用来对许多驱动器可靠性的许多指标进行检测和报告,以便能够预测硬件故障。
当前多数存储设备内建了S.M.A.R.T.附件来监控、存储和分析其设备操作的健康程度。通过软件
搜集温度、重新分配的扇区、寻道错误等状态数据,软件可以用来
度量设备等健康状况。当S.M.A.R.T.数据预测到驱动器可能的故障,运行在主机上的软件可能会
通知用户复制数据到其他驱动器,避免数据丢失以及可以替换驱动
器。
smartmontools
smartmontools软件包包含了2个工具程序来分析和监控存储设备:smartctl和smartd。
设备必须支持SMART功能并且激活每个存储设备的SMART,这样才能有效使用工具。可以使用smartctl
来检查是否激活了SMART支持,然后运行测试和检查测试结果。
另外,可以使用smartd在自动运行测试和进行email通知。
安装smartmontools
Debian
apt-get install smartmontools
CentOS/RHEL
yum install smartmontools
smartctl
smartctl
是一个命令行工具,控制大多数ATA/SATA和SCSI/SAS硬盘和固态存储内建的SMART”。
--info
或-i
参数将打印一个设备的信息参数,包括是否支持SMART以及是否激活了该功能。
1 |
|
显示输出(包括了型号、序列号、Firmware版本、容量、扇区、接口等信息,最后两行参数显
示支持SMART)
=== START OF INFORMATION SECTION ===
Model Family: Seagate Laptop HDD
Device Model: ST500LT012-1DG142
Serial Number: W3P13ZF9
LU WWN Device Id: 5 000c50 06e3a8813
Firmware Version: 0002LVM1
User Capacity: 500,107,862,016 bytes [500 GB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 5400 rpm
Form Factor: 2.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Thu Mar 29 16:22:02 2018 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
如果设备没有激活SMART,可以使用命令
smartctl --smart=on /dev/sda
有可能需要指定设备类型,如 --device=ata
以便通知smartctl设备类型,避免使用SCSI命令--smart=off
可关闭设备的SMART功能
运行测试
有3种类型的自我测试(所有的测试都是用户数据安全的):
- short (检查设备的高概率问题)
- extended (或者称为long测试,将进行完整的磁盘表面快速检查)
- conveyance (在设备的传输过程中标示是否存在损坏)
-c
参数(或者--capabilities
)输出设备支持的测试以及每个测试需要花费的时间
smartctl -c /dev/sda
运行结果:
=== START OF READ SMART DATA SECTION ===
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Offline data collection
capabilities: (0x73) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
No Offline surface scan supported.
Self-test supported.
Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 103) minutes.
Conveyance self-test routine
recommended polling time: ( 2) minutes.
SCT capabilities: (0x1031) SCT Status supported.
SCT Feature Control supported.
SCT Data Table supported.
使用-t
(或者--test=<test_name>
)参数来运行一个测试
smartctl -t short /dev/<device>
smartctl -t long /dev/<device>
smartctl -t conveyance /dev/<device>
查看测试结果
可以使用-H
参数来查看设备的健康概况。 “如果设备报告failing health
状态,就意味着设备
已经故障,或者设备预测自己将在24小时内故障。这种情况下要尽可能快地将设备上的数据导出
到安全的存储中”
smartctl -H /dev/<device>
可以列出最近的测试结果以及设备的详细信息
smartctl -l selftest /dev/<device>
smartctl -a /dev/<device>
快速测试案例
启动一个短暂的自测试
sudo smartctl -t short /dev/sda
如果要中断测试(没有必要的话不要自行中断命令)
smartctl -X
短暂自测试大约2分钟,然后用下面的命令查看测试结果
sudo smartctl -l selftest /dev/sda
显示结果类似
直接查看磁盘的健康状况
smartctl --health /dev/sda
显示
=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK
输出详细的设备信息
smartctl -a /dev/sda
输出结果类似
smartd
smartd
daemon监控SMART状态,并在发生问题时邮件通知。这个服务可以通过systemd管理,
并且使用/etc/smartd.conf
配置文件。不过这个配置文件非常晦涩难懂,详细配置可以参
考man 5 smartd.conf
或者smartd.conf info
管理smartd服务
启动、检查状态、以及激活自启动和查看最近的日志
systemctl start smartd
systemctl status smartd
systemctl enable smartd
journalctl -u smartd
定义监控的设备
要监控所有可能SMART错误,则配置/etc/smartd.conf
(在CentOS 7是/etc/smartmontools/smartd.conf
)
DEVICESCAN -a
如果要只监控指定的磁盘,例如
/dev/sda -a
/dev/sdb -a
也可以对外接的磁盘(如通过USB连接的备份用磁盘),需要通知SMARTd设备的UUID,这是因为每次
重启设备的/dev/sdX
可能变化
要获取需要监控的磁盘的UUID,可以使用ls -lah /dev/disk/by-uuid/
来查看需要监控的磁盘。
以下配置在smartd.conf中的配置就是针对USB磁盘
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a
使用电子邮件通知潜在的问题
要在故障或新的错误发生时通知,使用-m
参数
DEVICESCAN -m address@domain.com
要发送给外部的email地址,需要确保系统有MTA(Mail Transport Agent)或者MUA(Mail User Agent)
并且已经正确配置。通常MTU是sendmail和Postfix。
如果设置了-M test
就会在smartd服务启动时发送一个测试邮件
DEVICESCAN -m address@domain.com -M test
由于电子邮件投递需要很长时间,而通常期望硬盘故障时立即被通知到以便采取措施。则可以定义
执行一个脚本来替代email
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify
CentOS默认配置
检查了CentOS 7默认配置的/etc/smartmontools/smartd.conf
,配置内容实际只有一行
DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q
这里通知是发送给系统的root用户,并且执行了脚本/usr/libexec/smartmontools/smartdnotify
这
个脚本实现了email通知,同时将消息写到终端上
1 |
|
电源管理
可以用smartd来处理磁盘的低电压模式,这样可以通过smartd来响应SMART命令,磁盘转速。没
有这个参数,磁盘可能在低电压情况下仍然高速旋转:
DEVICESCAN -n standby,15,q
详细参考 smartmontools wiki
周期自测
smartd可以告诉磁盘定期执行自检,以下配置设置磁盘每天早上2-3点进行short self-test,在
每个周六的早上3-4点进行详细自测
DEVICESCAN -s (S/../.././02|L/../../6/03)
温度改变时告警
smartd可以跟踪磁盘问题并且在磁盘温度太快升高或者达到阀值时高进。以下配置在发生4度温度变化,或者温度达到35度,进行日志,在温度达到40度时日志和邮件告警
DEVICESCAN -W 4,35,40
可以使用命令检查当前磁盘温度smartctl -A /dev/<device> | grep Temperature_Celsius
完整的smartd.conf配置
以下配置将上述所有配置集成
DEVICESCAN (smartd scans for disks and monitors all it finds)
-a (monitor all attributes)
-o on (enable automatic online data collection)
-S on (enable automatic attribute autosave)
-n standby,q (do not check if disk is in standby, and suppress log message to that effect so as not to cause a write to disk)
-s ... (schedule short and long self-tests)
-W ... (monitor temperature)
-m ... (mail alerts)
配置如下
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m <username or email>
这个配置非常完善,可参考
GSmartControl图形管理工具
GSmartControl是smartctl的的图形前端,显示所有的SMART数值,并且高亮显示那些旧值或者
即将故障,可以按照需要运行测试
GSmartControl main window
参考
[Wikipedia: S.M.A.R.T.](https://en.wikipedia.org/wiki/S.M.A.R.T.)
[archlinux: S.M.A.R.T. ](https://wiki.archlinux.org/index.php/S.M.A.R.T.)- 本文主要参考
[Monitoring Hard Disks with SMART](http://www.linuxjournal.com/magazine/monitoring-hard-disks-smart)
[Get the disk health status with SMART monitor tools on Debian and Ubuntu Linux](http://www.linuxjournal.com/magazine/monitoring-hard-disks-smart)
[Using smartctl to get SMART status information on your hard drives](http://www.techrepublic.com/blog/linux-and-open-source/using-smartctl-to-get-smart-status-information-on-your-hard-drives/)
[ubuntu: Smartmontools](https://help.ubuntu.com/community/Smartmontools) - 本文主要参考,提供了监控个人电脑和服务器的脚本以及处理经验
[SMART tests with smartctl](https://www.thomas-krenn.com/en/wiki/SMART_tests_with_smartctl)
[Monitoring Hard Drive Health on Linux with smartmontools](https://blog.shadypixel.com/monitoring-hard-drive-health-on-linux-with-smartmontools/)
文章参考
https://huataihuang.gitbooks.io/cloud-atlas/content/storage/das/smart.html
文章参考
https://huataihuang.gitbooks.io/cloud-atlas/content/storage/das/smart.html
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!