<原创>如何看机械硬盘SMART信息

本帖最后由 neeyuese 于 2010-4-2 22:09 编辑

S.M.A.R.T,全称叫Self-Monitoring, Analysis, and Reporting Technology "自我监测,分析和报告技术"。可以用来预测分析硬盘的潜在问题。

说道硬盘故障,分为忽然性和渐进性2种:

前面种很难防止,没有任何迹象,比如芯片烧了,硬盘摔了或者人品不好之类的。要防止只有多做备份了。
渐进性的故障是随着时间慢慢发生的,比如声音出现异常,可能是主轴马达磨损,硬盘逐渐老化出现读取困难等。

对于渐进性的故障,我们可以靠着SMART数据发现点有用的信息。

SMART状态表由下面几个参数构成:



ID,点上去后下面会显示DESCRIPTION(属性描述)
由于硬盘厂很多,很多厂家属性的名字也不尽相同,或者某些厂牌缺少某些属性,所以一般我们以ID来区别比较简单。

THRESHOLD(阈值)、CURRENT(当前值)和WORST(最坏值)
当前值低于最坏值时候,硬盘处于警告状态,SMART像系统报告,这时候应该记得备份数据。一般当前值是不可能降低到最坏值的(西数,希捷某些属性除外)。

DATA(数据), STATUS(状态)
DATA里有更详细的数据,由各家厂自定义。状态表现为健康和警告,错误。

根据S.M.A.R.T属性对硬盘故障预测的重要性不同,分为关键属性(Critical Attributes)和资料属性(Informativeattributes)。

关键属性:对硬盘的使用寿命、各机械组件的渐进性故障具有一定的监测作用。
资料属性:反馈硬盘的相关运行记录供参考。

那么那些是关键属性哪?一般我们说THRESHOLD(阈值)不是0的属性是关键属性。
或者还有更简单的一个方法,用Everest看硬盘SMART信息,后面状态栏写:


图中 O.K. Always Passes的就是资料属性。 O.K. Value is normal的就是关键属性。

一般同一型号的硬盘SMART个数是相同的,但是同一硬盘厂不同时期出的硬盘SMART个数是不同的。

虽然关键属性因品牌不同有差别,但有一项属性是所有品牌都有的。这就是05项Reallocated Sectors Count,它的作用是记录重映射扇区个数。硬盘都具备一定的修复功能,当出现不稳定的扇区,硬盘Firmware里的程序会把不稳定扇区的数据转移到同样容量的备用扇区里面,并屏蔽掉不稳定扇区,实现坏道替换。这种硬盘底层的操作在操作系统里不留痕 迹,他会在S.M.A.R.T属性的05项做下记录。05项的当前值显示备用扇区的多少。新盘出厂时,备用扇区最多,随着使用中坏扇区的出现,备用扇区的减少,当前值逐渐降低, 各品牌的硬盘备用扇区数量是不同的, 05项阈值(THRESHOLD)控制上也不一样。希捷硬 盘的阈值是36,西数硬盘的阈值是140。

相对关键属性来说,资料属性的作用不是太大,但是也可以通过资料属性发现一些问题,要注意关键属性重点看当前值,而资料属性重点在于数据值。例如硬盘加电次数可以通过 0C项Power Cycle Count的数据值来得知;非正常断电次数可以通过C0项Power-Off Retract Count的Data数据值来得知;硬盘的温度由C2项Temperature项的数据数值来判断。

几个关键属性介绍:

01Read Error Rate
显示当读取硬盘的时候,出现的硬件读取出错率。由于这个数值每家公司不同,所以不好定义。

05Reallocated sectors count
显示当前有多少瑕疵的扇区被发现并重映射到了备用扇区。RAW数值显示的一般就是被重映射的扇区数。

0ASpin Retry Count
硬盘转动重试计数,这个参数指的是硬盘第一次没转动,然后再次转动的次数,一般来这个数字如果有升高的迹象,说明硬盘有机械故障,当然不排除供电原因。

B8End-to-End error
这个数字说的是传输数据的时候,缓存里的数据和主控、硬盘无法相对应。

BCCommand Timeout
硬盘工作中出现超时。一般是电源或者数据线问题。默认值是0

C4Reallocation Event Count
计算重映射操作数。这个数字记录了重映瑕疵射扇区到备用扇区的总数,包括了成功和未成功的总数。

C5Current pending sectors count
显示当前有多少被怀疑瑕疵的扇区被发现等待重新off-line验证,如果验证不通过就会进入重映射扇区。RAW数值显示的一般就是被怀疑瑕疵的扇区数。所谓的off-line验证是指硬盘在闲置的时候,内部做的验证做的验证程序。

C6Uncorrectable Sector Count
显示无法修复的错误扇区总数,说明硬盘碟片或机械结构有问题。在富士通硬盘里显示为Off-Line Scan Uncorrectable Sector Count

C9Soft Read Error Rate
读取中偏离磁道的错误计数

资料属性介绍:

03Spin-Up Time
硬盘从0转到完全操作的平均时间,Data里数字单位ms

BFG-sense error rate
希捷2.5英寸硬盘特有的数值,表示受到外部震动或者使用环境造成的数据错误。

C7UltraDMA CRC Error Count
这个参数亮黄时候记得换数据线,表示的是数据传输时候验证出错。
要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时。 硬盘的故障一般分为两种:可预测的(predictable)和不可预测的(unpredictable)。后者偶而会发生,也没有办法去预防它,例如芯片突然失效,机械撞击等。但像电机轴承磨损、盘片磁介质性能下降等都属于可预测的情况,可以在在几天甚至几星期前就发现这种不正常的现象。 对于可预测的情况,如果能通过磁盘监控技术,通过测量硬盘的几个重要的安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。那么在发生故障前,至少有足够的时间让使用者把重要资料转移到其它储存设备上。 最早期的硬盘监控技术起源于1992年,IBM在AS/400计算机的IBM 0662 SCSI 2代硬盘驱动器中使用了后来被命名为Predictive Failure Analysis(故障预警分析技术)的监控技术,它是通过在固件中测量几个重要的硬盘安全参数和评估他们的情况,然后由监控软件得出两种结果:“硬盘安全”或“不久后会发生故障”。 SMART的目的是监控硬盘的可靠性、预测磁盘故障和执行各种类型的磁盘自检。如今大部分的ATA/SATA、SCSI/SAS和固态硬盘都搭载内置的SMART系统。
<?xml version=“1.0” encoding=“UTF-8”?> <project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo5</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo5</name> <description>demo5</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.13</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.vaadin.external.google</groupId> <artifactId>android-json</artifactId> <version>0.0.20131108.vaadin1</version> <scope>compile</scope> </dependency> <dependency> <groupId>net.minidev</groupId> <artifactId>json-smart</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.example.demo.Demo5Application</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> 我的依赖是这些,原有的不变给我加上fastJSON的依赖
最新发布
03-08
<think>好的,我现在需要帮用户在他们的Maven项目中添加FastJSON的依赖。首先,我得仔细看一下用户提供的pom.xml文件,了解现有的依赖情况,确保添加时不会冲突或者重复。 用户当前的依赖包括Spring Boot Starter Web、Lombok、Spring Boot Starter Test、android-json和json-smart。注意到json-smart没有指定版本,可能由Spring Boot的父POM管理版本。而用户现在想添加FastJSON,也就是阿里巴巴的JSON处理库,所以需要找到正确的groupId、artifactId和版本号。 接下来,我需要确定FastJSON的Maven依赖配置。通常,FastJSON的groupId是com.alibaba,artifactId是fastjson,最新版本可能需要查一下,不过用户可能希望用较新且稳定的版本,比如1.2.83或者更高,因为旧版本可能存在安全漏洞。不过用户可能没有指定版本,所以需要建议一个合适的。 然后,检查用户是否已经有其他JSON库的依赖,比如默认的Jackson。用户项目中已经引入了android-json和json-smart,可能用户需要切换或者兼容不同的JSON库。添加FastJSON的时候,可能需要排除Jackson,但用户没有提到这点,所以暂时先不加排除,只是单纯添加依赖。 接下来,找到正确的依赖代码段。例如: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> 然后,需要确定在pom.xml中的哪个位置添加这个依赖。用户的依赖都放在<dependencies>标签内,所以应该放在现有的依赖项后面,比如在json-smart之后添加。 另外,还需要注意版本号是否需要通过属性管理。用户可能在<properties>里定义了版本,但当前pom中没有,所以直接写版本号即可。或者建议用户将版本定义为属性,比如<fastjson.version>1.2.83</fastjson.version>,然后在依赖中引用,这样便于统一管理。 最后,提醒用户可能需要配置Spring Boot以使用FastJSON作为默认的JSON处理器,比如通过配置类或者配置文件,替换掉默认的Jackson。不过这可能超出当前问题的范围,用户可能只需要添加依赖,所以可以简要提及如果需要使用FastJSON的特性,可能需要额外配置。 总结步骤: 1. 在<dependencies>标签内添加FastJSON的依赖项。 2. 指定正确的groupId、artifactId和版本号。 3. 确保依赖位置正确,与其他依赖并列。 4. 可选建议:使用属性管理版本号,或者提醒配置JSON处理器。 现在需要检查用户提供的pom.xml结构,确保依赖添加到正确的位置。用户当前的依赖部分如下: <dependencies> <!-- 现有的依赖项 --> </dependencies> 所以,在最后一个</dependency>标签后,添加FastJSON的依赖即可。同时,注意格式是否正确,比如缩进和标签闭合。</think>根据您提供的`pom.xml`文件,添加FastJSON依赖的步骤如下: --- ### 步骤 1:在 `<dependencies>` 标签内添加依赖 找到 `<dependencies>` 区块,在最后一个现有依赖(`json-smart`)之后插入以下代码: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> ``` --- ### 步骤 2:完整修改后的依赖部分 修改后的 `<dependencies>` 部分如下(已添加 FastJSON): ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.13</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.vaadin.external.google</groupId> <artifactId>android-json</artifactId> <version>0.0.20131108.vaadin1</version> <scope>compile</scope> </dependency> <dependency> <groupId>net.minidev</groupId> <artifactId>json-smart</artifactId> </dependency> <!-- 新增 FastJSON 依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> </dependencies> ``` --- ### 关键说明 1. **版本选择**: - 使用 `1.2.83` 是经过验证的稳定版本(注意:如果需最新版可替换为更高版本,但需检查兼容性)。 - FastJSON 的版本号建议通过 `<properties>` 统一管理(可选优化)。 2. **依赖冲突**: - 项目中已存在 `json-smart` 和 `android-json`,需确保 FastJSON 的 JSON 解析优先级生效。若需强制使用 FastJSON,可在 Spring Boot 中配置: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new FastJsonHttpMessageConverter()); } } ``` 3. **Maven 更新**: 添加依赖后执行 `mvn clean install` 以下载 FastJSON 库。 --- ### 最终效果 - FastJSON 将提供高性能的 JSON 序列化/反序列化功能。 - 现有其他依赖(如 Spring Boot、Lombok 等)保持不变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值