提升机械硬盘使用寿命的方法、存储设备及系统与流程

文档序号:26101302发布日期:2021-07-30 18:12阅读:108来源:国知局
提升机械硬盘使用寿命的方法、存储设备及系统与流程

本申请涉及信息处理技术领域,具体地,涉及一种提升机械硬盘使用寿命的方法、存储设备及系统。



背景技术:

随着硬盘技术的发展,机械硬盘的容量逐年增大,在实际运行环境中,机械硬盘可能出现如下问题:机械故障,导致整盘不可访问;或者,磁介质异常,导致读写错误或者响应缓慢。

对于机械故障,只能将机械硬盘进剔除,以执行整盘数据修复。而对于磁介质异常,表现可能有以下几种:

(1)扇区错误,导致读io出错;(2)扇区错误,导致数据写入时发生坏块重映射;(3)扇区ecc校验错误,导致读写发生多次重试甚至出现坏块重映射。

在分布式文件、对象、块存储当中,机械硬盘依然是主要的存储介质,当前的分布式存储系统,如ceph、glusterfs、minio等,均依赖操作系统的硬盘驱动进行读写,当机械硬盘存在读写错误或者读写速度慢的时候,就会直接把机械硬盘置坏,进入机械硬盘的整盘数据修复流程。由于机械硬盘有读写错误就剔除硬盘,会造成机械硬盘故障率较高,虽然大概率能够将系统的故障修复,但是给数据可靠性带来了较大的隐患,由于修复的耗时较长,如果修复过程当中有其他硬盘或节点损坏,则会带来数据丢失。



技术实现要素:

本申请实施例旨在提供一种提升机械硬盘使用寿命的方法、存储设备及系统,以解决现有技术中硬盘扇区出现故障即被剔除导致硬盘使用寿命短的技术问题。

为实现上述发明目的,本申请一些实施例中提供一种提升机械硬盘使用寿命的方法,包括如下步骤:

获取每一块机械硬盘中每一个扇区的状态,根据每一扇区的状态确定机械硬盘中是否存在故障扇区;

若机械硬盘中故障扇区的数量小于设定值,则:

为所述故障扇区设定故障标识,并将所述故障扇区与同一机械硬盘中的其他扇区隔离;接收到数据读写请求时,确定与所述数据读写请求对应的数据是否位于所述故障扇区内;若与所述数据读写请求对应的数据位于所述故障扇区内,则发出错误提醒信息。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,若机械硬盘中故障扇区的数量小于设定值,则所述方法还包括如下步骤:

触发故障扇区的修复操作;

查询受到所述故障扇区影响的文件或对象,获得所述文件或对象的id集合;

根据所述id集合对受到所述故障扇区影响的文件或对象进行修复。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,还包括如下步骤:

若机械硬盘中故障扇区的数量大于或等于所述设定值,判定所述机械硬盘为亚健康状态;

将亚健康状态的机械硬盘上的数据迁移至健康状态的机械硬盘上。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,还包括如下步骤:

接收到数据读写请求时,确定与所述数据读写请求对应的数据是否位于亚健康状态的机械硬盘上;

若与所述数据读写请求对应的数据位于亚健康状态的机械硬盘上,则发出错误提醒信息。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,获取每一块机械硬盘中每一个扇区的状态,根据每一扇区的状态确定机械硬盘中是否存在故障扇区的步骤,包括:

获取机械硬盘内核驱动的scsisense信息;

根据所述scsisense信息确定机械硬盘中每一扇区的状态。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,根据所述scsisense信息确定机械硬盘中每一扇区的状态的步骤中:

若所述scsisense信息包括扇区recoverederror标识或扇区mediumerror标识,则判定扇区故障。

本申请一些实施例中提供的提升机械硬盘使用寿命的方法,根据所述scsisense信息确定机械硬盘中每一扇区的状态的步骤中:

若所述scsisense信息包括hardwareerror则判定机械硬盘永久损坏;

若所述scsisense信息包括unitattention或abortecommand,则判定sas链路故障。

本申请一些实施例中提供一种存储设备,所述存储设备中存储有程序信息,计算机读取所述程序信息后执行以上任一项所述的提升机械硬盘使用寿命的方法。

本申请一些实施例中提供一种提升机械硬盘使用寿命的系统,包括至少一块机械硬盘,以及硬盘管理模块:

所述硬盘管理模块,用于执行以上任一项所述的提升机械硬盘使用寿命的方法。

本申请一些实施例中的提升机械硬盘使用寿命的系统,还包括:

内核kprobe驱动单元,用于读取机械硬盘内核驱动的scsisense信息。

本申请提供的上述技术方案,与现有技术相比,至少具有如下有益效果:如果机械硬盘中的故障扇区数量小于设定值,不必将机械硬盘直接剔除,而为故障扇区设定故障标识,并将故障扇区与同一机械硬盘中的其他扇区隔离,如果接收到数据读写请求且与数据读写请求对应的数据在故障扇区内,则直接发出错误提醒信息即可。通过本申请的上述方案,既能够确保数据读写请求不会落入到故障扇区,既保证了数据读写性能,同时降低了机械硬盘被剔除的概率,提高了机械硬盘的使用寿命。

附图说明

下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。

图1为本申请一个实施例所述的提升机械硬盘使用寿命的方法的流程图;

图2为本申请另一个实施例所述的提升机械硬盘使用寿命的方法的流程图;

图3为本申请另一个实施例所述的提升机械硬盘使用寿命的方法的流程图;

图4为本申请一个实施例所述提升机械硬盘使用寿命的系统的结构框图;

图5为本申请另一个实施例所述提升机械硬盘使用寿命的系统的结构框图。

具体实施方式

在本部分将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

本申请一些实施例中提供一种提升机械硬盘使用寿命的方法,如图1所示,包括如下步骤:

s101:获取每一块机械硬盘中每一个扇区的状态,根据每一扇区的状态确定机械硬盘中是否存在故障扇区。本步骤中,故障扇区在第一次访问发现错误之后,便可将故障扇区记录在硬盘的坏块表中,并且常驻内存。

s102:若机械硬盘中故障扇区的数量小于设定值,则为所述故障扇区设定故障标识,并将所述故障扇区与同一机械硬盘中的其他扇区隔离。对于存在故障扇区的硬盘,后续读写时直接查询内存中的坏块表,坏块表中所记录的故障扇区由于被隔离,则不会再被访问。

s103:接收到数据读写请求时,确定与所述数据读写请求对应的数据是否位于所述故障扇区内。

s104:若与所述数据读写请求对应的数据位于所述故障扇区内,则发出错误提醒信息。由此可以实现不访问硬盘就直接返回io错误。

本申请提供的以上方案,在硬盘出现故障扇区后即在第一时间将故障扇区隔离弃用,对于故障扇区即便是对应的数据删除了,也不能归还给系统,从而可以不启用硬盘的g-list区域,避免重新映射导致数据读写性能下降。以上方案中,如果机械硬盘中的故障扇区数量小于设定值,不必将机械硬盘直接剔除,而为故障扇区设定故障标识,并将故障扇区与同一机械硬盘中的其他扇区隔离,如果接收到数据读写请求且与数据读写请求对应的数据在故障扇区内,则直接发出错误提醒信息即可。通过本申请的上述方案,既能够确保数据读写请求不会落入到故障扇区,既保证了数据读写性能,同时降低了机械硬盘被剔除的概率,提高了机械硬盘的使用寿命。

在本申请一些实施例中的提升机械硬盘使用寿命的方法,如图2所示,若机械硬盘中故障扇区的数量小于设定值,则所述方法还可以包括如下步骤:

s105:触发故障扇区的修复操作。

s106:查询受到所述故障扇区影响的文件或对象,获得所述文件或对象的id集合。

s107:根据所述id集合对受到所述故障扇区影响的文件或对象进行修复。

本方案中,当机械硬盘中存在故障扇区的数量小于设定值时,当需要进行数据修复时,只针对故障扇区所在区域的数据修复,避免整盘数据修复,从而提高数据修复的速率。

在一些实施例中,如图3所示,提升机械硬盘使用寿命的方法还包括如下步骤:

s201:若机械硬盘中故障扇区的数量大于或等于所述设定值,判定所述机械硬盘为亚健康状态。

s202:将亚健康状态的机械硬盘上的数据迁移至健康状态的机械硬盘上。

本方案中,当硬盘上的故障扇区数量超过一定的数量时,意味着硬盘的扇区物理损坏较多,硬盘整盘故障的风险会比较大。通过定期分析为各个硬盘记录的故障扇区数量,判断硬盘整盘故障的风险,当该数量超过设定值(例如100)时,会将该硬盘标记为亚健康状态,进入亚健康状态的硬盘,分布式存储系统可立即启动整盘数据迁移,将该盘的数据迁移到其他健康的硬盘上。

如图4所示,以上方案中的提升机械硬盘使用寿命的方法,还包括如下步骤:

s203:接收到数据读写请求时,确定与所述数据读写请求对应的数据是否位于亚健康状态的机械硬盘上。

s204:若与所述数据读写请求对应的数据位于亚健康状态的机械硬盘上,则发出错误提醒信息。

本方案中,当判定一块机械硬盘为亚健康状态后,系统后续不会选择该盘写入新的数据,避免需要迁移的数据持续增长。采用本方案中的处理方式和硬盘损坏后被动迁移相比,将数据迁移的时机提前,此时系统中的数据没有副本丢失,因此即便迁移过程中有其他副本损坏,数据的可靠性依然有所保障,同时,由于迁移提前,此时对于迁移的速度要求不会过高,降低了对正常业务性能的影响。

在一些实施例中,通过硬盘sense信息获取的方式确定硬盘扇区状态。具体地,获取机械硬盘内核驱动的scsisense信息,根据所述scsisense信息确定机械硬盘中每一扇区的状态。例如,在linux内核的scsi驱动中,每次命令执行完成时,都会从硬盘的寄存器中带回scsisense信息,但该信息只用在内核驱动中,外部无法获取。在本方案中,采用linux的kprobe机制,通过kprobe的hook驱动,注入到scsi驱动中和sense信息相关的函数中,从而在scsi驱动和硬盘交互的过程中,能够获取scsisense信息。也即本方案中,通过改写scsi驱动中和sense信息相关的函数能够从驱动之外获取scsisense信息。

在本申请实施例中根据scsi的协议定义,选择了几种主要的sense信息,给出了具体的对应处理方案:

(1)扇区recoverederror标识

此类错误为硬盘内部已经纠正的错误,出现该类错误意味着硬盘内部进行了重试、ecc校验修复或reassign等操作,为了不影响后续访问的性能,对该类错误进行坏块标记和局部扇区数据修复,处理方案参见表1:

表1recoverederror处理方案

(2)扇区mediumerror标识

为了不影响后续访问的性能,对该类错误进行坏块标记和局部扇区数据修复,处理方案参见表2:

表2mediumerror处理方案

(3)hardwareerror

该类错误通常是永久损坏,无法再进行读写,os驱动在进行了一定次数的reset后,不会再进行尝试,处理方案参见表3:

表3hardwareerror处理方案

(4)unitattention

该类错误通常是由于sas链路出现问题,导致信号出错,处理方案参见表4:

表4unitattention处理方案

(5)abortecommand

该类错误通常是由于sas链路出现问题,导致信号出错,处理方案参见表5:

表5abortecommand处理方案

以上方案中,通过scsisense信息的分析和处理,将机械硬盘中的故障扇区标记为坏块,进而进行隔离,防止后续的io访问继续落入硬盘对应的扇区,出现性能低下或io错误问题。优选地,为了能够记录故障扇区的区段,可以为每块硬盘记录一个坏块lba区段数组,该数组常驻内存,定期写入到对应硬盘的头部和尾部,以保证掉电后信息不丢失。当上层有数据读写请求访问硬盘时,需要先查询坏块lba区段数组,如果访问的范围和坏块lba区段数组对应的某个故障扇区有重叠,则表明对应的硬盘区域是有问题的,之前已经做过标记,因此io直接返回错误,不再需要继续访问硬盘,避免由于操作系统驱动和机械硬盘内部的重试造成延迟较多。当上层分布式存储软件收到当前硬盘的io错误信息,会根据分布式副本或纠删码的机制,转而去访问其他的副本,保障数据的完整性和性能。

在本申请一些实施例中还提供一种存储设备,所述存储设备中存储有程序信息,计算机读取所述程序信息后执行以上任一项所述的提升机械硬盘使用寿命的方法。

在本申请一些实施例中还提供一种提升机械硬盘使用寿命的系统,如图4所示,包括至少一块机械硬盘100及硬盘管理模块200,所述硬盘管理模块200,用于执行以上任一项所述的提升机械硬盘使用寿命的方法。优选地,如图5所示,所述机械硬盘100配置有机械硬盘内核驱动101,所述硬盘管理模块200包括内核驱动单元201,所述内核kprobe驱动单元201用于读取机械硬盘内核驱动的scsisense信息。

所述硬盘管理模块200还包括/proc/disksense202、故障信息采集和诊断单元203、坏块标记单元204、坏块修复单元205、故障预警单元206和硬盘修复单元207。/proc/disksense202用于给用户态应用提供scsisense信息渠道(由于分布式存储通常都工作在用户态,因此方案中通过linux的proc文件系统,将hdd硬盘的scsisense信息导出,供上层的存储系统查询和分析),故障信息采集和诊断单元203用于实现scsisense信息的采集和分析以确定是否存在故障扇区,坏块标记单元204用于对故障扇区进行标记和映射维护,坏块修复单元205用于对故障扇区的数据进行修复触发,故障预警单元206用于对硬盘故障进行建模和预警管理,而硬盘修复单元207用于实现硬盘整盘数据的重建管理。本申请以上方案所提供的系统,通过linux内核的kprobehook驱动,无侵入的获取scsisense信息。通过scsisense信息的分析,来判断硬盘对应的扇区是否健康。针对故障扇区,在第一次访问后发现错误之后,记录在硬盘的坏块表中,并且常驻内存,后续读写时直接查询内存中的坏块表,能够不访问硬盘就直接返回io错误。另外,本系统对故障扇区进行隔离弃用,即便是对应的数据删除了,也不能归还给系统,从而可以不启用硬盘的g-list区域,避免重新映射导致性能下降。当需要修复数据时,对于故障扇区所在区域,后续只进行局部的数据修复,避免整盘数据修复。如果某块硬盘上的隔离区块超过设定阈值,需要将该块硬盘设为只读并逐步转移数据。

通过以上方案,保障了存储系统的性能,提升数据可靠性,减少了对操作系统层驱动重试的依赖,从而避免硬盘出现介质问题时引发大量的io长尾延迟;机械硬盘的使用寿命得到了有效延长,不会在出现扇区故障时就剔除硬盘,减少了整盘数据重建的概率,还通过扇区故障的数量提前对硬盘的故障做出预测,从而可以提前将快要故障的硬盘数据进行主动重建,避免硬盘永久故障后再去进行被动的数据修复。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1