一种磁盘存储方法

文档序号:6751936阅读:184来源:国知局
专利名称:一种磁盘存储方法
技术领域
本发明涉及计算机应用领域,特别是指一种磁盘存储方法。
背景技术
目前,硬盘是计算机的主要存储介质之一。在通常的使用情况下,硬盘的使用寿命一般都在三年以上。如果将硬盘用于频繁存储设备时,例如一个嵌入式Linux系统采用硬盘作为存储介质,为实现系统易用性,需要设计系统可随时关机。为保证系统的可靠性,即在任何时候系统都不会遭到破坏,使整个Linux系统以只读方式启动,但一些关于应用的配置需要保存,因此通过直接存储访问硬盘扇区并进行双备份的方式存储这些数据。如果直接对硬盘扇区进行数据存储,则会导致每次存储于硬盘的同一区域,就会在短时间内对硬盘的同一扇区反复进行写操作,这样,大大增加硬盘磁道物理损坏的几率,大大缩短了硬盘的使用寿命。另外,对于软盘同样存在频繁写入同一扇区的问题。因此,如何防止对磁盘同一位置的反复写入,将成为有效延长磁盘使用寿命的首要问题。

发明内容
有鉴于此,本发明的主要目的在于提供一种磁盘存储方法,实现对磁盘的均衡存储访问,从而有效延长磁盘的使用寿命。
为了达到上述目的,本发明提供了一种磁盘存储方法,该方法包含以下步骤A、将存储区域划分为一个以上的块;B、当前数据存储起始位置相对原数据存储位置偏移一个或一个以上的块作为当前偏移位置;C、以所述当前偏移位置开始进行数据存储。
所述步骤B进一步包括以下步骤B11、搜索用于标识数据存储起始位置的起始标志扇区,以起始标志扇区相对存储区域起始扇区偏移的位置作为原偏移位置;B12、当前数据存储起始位置在所述原偏移位置基础上,再偏移一个或一个以上的块。
所述步骤B12之前进一步包括删除起始标志扇区中存储的起始标志。
如果以顺序存储方式进行数据存储,则当前数据存储起始位置在原偏移位置基础上再偏移一个块。
如果以随机存储方式进行数据存储,则当前数据存储起始位置在原偏移位置基础上再偏移k个块,k为系统随机生成的随机正整数。
所述步骤B进一步包括步骤B21搜索用于标识数据存储起始位置的起始标志扇区,根据起始扇区中存储的数据长度找到数据存储结束位置所在的块,以该块相对存储区域起始扇区偏移的位置作为当前偏移位置。
所述步骤B21之后进一步包括删除起始标志扇区中存储的起始标志。
第一次进行数据存储时,所述起始标志扇区位于存储区域的起始扇区。
第一次进行数据存储时,所述起始标志扇区位于存储区域中第1个块的第一个扇区,1为系统随机生成的随机正整数。
所述步骤C之前进一步包括判断当前偏移位置是否已超过存储区域的结束扇区位置,如果是,令当前偏移位置为零,然后执行步骤C;否则,直接执行步骤C。
所述步骤C进一步包括以下步骤C1、存储数据时,判断当前数据存储位置是否已超出存储区域结束扇区位置与当前偏移位置的和,如果是,向系统报错,结束当前数据存储流程,否则,执行步骤C2;C2、判断当前数据存储位置是否已超出存储区域结束扇区位置,如果是,令实际的当前数据存储位置为当前数据存储位置与存储区域的差,然后执行步骤C3,否则,直接执行步骤C3;C3、判断是否完成当前数据存储,如果是,将起始标志存储于偏移位置之后第一个块的第一个扇区,结束当前数据存储流程,否则,返回执行步骤C1。
所述步骤C之后进一步包括步骤D读取存储的数据。
所述步骤D进一步包括以下步骤D1、搜索用于标识数据存储起始位置的起始标志扇区,读取起始标志扇区中存储的起始标志和当前读取的数据长度;D2、读取存储的数据时,判断当前数据读取位置是否已超出存储区域结束扇区位置,如果是,令实际的当前数据读取位置为当前数据读取位置与存储区域的差,然后执行步骤D3,否则,直接执行步骤D3;D3、判断是否完成当前数据读取,如果是,结束当前数据读取流程,否则,返回执行步骤D1。
所述起始标志扇区存储有用于标识起始标志的扇区识别字符串和当前存储数据的长度。
所述步骤A包括将存储区域划分为20至200个块。
根据本发明提出的方法,将存储有起始标志的扇区作为在磁盘中存储数据时的起始位置,通过不断改变磁盘的数据存储起始位置,保证对磁盘的存储操作不会总在同一扇区,实现对磁盘的均衡存储访问,从而有效延长磁盘的使用寿命。另外,读取数据时,通过搜索起始标志扇区,找到存储数据的起始位置,然后对数据进行读取,从而保证数据读取的正确性。


图1为本发明中频繁存储区域结构示意图;图2为本发明中访问过程示意图;图3为本发明中存储数据流程图;图4为本发明中读取数据流程图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
本发明提供了一种对磁盘均衡存储访问的方法,将存储有起始标志的扇区作为在磁盘中存储数据时的起始位置,通过不断改变磁盘的数据存储起始位置,保证对磁盘的存储操作不会总在同一扇区,从而有效延长磁盘的使用寿命。另外,读取数据时,通过搜索起始标志扇区,找到存储数据的起始位置,然后对数据进行读取,从而保证数据读取的正确性。
由于随机在每一个可能的扇区中存储数据,会导致读取时的搜索效率过低,因此本发明中采用将存储数据的区域进行分块的方法,设置一个块的大小,每次的存储跳变都以设置的块为单位,这样,起始标志扇区就会出现在块的整数倍的位置;相应地,读取数据时,就能够很快搜索到起始标志扇区。例如,设置每个块的大小为100个扇区,存储数据时,起始标志扇区的位置就在1、2、3……等块的整数倍位置,即100、200、300……等100个扇区的整数倍位置;相应地,读取数据时,只需在1、2、3……等块的整数倍位置进行搜索就可找到起始标志扇区。
图1为本发明中频繁存储区域结构示意图,如图1所示,DBeginPos是存储区域的起始扇区位置,DEndPos是存储区域的结束扇区位置,DBeginPos至DEndPos之间是存储区域(DSize),将DSize划分为n个块(Block),n为正整数。根据上次存储数据的位置,相对DBeginPos偏移JumpBlock进行数据存储,JumpBlock为m个Block,m为从0到n的正整数。通过不断改变JumpBlock,实现不断改变磁盘的数据存储位置。当前存储数据的第一个Block的起始位置是起始标志扇区,即相对DBeginPos偏移JumpBlock的位置为起始标志扇区。NowPos为当前访问位置,存储数据的大小为DataSize。
在本发明中,每个块的大小的设置是非常重要的,分块的数量表示将一个存储区域划分成几个写交替。例如,如果设置分块大小为DSize,则每次的数据存储位置均为DSize的起始位置,即DBeginPos,此时根本没有达到改变磁盘数据存储起始位置的目的;如果设置分块大小为每个扇区的大小,则读取数据时,由于搜索起始标志扇区需要对每一个扇区进行搜索,会花费大量时间,导致读取效率下降。通常,分块大小由存储数据的频繁度和设置的存储区域的大小决定,可将DSize划分为20至200个块,例如,DSize为8000个扇区,则设置每个块的大小为80个扇区,将该DSize划分为100个块。
存储数据的方式包括顺序存储和随机存储两种方式。顺序存储是指连续两次存储数据的起始位置是连续的,即上一次存储数据从第m个Block开始,则当前存储数据从第m+1个Block开始。随机存储是指连续两次存储数据的起始位置会随机跳过k个Block,即上一次存储数据从第m个Block开始,则当前存储数据从第m+k个Block开始,k是随机变化的。
如果在DSize的位置中连续存储数据,则NowPos就是实际的访问位置,但由于存储数据的起始位置会不断变化,因此每次存储数据的位置并不是总在DSize的起始位置,这样,会出现数据存储至DSize的DEndPos时,当前的数据存储还未结束,此时需要跳转至DSize的DBeginPos继续存储数据。
图2为本发明中访问过程示意图,如图2所示,NowPos实际为原当前访问位置,即数据进行连续位置存储时的NowPos,如果NowPos已超出DSize的DEndPos,即NowPos大于或等于DSize的DEndPos,则实际的当前访问位置应为NowPos与DSize的差,即将当前访问位置移至DSize的头部,实际的当前访问位置相对DBeginPos的偏移位置等于NowPos相对DEndPos的偏移位置。存储数据时,相当于将应该在DEndPos后面存储的数据移至DBeginPos后进行存储;相应地,读取数据时,如果读取至DEndPos处还未结束当前数据读取,则返回至DBeginPos处继续读取数据。
图3为本发明中存储数据流程图,如图3所示,以顺序存储数据为例,存储数据过程的包括以下步骤步骤301通过搜索起始标志找到起始标志扇区,获取上次存储数据的原JumpBlock。如果通过上次读取数据已得到JumpBlock,则步骤301中不需要再搜索起始标志。第一次存储数据时,可从DSize的起始位置进行数据存储,即将DSize的DBeginPos作为起始标志扇区;也可随机地从DSize中任意选取一个Block开始进行数据存储,即将选取Block的第一个扇区作为起始标志扇区。
步骤302~步骤303搜索到起始标志后,将该起始标志清除,并且在原JumpBlock的基础上增加一个Block,作为当前JumpBlock。
步骤304判定当前JumpBlock是否小于DEndPos,如果是,执行步骤306;否则,执行步骤305。步骤304是对相对DBeginPos偏移JumpBlock的存储数据起始位置是否已超出DSize的DEndPos进行判断。
步骤305令当前JumpBlock为0,即如果相对DBeginPos偏移JumpBlock的位置已超出DSize的DEndPos,则当前存储数据的起始位置为DSize的DBeginPos。
步骤306进行数据存储。
步骤307判断原NowPos是否小于DendPos与JumpBlock的和,如果是,执行步骤308;否则,执行步骤312。步骤307是为防止本次数据存储的过程中,当前存储的数据覆盖已经存储了的数据,即本次进行存储的DataSize不能大于Dsize与1的差。
步骤308判断原NowPos是否小于DEndPos,如果是,执行步骤310;否则,执行步骤309。步骤308是对当前存储数据位置是否已超过DEndPos进行判断。
步骤309令实际NowPos为原NowPos与Dsize的差。
步骤310判断是否完成本次数据存储,如果是,执行步骤311;否则,返回执行步骤306。
步骤311在相对DBeginPos偏移当前JumpBlock位置的第一个扇区写入起始标志,该扇区即为起始标志扇区,起始标志扇区中还存储有扇区识别字符串、存储数据的大小等,结束本次数据存储。
步骤312向系统报错。
图4为本发明中读取数据流程图,如图4所示,读取数据过程包括以下步骤步骤401~步骤404通过搜索起始标志找到起始标志扇区,获取上次存储数据的JumpBlock;然后读取起始标志扇区中存储的数据,获取上次存储数据的大小,从JumpBlock开始读取数据。可通过多种方式搜索起始标志扇区,例如顺序查找、二分法查找等方式。
步骤405判断原NowPos是否小于DEndPos,如果是,执行步骤407;否则,执行步骤406。步骤405是对当前读取数据位置是否已超过DEndPos进行判断。
步骤406令实际NowPos为原NowPos与Dsize的差。
步骤407判断是否完成本次数据读取,如果是,结束本次数据读取;否则,返回执行步骤405。
以上描述的是当前数据存储的起始位置相对上次数据存储的起始位置进行偏移的方法,实际应用中,还可使当前数据存储的起始位置相对上次数据存储的结束位置进行偏移,搜索起始标志找到起始标志扇区后,读取起始标志扇区中存储的数据长度,然后根据数据长度搜索到上次数据存储的结束位置,以上次数据存储的结束位置所在Block的位置作为原JumpBlock,如果为顺序存储,则在JumpBlock的基础上增加一个Block,如果为随机存储,则在JumpBlock的基础上增加k个Block,k为随机数,然后进行数据存储,后续的数据存储和数据读取过程与上述的数据存储和数据读取过程基本相同,在此不再赘述。
例如一个嵌入式Linux系统采用硬盘作为存储介质,为实现系统易用性,需要设计系统可随时关机。为保证系统的可靠性,即在任何时候系统都不会遭到破坏,使整个Linux系统以只读方式启动,但一些关于应用的配置需要保存,因此通过直接存储访问硬盘扇区并进行双备份的方式存储这些数据。如果直接对硬盘扇区进行数据存储,则会导致每次存储于硬盘的同一区域,大大增加硬盘物理损坏的几率,此时就可采用本发明提出的存储方法,对硬盘采用均衡的访问方式,在硬盘某个存储空间内,将每次需要存储的数据存储于不同的起始位置,从而有效延长磁盘的使用寿命。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种磁盘存储方法,其特征在于该方法包含以下步骤A、将存储区域划分为一个以上的块;B、当前数据存储起始位置相对原数据存储位置偏移一个或一个以上的块作为当前偏移位置;C、以所述当前偏移位置开始进行数据存储。
2.根据权利要求1所述的方法,其特征在于,所述步骤B进一步包括以下步骤B11、搜索用于标识数据存储起始位置的起始标志扇区,以起始标志扇区相对存储区域起始扇区偏移的位置作为原偏移位置;B12、当前数据存储起始位置在所述原偏移位置基础上,再偏移一个或一个以上的块。
3.根据权利要求2所述的方法,其特征在于,所述步骤B12之前进一步包括删除起始标志扇区中存储的起始标志。
4.根据权利要求2所述的方法,其特征在于,如果以顺序存储方式进行数据存储,则当前数据存储起始位置在原偏移位置基础上再偏移一个块。
5.根据权利要求2所述的方法,其特征在于,如果以随机存储方式进行数据存储,则当前数据存储起始位置在原偏移位置基础上再偏移k个块,k为系统随机生成的随机正整数。
6.根据权利要求1所述的方法,其特征在于,所述步骤B进一步包括B21、搜索用于标识数据存储起始位置的起始标志扇区,根据起始扇区中存储的数据长度找到数据存储结束位置所在的块,以该块相对存储区域起始扇区偏移的位置作为当前偏移位置。
7.根据权利要求6所述的方法,其特征在于,所述步骤B21之后进一步包括删除起始标志扇区中存储的起始标志。
8.根据权利要求2或6所述的方法,其特征在于,第一次进行数据存储时,所述起始标志扇区位于存储区域的起始扇区。
9.根据权利要求2或6所述的方法,其特征在于,第一次进行数据存储时,所述起始标志扇区位于存储区域中第1个块的第一个扇区,1为系统随机生成的随机正整数。
10.根据权利要求1所述的方法,其特征在于,所述步骤C之前进一步包括判断当前偏移位置是否已超过存储区域的结束扇区位置,如果是,令当前偏移位置为零,然后执行步骤C;否则,直接执行步骤C。
11.根据权利要求1所述的方法,其特征在于,所述步骤C进一步包括以下步骤C1、存储数据时,判断当前数据存储位置是否已超出存储区域结束扇区位置与当前偏移位置的和,如果是,向系统报错,结束当前数据存储流程,否则,执行步骤C2;C2、判断当前数据存储位置是否已超出存储区域结束扇区位置,如果是,令实际的当前数据存储位置为当前数据存储位置与存储区域的差,然后执行步骤C3,否则,直接执行步骤C3;C3、判断是否完成当前数据存储,如果是,将起始标志存储于偏移位置之后第一个块的第一个扇区,结束当前数据存储流程,否则,返回执行步骤C1。
12.根据权利要求2或6所述的方法,其特征在于,所述步骤C之后进一步包括D、读取存储的数据。
13.根据权利要求12所述的方法,其特征在于,所述步骤D进一步包括以下步骤D1、搜索用于标识数据存储起始位置的起始标志扇区,读取起始标志扇区中存储的起始标志和当前读取的数据长度;D2、读取存储的数据时,判断当前数据读取位置是否已超出存储区域结束扇区位置,如果是,令实际的当前数据读取位置为当前数据读取位置与存储区域的差,然后执行步骤D3,否则,直接执行步骤D3;D3、判断是否完成当前数据读取,如果是,结束当前数据读取流程,否则,返回执行步骤D1。
14.根据权利要求2、6或13所述的方法,其特征在于,所述起始标志扇区存储有用于标识起始标志的扇区识别字符串和当前存储数据的长度。
15.根据权利要求1所述的方法,其特征在于,所述步骤A包括将存储区域划分为20至200个块。
全文摘要
本发明公开了一种磁盘存储方法,该方法包含将存储区域划分为一个以上的块;当前数据存储起始位置相对原数据存储位置偏移一个或一个以上的块作为当前偏移位置;以所述当前偏移位置开始进行数据存储。根据本发明提出的方法,将存储有起始标志的扇区作为在磁盘中存储数据时的起始位置,通过不断改变磁盘的数据存储起始位置,保证对磁盘的存储操作不会总在同一扇区,实现对磁盘的均衡存储访问,从而有效延长磁盘的使用寿命。另外,读取数据时,通过搜索起始标志扇区,找到存储数据的起始位置,然后对数据进行读取,从而保证数据读取的正确性。
文档编号G11B5/09GK1595523SQ0315679
公开日2005年3月16日 申请日期2003年9月12日 优先权日2003年9月12日
发明者赵明, 陈卫华 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1