发明内容
本发明实施例提供了一种磁盘块检查方法及装置,可以减少磁盘访问次数,加快FSCK速度。
第一方面,本发明实施例提供了一种磁盘块检查方法,包括:
利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合;
利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中;
根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组;
根据所述被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第一方面,在第一种可能的实现方式中,所述Hash函数个数为一个以上,并且各个Hash函数之间没有相关性。
结合第一方面,在第二种可能的实现方式中,当所述第一磁盘块集合中的空闲的磁盘块数量大于非空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组;
当所述第一磁盘块集合中的非空闲的磁盘块数量大于空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为空闲磁盘块的Bloom Filter数组。
结合第二种可能的实现方式,在第三种可能的实现方式中,当非空闲的磁盘块数量与空闲的磁盘块数量之差小于第一数量阈值时,所述方法还包括:
利用哈希Hash函数将第一磁盘块集合的第二子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值;相应地,所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组和空闲磁盘块的Bloom Filter数组。
结合第一方面或第二种可能的实现方式,在第四种可能的实现方式中,当所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组时,所述根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组,根据所述被检查磁盘块是否属于所述至少一个Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块,包括:
判断所述被检查磁盘块的块号映射到所述非空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述非空闲磁盘块的Bloom Filter数组;
确定所述被检查磁盘块是空闲磁盘块。
结合第四种可能的实现方式,在第五种可能的实现方式中,如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第一方面或第二种可能的实现方式,在第六种可能的实现方式中,当所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组时,所述根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组,根据所述被检查磁盘块是否属于所述至少一个Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块,包括:
判断所述被检查磁盘块的块号映射到所述空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值的至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述空闲磁盘块的Bloom Filter数组;
确定所述被检查磁盘块是非空闲磁盘块。
结合第六种可能的实现方式,在第七种可能的实现方式中,如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第三种可能的实现方式,在第八种可能的实现方式中,当所述BloomFilter数组为非空闲磁盘块的Bloom Filter数组和空闲磁盘块的BloomFilter数组时,所述根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组,根据所述被检查磁盘块是否属于所述至少一个Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块,包括:
判断所述被检查磁盘块的块号映射到第一数组的位置的值,如果所述映射到的位置的值全部是所述第一特征值;
进一步判断所述被检查磁盘块的块号映射到相应的第二数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,确定所述被检查磁盘块属于所述第一数组;
其中,所述第一数组为非空闲磁盘块的Bloom Filter数组,所述第二数组为空闲磁盘块的Bloom Filter数组,或者所述第一数组为空闲磁盘块的Bloom Filter数组,所述第二数组为非空闲磁盘块的Bloom Filter数组。
结合第八种可能的实现方式,在第九种可能的实现方式中,如果所述被检查磁盘块的块号映射到所述第一数组的位置的值,和映射到所述第二数组的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
第二方面,本发明实施例提供了一种磁盘块检查装置,包括:
第一映射单元,用于利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合或非空闲磁盘块集合,将所述BloomFilter数组发送至第二映射单元;
第二映射单元,用于接收所述第一映射单元发送的所述Bloom Filter数组,利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中;
确定单元,用于根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组,以及根据被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第一方面,在第一种可能的实现方式中,所述第一映射单元中的所述Hash函数个数为一个以上,并且各个Hash函数之间没有相关性。
结合第一方面,在第二种可能的实现方式中,所述第一映射单元用于,
当所述第一磁盘块集合中的空闲的磁盘块数量大于非空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组;
当所述第一磁盘块集合中的非空闲的磁盘块数量大于空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为空闲磁盘块的Bloom Filter数组。
结合第二方面,在第三种可能的实现方式中,所述第一映射单元还用于,
当非空闲的磁盘块数量与空闲的磁盘块数量之差小于第一数量阈值时,利用哈希Ha s h函数将第一磁盘块集合的第二子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,相应地,所述Bloom Filter数组为非空闲磁盘块的BloomFilter数组和空闲磁盘块的Bloom Filter数组。
结合第一方面或第二种可能的实现方式,在第四种可能的实现方式中,
所述确定单元具体用于,判断所述被检查磁盘块的块号映射到所述非空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述非空闲磁盘块的Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块。
结合第四种可能的实现方式,在第五种可能的实现方式中,所述确定单元还用于,
如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第一方面或第二种可能的实现方式,在第六种可能的实现方式中,
所述确定单元具体用于,判断所述被检查磁盘块的块号映射到所述空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值的至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述空闲磁盘块的Bloom Filter数组确定所述被检查磁盘块是非空闲磁盘块。
结合第六种可能的实现方式,在第七种可能的实现方式中,所述确定单元还用于,
如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
结合第一方面或第三种可能的实现方式,在第八种可能的实现方式中,
所述确定单元具体用于,判断所述被检查磁盘块的块号映射到第一数组的位置的值,如果所述映射到的位置的值全部是所述第一特征值;
进一步判断所述被检查磁盘块的块号映射到相应的第二数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,确定所述被检查磁盘块属于所述第一数组,以及确定所述被检查磁盘块的状态与所述第一数组对应的磁盘块的状态相同;
其中,所述第一数组为非空闲磁盘块的Bloom Filter数组,所述第二数组为空闲磁盘块的Bloom Filter数组,或者所述第一数组为空闲磁盘块的Bloom Filter数组,所述第二数组为非空闲磁盘块的Bloom Filter数组。
结合第八种可能的实现方式,在第九种可能的实现方式中,所述确定单元还用于,
如果所述被检查磁盘块的块号映射到所述第一数组的位置的值,和映射到所述第二数组的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
本发明实施例中,通过利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合;利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中;根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组;根据所述被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。由此,可以看出,本发明实施例提供的方法只在建立Bloom Filter数组或无法判断时才进行读盘操作,并且每次读盘可以读出多个磁盘块的块号,并且不需要保存磁盘块检查信息,仅需要保存一个或两个数组,能大大减少内存消耗。再者,由于Bloom Filter数组是存储在内存中的,而对内存中的数据进行查询所需要的时间是基本恒定的,因此,对性能评估和时间统计非常方便。同时,也可以采用多个线程同时并行检查多个磁盘块,从而加快FSCK速度。现有技术都是直接对磁盘块进行操作,无法实现并行化。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明具体实施例作进一步的详细描述。
本发明实施例中,首先创建用于检查磁盘块的Bloom Filter数组(本实施例中简称为Bloom Filter数组),即通过利用Hash函数将第一磁盘块的块号映射到Bloom Filter数组中的第一位置,将所述第一位置的值置为第一特征值,所述Bloom Filter数组中所有位置的初值为第二特征值;利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中的第二位置;判断所述第二位置的值是否为所述第一特征值;根据判断结果确定所述被检查磁盘块是否空闲。由此,可以看出,本发明实施例提供的方法及装置只在建立Bloom Filter数组或无法判断时才进行读盘操作,并且每次读盘可以读出多个磁盘块的块号,并且不需要保存磁盘块检查信息,仅需要保存一个或两个数组,能大大减少内存消耗。再者,由于Bloom Filter数组是存储在内存中的,而对内存中的数据进行查询所需要的时间是基本恒定的,因此,对性能评估和时间统计非常方便。同时,也可以采用多个线程同时并行检查多个磁盘块,从而加快FSCK速度。现有技术都是直接对磁盘块进行操作,无法实现并行化。
需要说明的是,本发明实施例提供的方法和装置适用于文件系统FSCK的磁盘检查,也适用于FSCK的索引节点(inode)检查。
为使本发明实施例提供的方法和装置的原理易于理解,下面首先对其中应用到的布隆滤波器Bloom Filter的原理做简要介绍。
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。初始状态时,BloomFilter是一个包含m位的位数组,每一位都置为第二特征值(为叙述方便,本发明实施例中的第二特征值以0为例)。图2为Bloom Filter原理示意图。如图2所示,图2中的图(a)所示的为将位数组中各个位的值全部置为0。
对于已知的集合S={x1,…xj,…,xn},Bloom Filter使用k个没有相关性的Hash函数可以将集合中的每个元素映射到{1,…,m}的范围中(m的选取属于现有技术,在此不赘述)。即对任意一个元素xj,将其带入第i个Hash函数获得一个值hi(xj),则将m位数组中的第hi(xj)个位置的值置为1(1≤i≤k)(为叙述方便,这里取k=3)。如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。图2中的图(b)所示的为,将集合中的元素x1通过3个Hash函数映射到位数组中,即将x1分别带入3个Hash函数中所得到的值为2、5和9,因此,将位数组中的2位、第5位和第9位分别置为1,同样,通过3个Hash函数可以将x2映射到位数组中的第5位、7位和11位,将该3个位的值置为1。采用同样的方式,可以将集合中的所有元素映射到位数组中。这里假设集合中只有两个元素x1和x2,则图2中的图(b)所示的为映射完成的位数组。
图2中的图(c)所示的为,判断一个数值是否属于集合S的示意图,对于有y1,可以采用同样的方法,通过3个Hash函数将y1映射到位数组中,这里假设映射到了位数组中的第2位、第4和第7位,如果位数组中三个位的值都为1,那么我们就认为y1是集合中的元素,否则就认为y1不是集合中的元素。从图(c)中可以看出,位数组中三个位的值不全是1,因此,可以断定y1不是集合中的元素,而y2可能属于这个集合,但并不能确定y2是否真的属于该集合。
如果某个成员存在于集合中,那么Bloom Filter一定会返回真(即存在)。
如果Bloom Filter返回假(不存在),那么某成员一定不存在于集合中。
如果某个成员实际上不存在于集合中,Bloom Filter可能会返回真(即存在),这种情况被称为误判(false positive)。
需要说明的是,数组的大小、Hash函数的个数以及Hash的选取如何确定,属于现有技术范畴,在此不复赘述。
需要说明的是,Bloom Filter理论是基于位数组的,即用一个二进制位来表示数组中的值,但是本发明实施例中的Bloom Fi lter数组可以是位数组也可以是普通数组。如果采用位数组,则可以减小占用的内存空间。
本发明实施例根据上述Bloom Filter理论模型,创建用于检查磁盘块的Bloom Filter数组。
具体地,根据磁盘块的块号建立Bloom Filter数组,本发明实施例中,利用磁盘块的块号组成集合,并将集合中的每个元素通过Hash函数映射到Bloom Filter数组中,并将数组中相应位置的值置为第一特征值。
为了减小Bloom Filter数组的大小,可以根据磁盘块的数量和磁盘块的类型,确定建立Bloom Filter数组的数量,例如创建一个Bloom Filter数组或两个Bloom Filter数组,每建立一个数组,都需要一组Hash函数。
具体地,由于磁盘空间有两种状态:空闲和非空闲,即磁盘块集合包括两个子磁盘块集合,空闲磁盘块集合和非空闲磁盘块集合,因此,可以针对其中一个子磁盘块集合建立一个Bloom Filter数组,也可以对应的建立两个Bloom Filter数组,例如,当空闲的磁盘块数量与非空闲的磁盘块数量之差小于第一数量阈值时,说明空闲磁盘块数量与非空闲磁盘块数量相差不大,优选地,可以建立两个数组。此时,则所述磁盘块的块号包括:空闲的磁盘块的块号和非空闲的磁盘块的块号。所述Bloom Filter数组包括空闲BloomFilter数组和非空闲Bloom Filter数组。
图3为本发明实施例一提供的Bloom Filter数组建立过程示意图。如图3所示,将空闲磁盘块集合的每个块号通过第一组Hash函数(Hash函数1和Hash函数2)映射到空闲数组中,将映射到的位置的值置为第一特征值(为叙述方便,本发明实施例中的第一特征值取1,也可以取其他值),没有映射到的位置的值置为第二特征值(为叙述方便,本发明实施例中的第二特征值取0,也可以取其它值,只要跟第一特征值区分开即可),将非空闲磁盘块集合的每个块号通过第二组Hash函数(Hash函数1’和Hash函数2’)映射到非空闲数组中,将映射到的位置的值置为第一特征值。
需要说明的是,当建立了一个以上的数组时,每个数组中的第一特征值(或/和第二特征值)可以相同也可以不同,为叙述方便,本发明实施例中均假定不同数组中的第一特征值(或/和第二特征值)相同。
当空闲的磁盘块数量大于非空闲的磁盘块数量且与非空闲的磁盘块数量之差大于第一数量阈值时,说明空闲磁盘块的数量较多,因此可以针对非空闲磁盘集合建立数组,即所述磁盘块集合包括:非空闲的磁盘块的块号。所述Bloom Filter数组包括非空闲数组。具体过程与上面相同,在此不复赘述。
当非空闲的磁盘块数量大于非空闲的磁盘块数量且与空闲的磁盘块数量之差大于第一数量阈值时,说明非空闲磁盘块的数量较多,因此可以针对空闲磁盘块集合建立数组,则所述磁盘块集合包括:空闲的磁盘块的块号。所述Bloom Filter数组包括空闲数组。具体过程与上面相同,在此不复赘述。
其中,每组Hash函数个数为一个以上,一般选择2-4个,为叙述方便,图3中每组Hash函数以两个为例,但并不限于两个,并且各个Hash函数之间没有相关性。Bloom Filter数组大小可以为构建Bloom Filter数组所用的磁盘块数量的一半,也可以是其他值,Hash函数个数、哈希函数的选取以及Bloom Filter数组的大小的确定属于现有技术范畴,在此不复赘述。
需要说明的是,本发明实施例中的第一数量阈值可以根据实际需要设定。
需要说明的是,按照上述方法构建Bloom Filter数组时,可以先从空间管理模块读取空间分配位图(空间管理模块是位于磁盘上的一个模块,用于管理磁盘分配,并且可以通过该模块查询磁盘块的分配情况),遍历其中的每一个位,统计出所有空闲或/和非空闲的磁盘块的块号,以此建立相应的由空闲磁盘块的块号组成的集合或/和非由空闲磁盘块的块号组成的集合,然后再根据相应的集合建立相应的Bloom Filter数组。也可以事先不建立集合,而是每读一次位图(每读一次位图可以读出4K的位图,4K的位图能表示32768个磁盘块),根据位图所表示的磁盘块的分配情况,将相应磁盘块的块号映射到Bloom Filter数组中。从中可以看出,建立Bloom Filter数组时,由于一次读盘可以读出多个磁盘块的位图,相比于现有的每检查一个磁盘块都需要读一次磁盘,该方法大大减少了磁盘读取操作。
下述实施例描述的为利用Bloom Filter数组检查磁盘块是否空闲的方法流程。图4为本发明实施例一提供的磁盘块检查方法流程图。如图4所示,本发明实施例提供的方法包括:
S401,利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合。
具体地,当所述第一磁盘块集合中的空闲的磁盘块数量大于非空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为非空闲磁盘块的BloomFilter数组;
当所述第一磁盘块集合中的非空闲的磁盘块数量大于空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为空闲磁盘块的Bloom Filter数组。
当非空闲的磁盘块数量与空闲的磁盘块数量之差小于第一数量阈值时,利用哈希Hash函数将第一磁盘块集合的第二子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值;
相应地,所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组和空闲磁盘块的Bloom Filter数组。
该步骤的具体过程在上面已经详细阐述过,因此,这里不复赘述。
S402,利用所述Hash函数将被检查磁盘块的块号映射到所述BloomFilter数组中。
具体地,建立好Bloom Filter数组后,就可以利用该数组检查某个磁盘块是否空闲,即将被检查磁盘块的块号按照与建立Bloom Filter数组同样的Hash函数,将其映射到数组中,由于有多个Hash函数,因此,可能会将该被检查磁盘块的块的块号映射到Bloom Filter数组中的多个位置。
S403,根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组。
具体地,由于在S401中建立Bloom Filter数组时,将磁盘块的块号映射到Bloom Filter数组中时,将相应位置的值置为了第一特征值,因此,这里需要判断将被检查磁盘块的块的块号映射到Bloom Filter数组中的多个位置后,该多个位置的值是否为第一特征值,以此来判断被检查磁盘块是否属于所述Bloom Filter数组,由于Bloom Filter数组有三种情况,因此,这里对应三种判断方法,具体过程将在下面结合S404一起阐述。
S404,根据所述被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
具体地,由于S401中建立Bloom Filter数组时有三种情况,因此,下面分情况进行阐述:
当所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组时,判断所述被检查磁盘块的块号映射到所述非空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述非空闲磁盘块的Bloom Filter数组;确定所述被检查磁盘块是空闲磁盘块。如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
当所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组时,判断所述被检查磁盘块的块号映射到所述空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值的至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述空闲磁盘块的Bloom Filter数组;确定所述被检查磁盘块是非空闲磁盘块。如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
当所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组和空闲磁盘块的Bloom Filter数组时,判断所述被检查磁盘块的块号映射到第一数组的位置的值,如果所述映射到的位置的值全部是所述第一特征值;
进一步判断所述被检查磁盘块的块号映射到相应的第二数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,确定所述被检查磁盘块属于所述第一数组;其中,所述第一数组为非空闲磁盘块的Bloom Filter数组,所述第二数组为空闲磁盘块的Bloom Filter数组,或者所述第一数组为空闲磁盘块的Bloom Filter数组,所述第二数组为非空闲磁盘块的Bloom Filter数组。如果所述被检查磁盘块的块号映射到所述第一数组的位置的值,和映射到所述第二数组的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
本发明实施例中,通过利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合;利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中;根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组;根据所述被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。由此,可以看出,本发明实施例提供的方法只在建立Bloom Filter数组或无法判断时才进行读盘操作,并且每次读盘可以读出多个磁盘块的块号,并且不需要保存磁盘块检查信息,仅需要保存一个或两个数组,能大大减少内存消耗。再者,由于Bloom Filter数组是存储在内存中的,而对内存中的数据进行查询所需要的时间是基本恒定的,因此,对性能评估和时间统计非常方便。同时,也可以采用多个线程同时并行检查多个磁盘块,从而加快FSCK速度。现有技术都是直接对磁盘块进行操作,无法实现并行化。
相应地,本发明实施例提供了一种磁盘块检查装置。图5为本发明实施例二提供的磁盘块检查装置示意图。如图5所示,本发明实施例提供的装置包括:第一映射单元501、第二映射单元502和确定单元503。
第一映射单元501,用于利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述Bloom Filter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合,将所述Bloom Filter数组发送至第二映射单元502。
第二映射单元502,用于接收所述第一映射单元501发送的所述BloomFilter数组,利用所述Hash函数将被检查磁盘块的块号映射到所述BloomFilter数组中。
确定单元503,用于根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组,以及根据被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
其中,所述装置中的所述Hash函数个数为一个以上,并且各个Hash函数之间没有相关性,Hash函数个数、选取哪些哈希函数以及Bloom Filter数组的大小的确定属于现有技术范畴,在此不复赘述。
具体地,所述第一映射单元501用于,
当所述第一磁盘块集合中的空闲的磁盘块数量大于非空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为非空闲磁盘块的Bloom Filter数组;
当所述第一磁盘块集合中的非空闲的磁盘块数量大于空闲的磁盘块数量且两者之差大于第一数量阈值时,则所述第一子磁盘块集合为非空闲磁盘块集合,相应地,所述Bloom Filter数组为空闲磁盘块的Bloom Filter数组。
所述第一映射单元501还用于,
当非空闲的磁盘块数量与空闲的磁盘块数量之差小于第一数量阈值时,利用哈希Hash函数将第一磁盘块集合的第二子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,相应地,所述Bloom Filter数组为非空闲磁盘块的BloomFilter数组和空闲磁盘块的Bloom Filter数组。
所述确定单元503具体用于,判断所述被检查磁盘块的块号映射到所述非空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述非空闲磁盘块的Bloom Filter数组;确定所述被检查磁盘块是空闲磁盘块。如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
所述确定单元503具体用于,判断所述被检查磁盘块的块号映射到所述空闲磁盘块的Bloom Filter数组的位置的值,如果所述映射到的位置的值的至少有一个不是所述第一特征值,判断所述被检查磁盘块不属于所述空闲磁盘块的Bloom Filter数组,确定所述被检查磁盘块是非空闲磁盘块。如果所述映射到的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
所述判断单元503具体用于,判断所述被检查磁盘块的块号映射到第一数组的位置的值,如果所述映射到的位置的值全部是所述第一特征值;
进一步判断所述被检查磁盘块的块号映射到相应的第二数组的位置的值,如果所述映射到的位置的值至少有一个不是所述第一特征值,确定所述被检查磁盘块属于所述第一数组,确定所述被检查磁盘块的状态与所述第一数组对应的磁盘块的状态相同。
其中,所述第一数组为非空闲磁盘块的Bloom Filter数组,所述第二数组为空闲磁盘块的Bloom Filter数组,或者所述第一数组为空闲磁盘块的Bloom Filter数组,所述第二数组为非空闲磁盘块的Bloom Filter数组。如果所述被检查磁盘块的块号映射到所述第一数组的位置的值,和映射到所述第二数组的位置的值都是所述第一特征值,则到空间管理模块去查询所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。
需要说明的是,本发明实施例中的装置植入了实施例一中的方法,因此,各个单元的工作过程与实施例一中的方法相同,在此不复赘述。
本发明实施例中,第一映射单元通过利用哈希Hash函数将第一磁盘块集合的第一子磁盘块集合的每个块号映射到布隆滤波器Bloom Filter数组中,将所述每个块号映射到的位置的值由初始值置为第一特征值,所述BloomFilter数组中所有位置的初始值为第二特征值,所述第一磁盘块集合包括两个子磁盘块集合,所述两个子磁盘块集合为空闲磁盘块集合和非空闲磁盘块集合;第二映射单元利用所述Hash函数将被检查磁盘块的块号映射到所述Bloom Filter数组中;确定单元根据所述被检查磁盘块的块号映射到的位置的值,判断所述被检查磁盘块是否属于所述Bloom Filter数组;以及根据所述被检查磁盘块是否属于所述Bloom Filter数组,确定所述被检查磁盘块是空闲磁盘块还是非空闲磁盘块。由此,可以看出,本发明实施例提供的装置只在建立Bloom Filter数组或无法判断时才进行读盘操作,并且每次读盘可以读出多个磁盘块的块号,并且不需要保存磁盘块检查信息,仅需要保存一个或两个数组,能大大减少内存消耗。再者,由于Bloom Filter数组是存储在内存中的,而对内存中的数据进行查询所需要的时间是基本恒定的,因此,对性能评估和时间统计非常方便。同时,也可以采用多个线程同时并行检查多个磁盘块,从而加快FSCK速度。现有技术都是直接对磁盘块进行操作,无法实现并行化。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。