要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件突然崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。

为了避免遇到这种困境,用户可以试用一款叫做smartmontools的软件包程序,它通过使用自我监控(Self-Monitoring)、分析(Analysis)和报告(Reporting)三种技术(缩写为S.M.A.R.T或SMART)来管理和监控存储硬件。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。smartmontools由smartctl和smartd两部分工具程序组成,它们一起为Linux平台提供对磁盘退化和故障的高级警告。

这篇文章会描述Linux上smartmontools的安装和配置方法。

安装Smartmontools

由于smartmontools在大部分Linux发行版的基本软件库中都可用,所以安装很方便。

Debian和其衍生版:

# aptitude install smartmontools

基于Red Hat的发行版:

# yum install smartmontools

使用Smartctl检测硬盘的健康状况

首先,使用下面的命令列出和系统相连的硬盘:

# ls -l /dev | grep -E 'sd|hd'

输出结果和下图类似:

其中sdX代表分配给机器上对应硬盘上的设备名。

如果想要显示出某个指定硬盘的信息(比如设备模式、S/N、固件版本、大小、ATA版本/修订号、SMART功能的可用性和状态),在运行smartctl命令时添加"--info"选项,并按如下所示指定硬盘的设备名。

在本例中,选择/dev/sda。

# smartctl --info /dev/sda

尽管最开始可能不会注意到ATA(译者注:硬盘接口技术)的版本信息,但当需要替换硬盘时它确实是最重要的因素之一。每一代ATA版本都保持向下兼容。例如,老的ATA-1或ATA-2设备可以正常工作在ATA-6和ATA-7接口上,但反过来就不行了。在设备版本和接口版本两者不匹配的情况下,它们会按照两者中版本较小的规范来运行。也就是说,在这种情况下,需要替换硬盘时,ATA-7硬盘是最安全的选择。

可以通过这个命令来检测某个硬盘的健康状况:

# smartctl -s on -a /dev/sda

在这个命令中,"-s on"标志开启指定设备上的SMART功能。如果/dev/sda上已开启SMART支持,那就省略它。

硬盘的SMART信息包含很多部分。其中,"READ SMART DATA"部分显示出硬盘的整体健康状况。

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment rest result: PASSED

这个测试的结果是PASSED或FAILED。后者表示即将出现硬件故障,所以需要开始备份这块磁盘上的重要数据!

下一个需要关注的地方是SMART属性表,如下所示。

基本上,SMART属性表列出了制造商在硬盘中定义好的属性值,以及这些属性相关的故障阈值。这个表由驱动固件自动生成和更新。

ID:属性ID,通常是一个1到255之间的十进制或十六进制的数字。

ATTRIBUTE_NAME:硬盘制造商定义的属性名。

FLAG:属性操作标志(可以忽略)。

VALUE:这是表格中最重要的信息之一,代表给定属性的标准化值,在1到253之间。253意味着最好情况,1意味着最坏情况。取决于属性和制造商,初始化VALUE可以被设置成100或200.

WORST:所记录的最小VALUE。

THRESH:在报告硬盘FAILED状态前,WORST可以允许的最小值。

TYPE:属性的类型(Pre-fail或Oldage)。Pre-fail类型的属性可被看成一个关键属性,表示参与磁盘的整体SMART健康评估(PASSED/FAILED)。如果任何Pre-fail类型的属性故障,那么可视为磁盘将要发生故障。另一方面,Oldage类型的属性可被看成一个非关键的属性(如正常的磁盘磨损),表示不会使磁盘本身发生故障。

UPDATED:表示属性的更新频率。Offline代表磁盘上执行离线测试的时间。

WHEN_FAILED:如果VALUE小于等于THRESH,会被设置成“FAILING_NOW”;如果WORST小于等于THRESH会被设置成“In_the_past”;如果都不是,会被设置成“-”。在“FAILING_NOW”情况下,需要尽快备份重要文件,特别是属性是Pre-fail类型时。“In_the_past”代表属性已经故障了,但在运行测试的时候没问题。“-”代表这个属性从没故障过。

RAW_VALUE:制造商定义的原始值,从VALUE派生。

这时候你可能会想,“是的,smartctl看起来是个不错的工具,但我更想知道如何避免手动运行的麻烦。”如果能够以指定的间隔运行,同时又能通知我测试结果,那不是更好吗?”

好消息是,这个功能已经有了。是smartd发挥作用的时候了!

配置Smartctl和Smartd实现实时监控

首先,编辑smartctl的配置文件(/etc/default/smartmontools)以便在系统启动时启动smartd,并以秒为单位指定间隔时间(如7200 = 2小时)。

start_smartd=yes

smartd_opts="--interval=7200"

下一步,编辑smartd的配置文件(/etc/smartd.conf),添加以下行内容。

/dev/sda -m myemail@mydomain.com -M test

-m:指定发送测试报告到某个电子邮件地址。这里可以是系统用户比如root,或者如果服务器已经配置成发送电子邮件到系统外部,则是类似于myemail@mydomain.com的邮件地址。

-M:指定发送邮件报告的期望类型。

once:为检测到的每种磁盘问题只发送一封警告邮件。

daily:为检测到的每种磁盘问题每隔一天发送一封额外的警告提醒邮件。

diminishing:为检测到的每种问题发送一封额外的警告提醒邮件,开始是每隔一天,然后每隔两天,每隔四天,以此类推。每个间隔是前一次间隔的2倍。

test:只要smartd一启动,立即发送一封测试邮件。

exec PATH:取代默认的邮件命令,运行PATH路径下的可执行文件。PATH必须指向一个可执行的二进制文件或脚本。当检测到一个问题时,可以指定执行一个期望的动作(闪烁控制台、关闭系统等等)。

保存改动并重启smartd。

smartd发送的邮件应该是这个样子。

在上图中,没有检测到错误。如果实际上检测到了错误,那么错误会出现在“下列警告/错误由smartd守护进程写入日志”这一行的下面。

最后,可以使用“-s”标志和形如“T/MM/DD/d/HH”的正则表达式按照想要的调度方案执行测试,其中:

正则表达式中的T代表测试的类型:

L:长测试

S:短测试

C:传输测试(仅限ATA)

O:离线测试(仅限ATA)

其它的字符代表测试执行的日期和时间:

MM是一年中的月份。

DD是一月中的天份。

HH是一天中的小时。

d是一个星期中的某天(从1=周一到7=周日)。

MM、DD和HH使用两位十进制数字表示。

在上述表达中的小圆点表示所有可能的值。形如'(A|B|C)'在圆括号里的表达式表示三个可能值A、B和C中的任意一个。形如[1-5]在方括号中的表达式表示1到5的范围(包含5).

例如,想要在每个工作日的下午一点为所有的磁盘执行一次长测试,在/etc/smartd.conf中添加如下行内容。确保编辑完重启smartd。

DEVICESCAN -s (L/../../[1-5]/13)

总结

无论你想要快速查看磁盘的电子和机械性能,还是对整个磁盘执行一次长时间扫描测试,都不要让自己陷入日复一日地执行命令中而忘记了定期检测磁盘的健康状态。多关注磁盘的健康状况,你会受益的!

本文由 LCTT 原创翻译,Linux中国 荣誉推出

linux硬盘检测健康状态脚本,系统运维|使用 smartmontools 查看硬盘的健康状态相关推荐

  1. linux cgi c环境配置,Linux下配置nginx支持.cgi | 系统运维

    说明: 操作系统:CentOS 6.x web环境:php+nginx+mysql nginx安装目录:/usr/local/nginx nginx配置文件:/usr/local/nginx/conf ...

  2. linux windows 运维比较,linux与windows的比较_系统运维_linux操作_linux系统_课课家

    用户做比较是一个学习的过程,深入学习的朋友们都喜欢拿Linux与Windows来进行比较,对比一下这个两种系统它们有什么不一样的地方,本文将为大家简单的进行这两种系统的比较,让大家可以简单的进行一个学 ...

  3. linux查看网络连接命令,系统运维|使用netstat检测及监测网络连接

    大家好,我是邪恶君子!今天,邪恶就给大家分享一下,使用小小的一个netstat命令,就能让你检测出系统是否处于安全状态!!! 这篇文档,复杂°:简单:难易°:易.坚决让小白都看得懂,学得会,掌握牢,上 ...

  4. linux服务器 硬盘安装教程,硬盘安装CentOS 6.0(超级详细图文教程) | 系统运维...

    引言: 电脑系统是Windows XP,电脑没有光驱.手头没有U盘.没有移动硬盘.电脑主板不支持U盘启动,在这种情况下想安装CentOS 6.0,有木有办法? 答案:有办法,请看下面教程! 必备工具: ...

  5. linux系统运维面试2000多题

    技术问题 1. IDC机房的域名怎么维护的 2. 怎么根据nagios报警做出调整的 3. nagios的状态还有怎么添加监控服务 4. 怎么监控CPU的状态 5. 从时候接linux的?都用过哪些系 ...

  6. RedHat / Centos   Linux 系统运维与管理实践技巧荟萃,持续更新

    RedHat / Centos   Linux  系统运维与管理实践技巧荟萃 磁盘分区相关  Linux  fdisk 磁盘分区工具以及安装 GRUB 实战: 准备工作,前置知识 演示环境基于 cen ...

  7. 使用 smartmontools 查看硬盘的健康状态

    使用 smartmontools 查看硬盘的健康状态 要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了.诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬 ...

  8. linux系统运维面试题大全(137道题)

    linux系统运维面试题大全 1. 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 查看物理cup: cat /proc/cpuinfo|grep -c 'physical id' 查看 ...

  9. 很实用的Linux 系统运维常用命令及常识(超实用)

    很实用的Linux 系统运维常用命令及常识(超实用) 作为Linux运维,需要了解Linux操作系统的基本使用和管理知识,下面脚本之家小编给大家介绍下Linux运维需要掌握的命令,想成为Linux运维 ...

  10. Linux系统运维常用命令

    Linux 系统运维常用命令 1 文件管理2 软件管理3 系统管理 4 服务管理5 网络管理6 磁盘管理 7 用户管理8 脚本相关9 服务配置 ============================ ...

最新文章

  1. Bitcoin 中的挖矿算法(1) 难度值前奏
  2. mysql 树排序_mysql按树深度排序
  3. 这个转录组比对工具很快,十几分钟一个样品
  4. linux建立ftp用户
  5. Java分布式锁的概念以及使用优点
  6. 在的微型计算机系统中 外设可和,微机原理第七章题库
  7. mac 压缩png图片资源 pngcrush命令
  8. python程序基本结构总结图_一张图认识Python(附基本语法总结)
  9. unity3d脚本控制骨骼旋转
  10. SQL 视频整体总结
  11. 设计模式 | 装饰者模式及典型应用
  12. 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学专业
  13. deepin - PS CS6 弹出试用结束(解决方案)
  14. 武汉java软谋教育坑吗_软谋在线教育诚招php,java,.net,设计师讲师(可兼职)...
  15. Python描述数据结构之链表实战篇
  16. VLC 官方文档地址
  17. 机械手表,石英手表,智能手表怎么选最好,哪种更适合佩戴?
  18. MySQL中创建jxgl数据库_《MySQL数据技术与实验指导》jxgl数据库的创建和插入
  19. 超详细案例讲解如何寻求产品的市场增长点?【线性回归数据可视化】
  20. “十月围城”中国高校SAS数据分析大赛将再燃战火

热门文章

  1. Ifc 人工解析——拿墙IfcWallStandardCase来举例说明
  2. B.系数(mod意义下的系数转化+lucas)
  3. Frodo and pillows _CF760B
  4. ts语音自建服务器,用轻量搭建自己的语音聊天服务器
  5. 【华录杯】深度学习吸烟打电话识别
  6. 一文读懂POE交换机和普通交换机的区别
  7. (逆向工程)Android一键脱壳工具(MDEX)
  8. Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. java.lang.Il
  9. 步步惊心,Zookeeper集群运维“避坑”指南
  10. java 二进制 base64编码_java自定义实现base64编码转换