检测磁盘驱动的健康程度SMART
在linux中,工具包的名字为smartmontools
在CentOS中可以使用 yum install smartmontools来安装工具
首先通过smartctl -i /dev/sda 来检查一下硬盘是否具有 SMART 特性
下面是smart工具的说明文档,里面有详细的说明
http://smartmontools.sourceforge.net/smartmontools_scsi.html
这个是我在虚拟机中测试的不支持
这个是我在真服务器中测试的,支持
SMART support 是 Disabled 状态的话,需要开启 SMART 的支持:
smartctl -s on /dev/sda
然后使用smartctl -H /dev/sda来检测磁盘的健康状况
查看/dev/sda当前整体监控状态。PASSED表示健康,否则意味着磁盘已经故障,或很快就会发生故障。
使用
smartctl -t short /dev/sda
做一个快速自检
smartctl -l selftest /dev/sda
查看自检的进度和结果
使用smartctl -t long /dev/sda 做长时间自检,这个很耗时,一般放在凌晨
使用smartctl -l error /dev/sda查看出错日志
在这里,我的读、写都没有发生错误,在Non-medium error count 中出现错误6。
我一直没有搞懂(非媒介错误计数)这个是什么意思,在官方文档查了一下,出现如下:
non-medium error counter (only a single number displayed). This represents the number of recoverable events other than write, read or verify errors.
我大致理解了一下,是除了read,write,verify errors的错误,可恢复事件的数量
查看所有信息
打印/dev/sda所有的SMART信息。
smartctl -a /dev/sda
相当于依次执行:
smartctl –i /dev/sda
smartctl -c /dev/sda
smartctl -A /dev/sda
smartctl -l error /dev/sda
smartctl -l selftest /dev/sda
smartctl -l selective /dev/sda
开/关SMART功能
打开或关闭/dev/sda 的SMART功能。
smartctl -s on/off /dev/sda
查看当前SMART功能是否开启,可以使用 –i 参数。
smartctl -i /dev/sda
离线测试
对/dev/sda进行离线测试,它的结果主要用来更新SMART 属性。
smartctl -t offline /dev/sda
观察测试进度
通过-c 参数,可以观察到测试的进度:
smartctl -c /dev/sda
smartctl参数帮助
-h 帮助信息
-V 版本信息
-i 打印基本信息(磁盘设备号、序列号、固件版本…)
-a 打印磁盘所有的SMART信息
运行时行为 参数:
-q TYPE 指定输出的安静模式。
TYPE可以有3种选择:
eorsonly 只打印错误日志。
slent 有任何打印。
nserial 不打印序列号
-d TYPE 指定磁盘的类型。如果没有指定,smartctl会根据磁盘的名字来
猜测磁盘类型。
-T TYPE 指定当发生错误时,smartctl的容忍程度,是否继续运行。
TYPE可以有4种选择:
conservative 一有错就会退出
normal 如果必须支持的SMART命令失败,则退出
permissive 忽略一次必须支持的SMART命令失败
verypermissive 忽略所有必须支持的SMART命令失败
-b TYPE 指定当发生校验错误时,smartctl的动作。
TYPE有3种选择:
warn 发出警告,继续执行
exit 退出smartctl
ignore 不发出告警,继续执行
-r TYPE smartmontools开发人员相关。
-n POWERMODE 指定当磁盘处于节能模式时,smartctl是否继续检查,
默认是不检查。
POWERMODE有4种选择:
never 检查
sleep 除了sleep模式,检查。
standby 除了sleep或standby模式,检查。
idle 除了sleep或standby或idle模式,见车。
SMART功能开关 参数:
-s on/off 打开或关闭磁盘的SMART功能
-o on/off 打开或关闭SMART自动离线检测,该功能每4小时就会自动扫描磁盘是
否有缺陷。
-S on/off 打开或关闭“自动保存厂商指定属性”功能。
SMART 读和显示数据 参数
-H 报告磁盘的是否健康。如果报告不健康,则说明磁盘已经损坏或会在24小时
内损坏。
-c 显示磁盘支持的普通SMART功能,以及这些功能当前的状态。
-A 显示磁盘支持的厂商指定SMART特性。这些特性的编号从1-253,并且有指
定的名字。
-l TYPE 指定显示的log类型。
TYPE有4种选择:
error 只显示error log。
selftest 只显示selftest log
selective 只显示selective self-test log
directory 只显示Log Directory
-v N,OPTION 显示厂商指定SMART特性N时,使用厂商相关的显示方式。
-F TYPE 设置smartctl的行为,当出现一些已知但还没有解决的硬件或软件bug时,
smartctl应该怎么做。
-P TYPE 设置smartctl是否对磁盘使用数据库中已有的参数。
SMART 离线测试、自测试 参数
-t TEST 立刻执行测试,可以和-C参数一起使用。
TEST可以有以下几个选择:
offline 离线测试。可以在挂载文件系统的磁盘上使用
short 短时间测试。可以在挂载文件系统的磁盘上使用。
long 长时间测试。可以在挂载文件系统的磁盘上使用。
conveyance [ATA only]传输zi测试。可以在挂载文件系统的磁盘上使用。
select, N-M
select, N+SIZE [ATA only]有选择性测试,测试磁盘的部分LBA。N表示
LBA编号,M表示结束LBA编号,SIZE表示测试的LBA
范围。
-C 在captive模式下运行测试。
注意:(1)-C必须配合-t一起使用,但如果是-t offline,则-C不生效。
(2)-C会使得磁盘很忙,所以最好是在没有挂载文件系统的磁盘上使用。
-X 中断no-captive模式下运行的测试。
多台机器同时需要监控时,每台机器都需要运行一个监控程序,我们首先要获取服务器的信息以分辨机器,发生问题时,也可以评估问题的严重性。
获取IP
获取内网IP:
通过ifconfig命令获取全部的网络信息,并排除掉本地host和ipv6信息。
/sbin/ifconfig | grep inet | grep -v '127.0.0.1' | grep -v inet6 | awk '{print $2}' | tr -d "addr:"
注意这里要使用ifconfig
的绝对路径,因为如果监控脚本运行在 crontab 的话,执行时是不会带有环境信息的。
获取外网IP:
外网的IP我们可以通过请求别的网站来回显,有一些网站提供此服务,如 ipecho.net/plain
或者我自己懒得搭建的网站:alwayscoding.net
。
命令如下 curl alwayscoding.net
获取系统信息
获取系统信息建议使用 lsb_release -a
方法:
lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
信息比较丰富,可以截取字符串中需要的部分;
CPU
CPU 负载是我们要监控的首要指标,我们常说的系统负载指的就是它,它是指一段时间内CPU处理进程数占 CPU 能处理最大进程数的比例
,即一个 CPU 的最大负载是 1.0
,这种情况 CPU 正好能将所有进程执行完,超出这个限制,系统会进入 over load 超载状态,就会有进程需要等待其他进程执行结束。我们一般认为CPU负载在 0.6
以下是健康状态。
在终端上查看系统负载通常使用 top
命令,但它是交互型的,且数据较多较杂,不利于写监控脚本,我们一般使用 uptime
通过其 average load
字段获取最近 1分钟、5分钟、15分钟的平均负载。
uptime
16:03:30 up 130 days, 23:33, 1 user, load average: 4.62, 4.97, 5.08
此时系统平均负载约为 5,不是系统已经超载,也没有显示错误,这是因为在考虑负载时还要考虑 CPU 的核心数,多核 CPU 同时能处理的进程数与其核数成正比,其最大负载不是 1,而是其 CPU 核心数 N。
我们使用 nproc
可以查看系统 CPU 核心数,我正在使用的这台机器核心数是 16,所以其最大负载是16,平均负载是 5/16 = 0.32 , CPU 处于健康状态。
内存
内存是我们要监控的另外一项核心指标,内存占用率太高,无疑会导致进程无法正常分配内存执行。
我们也可以通过 top 命令查看内存占用,但监控中更常用 free
命令:
free -m
total used free shared buffers cached
Mem: 32108 18262 13846 0 487 11544
-/+ buffers/cache: 6230 25878
Swap: 0 0 0
我们首先来看 Mem 这一行,共 32108M 内存,已使用 18262M,剩余 13846,那么内存的使用率就是 18262/32108*100% = 56.88%。那么,后面的shared、buffers、cached 又是什么意思呢?
其实在 linux 中,内存的分配也是懒惰原则,在内存分配给一个进程,进程执行完毕后 linux 是不会立即清理内存的,而是把这一部分内存当作缓存存储起来,如果此进程再启动就不必再重新加载了;如果可用内存使用完了,则将这一部分缓存清空,重新利用。这样来看 used 里的 buffers 和 cached 部分是随时可被重用
的,不能算作被占用。而 shared 是进程共享内存部分,会作为被占用部分,但一般较少使用,与此相关的内容,可以看文末的参考文章。
真实数据是第三行的去除 buffers 和 cache 的部分,即真正的内存使用率是 6230/(6230+25878)*100% = 19.4%
。
而第四行的 swap 是用来临时存储内存 buffers 和 cache 的,正常情况虽然能加快进程的重启,但物理内存较少的情况下,会引起 swap 的频繁读写,增加服务器的 IO 压力,用与不用视情况而定。
网络
网络在 linux 作为 web 服务器时也是一项很重要的指标,相关命令有很多,但各有所长,我们一般监控以下状态:
使用netstat查看监听端口。
netstat -an | grep LISTEN | grep tcp | grep 80
查看是否有进程正在监控80端口。
使用ping监控网络连接
使用 ping
命令可以查看网络是否连接,使用 -c 选项来控制请求次数,使用 -w 选项来控制超时时间(单位:毫秒),最后利用 &&
符号的 短路
特性来控制结果输出:
ping -w 100 -c 1 weibo.com &>/dev/null && echo "connected"
硬盘
硬盘不是特别重要的监控指标,但在硬盘满的时候写文件失败也会影响进程的正常执行。
我们使用 df
命令来查看磁盘的使用状态,-h 会以易读格式输出:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 6.0G 32G 16% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/vdb1 296G 16G 265G 6% /data0
我们可以使用 grep 命令找到想要查询的挂载节点,再使用 awk 命令获取结果字段。
另外使用 du [-h] /path/to/dir [--max-depth=n]
可以查看某目录的大小,注意使用 --max-depth=n
控制遍历深度。
运行/其他
其他的监控状态主要包括进程错误日志监控,请求数监控,进程存在状态监控等,这些可以用到一些基本命令了,如 ps
等。
更详细的信息就需要使用进程日志了,使用 grep 、awk
等命令来分析日志来获取更详细的信息。
检测磁盘驱动的健康程度SMART的更多相关文章
- 检測磁盘驱动的健康程度SMART
在server中,全部组件中一般最easy坏掉的就是磁盘.所以一般採取RAID来保证系统的稳定性,通过冗余磁盘的方式防止磁盘故障. 现代硬件驱动器一般支持SMART(自我监測分析和报告技术),它可以监 ...
- 使用 MegaCLI 检测磁盘状态并更换磁盘
专栏首页阿dai_linux使用 MegaCLI 检测磁盘状态并更换磁盘 原 10
- smartctl 检测磁盘信息
smartctl -i 指定设备 -d 指定设备类型,例如:ata, scsi, marvell, sat, 3ware,N -a 或A 显示所有信息 -l 指定日志的类型,例如:TYPE: err ...
- badblocks检测磁盘坏道
1.检测整个盘如/dev/sdb #badblocks -v /dev/sdb > badsectors.txt 2.检测一个分区#badblocks -v /dev/sdb1 > bad ...
- shell习题第17题:检测磁盘
[题目要求] 写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时候,发邮件提醒 [核心要点] df d ...
- Ubuntu检测磁盘是否挂载
Ubuntu默认不自动挂载磁盘. 只是学习Bash使用,需优化如使用 # file: mountAll.sh # include color support # a list of variables ...
- Linux下使用iotop检测磁盘io使用情况
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
- Linux检测磁盘空间
在linux中,文件系统将所有的磁盘都并入一个虚拟目录下,在使用新的存储媒体之前,需要把它放到虚拟目录下,这项工作称为挂载. 1.mount命令 mount会输出当前系统上挂载的设备列表,要在虚拟目录 ...
- 20个linux命令行工具监视性能(下)
昨天晚上第一次翻译了<20 Command Line Tools to Monitor Linux Performance>中的前十个命令,翻译得不是很好,今天晚上继续把后面的十个也翻译给 ...
随机推荐
- 2013 HTML5中国峰会演讲:Android上的HTML5:过去,现在和将来
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 会议链接(应用和工具专场) http://2013.html5dw.com/main, 2013年8月10日 ...
- mysql 分表与分区
一.操作环境 数据达到百w甚于更多的时候,我们的mysql查询将会变得比较慢, 如果再加上连表查询,程序可能会卡死.即使你设置了索引并在查询中使用到了索引,查询还是会慢.这时候你就要考虑怎么样来提高查 ...
- 图形绘制中的PorterDuffXfermode
1.概述 在android图形渲染中 会使用到图像混合模式 <span style="font-size:18px;">setXfermode(Xfermode xfe ...
- 网站开发进阶(二十五)js如何将html表格导出为excel文件
js如何将html表格导出为excel文件 赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉! jsp页面数据导出成excel的方法很 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- 手持机设备公司(WINCE/ANDROID/LINUX)
1.深圳扬创科技有限公司网址: http://www.yctek.com/ 2.无锡盈达聚力科技有限公司 点击打开链接 3.上海鲲博通信技术有限公司(主要为用WINCE开发导航产品) 点击打开链接 4 ...
- Linux文件与目录管理 - ls, cp, mv
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称 [root@www ~]# ls [--color={never,auto,always}] 目录名称 [root@www ...
- Objective-C的面向对象特性(一)
Objective-C在c语言的基础上增加了面向对象特性,都有哪些面向对象特性呢? 其中第一个最重要的特性是类和对象的实现. Objective-C软件由许多对象构成,形成一个对象网络,对象之间通过发 ...
- XMPP系列(一):OpenFire环境搭建
XMPP的服务器可以用OpenFire.ejabberd.jabberd2.x.Prosody.Tigase,其中比较常用的是OpenFire和ejabberd,还可以自己写服务器,我们公司的服务器端 ...
- ubuntu下搭建gtk+编程环境
首先gtk+项目主页为: http://www.gtk.org/ gtk+现在有2和3两种版本,使用 sudo apt-get install gnome-core-devel 可以一次性安装2个版本 ...