存储装置的容量检测方法
【技术领域】
本发明涉及存储领域,尤其是涉及一种存储装置的容量检测方法。
【背景技术】
目前,闪存(FlashMemory,简称Flash)的运用非常广泛,用闪存制造出来的存储装置或产品有很多。这些存储装置或产品中闪存的成本比重非常大,一般可以达到70%-80%,甚至可以达到90%以上。以TF卡(Trans-FLashCard,又名MicroSecureDigitalMemoryCard)为例,目前8GB的价格大约在25-40元之间,其中8GB的Flash价格即为22-28元左右,所占比重达到80%以上。因此如何控制Flash价格,成了Flash存储装置生产厂商的利润关键点,甚至是厂商是否能够生存的根本。
用户在使用闪存设备时,通常不会注意自己已经使用了多少容量,并且也不会在短期内将该存储装置的容量用完。以一个16G的U盘为例,很少有用户将这16G的容量全部装满,通常都是写一些数据到U盘后,又会删除一部分数据,这样容量一直不会达到16G,甚至不会超过10G,并且用户也会经常格式化U盘中的数据,这样U盘又会变成一个新的盘。总体来讲,对于大部分用户来说,其真正使用的存储装置的容量一般比该存储装置的总容量小很多。
基于用户的上述使用习惯,有些不法厂商可能会将低容量的Flash做成高容量的存储装置,比如用4G的Flash做成一个8G或16G的存储装置以获得较高非法收益,但实际是其存储的空间仍然只有4GB。
为了鉴别闪存装置的容量是否真实,目前的常用容量检测方法一般是:将测试数据写入该闪存装置的一个地址中,之后再从该闪存装置的该地址中读出测试数据,随后判断写入的测试数据和读出的测试数据是否一致,如果一致,则表示该地址是真实的;随后判断下一个地址是否真实。然而,这样的读写式容量检测方法非常耗时,例如一张512M升级为4G的卡(其真实容量为512M,而标记的容量为4G),假设读速度为12M/S,写速度为5M/S,那么需要的总测试时间=512/5+512/12≈146(秒),而如果是4G升级为8G/16G的卡(其真实容量为4G,而标记的容量为8G/16G),需要的总测试时间就是146s*4096M/512M=1168s=20分钟,并且随着容量的进一步增大,耗时会更长,这种速度明显是不能忍受的。
此外,有些不法厂商会在技术上也做了很多的改进,这让这种普通的读写容量检测方法也无法查出来其真实的容量,比如采用了空间地址映射的方法就可以使得上述读写容量检测方法无效。以4G升级到16G为例,其可以将4G的空间重复映射多次后可以得到16G的逻辑地址,这样无论写入哪个地址,在从该地址读出数据后,比较写入的数据和读出的数据都会发现两者是一致的,从而通过容量检测。然而事实上,假如写入该闪存装置的总数据超过4G后,随后存入的数据会覆盖掉之前已经存储的数据。
因此,确有必要提出一种改进的容量检测方法来克服上述问题。
【发明内容】
本发明提出一种存储装置的容量检测方法,其可以快速的检测出所述存储装置的容量是否真实。
为了解决上述问题,根据本发明的一个方面,本发明提供了一种存储装置的容量检测方法,其包括:将不同的源数据写入所述存储装置的多个目标地址,其中各个目标地址中写入的源数据均互不相同;从所述存储装置的各个目标地址中读取数据,将从每个目标地址中读取的数据与写入对应目标地址的数据进行对比以确定它们是否一致,如果读取的数据与写入的数据不都一致,则认为所述存储装置的容量不真实。
进一步的,如果读取的数据与写入的数据都一致,则继续进行如下操作:步骤A,将所述存储装置二分得到两个待分析存储区;步骤B,从每个待分析存储区的一个地址处读取数据,将从每个待分析存储区中读取的数据与所有的源数据逐一进行对比,将从其内读取的数据的部分或全部与所有源数据中的一个相同的待分析存储区称为映射存储区,将从其内读取的数据的部分或全部与所有源数据都不相同的待分析存储区称为准真实存储区,如果此次对比发现有映射存储区,则认为所述存储装置的容量不真实,如果此次对比没有发现有映射存储区,则进入步骤C;步骤C,判断是否是连续N次判定没有映射存储区,若是,则认为所述存储装置的容量是真实的,若否,则继续对每个准真实存储区再次二分得到多个待分析存储区,并返回步骤B,N大于等于1。
进一步的,如果读取的数据与写入的数据都一致,则继续进行如下操作:步骤A,将所述存储装置二分得到两个待分析存储区;步骤B,从每个待分析存储区的一个地址处读取数据,将从每个待分析存储区中读取的数据与所有的源数据逐一进行对比,将从其内读取的数据的部分或全部与所有源数据中的一个相同的待分析存储区称为映射存储区,将从其内读取的数据的部分或全部与所有源数据都不相同的待分析存储区称为准真实存储区,如果此次对比发现有映射存储区,则认为所述存储装置的容量不真实,进入步骤D,如果此次对比没有发现有映射存储区,则进入步骤C;步骤C,判断是否是连续N次判定没有映射存储区,若是,则根据所述准真实存储区的容量确定所述存储装置的真实容量,若否,则继续对每个准真实存储区再次二分得到多个待分析存储区,并返回步骤B,N大于等于1;步骤D,继续对对每个准真实存储区再次二分得到多个待分析存储区,并返回步骤B。
与现有技术相比,本发明中的容量检测方法中,不需要对每个地址都进行读写检验,而是抽取相间隔的地址进行读写检验,这样速度大大加快,并且准确度并未显著降低。
进一步的,本发明中的容量检测方法,也同时结合了二分映射检验方法,这样可以检验出更为先进的作弊手段,使得容量检测更为准确。
关于本发明的其他目的,特征以及优点,下面将结合附图在具体实施方式中详细描述。
【附图说明】
结合参考附图及接下来的详细描述,本发明将更容易理解,其中同样的附图标记对应同样的结构部件,其中:
图1为本发明中的存储装置的容量检测方法的应用架构示例;
图2为本发明中的存储装置的容量检测方法在一个实施例中的流程示意图;
图3为本发明中的存储装置的容量检测方法在另一个实施例中的流程示意图;
图4为本发明中的向存储装置的多个目标地址写入不同源数据的示意图;
图5为本发明中写入所述存储装置的一个目标地址中的源数据的示例;
图6为本发明中将所述存储装置多次二分得到多个待分析存储区的一个示例图;和
图7为本发明中将所述存储装置多次二分得到多个待分析存储区的另一个示例图。
【具体实施方式】
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明的详细描述主要通过程序、步骤、逻辑块、过程或其他象征性的描述来呈现,其直接或间接地模拟本发明中的技术方案的运作。所属领域内的技术人员使用此处的这些描述和陈述向所属领域内的其他技术人员有效的介绍他们的工作本质。
此处所称的“一个实施例”或“实施例”是指与所述实施例相关的特定特征、结构或特性至少可包含于本发明至少一个实现方式中。在本说明书中不同地方出现的“在一个实施例中”并非必须都指同一个实施例,也不必须是与其他实施例互相排斥的单独或选择实施例。此外,表示一个或多个实施例的方法、流程图或功能框图中的模块顺序并非固定的指代任何特定顺序,也不构成对本发明的限制。
在一个实施例中,本发明提供一种存储装置的容量检测方法,其可以对存储装置进行容量检测,可以确定其容量是否真实,也可以确定其真实的容量大小。图1示出了所述容量检测方法的应用架构,在该架构中,容量检测装置110对存储装置120的容量进行检测,所述容量检测装置110可以是一条通用计算机,也可以是专门的计算设备。
所述存储装置的存储介质可以为闪存(FlashMemory),比如所述存储装置可以为TF卡、SD卡(SecurityDigitalCard)和多媒体数字卡(Multi-MediaCard),也可以是USB闪存盘(USBFlashDisk),还可以是固态硬盘等。
图2为本发明在一个实施例中的存储装置的容量检测方法200的流程示意图。如图2所示,所述容量检测方法200包括如下操作或步骤。
步骤201,容量检测装置110将不同的源数据写入所述存储装置120的多个目标地址,其中各个目标地址中写入的源数据均互不相同。
如图4所示,其示出了向所述存储装置的多个目标地址写入不同源数据的示意图,图中示意出了m个源数据,m个目标地址,源数据1写入目标地址1,源数据m写入目标地址m,其中m可以根据需要设定,比如30,50或者其他数值,带影阴线的部分是源数据写入对应目标地址后形象示意。在一个实施例中,各个目标地址之间的容量间距是相同的,即各个目标地址是在存储装置中均匀分布的。当然,在其他实施例中,也可以不完全均分分布,即各个目标地址之间的容量间距可以不同。假如m值一定,那么所述容量间距与所述存储装置的总容量有关,所述存储装置的容量越大,所述容量间距越大。
在本发明中,写入每个目标地址中的源数据都是互不相同的,这样才能使得后续的各种判断有效。在一个实施例中,图5示出了写入所述存储装置的一个目标地址中的源数据的示例,其中所述源数据包括生产商信息、写次数和随机数,其中写次数和随机数每次写后都会发生变化,这样可以保证写入每个目标地址中的源数据都是互不相同的。各个源数据可以是由容量检测装置110生成的。
在一个具体的示例中,写入每个目标地址的源数据大小为1个Cluster。假如1Cluster=4K,1Sector=512Bytes,那么1Cluster=8Sectors,1Sector的具体值可以如下:
1Sector=Fixed1+Write_Counter+Random+Fixed2,
(1)Fixed1为生产商信息,大小为4Bytes;
(2)Write_Counter,每写一次递增1,大小为4Bytes;
(3)Random,其可以是由容量检测装置110产生的随机数,大小为4Bytes。
(4)Fixed2,自定义数据,例如0x55,大小为500Bytes。
所述容量检测装置110在将不同的源数据写入所述存储装置的多个目标地址后,其仍然保留着写入各个目标地址的源数据以备后续对比。
步骤202,所述容量检测装置110从所述存储装置120的各个目标地址中读取数据。换句话说,此步骤希望从原来写入源数据的地址处再重新数据读出。
步骤203,所述容量检测装置110将从每个目标地址中读取的数据与写入对应目标地址的数据进行对比以确定它们是否一致。
具体来讲,参照图4所示,将写入目标地址1的数据与从目标地址1读取的数据进行对比,……,将写入目标地址m的数据与从目标地址m读取的数据进行对比。此处的一致是指相同,正常来讲,写入一个地址的数据与从对应地址读取的数据应该是相同的,如果不同则说明所述存储装置120的容量必定有假。
如果读取的数据与写入的数据都一致,即没有一组互相对应的数据(比如将写入目标地址m的数据与从目标地址m读取的数据称之为一组互相对应的数据)不一致,则所述方法200进入步骤204。如果读取的数据与写入的数据不都一致,即只要有一组互相对应的数据不一致,则所述方法进入步骤211,判定所述存储装置的容量不真实,即其真实容量与标定容量不一致的存储装置,随后结束本方法。
步骤204,将所述存储装置120二分得到两个待分析存储区。
在一个实施例中,可以从所述存储装置120中的中间位置将其划分成两个待分析存储区,也可以不从所述存储装置120中的中间位置进行划分,比如3/5位置处。在如图6中的(a)所示的示例中,将一个存储装置从中间划分成了两个待分析存储区A1和A2。
步骤205,从每个待分析存储区的一个地址处读取数据。
在一个实施例中,从每个待分析存储区读取数据的地址可以是待分析存储区的中间位置,也可以是其他非中间位置。在一个示例中,每个目标地址处写入的源数据的大小可以根据需要确定,从每个待分析存储区中读取的数据的大小也可以根据需要确定,但是通常在每个目标地址处写入的源数据的大小小于等于从每个待分析存储区中读取的数据的大小,这样可以使得读取的数据的地址范围能够尽可能的盖住写入的源数据的地址范围,以使得容量判定的准确率更高效,比如写入源数据的大小为4K,读取的数据的大小为2M。图6的(a)、(b)和(c)中的阴影部分是读取区域的示意。
步骤206,将从每个待分析存储区中读取的数据与所有的源数据逐一进行对比,将从其内读取的数据的部分或全部与所有源数据中的一个相同的待分析存储区称为映射存储区,将从其内读取的数据的部分或全部与所有源数据都不相同的存储区称为准真实存储区。换句话说,如果从一个待分析存储区中读取的数据的部分或全部与所有源数据中的一个相同,那么可以将该待分析存储区称为映射存储区;如果从一个待分析存储区中读取的数据的部分或全部与所有源数据都不同,那么可以将该待分析存储区称为准真实存储区;
在一个实施例中,所有的源数据为上文中提到的写入多个目标地址的所有源数据,这里需要将从每个待分析存储区中读取的数据与所有的源数据中的每一个进行逐一对比。假如从待分析存储区X中读取的数据的部分或全部与其中一个源数据相同,则认为这里读取的数据中有部分或全部是由该源数据映射而来,因此认为该待分析存储区X为映射存储区;相反,如果从待分析存储区Y中读取的数据的部分或全部与每个源数据都不同,则认为该待分析存储区Y为准真实存储区。
由上文可知,通常在每个目标地址处写入的源数据的大小小于等于从每个待分析存储区中读取的数据的大小。在将从每个待分析存储区中读取的数据与所有的源数据其中的一个源数据进行对比时,如果读取的数据的大小大于写入的源数据的大小,则需要在读取的数据中搜索看是否能在其中找到与写入的源数据相同的数据,如果能找到,则认为读取的数据的部分或全部与所有源数据中的一个相同或一致。
在一个实施例中,步骤205中的从各个待分析存储区读取数据的地址与各个目标地址不同,这样可以防止步骤206中将不是映射存储区的待分析存储区误判为映射存储区。在另一个可替换的实施例中,如果从一个待分析存储区读取数据的地址与所述目标地址中的一个相同,则在步骤B中认为该待分析存储区是准真实存储区,而不是映射存储区。
步骤207,判断此次对比是否发现有映射存储区,如果是,则进入步骤211,判定所述存储装置的容量不真实,随后结束本方法,否则进入步骤208。
这里的“此次对比”是指最近的一次步骤206中的对比,需要知道的是流程是循环的步骤206可能被执行多次。
步骤208,判断是否是连续N次判定没有映射存储区,若是,进入步骤210,认为所述存储装置的容量是真实的,并结束本方法,若否,则进入步骤209,其中N大于等于1。其中,每经过一次步骤206和207至步骤208后,判定没有映射存储区的次数累加1。
步骤209,继续对每个准真实存储区再次二分得到多个待分析存储区,并返回步骤205,继续进行判断。如图6(b)所示,其为对存储装置第二次二分的示意图,其中A1被分成待分析存储区A11和A12,A2被划分成待分析存储区A21和A22,图6(c)为第三次二分的示意图,A11被分成待分析存储区A111和A112,A12被分成待分析存储区A121和A122等,图6中只示意出了三次二分,在其他示例中还可能有更多次的二分。
可以看出,所述容量检测方法200在检测到所述存储装置有不真实的容量后就终止,其主要目的是为了判断所述存储装置的容量是否真实,并未对所述存储装置的真实容量的大小进行判定。
图3为本发明的另一个实施例中的存储装置的容量检测方法300的流程示意图。所述容量检测方法300不仅可以判定出所述存储装置的容量是否真实,还可以在所述存储装置的容量不真实时判定出其真实容量。
所述容量检测方法300中的步骤301、302、304、305、306、307、308、309与所述容量检测方法200中的步骤201-209基本相同,这里不再重复描述,下面将重点描述两者的主要不同之处。
步骤303在判定读取的数据与对应的写入的数据不都一致后,认为所述存储装置的容量不真实,并进入步骤311。
步骤311,继续确定有哪些互相对应的数据一致,根据一致的那些互相对应的数据对应的目标地址判定所述存储装置的容量。
在一个实施例中,结合参考图4所示,假如从目标地址1到x读取的数据与写入目标地址1到x的数据均不一致,而从目标地址x到m读取的数据与写入目标地址x到m的数据均一致,那么根据目标地址x到m判定所述存储装置的容量。在此实施例中,假设一致的那些互相对应的数据对应目标地址是所述存储装置的真实地址。
在其他实施例中,也可以不使用该假设,而是直接将一致的那些互相对应的数据对应目标地址对应的存取区域(仍以上段的示例为例,即目标地址x到m对应的存取区域)作为所述存储装置的全部,随后进入步骤304,继续进行判断。
在步骤307中发现有映射存储区后,认为所述存储装置的容量不真实,同时进入步骤309。
在步骤308中是连续N次判定没有映射存储区时,进入步骤310。这里的连续N次是指,在步骤306中连续N次没有发现映射存储区,也就是说,只要在步骤306中有一次发现映射存储区,则会重新计数。
步骤310,根据最后一次确定的准真实存储区的容量确定所述存储装置的真实容量。
假如在所述方法300的执行过程中从未找到过映射存储区而进入步骤310,则可以直接将所述存储装置的标定容量记为其真实容量,当然此时据所述准真实存储区的容量确定所述存储装置的真实容量应该与其标定的容量相同。
下面将结合图7来说明一下所述方法300,如图7所示,(a)中示出了第一次二分,此时存储装置分成了A1和A2,在步骤306中认为A1被认为是映射存储区,A2被认为是准真实存储区。因此所述方法300由步骤307进入步骤309,在309中将A2划分为A21和A22,如7(b)所示。随后,继续在步骤306进行判断认为A21是映射存储区,A22是准真实存储区。再后所述方法300由步骤307进入步骤309,在309中将A22划分为A221和A222,如7(b)所示。假如后续在步骤306再次判断时A221和A222都是准真实存储区,并且以后的循环判断过程不再出现映射存储区,那么所述方法将进入步骤310。此时,最后一次确定的准真实存储区的总量总和应该是图7(c)中的A221+A222的容量。
本发明中的容量检测方法,不需要对每个地址都进行读写检验,而是抽取相间隔的地址进行读写检验,这样速度大大加快,并且准确度并未显著降低。进一步的,本发明中的容量检测方法,也同时结合了二分映射检验方法(步骤204-209的循环判定部分),这样可以检验出更为先进的作弊手段(比如映射的作弊手段),使得容量检测更为准确,同时检测速度也很快。
下面以一个具体的应用示例来说一下本发明相对于现有技术的速度优势。
以检测一张512M升级为4G的卡(其真实容量为512M,而标记的容量为4G)为例进行对比,假设读速度为12M/S,写速度为5M/S。
现有技术:那么需要的总测试时间=512/5+512/12≈146(秒)。
在本发明中,假设m=100,写入的每个源数据的大小为4k,从待分析存储区中读取的数据的大小为2M。
写入总大小=100*4K=400K,步骤301的写入总时间=400K/1024/5≈0.08;
步骤302读取的时间为:400K/1024/12≈0.03;
假如是512M升4G,经过二分四次即可判定出其真实容量(假设步骤308中的N=1),参考图7所示,A1为2G,A21为1G,A221为512M,而再将A221和A222二分一次即可进入步骤310进行容量判断。这样一共从存储装置中读取了10个次(其中第四次二分会读四次),那么读取的总大小为2M*10=20M。步骤305的读取时间为:20M/5=4秒。
这样,本发明中的总测试时间为4秒+0.11秒=4.11秒,比原来的时间146秒成数十倍的提高。并且,由于m的值可以设置的较大,因此抽样的密度也很大,误判率很低。
上文对本发明进行了足够详细的具有一定特殊性的描述。所属领域内的普通技术人员应该理解,实施例中的描述仅仅是示例性的,在不偏离本发明的真实精神和范围的前提下做出所有改变都应该属于本发明的保护范围。本发明所要求保护的范围是由所述的权利要求书进行限定的,而不是由实施例中的上述描述来限定的。