【硬件相关】SMART硬盘健康状态监测

本文详细介绍了SMART技术的工作原理、部署实践,包括SMART软件的安装与操作命令,以及如何解读SMART信息。重点讨论了SMART与硬盘故障的关联,特别是SMART5、187、188、197、198属性对硬盘故障的预测价值。

一、前言

Wikipedia: Self-Monitoring,_Analysis_and_Reporting_Technology

1、SMART技术介绍

S.M.A.R.T,即Self-Monitoring Analysis and Report Technology(自我检测、分析及报告技术),是一种自动的硬盘状态检测与预警系统规范。
通过在硬盘硬件内的检测指令对硬盘部件(如磁头、盘片、马达、电路等)运行情况进行监控,记录并于硬盘厂商设定预期安全值进行比对,若监控情况将要或已超过预设安全值的范围,则通过主机的监控硬件或软件自动向用户作出警告,并进行轻微的自动修复,以保障硬盘数据安全,目前大部分硬盘均配备该项技术。

在这里插入图片描述

2、SMART功能作用

该项技术可以让硬盘更稳定运行,主要表现在以下几个方面:

  • 当硬盘的损坏程度还在软件的可修复的范围(通常由厂商决定),软件就会自动修复,防止数据的进一步损坏,同时报告异常值,异常程度为警告
  • 当硬盘的损坏程度已经超出软件的可修复的范围(通常由厂商决定),软件则会尽最大能力防止再次写入数据的丢失(如避开已损坏扇区),同时会报告异常值,异常程度为危险
  • BIOS自检时,主板会检测硬盘的S.M.A.R.T.信息,如果硬盘的异常程度为危险时,会提醒用户及时备份数据(如嗡鸣声或上报告警信息)

3、SMART运行原理

该技术所需数据被存放在硬盘物理盘面最前面的磁道中,由硬盘厂商将相关管理程序和数据写入该磁道中,包括加解密程序,自监控程序,自修复程序等,主机的监控软件可以通过“SMART RETURN STATUS”的命令读取S.M.A.R.T.信息,且这些信息不允许被用户直接修改。

二、部署实践

官网地址:smartmontools

1、SMART软件安装

下载页面:Download

Smartmontools(S.M.A.R.T. Monitoring Tools)是一组实用程序,包括smartctlsmartd两部分,用于控制和监控S.M.A.R.T信息,适用于大部分ATA、SCSI和NVMe硬盘
Smartmontools可以显示由S.M.A.R.T监测到的硬盘问题,通知即将可能会发生的故障,提示用户及时备份数据

  • Windows系统
    官网下载已编译好的exe程序,直接执行安装即可

  • Linux系统
    使用在线源直接安装即可

# CentOS
yum install smartmontools -y
# Ubuntu
apt-get install smartmontools -y

2、SMART操作命令

2.1、状态查询
  • smartctl -a <device-path>:获取硬盘所有SMART信息
  • smartctl -i <devi
要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。 硬盘的故障一般分为两种:可预测的(predictable)和不可预测的(unpredictable)。后者偶而会发生,也没有办法去预防它,例如芯片突然失效,机械撞击等。但像电机轴承磨损、盘片磁介质性能下降等都属于可预测的情况,可以在在几天甚至几星期前就发现这种不正常的现象。 对于可预测的情况,如果能通过磁盘监控技术,通过测量硬盘的几个重要的安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。那么在发生故障前,至少有足够的时间让使用者把重要资料转移到其它储存设备上。 最早期的硬盘监控技术起源于1992年,IBM在AS/400计算机的IBM 0662 SCSI 2代硬盘驱动器中使用了后来被命名为Predictive Failure Analysis(故障预警分析技术)的监控技术,它是通过在固件中测量几个重要的硬盘安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。 SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。
<think>我们被要求使用smartctl查询特定Seagate硬盘的特定属性。根据引用[1]中的示例,我们使用了`-d megaraid,6`选项,这是因为该硬盘是通过MegaRAID控制器连接的。如果用户的硬盘是直接连接的,可能不需要`-d`选项。但为了通用性,我们可以提供两种情况的命令。 用户要求查询的属性及其对应的ID(根据用户提供): - Glist: 通常指增长缺陷列表(Grown Defect List),在SMART中对应的是“Reallocated_Sector_Ct”,ID为5。 - Reallocated_Sector_Ct: 重新分配的扇区计数,ID为5。 - Temperature_Celsius: 温度,ID为194(注意,对于不同的硬盘型号,温度属性的ID可能不同,但194是常见的)。 - Offline_Uncorrectable: 离线无法校正的扇区数,ID为198。 - Current_Pending_Sector: 当前待映射扇区数,ID为197。 - UDMA_CRC_error_count: UDMA CRC错误计数,ID为199。 注意:用户已经给出了这些属性对应的ID,所以我们可以直接使用ID来查询。 使用smartctl查询特定属性的命令格式为: smartctl -A /dev/sdX -d megaraid,N # 对于通过MegaRAID控制器连接的硬盘,其中N是逻辑驱动器号 或者 smartctl -A /dev/sdX # 对于直接连接的硬盘 但是,我们也可以使用属性名称(如果知道)或ID来指定属性。不过,smartctl的`-A`选项会显示所有属性。我们可以结合grep来筛选出我们关心的属性。 因此,我们可以这样写命令: smartctl -A -d megaraid,6 /dev/sdf | grep -E 'ID#|5|194|198|197|199' 注意:这里我们同时匹配了ID#(属性ID)和具体的ID号,这样可以在输出中包含表头(属性名)和对应的行。但是,这样可能会匹配到其他不相关的行(如果其他属性ID也包含这些数字,比如15也会匹配5)。为了避免这种情况,我们可以精确匹配这些ID,但注意输出中属性ID是单独一列,我们可以用grep的选项来精确匹配。 更好的方法是使用awk来精确匹配特定列的值,但为了简单,我们可以分两步: 1. 先输出包含表头(ID#)的行 2. 输出包含我们关心的属性ID的行(精确匹配) 但是,smartctl的输出中,属性ID在第二列(以空格分隔,但输出格式不固定,可能有多个空格),我们可以使用: smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 注意:有些属性可能不存在,比如UDMA_CRC_error_count(199)在固态硬盘中可能没有,但用户要求的是Seagate机械硬盘,所以应该存在。 然而,用户要求的是Seagate硬盘,并且我们引用的示例中就是Seagate Constellation.2 (SATA)。在引用[1]中,我们使用了`-d megaraid,6`和`/dev/sdf`,所以这里我们沿用同样的设备。 因此,针对用户的具体需求,命令如下: smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 但是,注意用户还提到了“Glist”,而我们已经知道Reallocated_Sector_Ct(5)就是增长缺陷列表(Glist)的计数。所以这个命令可以满足。 另外,如果用户不确定设备名(/dev/sdf)或者控制器号(megaraid,6),可以通过以下命令查看(引用[4]中的命令): MegaCli -PdList -aALL 或者使用smartctl扫描: smartctl --scan 输出示例: /dev/sda -d scsi # /dev/sda, SCSI device 如果用户需要查询多个硬盘,可以遍历设备。 但是,用户明确要求查询Seagate硬盘,我们可以先通过smartctl的-i选项(或--info)来获取硬盘型号,确认是否是Seagate。 不过,用户已经指定了设备(如/dev/sdf)和控制器(megaraid,6),所以我们直接使用。 因此,完整步骤: 1. 确认设备信息(可选,如果用户不确定设备名): smartctl --scan 2. 查询特定属性(使用上面的awk命令) 注意:如果用户没有使用RAID控制器,则去掉`-d megaraid,6`。 所以,我们可以提供两个版本的命令: 版本1(通过MegaRAID控制器,如引用[1]): smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 版本2(直接连接): smartctl -A /dev/sda | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 但是,由于用户指定了属性ID,所以这个命令在两种情况下都可以使用。 另外,用户可能希望看到更友好的输出,我们可以使用column命令格式化(如果系统支持): smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' | column -t 但是,注意smartctl的输出已经是表格形式,使用awk打印后可能格式会乱,所以也可以直接使用grep来匹配行,然后通过column格式化。 另一种方法是使用smartctl的`-v`选项(或`--vendorattribute`)来指定属性,但需要指定属性ID和名称,而且每次只能一个,所以不方便。 因此,我们采用上述awk命令。 注意:在引用[2]中提到,用户可以通过观察当前值、最差值和临界值等来了解硬盘健康状况。我们的命令输出的属性行中会包含这些值。 最后,我们给出一个示例命令和可能输出的示例。 示例命令: smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 示例输出(基于引用[1]的硬盘,但属性值不一定存在,所以这里模拟): ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0 194 Temperature_Celsius 0x0022 120 100 000 Old_age Always - 30 (Min/Max 20/40) 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 注意:输出中,属性194(温度)的RAW_VALUE可能是30(摄氏度),但有时可能是一个复合值(如例子中的30 (Min/Max 20/40)),这取决于硬盘厂商的实现。 另外,属性199的ID在输出中可能是199,但名称可能不完全是“UDMA_CRC_error_count”,可能是“UDMA_CRC_Error_Count”,但意思相同。 如果用户需要更详细的信息,也可以单独查询每个属性,比如: smartctl -A -d megaraid,6 /dev/sdf -v 5,raw 但这样要多次执行命令,所以我们不采用。 因此,我们给用户的建议命令是: smartctl -A -d megaraid,6 /dev/sdf | awk '/ID#/ {print} $1==5 || $1==194 || $1==197 || $1==198 || $1==199 {print}' 如果用户不知道设备名或控制器号,请先使用`smartctl --scan`或`MegaCli -PdList -aALL`(针对MegaRAID)来查看。 注意:用户可能需要root权限。 最后,我们生成相关问题。</think>### 查询 Seagate 硬盘 SMART 属性的方法 要查询 Seagate 硬盘的指定 SMART 属性(Glist/Reallocated_Sector_Ct、Temperature_Celsius 等),需使用 `smartctl` 命令结合 RAID 控制器参数和属性过滤。以下是具体操作: #### 1. **基础命令格式** ```bash smartctl -A -d megaraid,<磁盘编号> <设备路径> | grep -E 'ID#|5|194|197|198|199' ``` - **`-d megaraid,<磁盘编号>`**:指定 RAID 控制器中的磁盘(示例中磁盘编号为 `6`)。 - **`<设备路径>`**:硬盘在系统中的路径(如 `/dev/sdf`)。 - **`grep -E 'ID#|5|194|197|198|199'`**:筛选表头和目标属性 ID(含 5,194,197,198,199)。 #### 2. **完整命令示例** ```bash smartctl -A -d megaraid,6 /dev/sdf | grep -E 'ID#|5|194|197|198|199' ``` #### 3. **输出说明** 执行后输出类似以下内容(关键列已标注): ``` ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH RAW_VALUE 5 Reallocated_Sector_Ct 0x0033 100 100 005 0 [重新分配扇区数] 194 Temperature_Celsius 0x0022 060 050 000 30 [温度℃] 197 Current_Pending_Sector 0x0012 100 100 000 0 [待映射扇区数] 198 Offline_Uncorrectable 0x0010 100 100 000 0 [离线不可校正扇区] 199 UDMA_CRC_Error_Count 0x003e 200 200 000 0 [UDMA CRC错误计数] ``` - **VALUE/WORST/THRESH**:健康度指标(值越高越好,低于 THRESH 表示预警)[^2]。 - **RAW_VALUE**:原始数值(如温度值、错误计数等)。 - **Glist**:即 `Reallocated_Sector_Ct` 的 RAW_VALUE,表示已重映射的缺陷扇区数。 #### 4. **注意事项** - **磁盘定位**:若不确定设备路径和 RAID 磁盘编号,先用以下命令扫描: ```bash smartctl --scan # 扫描所有硬盘 MegaCli -PdList -aALL | grep -i "seagate" # 定位 Seagate 硬盘的 RAID 编号 [^4] ``` - **权限要求**:需 root 权限执行命令。 - **属性差异**:机械硬盘与固态硬盘SMART 定义不同,本例针对 Seagate 机械盘[^2]。 --- ### 相关问题 1. **如何监控 Seagate 硬盘的实时健康状态?** 2. **SMART 属性中的 VALUE 和 RAW_VALUE 不一致时如何解读?** 3. **哪些 SMART 属性值达到阈值时需要立即更换硬盘?** --- > 引用说明: > [^1]: 通过 `-d megaraid,6` 指定 RAID 控制器中的磁盘,设备路径为 `/dev/sdf`。 > [^2]: `Reallocated_Sector_Ct` 等关键属性反映硬盘寿命,需关注 VALUE 与 THRESH 的关系。 > [^4]: 使用 `MegaCli -PdList` 可定位 RAID 组中的磁盘编号。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值