一种磁盘保护方法及装置的制作方法

文档序号:6370242阅读:120来源:国知局
专利名称:一种磁盘保护方法及装置的制作方法
技术领域
本发明涉及磁盘索引文件结构技术,尤其涉及一种通过二级索引结构来实现磁盘保护的方法及装置。
背景技术
在IP监控存储领域,由前端摄像机通过iSCSI挂载远端的IPSAN设备是常见的组网方式。如果中间的网络发生异常,容易导致本地挂载的节点发生只读等情况,也很容易导致文件系统损坏、或者出现磁盘坏道等。针对这样的问题,现有的解决方案大多是从如何避免磁盘或者文件系统发生异常着手的。比如说,在文件系统基础上先建立固定文件,然后在文件系统的开始位置建立这些固定文件的索引信息。由于一开始建立了固定文件,所以在文件更新时,文件系统不需要过多更新系统索引区,因此减少了因索引区更新错误而导致 的文件系统异常。然而在开始位置建立索引区,容易出现索引区所在磁道成为访问的热点,增大了磁盘故障风险。而且一旦文件索引区或者数据区发生异常,现有技术没有恢复或者剔除损坏磁道的机制。

发明内容
有鉴于此,本发明提供一种磁盘保护装置,应用于计算机系统上,该装置包括格式化单元,用于根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区,每个一级索引区的索引记录指向一个数据区,每个数据区包括二级索引区;列表加载单元,用于将每个一级索引区的地址信息保存到内存的索引列表中;索引更新单元,用于在每次需要将内存中的索引记录更新到一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到多个磁盘区域。本发明还提供一种磁盘保护方法,应用于计算机系统上,该方法包括A、根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区,每个一级索引区的索引记录指向一个数据区,每个数据区包括二级索引区;B、将每个一级索引区的地址信息保存到内存的索引列表中;C、在每次需要将内存中的索引记录更新到一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到多个磁盘区域。本发明通过二级索引结构下循环更新的方式有效避免了一级索引区因为频繁更新而容易引发磁盘或磁道故障的问题;并能在发生磁道故障时有效减小磁道故障引发的问题,即便磁道故障发生在一级索引区,本发明还有其他一级索引区作为备份,由于本发明可以将发生磁道故障的一级索引区剔除,因此也不会因为某个一级索引区发生磁道故障而影响前述的一级索引区循环更新的机制。


图I是本发明一种实施方式的流程处理图;图2是本发明一种实施方式中磁盘保护装置逻辑结构图;图3是本发明一种实施方式中二级索引结构示意图;图4是本发明另一种实施方式的流程处理图。
具体实施例方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。请参考图1,图2以及图3,在本发明一种通过计算机程序实现的实施方式中,本发明磁盘保护装置包括格式化处理单元、列表加载单元以及索引更新单元;相应的处理流程包括以下步骤步骤101,格式化单元根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区,每个一级索引区的索引记录指向一个数据区,每个数据区包括二级索引区;图3是本发明对指定磁盘进行格式化后呈现出的一种示例性的二级索引结构,其中包括多个相同大小的一级索引区(分别编号为I至m),且每个一级索引区相隔的存储空间大小相同,也就是说一级索引区在磁盘中是呈现出相对均匀分布。比如说图3中每个一级索引区的大小均为16M,二级索引区(分别编号为I至η)的大小均为64Μ。每个一级索引 区的索引记录指向一个数据区,这个数据区的大小在图3中为64Μ的二级索引区的空间加上由多个数据块组成的2G数据空间;每个二级索引区的索引记录指向具体数据块。其中一级索引记录包括前一个和后一个一级索引记录的位置、二级索引区的位置(也就是前述数据区的位置)以及引用计数等;而二级索引记录包括所属一级索引记录的位置、本二级索引数据块的位置以及引用计数等。本发明采用至少两级的索引结构,这样做的优势在于,一级索引区的可以占用较小的存储空间,优选的方式中一个一级索引区是比一个二级索引区占用的空间更小。若仅仅采用单级索引结构,那么查询性能显然不如二级索引,一级索引区所占用的空间将比较大,可能需要占用几百M甚至更多的空间,且不容易放入缓存,此时如果再向本发明那样设置多个相同的索引区,占用的空间将更大,难以被使用者所接受。步骤102,列表加载单元将每个一级索引区的地址信息保存到内存的索引列表中;索引的作用是为了进行更为快速的数据查询,二级索引结构中,通常先查询一级索引区找到索引记录后再查询对应的二级索引区,然后根据二级索引区的索引记录找到对应的数据快。现有技术中为了加快查询和更新的速度,通常会将一级索引区的数据(也就是其中的索引记录)加载到内存中。在本发明中,除了可以将一级索引区的数据加载到内存中,本发明还将各个一级索引区在磁盘中的地址信息保存在内存中,比如说,先将第一个一级索引区的地址信息(相当于一个起始位置)读到内存,然后根据每个索引区之间的间隔空间大小算出后面每一个一级索引区的地址信息;当然这些地址信息也可以采用读取的方式获得,即所有的一级索引的地址信息都是事先保存好的。有了一级索引区的地址信息后,更新索引以及根据索引进行数据查询就有了依据。如前所述,在初始的时候各个一级索引区的数据都是一致的,随便选择一份加载到内存中,进行数据查询和更新的时候以内存中的索引数据为准。 步骤103,索引更新单元在每次需要更新一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到磁盘的多个区域。由于不断有数据更新写入到磁盘上,相应地一级索引区的索引记录也可能需要更新,每次在内存中对一级索引区的索引记录进行更新之后需要将更新下发到磁盘的一级索引区去;本发明每次更新的时候采用循环的方式选择下一个一级索引区作为当前一级索引区。当前的一级索引区中的数据通常没有内存中对应的数据完整,更新之前需要先确定哪些数据需要更新下去,然后将内存中需要更新的索引记录写入到当前一级索引区中去,在这样的更新规则下,由于内存保存的一级索引区的索引记录永远是最新的,因此当前一级索引区在更新成功后与上一个一级索引区仅有一次更新的数据差别。假设任何一次对当前一级索引区的更新操作没有成功,那么上一个一级索引区保存着最新的一级索引区(因为当前更新没成功,不能算作最新),所以一级索引区的数据并没有因为本发明的循环更新的方式而出现误差的情形。最为重要的是,由于采用了循环更新的方式,对一级索引区的更新将分散在磁盘的各个不同的区域,不会造成某个区域成为更新的热点,因此磁盘因为频繁更新操作而出现故障的概率将大幅度降低。此外,如果系统发生了重启,如前所述系统需要将最完整一级索引区的数据加载到内存中去,由于当前存在多个一级索引区,因此需要甄别出数据最完整的一级索引区。本发明可以在每个一级索引区更新成功时将更新时间写入一级索引区中预留的位置上,系统重启的时候可以比较每个一级索引区的更新时间从而找到最后一次更新的一级索引区,最后一次更新的一级索引区的数据显然是最为完整的,因此系统此时可以将该一级索引区的数据加载到内存中。请进一步参考图4,在本发明另一种实施方式中还在前述实施方式的基础上提供了磁盘及磁道故障的检测以及故障磁道的剔除机制。相应地,本实施方式中,磁盘保护装置还包括故障处理单元。本实施方式处理流程如下步骤201,在发生数据写入失败时,故障处理单元向多个选定的一级索引区的预留空间进行写入测试,如果有多个写入测试失败则确定磁盘为不可用状态;如果至少部分写入测试成功,则确定为磁道故障。在写入数据时发生IO错误,本发明可以先判断到底错误可能是哪种原因引起的。本实施方式中可以先向任意多个选定(可以是预先选定也可以是随机选定)的一级索引区预留空间分别尝试进行写入测试。所述预留空间的大小可以比较小,比如仅仅512或IK字节,因为预留空间主要是用来进行写入测试的。以两个预留空间为例,如果两个写入测试都不不成功,可以确定为磁盘处于不可用的状态,即磁盘故障。由于两个一级索引区通常分布在磁盘不同的位置,当两个相距较远的位置的写入测试都失败了则说明磁盘故障的可能性非常高。如果仅仅有部分写入测试是失败的,则说明磁盘尚可以使用,可以暂时确定为正在写入的磁道发生故障。
步骤202,故障处理单元在确定磁道故障之前,尝试重新写入数据,如果重新写入成功则返回,否则确定为磁道故障,转步骤203处理。如果经过步骤201进行写入测试后发现磁盘可以使用,此时为了保证判断的正确性,可以尝试写入失败的数据重新写入一次,如果成功则说明之前的失败可能是因为其他因素造成的,数据如何写入以及写入成功之后的处理不再一一赘述;但如果重新写入还是失败了,则说明当前被写入数据的磁道有极高的可能性是发生故障了,此时故障处理单元可以将该磁道确定为故障状态。步骤202主要是为了对磁道故障进行确认,并不是必须的步骤;可以根据实际需要决定是否实施,如果实施这一步骤可以避免磁道故障误判引发的后续问题,具体可以参考步骤203中的描述。需要说明的是,步骤201以及202只是一种较佳的实现方式,并不是必须的步骤,因为在一些应用场景中,写入数据失败就可以被视为磁道故障,而本实施方式只是做了更为细致的甄别。步骤203,故障处理单元根据索引列表判断磁道故障是否发生在一级索引区,如果是,则通知索引更新单元将当前一级索引区的上一个一级索引区作为当前一级索引区,并将索引列表中发生磁道故障的一级索引区的地址信息删除;如果否,则在当前一级索引区 中找到发生磁道故障的索引记录,并将该索引记录标记为无效状态。如果磁道故障发生在一级索引区,这意味着写入失败发生在更新一级索引区的过程中。在本实施方式中则将该一级索引区视为不可用,那么可以选择上一个一级索引区作为当前一级索引区,索引更新单元收到通知后可以在循环的过程中回退一步进行更新(请参考图I以及图4中的A切入点所示)。相应地,此时可以从内存的索引列表中将写入失败的一级索引区剔除,这个被“踢掉”的一级索引区将不会成为循环更新的对象,否则下次更新时选择到这个发生磁道故障的一级索引区,索引更新单元又要回退一次,这样循环更新就无法进行下去了。 如果磁道故障不是发生在一级索引区,这意味着磁道故障发生在某个一级索引记录指向的数据区所在的位置,这个时候可以根据故障磁道的位置找到这个位置对应的一级索引记录,然后将该一级索引记录标记为无效,比如说,可以通过将引用计数置为一个特殊值来实现,以表示这个索引记录所指向的数据区是处于不可用的状态,这里所说的不可用的状态表示至少是不可写的状态,这样可以避免再次向故障磁道写入数据而导致再次失败,即可以将故障磁道排除出可写入的存储空间。在某个索引记录被置为无效以后,再后续的多次更新中,这个索引记录在每个一级索引区中都会被相应地置为无效,更新过程如前所述。本发明通过二级索引结构下循环更新的方式有效避免了一级索引区因为频繁更新而容易引发磁盘或磁道故障的问题;并能在发生磁道故障时有效减小磁道故障引发的问题,即便磁道故障发生在一级索引区,本发明还有其他一级索引区作为备份,由于本发明可以将发生磁道故障的一级索引区剔除,因此也不会因为某个一级索引区发生磁道故障而影响前述的一级索引区循环更新的机制。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种磁盘保护装置,应用于计算机系统上,其特征在于,该装置包括 格式化单元,用于根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区,每个一级索引区的索引记录指向一个数据区,每个数据区包括二级索引区; 列表加载单元,用于将每个一级索引区的地址信息保存到内存的索引列表中; 索引更新单元,用于在每次需要将内存中的索引记录更新到一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到多个磁盘区域。
2.根据权利要求I所述的装置,其特征在于,所述每个一级索引区的大小相同,且小于二级索引区的大小。
3.根据权利要求I所述的装置,其特征在于,所述每个一级索引区之间间隔的存储空间大小相同。
4.根据权利要求I所述的装置,其特征在于,该装置还包括故障处理单元,用于在发生数据写入失败时,对向多个选定的一级索引区的预留空间进行写入测试,如果有多个写入测试失败则确定为磁盘为不可用状态;如果至少部分写入测试成功,则确定为磁道故障。
5.根据权利要求4所述的装置,其特征在于,所述故障处理单元进一步用于在确定为磁道故障之前,尝试重新写入数据,如果重新写入成功则返回,否则确定为磁道故障。
6.根据权利要求I或4或5所述的装置,其特征在于,该装置还包括故障处理单元,在发生磁道故障的情况下,所述故障处理单元用于根据索引列表判断磁道故障是否发生在一级索引区,如果是,则通知索引更新单元将当前一级索引区的上一个一级索引区作为当前一级索引区,并将索引列表中发生磁道故障的一级索引区的地址信息删除;如果否,则在当前一级索引区中找到发生磁道故障的索引记录,并将该索引记录标记为无效状态。
7.根据权利要求I所述的装置,其特征在于,所述索引更新单元在完成对当前一级索引区更新后,将更新时间写入一级索引区预定的位置上,以使得系统能在重启之后能够根据更新时间找到最后一次更新的一级索引区。
8.—种磁盘保护方法,应用于计算机系统上,其特征在于,该方法包括 A、根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区,每个一级索引区的索引记录指向一个数据区,每个数据区包括二级索引区; B、将每个一级索弓I区的地址信息保存到内存的索引列表中; C、在每次需要将内存中的索引记录更新到一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到多个磁盘区域。
9.根据权利要求8所述的方法,其特征在于,所述每个一级索引区的大小相同,且小于二级索引区的大小。
10.根据权利要求8所述的方法,其特征在于,所述每个一级索引区之间间隔的存储空间大小相同。
11.根据权利要求8所述的方法,其特征在于,D、在发生数据写入失败时,对向多个选定的一级索引区的预留空间进行写入测试,如果有多个写入测试失败则确定为磁盘为不可用状态;如果至少部分写入测试成功,则确定为磁道故障。
12.根据权利要求11所述的方法,其特征在于,步骤D进一步包括在确定为磁道故障之前,尝试重新写入数据,如果重新写入成功则返回,否则确定为磁道故障。
13.根据权利要求8或11或12所述的方法,其特征在于,还包括 E、在发生磁道故障的情况下,根据索引列表判断磁道故障是否发生在一级索引区,如果是,则将当前一级索引区的上一个一级索引区作为当前一级索引区,并将索引列表中发生磁道故障的一级索引区的地址信息删除;如果否,则在当前一级索引区中找到发生磁道故障的索引记录,并将该索引记录标记为无效状态。
14.根据权利要求8所述的方法,其特征在于,还包括 F、在完成对当前一级索引区更新后,将更新时间写入一级索引区预定的位置上,以使得系统能在重启之后能够根据更新时间找到最后一次更新的一级索引区。
全文摘要
本发明提供一种磁盘保护装置,应用于计算机系统上,该装置包括格式化单元,用于根据用户的规划将磁盘的存储空间格式化为二级索引结构,其中格式化后的存储空间包括多个一级索引区;列表加载单元,用于将每个一级索引区的地址信息保存到内存的索引列表中;索引更新单元,用于在每次需要将内存中的索引记录更新到一级索引区时,以循环的方式选取下一个一级索引区作为当前一级索引区,根据索引列表中的地址信息找到当前一级索引区并对当前一级索引区的索引记录进行更新,以将对一级索引区的更新分散到多个磁盘区域。本发明通过二级索引结构下循环更新的方式有效避免了一级索引区因为频繁更新而容易引发磁盘或磁道故障的问题。
文档编号G06F12/16GK102722454SQ20121016551
公开日2012年10月10日 申请日期2012年5月22日 优先权日2012年5月22日
发明者吕志明 申请人:浙江宇视科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1