发明内容
本发明实施例提供一种磁盘重映射方法和装置,减少磁盘读写延时。
本发明实施例的第一方面提供了一种磁盘重映射方法,包括:
当读取到各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置;
若所述坏道扇区位于内道区域中,则将所述坏道扇区中的数据迁移到原始预留区域中,并将所述坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址;
若所述坏道扇区位于非内道区域中,则将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据对应的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址;
根据数据的逻辑地址从所述逻辑地址对应的扇区读取所述数据;
其中,所述内道区域为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为所述碟片的半径,P为预设的大于1且小于R的实数;所述非内道区域为所述碟片上除所述内道区域外的区域。
结合第一方面,在第一方面的第一种可能的实现方式中,所述将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中包括:
对所述坏道扇区所在坏道区域进行扫描,所述坏道扇区所在坏道区域为由物理地址为[X-Q,X+Q]的扇区构成的区域,其中,X为所述坏道扇区的物理地址,Q为预设的正整数;
当所述坏道区域中存在其他坏道扇区时,则所述坏道区域满足预设的区域映射条件,将所述坏道区域中的数据迁移到预设的新增预留区域中。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中还包括:
当所述坏道区域中不存在其他坏道扇区时,则所述坏道区域不满足预设的区域映射条件,将所述坏道扇区中的数据迁移到预设的新增预留区域中,并将所述坏道扇区中的数据的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,本发明实施例提供的磁盘重映射方法还包括:
预配置所述新增预留区域,所述新增预留区域均匀分布在各碟片上,所述各碟片中的新增预留区域分别分布在所述各碟片中由半径为[R/N,R/M]的同心圆组成的区域,所述新增预留区域中的逻辑地址总数为所述原始预留区域中的逻辑地址总数的n倍,M和N为预设的大于1且小于2的实数,M<N,n为预设的大于1的正整数。
结合第一方面或第一方面的第一种可能的实现方式,在第四种可能的实现方式中,本发明实施例提供的磁盘重映射方法还包括:
获取各硬盘所包含的碟片数、各碟片所包含的磁轨数以及各磁轨所包含的扇区个数;
根据所述各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数以及各磁轨中首尾扇区对应的首尾逻辑地址,生成各磁轨与所述磁轨中首尾逻辑地址的对应关系。
本发明实施例的第二方面提供了一种磁盘重映射装置,包括:
第一获取单元,用于当读取到各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置;
第一迁移单元,用于若所述第一获取单元获取到的所述坏道扇区位于内道区域中,则将所述坏道扇区中的数据迁移到原始预留区域中,并将所述坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址;
第二迁移单元,用于若所述第一获取单元获取到的所述坏道扇区位于非内道区域中,则将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址;
读取模块,用于根据所述第一迁移单元和所述第二迁移单元重新指向的数据的逻辑地址从所述逻辑地址对应的扇区读取所述数据;
其中,所述内道区域为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为所述碟片的半径,P为预设的1且小于R的实数;所述非内道区域为所述碟片上除所述内道区域外的区域。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第二迁移单元包括:
扫描子单元,用于若所述第一获取单元获取到的所述坏道扇区位于非内道区域中,则对所述坏道扇区所在坏道区域进行扫描,所述坏道扇区所在坏道区域为由物理地址为[X-Q,X+Q]的扇区构成的区域,其中,X为所述坏道扇区的物理地址,Q为预设的正整数;
迁移子单元,用于当所述扫描子单元扫描的结果为所述坏道区域中存在其他坏道扇区时,所述坏道区域满足预设的区域映射条件,将所述坏道区域中的数据迁移到预设的新增预留区域中。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述第二迁移单元还包括:
处理子单元,用于当所述扫描子单元扫描的结果为所述坏道区域中不存在其他坏道扇区时,所述坏道区域不满足预设的区域映射条件,将所述坏道扇区中的数据迁移到预设的新增预留区域中,并将所述坏道扇区中的数据的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,本实施例提供的磁盘重映射装置还包括:
预配置模块,用于在所述第一获取模块获取所述坏道扇区的位置之前,预配置所述新增预留区域,所述新增预留区域均匀分布在各碟片上,所述各碟片中的新增预留区域分别分布在所述各碟片中由半径为[R/N,R/M]的同心圆组成的区域,所述新增预留区域中的逻辑地址总数为所述原始预留区域中的逻辑地址总数的n倍,M和N为预设的大于1且小于2的实数,M<N,n为预设的大于1的正整数。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第四种可能的实现方式中,本实施例提供的磁盘重映射装置还包括:
第二获取模块,用于在所述第一获取模块获取所述坏道扇区的位置之前,获取各硬盘所包含的碟片数、各碟片所包含的磁轨数以及各磁轨所包含的扇区个数;
生成模块,用于根据所述第二获取模块获取的所述各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数以及各磁轨中首尾扇区对应的首尾逻辑地址,生成各磁轨与所述磁轨中首尾逻辑地址的对应关系。
本发明实施例的技术效果是:通过对坏道扇区的位置进行区分,采用就近的原则将内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到原始预留区域中数据迁移后的物理地址,将非内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到新增预留区域中数据迁移后的物理地址,减少了磁头从良好扇区向预留区域摆动的距离,从而减少了磁头摆动带来了延时;通过将满足预设的区域映射条件的坏道区域中的数据整体迁移到新增预留区域中,使得当读取到该坏道区域中的数据时,直接从新增预留区域中进行整体读取,避免了由于某个区域中存在多个相近但不连续的坏道扇区导致磁头反复摆动,从而大大减少了因磁头反复摆动带来的延时。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明磁盘重映射方法实施例一的流程图,如图1所示,本实施例提供了一种磁盘重映射方法,可以包括如下步骤:
步骤101,当读取到各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置。
本步骤为当读取到各碟片上存在坏道扇区,则通过数据读取可以读取到各碟片上的坏道扇区,可以根据该坏道扇区的逻辑地址获取到该坏道扇区的位置,此处的逻辑地址可以为LBA,通过逻辑地址可以获取到坏道扇区所处的位置。本实施例提供的磁盘重映射方法可以应用于使用传统硬盘建立磁盘阵列(Redundant Arrays ofInexpensive Disks;以下简称:RAID)组的各种存储软件产品,包括电脑操作系统、存储控制软件等。在对创建的RAID组中的数据进行输入输出(Input Output;以下简称:IO)操作时,如果RAID组中各硬盘中各碟片上存在坏道扇区,则通过数据读取可以读取到RAID组中各碟片上的坏道扇区。当读取到RAID组中的坏道扇区时,可以根据该坏道扇区的逻辑地址获取到该坏道扇区的位置,此处的逻辑地址可以为LBA,通过逻辑地址可以获取到坏道扇区所处的位置,可以为获取到坏道扇区位于哪个磁轨上。在本实施例中,一个RAID组由多个硬盘组成,一个硬盘由多个碟片组成,一个碟片由多个磁轨组成,每个磁轨包含多个扇区。其中,磁轨可以为碟片上以碟片中心为圆心的同心圆,碟片上的一个同心圆可以对应一个磁轨(track),即以碟片中心为圆心,不同半径对应不同的磁轨。由于同一碟片上的各扇区是连续的,即同一碟片上不同半径的同心圆对应的磁轨中扇区对应的逻辑地址可以按照半径从大到小或从小到大的顺序连续排列,而同一磁轨中扇区对应的逻辑地址可以按照逆时针或顺时针的顺序连续排列,则通过逻辑地址可以获取到坏道扇区所处的位置。
步骤102,根据坏道扇区的位置判断坏道扇区是否位于内道区域中,如果是,则执行步骤103,否则执行步骤104。
在获取到坏道扇区的位置,即获取到坏道扇区所处的磁轨后,根据坏道扇区的位置判断坏道扇区是否位于内道区域中,可以根据磁轨所在的同心圆的半径来判断坏道扇区是否位于内道区域中,如果是,则执行步骤103,否则执行步骤104。本实施例中的内道区域可以为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为所述碟片的半径,P为预设的大于1且小于R的实数,优选地可以将P设置为大于2;非内道区域为所述碟片上除所述内道区域外的区域。图2为本发明磁盘重映射方法实施例一中碟片的结构示意图,如图2所示,由于一个碟片包含上万个磁轨,每个磁轨与碟片中的一个同心圆相对应。本实施例通过设置参数P的值来将碟片的存储区域分为内道区域与外道区域,通常情况下,P可以取值为3,即将碟片中以R/3为半径的同心圆对应的磁轨以内的扇区设为内道区域,以R/3为半径的同心圆对应的磁轨以外的扇区设为非内道区域。需要指出的是,R/P的值不一定恰好等于某个磁轨对应的同心圆的半径的大小,此处可以选择半径值与R/P最接近的磁轨。
步骤103,将所述坏道扇区中的数据迁移到原始预留区域中,并将坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
当坏道扇区的逻辑地址位于内道区域中时,将所述坏道扇区中的数据迁移到原始预留区域中,并将坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址,即采用硬盘自带的重映射机制,将坏道扇区的逻辑地址重映射到原始预留区域中。此处的原始预留区域为硬盘自带的预留区域,通常位于碟片的内道中。
步骤104,将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据,迁移到预设的新增预留区域中,并将坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。
当坏道扇区的逻辑地址位于非内道区域中时,将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据,迁移到预设的新增预留区域中,并将所述坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。此处的坏道扇区所在的坏道区域可以指该坏道扇区附近的区域,区域范围可以根据实际情况来设定。此处所指的区域映射条件可以为该坏道扇区所在的坏道区域中还存在其他坏道扇区,还可以为相邻的多个track上组成的坏道区域中存在多个坏道扇区。新增预留区域为本实施例自定义的用于逻辑地址重新指向的预留区域,该新增预留区域可以位于碟片中存储区域的中间位置,而非内道位置。当坏道扇区所在的坏道区域中还存在其他坏道扇区时,表明该坏道区域满足预设的区域映射条件,否则该坏道区域不满足预设的区域映射条件。本实施例将满足预设的区域映射条件的坏道区域中的数据整体迁移到新增预留区域中,可以将这些数据整体迁移到新增预留区域中与该坏道区域距离最近的空闲区域。当坏道区域不满足预设的区域映射条件时,可以将坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
步骤105,根据数据的逻辑地址从逻辑地址对应的区域读取所述数据。
在完成数据的迁移和逻辑地址的重新指向后,当后续再对该RAID组中的数据进行IO操作时,则根据重新指向后的逻辑地址来从逻辑地址对应的区域中读取数据。由于硬盘中坏道扇区的逻辑地址已被重新指向,在读取RAID组中的数据时,良好扇区中数据的逻辑地址未被重新指向,则仍从良好扇区中读取数据;出现坏道扇区的扇区中的数据的逻辑地址被重新指向,对于内道区域中的数据,则从原始预留区域中读取重新指向后的逻辑地址对应的数据,对于非内道区域中的数据,则从新增预留区域中读取数据。在本实施例中,当扫描出一个坏道扇区附近还存在其余坏道扇区时,将多个相近但不连续的坏道扇区所在的整个坏道区域中的数据进行整体迁移,以及该坏道区域中逻辑地址的整体重新指向,从而当读取到该坏道区域中的数据时,直接从新增预留区域中进行整体读取,避免了由于某个区域中存在多个相近但不连续的坏道扇区导致磁头反复摆动,从而大大减少了因磁头反复摆动带来的磁盘读写延时。
本实施例提供了一种磁盘重映射方法,通过对坏道扇区的位置进行区分,采用就近的原则将内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到原始预留区域中数据迁移后的物理地址,将非内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到新增预留区域中数据迁移后的物理地址,减少了磁头从良好扇区向预留区域摆动的距离,从而减少了磁头摆动带来了延时;通过将满足预设的区域映射条件的坏道区域中的数据整体迁移到新增预留区域中,使得当读取到该坏道区域中的数据时,直接从新增预留区域中进行整体读取,避免了由于某个区域中存在多个相近但不连续的坏道扇区导致磁头反复摆动,从而大大减少了因磁头反复摆动带来的延时。
图3为本发明磁盘重映射方法实施例二的流程图,如图3所示,本实施例提供了一种磁盘重映射方法,可以包括如下步骤:
步骤301,获取RAID组中各硬盘所包含的碟片数、各碟片所包含的磁轨数以及各磁轨所包含的扇区个数。
在本实施例中,一个RAID组由多个硬盘组成,一个硬盘由多个碟片组成,一个碟片由多个磁轨组成,每个磁轨包含多个扇区。本步骤可以为通过模式页(Mode Page)或规格说明书查出一个硬盘所包含的碟片数、磁头数,每个碟片所包含的磁轨数,一个磁轨所包含的扇区数,并可以得到硬盘本身预留的原始预留区域,此处假设一个硬盘中本身预留的原始预留区域中包含G个扇区,即预留有G个LBA。现在已知的硬盘中单个碟片包含100K-200K个磁轨,每个磁轨包含2K-3K个扇区,硬盘本身预留的原始预留区域包含2048-8192个扇区,每个扇区对应一个LBA,即原始预留区域包含2048-8192个LBA。
步骤302,根据各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数以及各磁轨中首尾扇区对应的首尾逻辑地址,生成各磁轨与所述磁轨中首尾逻辑地址的对应关系。
当获取到各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数后,由于磁轨中各扇区的逻辑地址按照顺序排列,根据各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数便可以计算出每个磁轨中各首尾扇区对应的首尾逻辑地址,此处的首尾逻辑地址可以为磁轨中首扇区对应的逻辑地址和尾扇区对应的逻辑地址。在计算出各磁轨中首尾扇区对应的首尾逻辑地址后,便可以生成各磁轨与磁轨中首尾逻辑地址的对应关系。
步骤303,在创建所述RAID组时,在所述RAID组中预设所述新增预留区域,所述新增预留区域均匀分布在所述RAID组中的各碟片上。
在创建阵列产品的RAID组时,存储空间按照条带化分布在RAID组中的各硬盘中,在该RAID组中自定义一个新增预留区域。在本实施例中,新增预留区域均匀分布在RAID组中的各碟片上,使得各碟片上一定数量的磁轨之间共用新增预留区域中的一些预留扇区。在本实施例中,新增预留区域与原始预留区域的位置不同,各碟片中的新增预留区域分别分布在所述各碟片中由半径为[R/N,R/M]的同心圆组成的区域,即该新增预留区域为由多个同心圆组成的一个条带区域,其中最小半径为R/N,最大半径为R/M,M和N均为预设的大于1且小于2的实数,例如N可以取值为1.6,M可以取值为2,。可见,本实施例将新增预留区域设置在碟片的中心区域,从而相比于现有技术中位于内道的预留区域,减小了各磁轨与预留区域之间的距离。本实施例中的新增预留区域中的逻辑地址总数为所述原始预留区域中的逻辑地址总数的n倍,假设一个硬盘中包含A块碟片,则每个碟片中的新增预留区域中可以包含nG/A个逻辑地址,n为预设的大于1的正整数。
步骤304,当读取到RAID组中各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置。
在本实施例中,当首次读取RAID组中的数据时,可以在读取到RAID组中的坏道扇区时,先降低完成IO操作,并记录坏道扇区的逻辑地址。然后采用RAID组校验算法进行数据重构,若通过数据重构无法修复该坏道扇区,则可以先根据坏道扇区的逻辑地址获取该坏道扇区的位置,即获取该坏道扇区位于哪个磁轨上。可以根据上述步骤302生成的各磁轨与磁轨中首尾逻辑地址的对应关系来获取坏道扇区的位置,即判断该坏道扇区的逻辑地址位于那组首尾逻辑地址构成的地址区间内,则表明该坏道扇区位于该首尾逻辑地址对应的磁轨上。
步骤305,根据坏道扇区的位置判断坏道扇区是否位于内道区域中,如果是,则执行步骤306,否则执行步骤307。
在获取到坏道扇区的位置,即获取到坏道扇区所处的磁轨后,根据坏道扇区的位置判断坏道扇区是否位于内道区域中,可以根据磁轨所在的同心圆的半径来判断坏道扇区是否位于内道区域中,如果是,则执行步骤306,否则执行步骤307。本实施例中的内道区域可以为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为碟片的半径,P为预设的大于1且小于R的实数;非内道区域为碟片上除内道区域外的区域。
步骤306,将所述坏道扇区中的数据迁移到原始预留区域中,并将坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
当坏道扇区的逻辑地址位于内道区域中时,将所述坏道扇区中的数据迁移到原始预留区域中,并将坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址,即采用硬盘自带的重映射机制,将坏道扇区的逻辑地址对应的物理地址重新指向到原始预留区域中。此处的原始预留区域为硬盘自带的预留区域,通常位于碟片的内道中。
步骤307,判断该坏道扇区所在坏道区域是否满足预设的区域映射条件,如果是,则执行步骤308,否则执行步骤309。
当坏道扇区的逻辑地址位于非内道区域中时,继续判断该坏道扇区所在坏道区域是否满足预设的区域映射条件,如果是,则执行步骤308,否则执行步骤309。本步骤可以为对坏道扇区所在坏道区域进行扫描,判断该坏道区域中是否存在其他坏道扇区,此处的坏道区域只是为了定义坏道扇区附近的区域而命名的,并不代表其他含义,如并非坏道区域中所有扇区均为坏道扇区。其中,坏道扇区所在坏道区域为由物理地址为[X-Q,X+Q]的扇区构成的区域,其中,X为所述坏道扇区的物理地址,Q为预设的正整数。即本步骤通过对物理地址X周围的扇区进行扫描,以判断其周围是否存在与其相近的其他坏道扇区。此处的相近可以是指扇区在物理位置上的相近。本实施例可以通过设定参数Q,来决定所要迁移的区域大小。
步骤308,将坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据对应的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。
如果坏道扇区所在坏道区域满足预设的区域映射条件,即该坏道区域中存在至少两个坏道扇区,这两个坏道扇区可能相近但不连续,本实施例将该坏道区域中的数据整体迁移到预设的新增预留区域中,并将坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。即当在物理地址为[X-Q,X+Q]的扇区构成的坏道区域中扫描到至少两个坏道扇区时,本实施例不仅将至少两个坏道扇区的数据迁移到新增预留区域,还将坏道扇区周围的其他良好扇区的数据也一起迁移到新增预留区域,从而当需要读取物理地址为[X-Q,X+Q]的扇区中的数据时,不会因其中数据不在同一区域而使得磁头来回摆动。
步骤309,将坏道扇区中的数据迁移到新增预留区域中,并将坏道扇区中的数据的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
如果坏道扇区所在坏道区域不满足预设的区域映射条件,即该坏道区域中只存在一个坏道扇区,则无需对该坏道区域中的数据进行整体迁移,而只将坏道扇区中的数据迁移到新增预留区域中,并将该坏道扇区中的数据的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址,从而可以降低新增预留区域的负担。
步骤310,根据数据的逻辑地址从逻辑地址对应的扇区读取数据。
在完成数据的迁移和逻辑地址的重新指向后,当后续再对该RAID组中的数据进行IO操作时,则根据重新指向后的逻辑地址来从逻辑地址对应的区域中读取数据。在读取RAID组中的数据时,良好扇区中数据的逻辑地址未被重映射,则仍从良好扇区中读取数据。出现坏道扇区的扇区中的数据的逻辑地址被重新指向,对于内道区域中的数据,则从原始预留区域中读取重新指向后的逻辑地址对应的数据;对于非内道区域中的数据,如果一个逻辑地址周围的区域中的逻辑地址被整体重新指向,则直接访问新增预留区域中,如果一个逻辑地址被单个重新指向,则从新增预留区域中读取数据。
本实施例提供了一种磁盘重映射方法,通过对坏道扇区的位置进行区分,采用就近的原则将内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到原始预留区域中数据迁移后的物理地址,将非内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到新增预留区域中数据迁移后的物理地址;通过将满足预设的区域映射条件的坏道区域中的数据整体迁移到新增预留区域中,使得当读取到该坏道区域中的数据时,直接从新增预留区域中进行整体读取,避免了由于某个区域中存在多个相近但不连续的坏道扇区导致磁头反复摆动,从而大大减少了因磁头反复摆动带来的延时。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图4为本发明磁盘重映射装置实施例一的结构示意图,如图4所示,本实施例提供了一种磁盘重映射装置,可以执行上述方法实施例一中的各个步骤,此处不再赘述。本实施例提供的磁盘重映射装置可以包括第一获取单元401、第一迁移单元402、第二迁移单元403和读取单元404。其中,第一获取单元401用于当读取到各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置。第一迁移单元402用于若第一获取单元401获取到的所述坏道扇区位于内道区域中,则将所述坏道扇区中的数据迁移到原始预留区域中,并将所述坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。第二迁移单元403用于若第一获取单元401获取到的所述坏道扇区位于非内道区域中,则将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。读取单元404用于根据第一迁移单元402和第二迁移单元403重新指向的数据的逻辑地址从所述逻辑地址对应的扇区读取所述数据。其中,所述内道区域为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为所述碟片的半径,P为预设的大于1且小于R的实数;所述非内道区域为所述碟片上除所述内道区域外的区域。
图5为本发明磁盘重映射装置实施例二的结构示意图,如图5所示,本实施例提供了一种磁盘重映射装置,可以执行上述方法实施例二中的各个步骤,此处不再赘述。本实施例提供的磁盘重映射装置在上述图4所示的基础之上,第二迁移单元403可以包括扫描子单元413和迁移子单元423。其中,扫描子单元413用于若第一获取单元401获取到的所述坏道扇区位于非内道区域中,则对所述坏道扇区所在坏道区域进行扫描,所述坏道扇区所在坏道区域为由物理地址为[X-Q,X+Q]的扇区构成的区域,其中,X为所述坏道扇区的物理地址,Q为预设的正整数。迁移子单元423用于当扫描子单元413扫描的结果为所述坏道区域中存在其他坏道扇区时,所述坏道区域满足预设的区域映射条件,将所述坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址。
进一步地,本实施例提供的磁盘重映射装置还可以包括处理单元501。处理单元501用于当扫描子单元413扫描的结果为所述坏道区域中不存在其他坏道扇区时,所述坏道区域不满足预设的区域映射条件,将所述坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址。
进一步地,本实施例提供的磁盘重映射装置还可以包括预配置单元502,预配置单元502用于在第一获取单元401获取所述坏道扇区的位置之前,预配置所述新增预留区域,所述新增预留区域均匀分布在各碟片上,所述各碟片中的新增预留区域分别分布在所述各碟片中由半径为[R/N,R/M]的同心圆组成的区域,所述新增预留区域中的逻辑地址总数为所述原始预留区域中的逻辑地址总数的n倍,M和N为预设的大于1且小于2的实数,M<N,n为预设的大于1的正整数。
进一步地,本实施例提供的磁盘重映射装置还可以包括第二获取单元503和生成单元504。其中,第二获取单元503用于在第一获取单元401获取所述坏道扇区的位置之前,获取各硬盘所包含的碟片数、各碟片所包含的磁轨数以及各磁轨所包含的扇区个数。生成单元504用于根据第二获取单元503获取的所述各硬盘所包含的碟片数、各碟片所包含的磁轨数、各磁轨所包含的扇区个数以及各磁轨中首尾扇区对应的首尾逻辑地址,生成各磁轨与所述磁轨中首尾逻辑地址的对应关系。
本实施例提供了一种磁盘重映射装置,通过对坏道扇区的位置进行区分,采用就近的原则将内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到原始预留区域中数据迁移后的物理地址,将非内道区域中的坏道扇区的逻辑地址对应的物理地址重新指向到新增预留区域中数据迁移后的物理地址;通过将满足预设的区域映射条件的坏道区域中的数据整体迁移到新增预留区域中,使得当读取到该坏道区域中的数据时,直接从新增预留区域中进行整体读取,避免了由于某个区域中存在多个相近但不连续的坏道扇区导致磁头反复摆动,从而大大减少了因磁头反复摆动带来的延时。
本发明实施例还提供了一种机器可读介质,其上存储有指令集合,当该指令集合被执行时,使得该机器可执行上述方法实施例一或方法实施例二所述的磁盘重映射方法。
图6为本发明磁盘重映射装置实施例三的结构示意图,如图6所示,本发明实施例还提供了一种磁盘重映射装置,该磁盘重映射装置可以包括存储器601和处理器602。其中,存储器601用于存储指令。处理器602与所述存储器601耦合,该处理器602被配置为执行存储在所述存储器601中的指令。其中,处理器602被配置为用于:当读取到各碟片上的坏道扇区时,根据所述坏道扇区的逻辑地址获取所述坏道扇区的位置;若所述坏道扇区位于内道区域中,则将所述坏道扇区中的数据迁移到原始预留区域中,并将所述坏道扇区的逻辑地址对应的物理地址重新指向到所述坏道扇区中的数据迁移后的物理地址;若所述坏道扇区位于非内道区域中,则将满足预设的区域映射条件的坏道扇区所在坏道区域中的数据迁移到预设的新增预留区域中,并将所述坏道区域中数据的逻辑地址对应的物理地址分别重新指向到所述坏道区域中的数据迁移后的物理地址;根据数据的逻辑地址从所述逻辑地址对应的扇区读取所述数据;其中,所述内道区域为碟片中以R/P为半径的同心圆对应的磁轨以内的区域,其中,R为所述碟片的半径,P为预设的大于1且小于R的实数;所述非内道区域为所述碟片上除所述内道区域外的区域。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。