專利名稱:磁盤塊檢查方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種磁盤塊檢查方法及裝置。
背景技術(shù):
計(jì)算機(jī)中的文件系統(tǒng)一般會(huì)處于兩種狀態(tài)之一:清潔的(clean)或者臟的(dirty)。如果要在磁盤分區(qū)上掛載一個(gè)文件系統(tǒng),這個(gè)文件系統(tǒng)必須是clean的,也就是說是結(jié)構(gòu)完整的,元數(shù)據(jù)之間、元數(shù)據(jù)和數(shù)據(jù)之間是一致的。但有時(shí)文件系統(tǒng)的一致性可能被破壞,如系統(tǒng)掉電時(shí),內(nèi)存中的數(shù)據(jù)會(huì)丟失,或者由于磁盤發(fā)生故障,如磁盤壞道等,都會(huì)破壞文件系統(tǒng)數(shù)據(jù)的一致性。為了檢查和維護(hù)不一致的文件系統(tǒng),文件系統(tǒng)會(huì)提供磁盤塊檢查(FilesystemCheck,F(xiàn)SCK)工具來方便用戶檢查和修復(fù)文件系統(tǒng)。FSCK有一個(gè)重要步驟:遍歷文件系統(tǒng)中所有文件對(duì)應(yīng)的數(shù)據(jù)塊是否空閑,即文件使用的數(shù)據(jù)塊是否是已被成功分配的。圖1為現(xiàn)有的文件系統(tǒng)FSCK示意圖。如圖1所示,一個(gè)文件可能由多個(gè)數(shù)據(jù)塊構(gòu)成,在檢查時(shí)必須對(duì)每個(gè)數(shù)據(jù)塊找到它在磁盤上的位置,并查詢?cè)摯疟P塊是否被分配出來了。當(dāng)文件較大時(shí),該檢查步驟是非常耗時(shí)的,因?yàn)樗枰l繁的讀磁盤,會(huì)大大降低FSCK的效率。特別是對(duì)于重刪文件系統(tǒng),由于其一個(gè)文件常常對(duì)應(yīng)著大量數(shù)據(jù)塊(多達(dá)數(shù)億),該步驟會(huì)消耗非常長(zhǎng)的時(shí)間。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種磁盤塊檢查方法及裝置,可以減少磁盤訪問次數(shù),加快FSCK速度。第一方面,本發(fā)明實(shí)施例提供了一種磁盤塊檢查方法,包括:利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合;利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組;根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述Hash函數(shù)個(gè)數(shù)為一個(gè)以上,并且各個(gè)Hash函數(shù)之間沒有相關(guān)性。結(jié)合第一方面,在第二種可能的實(shí)現(xiàn)方式中,當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的BloomFilter 數(shù)組;
當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù)量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。結(jié)合第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),所述方法還包括:利用哈希Hash函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值;相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的Bloom Filter 數(shù)組。結(jié)合第一方面或第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,當(dāng)所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括:判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組;確定所述被檢查磁盤塊是空閑磁盤塊。結(jié)合第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第一方面或第二種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,當(dāng)所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括:判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組;確定所述被檢查磁盤塊是非空閑磁盤塊。結(jié)合第六種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第三種可能的實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,當(dāng)所述BloomFilter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的BloomFilter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括:判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值;進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第
一數(shù)組;其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。結(jié)合第八種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。第二方面,本發(fā)明實(shí)施例提供了一種磁盤塊檢查裝置,包括:第一映射單元,用于利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合或非空閑磁盤塊集合,將所述BloomFilter數(shù)組發(fā)送至第二映射單元;第二映射單元,用于接收所述第一映射單元發(fā)送的所述Bloom Filter數(shù)組,利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;確定單元,用于根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,以及根據(jù)被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述第一映射單元中的所述Hash函數(shù)個(gè)數(shù)為一個(gè)以上,并且各個(gè)Hash函數(shù)之間沒有相關(guān)性。結(jié)合第一方面,在第二種可能的實(shí)現(xiàn)方式中,所述第一映射單元用于,當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組;當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù)量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。結(jié)合第二方面,在第三種可能的實(shí)現(xiàn)方式中,所述第一映射單元還用于,當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),利用哈希Ha s h函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器BloomFilter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的BloomFilter數(shù)組和空閑磁盤塊的Bloom Filter數(shù)組。結(jié)合第一方面或第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊。結(jié)合第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述確定單元還用于,如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第一方面或第二種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組確定所述被檢查磁盤塊是非空閑磁盤塊。結(jié)合第六種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述確定單元還用于,如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。結(jié)合第一方面或第三種可能的實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值;進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第一數(shù)組,以及確定所述被檢查磁盤塊的狀態(tài)與所述第一數(shù)組對(duì)應(yīng)的磁盤塊的狀態(tài)相同;其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。結(jié)合第八種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,所述確定單元還用于,如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。本發(fā)明實(shí)施例中,通過利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合;利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組;根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。由此,可以看出,本發(fā)明實(shí)施例提供的方法只在建立Bloom Filter數(shù)組或無(wú)法判斷時(shí)才進(jìn)行讀盤操作,并且每次讀盤可以讀出多個(gè)磁盤塊的塊號(hào),并且不需要保存磁盤塊檢查信息,僅需要保存一個(gè)或兩個(gè)數(shù)組,能大大減少內(nèi)存消耗。再者,由于Bloom Filter數(shù)組是存儲(chǔ)在內(nèi)存中的,而對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行查詢所需要的時(shí)間是基本恒定的,因此,對(duì)性能評(píng)估和時(shí)間統(tǒng)計(jì)非常方便。同時(shí),也可以采用多個(gè)線程同時(shí)并行檢查多個(gè)磁盤塊,從而加快FSCK速度?,F(xiàn)有技術(shù)都是直接對(duì)磁盤塊進(jìn)行操作,無(wú)法實(shí)現(xiàn)并行化。
圖1為現(xiàn)有的文件系統(tǒng)FSCK示意圖;圖2為Bloom Filter原理不意圖;圖3為本發(fā)明實(shí)施例一提供的Bloom Filter數(shù)組建立過程示意圖;圖4為本發(fā)明實(shí)施例一提供的磁盤塊檢查方法流程圖;圖5為本發(fā)明實(shí)施例二的磁盤塊檢查裝置示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例作進(jìn)一步的詳細(xì)描述。本發(fā)明實(shí)施例中,首先創(chuàng)建用于檢查磁盤塊的Bloom Filter數(shù)組(本實(shí)施例中簡(jiǎn)稱為Bloom Filter數(shù)組),即通過利用Hash函數(shù)將第一磁盤塊的塊號(hào)映射到Bloom Filter數(shù)組中的第一位置,將所述第一位置的值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初值為第二特征值;利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述BloomFilter數(shù)組中的第二位置;判斷所述第二位置的值是否為所述第一特征值;根據(jù)判斷結(jié)果確定所述被檢查磁盤塊是否空閑。由此,可以看出,本發(fā)明實(shí)施例提供的方法及裝置只在建立Bloom Filter數(shù)組或無(wú)法判斷時(shí)才進(jìn)行讀盤操作,并且每次讀盤可以讀出多個(gè)磁盤塊的塊號(hào),并且不需要保存磁盤塊檢查信息,僅需要保存一個(gè)或兩個(gè)數(shù)組,能大大減少內(nèi)存消耗。再者,由于Bloom Filter數(shù)組是存儲(chǔ)在內(nèi)存中的,而對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行查詢所需要的時(shí)間是基本恒定的,因此,對(duì)性能評(píng)估和時(shí)間統(tǒng)計(jì)非常方便。同時(shí),也可以采用多個(gè)線程同時(shí)并行檢查多個(gè)磁盤塊,從而加快FSCK速度?,F(xiàn)有技術(shù)都是直接對(duì)磁盤塊進(jìn)行操作,無(wú)法實(shí)現(xiàn)并行化。需要說明的是,本發(fā)明實(shí)施例提供的方法和裝置適用于文件系統(tǒng)FSCK的磁盤檢查,也適用于FSCK的索引節(jié)點(diǎn)(inode)檢查。為使本發(fā)明實(shí)施例提供的方法和裝置的原理易于理解,下面首先對(duì)其中應(yīng)用到的布隆濾波器Bloom Filter的原理做簡(jiǎn)要介紹。Bloom Filter是一種空間效率很高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),它利用位數(shù)組很簡(jiǎn)潔地表示一個(gè)集合,并能判斷一個(gè)元素是否屬于這個(gè)集合。初始狀態(tài)時(shí),BloomFilter是一個(gè)包含m位的位數(shù)組,每一位都置為第二特征值(為敘述方便,本發(fā)明實(shí)施例中的第二特征值以O(shè)為例)。圖2為Bloom Filter原理示意圖。如圖2所示,圖2中的圖(a)所示的為將位數(shù)組中各個(gè)位的值全部置為O。對(duì)于已知的集 合S= {xl,...xj,..., xn}, Bloom Filter使用k個(gè)沒有相關(guān)性的Hash函數(shù)可以將集合中的每個(gè)元素映射到{1,-,m}的范圍中(m的選取屬于現(xiàn)有技術(shù),在此不贅述)。即對(duì)任意一個(gè)元素xj,將其帶入第i個(gè)Hash函數(shù)獲得一個(gè)值hi (xj),則將m位數(shù)組中的第hi (xj)個(gè)位置的值置為I (I彡i彡k)(為敘述方便,這里取k=3)。如果一個(gè)位置多次被置為1,那么只有第一次會(huì)起作用,后面幾次將沒有任何效果。圖2中的圖(b)所示的為,將集合中的元素xl通過3個(gè)Hash函數(shù)映射到位數(shù)組中,即將xl分別帶入3個(gè)Hash函數(shù)中所得到的值為2、5和9,因此,將位數(shù)組中的2位、第5位和第9位分別置為1,同樣,通過3個(gè)Hash函數(shù)可以將x2映射到位數(shù)組中的第5位、7位和11位,將該3個(gè)位的值置為I。采用同樣的方式,可以將集合中的所有元素映射到位數(shù)組中。這里假設(shè)集合中只有兩個(gè)元素xl和x2,則圖2中的圖(b)所示的為映射完成的位數(shù)組。圖2中的圖(C)所示的為,判斷一個(gè)數(shù)值是否屬于集合S的示意圖,對(duì)于有yl,可以采用同樣的方法,通過3個(gè)Hash函數(shù)將yl映射到位數(shù)組中,這里假設(shè)映射到了位數(shù)組中的第2位、第4和第7位,如果位數(shù)組中三個(gè)位的值都為1,那么我們就認(rèn)為yl是集合中的元素,否則就認(rèn)為yl不是集合中的元素。從圖(c)中可以看出,位數(shù)組中三個(gè)位的值不全是I,因此,可以斷定yl不是集合中的元素,而12可能屬于這個(gè)集合,但并不能確定y2是否真的屬于該集合。如果某個(gè)成員存在于集合中,那么Bloom Filter—定會(huì)返回真(即存在)。如果Bloom Filter返回假(不存在),那么某成員一定不存在于集合中。如果某個(gè)成員實(shí)際上不存在于集合中,Bloom Filter可能會(huì)返回真(即存在),這種情況被稱為誤判(false positive)。需要說明的是,數(shù)組的大小、Hash函數(shù)的個(gè)數(shù)以及Hash的選取如何確定,屬于現(xiàn)有技術(shù)范疇,在此不復(fù)贅述。需要說明的是,Bloom Filter理論是基于位數(shù)組的,即用一個(gè)二進(jìn)制位來表示數(shù)組中的值,但是本發(fā)明實(shí)施例中的Bloom Fi Iter數(shù)組可以是位數(shù)組也可以是普通數(shù)組。如果采用位數(shù)組,則可以減小占用的內(nèi)存空間。本發(fā)明實(shí)施例根據(jù)上述Bloom Filter理論模型,倉(cāng)Il建用于檢查磁盤塊的BloomFilter 數(shù)組。具體地,根據(jù)磁盤塊的塊號(hào)建立Bloom Filter數(shù)組,本發(fā)明實(shí)施例中,利用磁盤塊的塊號(hào)組成集合,并將集合中的每個(gè)元素通過Hash函數(shù)映射到Bloom Filter數(shù)組中,并將數(shù)組中相應(yīng)位置的值置為第一特征值。為了減小Bloom Filter數(shù)組的大小,可以根據(jù)磁盤塊的數(shù)量和磁盤塊的類型,確定建立Bloom Filter數(shù)組的數(shù)量,例如創(chuàng)建一個(gè)Bloom Filter數(shù)組或兩個(gè)Bloom Filter數(shù)組,每建立一個(gè)數(shù)組,都需要一組Hash函數(shù)。具體地,由于磁盤空間有兩種狀態(tài):空閑和非空閑,即磁盤塊集合包括兩個(gè)子磁盤塊集合,空閑磁盤塊集合和非空閑磁盤塊集合,因此,可以針對(duì)其中一個(gè)子磁盤塊集合建立一個(gè)Bloom Filter數(shù)組,也可以對(duì)應(yīng)的建立兩個(gè)Bloom Filter數(shù)組,例如,當(dāng)空閑的磁盤塊數(shù)量與非空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),說明空閑磁盤塊數(shù)量與非空閑磁盤塊數(shù)量相差不大,優(yōu)選地,可以建立兩個(gè)數(shù)組。此時(shí),則所述磁盤塊的塊號(hào)包括:空閑的磁盤塊的塊號(hào)和非空閑的磁盤塊的塊號(hào)。所述Bloom Filter數(shù)組包括空閑BloomFilter數(shù)組和非空閑Bloom Filter數(shù)組。圖3為本發(fā)明實(shí)施例一提供的Bloom Filter數(shù)組建立過程示意圖。如圖3所示,將空閑磁盤塊集合的每個(gè)塊號(hào)通過第一組Hash函數(shù)(Hash函數(shù)I和Hash函數(shù)2)映射到空閑數(shù)組中,將映射到的位置的值置為第一特征值(為敘述方便,本發(fā)明實(shí)施例中的第一特征值取1,也可以取其他值),沒有映射到的位置的值置為第二特征值(為敘述方便,本發(fā)明實(shí)施例中的第二特征值取0,也可以取其它值,只要跟第一特征值區(qū)分開即可),將非空閑磁盤塊集合的每個(gè)塊號(hào)通過第二組Hash函數(shù)(Hash函數(shù)I’和Hash函數(shù)2’)映射到非空閑數(shù)組中,將映射到的位置的值置為第一特征值。需要說明的是,當(dāng)建立了一個(gè)以上的數(shù)組時(shí),每個(gè)數(shù)組中的第一特征值(或/和第二特征值)可以相同也可以不同,為敘述方便,本發(fā)明實(shí)施例中均假定不同數(shù)組中的第一特征值(或/和第二特征值)相同。當(dāng)空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且與非空閑的磁盤塊數(shù)量之差大于第一數(shù)量閾值時(shí),說明空閑磁盤塊的數(shù)量較多,因此可以針對(duì)非空閑磁盤集合建立數(shù)組,即所述磁盤塊集合包括:非空閑的磁盤塊的塊號(hào)。所述Bloom Filter數(shù)組包括非空閑數(shù)組。具體過程與上面相同,在此不復(fù)贅述。當(dāng)非空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且與空閑的磁盤塊數(shù)量之差大于第一數(shù)量閾值時(shí),說明非空閑磁盤塊的數(shù)量較多,因此可以針對(duì)空閑磁盤塊集合建立數(shù)組,則所述磁盤塊集合包括:空閑的磁盤塊的塊號(hào)。所述Bloom Filter數(shù)組包括空閑數(shù)組。具體過程與上面相同,在此不復(fù)贅述。其中,每組Hash函數(shù)個(gè)數(shù)為一個(gè)以上,一般選擇2-4個(gè),為敘述方便,圖3中每組Hash函數(shù)以兩個(gè)為例,但并不限于兩個(gè),并且各個(gè)Hash函數(shù)之間沒有相關(guān)性。BloomFilter數(shù)組大小可以為構(gòu)建Bloom Filter數(shù)組所用的磁盤塊數(shù)量的一半,也可以是其他值,Hash函數(shù)個(gè)數(shù)、哈希函數(shù)的選取以及Bloom Filter數(shù)組的大小的確定屬于現(xiàn)有技術(shù)范疇,在此不復(fù)贅述。需要說明的是,本發(fā)明實(shí)施例中的第一數(shù)量閾值可以根據(jù)實(shí)際需要設(shè)定。需要說明的是,按照上述方法構(gòu)建Bloom Filter數(shù)組時(shí),可以先從空間管理模塊讀取空間分配位圖(空間管理模塊是位于磁盤上的一個(gè)模塊,用于管理磁盤分配,并且可以通過該模塊查詢磁盤塊的分配情況),遍歷其中的每一個(gè)位,統(tǒng)計(jì)出所有空閑或/和非空閑的磁盤塊的塊號(hào),以此建立相應(yīng)的由空閑磁盤塊的塊號(hào)組成的集合或/和非由空閑磁盤塊的塊號(hào)組成的集合,然后再根據(jù)相應(yīng)的集合建立相應(yīng)的Bloom Filter數(shù)組。也可以事先不建立集合,而是每讀一次位圖(每讀一次位圖可以讀出4K的位圖,4K的位圖能表示32768個(gè)磁盤塊),根據(jù)位圖所表示的磁盤塊的分配情況,將相應(yīng)磁盤塊的塊號(hào)映射到BloomFilter數(shù)組中。從中可以看出,建立Bloom Filter數(shù)組時(shí),由于一次讀盤可以讀出多個(gè)磁盤塊的位圖,相比于現(xiàn)有的每檢查一個(gè)磁盤塊都需要讀一次磁盤,該方法大大減少了磁盤讀取操作。下述實(shí)施例描述的為利用Bloom Filter數(shù)組檢查磁盤塊是否空閑的方法流程。圖4為本發(fā)明實(shí)施例一提供的磁盤塊檢查方法流程圖。如圖4所示,本發(fā)明實(shí)施例提供的方法包括:S401,利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集
口 ο具體地,當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的BloomFilter數(shù)組;當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù)量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),利用哈希Hash函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器BloomFilter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值;相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的Bloom Filter數(shù)組。該步驟的具體過程在上面已經(jīng)詳細(xì)闡述過,因此,這里不復(fù)贅述。S402,利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述BloomFilter數(shù)組中。具體地,建立好Bloom Filter數(shù)組后,就可以利用該數(shù)組檢查某個(gè)磁盤塊是否空閑,即將被檢查磁盤塊的塊號(hào)按照與建立Bloom Filter數(shù)組同樣的Hash函數(shù),將其映射到數(shù)組中,由于有多個(gè)Hash函數(shù),因此,可能會(huì)將該被檢查磁盤塊的塊的塊號(hào)映射到BloomFilter數(shù)組中的多個(gè)位置。S403,根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組。具體地,由于在S401中建立Bloom Filter數(shù)組時(shí),將磁盤塊的塊號(hào)映射到BloomFilter數(shù)組中時(shí),將相應(yīng)位置的值置為了第一特征值,因此,這里需要判斷將被檢查磁盤塊的塊的塊號(hào)映射到Bloom Filter數(shù)組中的多個(gè)位置后,該多個(gè)位置的值是否為第一特征值,以此來判斷被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,由于Bloom Filter數(shù)組有三種情況,因此,這里對(duì)應(yīng)三種判斷方法,具體過程將在下面結(jié)合S404 —起闡述。S404,根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。具體地,由于S401中建立Bloom Filter數(shù)組時(shí)有三種情況,因此,下面分情況進(jìn)行闡述:當(dāng)所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組時(shí),判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組;確定所述被檢查磁盤塊是空閑磁盤塊。如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。當(dāng)所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組時(shí),判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組;確定所述被檢查磁盤塊是非空閑磁盤塊。如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
當(dāng)所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的Bloom Filter數(shù)組時(shí),判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值;進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第一數(shù)組;其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。本發(fā)明實(shí)施例中,通過利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合;利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組;根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。由此,可以看出,本發(fā)明實(shí)施例提供的方法只在建立Bloom Filter數(shù)組或無(wú)法判斷時(shí)才進(jìn)行讀盤操作,并且每次讀盤可以讀出多個(gè)磁盤塊的塊號(hào),并且不需要保存磁盤塊檢查信息,僅需要保存一個(gè)或兩個(gè)數(shù)組,能大大減少內(nèi)存消耗。再者,由于Bloom Filter數(shù)組是存儲(chǔ)在內(nèi)存中的,而對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行查詢所需要的時(shí)間是基本恒定的,因此,對(duì)性能評(píng)估和時(shí)間統(tǒng)計(jì)非常方便。同時(shí),也可以采用多個(gè)線程同時(shí)并行檢查多個(gè)磁盤塊,從而加快FSCK速度?,F(xiàn)有技術(shù)都是直接對(duì)磁盤塊進(jìn)行操作,無(wú)法實(shí)現(xiàn)并行化。相應(yīng)地,本發(fā)明實(shí)施例提供了一種磁盤塊檢查裝置。圖5為本發(fā)明實(shí)施例二提供的磁盤塊檢查裝置示意圖。如圖5所示,本發(fā)明實(shí)施例提供的裝置包括:第一映射單元501、第二映射單元502和確定單元503。第一映射單元501,用于利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合,將所述Bloom Filter數(shù)組發(fā)送至第二映射單元502。第二映射單元502,用于接收所述第一映射單元501發(fā)送的所述BloomFilter數(shù)組,利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述BloomFilter數(shù)組中。確定單元503,用于根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,以及根據(jù)被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。其中,所述裝置中的所述Hash函數(shù)個(gè)數(shù)為一個(gè)以上,并且各個(gè)Hash函數(shù)之間沒有相關(guān)性,Hash函數(shù)個(gè)數(shù)、選取哪些哈希函數(shù)以及Bloom Filter數(shù)組的大小的確定屬于現(xiàn)有技術(shù)范疇,在此不復(fù)贅述。具體地,所述第一映射單元501用于,當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組;當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù)量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述Bloom Filter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。所述第一映射單元501還用于,當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),利用哈希Hash函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器BloomFilter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的BloomFilter數(shù)組和空閑磁盤塊的Bloom Filter數(shù)組。所述確定單元503具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組;確定所述被檢查磁盤塊是空閑磁盤塊。如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。所述確定單元503具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組,確定所述被檢查磁盤塊是非空閑磁盤塊。如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。所述判斷單元503具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值;進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第一數(shù)組,確定所述被檢查磁盤塊的狀態(tài)與所述第一數(shù)組對(duì)應(yīng)的磁盤塊的狀態(tài)相同。其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。需要說明的是,本發(fā)明實(shí)施例中的裝置植入了實(shí)施例一中的方法,因此,各個(gè)單元的工作過程與實(shí)施例一中的方法相同,在此不復(fù)贅述。本發(fā)明實(shí)施例中,第一映射單元通過利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述BloomFilter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合;第二映射單元利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;確定單元根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組;以及根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。由此,可以看出,本發(fā)明實(shí)施例提供的裝置只在建立Bloom Filter數(shù)組或無(wú)法判斷時(shí)才進(jìn)行讀盤操作,并且每次讀盤可以讀出多個(gè)磁盤塊的塊號(hào),并且不需要保存磁盤塊檢查信息,僅需要保存一個(gè)或兩個(gè)數(shù)組,能大大減少內(nèi)存消耗。再者,由于Bloom Filter數(shù)組是存儲(chǔ)在內(nèi)存中的,而對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行查詢所需要的時(shí)間是基本恒定的,因此,對(duì)性能評(píng)估和時(shí)間統(tǒng)計(jì)非常方便。同時(shí),也可以采用多個(gè)線程同時(shí)并行檢查多個(gè)磁盤塊,從而加快FSCK速度。現(xiàn)有技術(shù)都是直接對(duì)磁盤塊進(jìn)行操作,無(wú)法實(shí)現(xiàn)并行化。專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。以上所述的具體實(shí)施方式
,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式
而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種磁盤塊檢查方法,其特征在于,所述方法包括: 利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合; 利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中; 根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述 Bloom Filter 數(shù)組; 根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
2.根據(jù)權(quán)利要求1所述的磁盤塊檢查方法,其特征在于,所述Hash函數(shù)個(gè)數(shù)為一個(gè)以上,并且各個(gè)Hash函數(shù)之間沒有相關(guān)性。
3.根據(jù)權(quán)利要求1所述的磁盤塊檢查方法,其特征在于, 當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述BloomFilter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組; 當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù)量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述BloomFilter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。
4.根據(jù)權(quán)利要求1 所述的磁盤塊檢查方法,其特征在于,當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),所述方法還包括: 利用哈希Hash函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值; 相應(yīng)地,所述Bloom Filter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的 Bloom Filter 數(shù)組。
5.根據(jù)權(quán)利要求1或3所述的磁盤塊檢查方法,其特征在于,當(dāng)所述BloomFilter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括: 判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組; 確定所述被檢查磁盤塊是空閑磁盤塊。
6.根據(jù)權(quán)利要求5所述的磁盤塊檢查方法,其特征在于,所述方法還包括: 如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
7.根據(jù)權(quán)利要求1或3所述的磁盤塊檢查方法,其特征在于,當(dāng)所述BloomFilter數(shù)組為非空閑磁盤塊的BI oom Filter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括: 判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組; 確定所述被檢查磁盤塊是非空閑磁盤塊。
8.根據(jù)權(quán)利要求7所述的磁盤塊檢查方法,其特征在于,所述方法還包括: 如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
9.根據(jù)權(quán)利要求4所述的磁盤塊 檢查方法,其特征在于,當(dāng)所述BloomFilter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組和空閑磁盤塊的BloomFilter數(shù)組時(shí),所述根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,根據(jù)所述被檢查磁盤塊是否屬于所述至少一個(gè)Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊,包括: 判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值; 進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第一數(shù)組; 其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。
10.根據(jù)權(quán)利要求9所述的磁盤塊檢查方法,其特征在于,所述方法還包括: 如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
11.一種磁盤塊檢查裝置,其特征在于,所述裝置包括: 第一映射單元,用于利用哈希Hash函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值,所述第一磁盤塊集合包括兩個(gè)子磁盤塊集合,所述兩個(gè)子磁盤塊集合為空閑磁盤塊集合和非空閑磁盤塊集合,將所述BloomFilter數(shù)組發(fā)送至第二映射單元; 第二映射單元,用于接收所述第一映射單元發(fā)送的所述Bloom Filter數(shù)組,利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中; 確定單元,用于根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,以及根據(jù)所述被檢查磁盤塊是否屬于所述BloomFilter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
12.根據(jù)權(quán)利要求10所述的磁盤塊檢查裝置,其特征在于,所述第一映射單元中的所述Hash函數(shù)個(gè)數(shù)為一個(gè)以上,并且各個(gè)Hash函數(shù)之間沒有相關(guān)性。
13.根據(jù)權(quán)利要求10所述的磁盤塊檢查裝置,其特征在于,所述第一映射單元用于, 當(dāng)所述第一磁盤塊集合中的空閑的磁盤塊數(shù)量大于非空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述BloomFilter數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組; 當(dāng)所述第一磁盤塊集合中的非空閑的磁盤塊數(shù) 量大于空閑的磁盤塊數(shù)量且兩者之差大于第一數(shù)量閾值時(shí),則所述第一子磁盤塊集合為非空閑磁盤塊集合,相應(yīng)地,所述BloomFilter數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組。
14.根據(jù)權(quán)利要求11所述的磁盤塊檢查裝置,其特征在于,所述第一映射單元還用于, 當(dāng)非空閑的磁盤塊數(shù)量與空閑的磁盤塊數(shù)量之差小于第一數(shù)量閾值時(shí),利用哈希Hash函數(shù)將第一磁盤塊集合的第二子磁盤塊集合的每個(gè)塊號(hào)映射到布隆濾波器Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,相應(yīng)地,所述BloomFilter數(shù)組為非空閑磁盤塊的BloomFilter數(shù)組和空閑磁盤塊的Bloom Filter數(shù)組。
15.根據(jù)權(quán)利要求11或13所述的磁盤塊檢查裝置,其特征在于, 所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述非空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述非空閑磁盤塊的Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊。
16.根據(jù)權(quán)利要求15所述的磁盤塊檢查裝置,其特征在于,所述確定單元還用于, 如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
17.根據(jù)權(quán)利要求11或13所述的磁盤塊檢查裝置,其特征在于, 所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到所述空閑磁盤塊的Bloom Filter數(shù)組的位置的值,如果所述映射到的位置的值的至少有一個(gè)不是所述第一特征值,判斷所述被檢查磁盤塊不屬于所述空閑磁盤塊的Bloom Filter數(shù)組,確定所述被檢查磁盤塊是非空閑磁盤塊。
18.根據(jù)權(quán)利要求17所述的磁盤塊檢查裝置,其特征在于,所述確定單元還用于, 如果所述映射到的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
19.根據(jù)權(quán)利要求11或14所述的磁盤塊檢查裝置,其特征在于, 所述確定單元具體用于,判斷所述被檢查磁盤塊的塊號(hào)映射到第一數(shù)組的位置的值,如果所述映射到的位置的值全部是所述第一特征值; 進(jìn)一步判斷所述被檢查磁盤塊的塊號(hào)映射到相應(yīng)的第二數(shù)組的位置的值,如果所述映射到的位置的值至少有一個(gè)不是所述第一特征值,確定所述被檢查磁盤塊屬于所述第一數(shù)組,以及確定所述被檢查磁盤塊的狀態(tài)與所述第一數(shù)組對(duì)應(yīng)的磁盤塊的狀態(tài)相同; 其中,所述第一數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,或者所述第一數(shù)組為空閑磁盤塊的Bloom Filter數(shù)組,所述第二數(shù)組為非空閑磁盤塊的Bloom Filter數(shù)組。
20.根據(jù)權(quán)利要求19所述的磁盤塊檢查裝置,其特征在于,所述確定單元還用于,如果所述被檢查磁盤塊的塊號(hào)映射到所述第一數(shù)組的位置的值,和映射到所述第二數(shù)組的位置的值都是所述第一特征值,則到空間管理模塊去查詢所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。
全文摘要
一種磁盤塊檢查方法及裝置,包括利用哈希函數(shù)將第一磁盤塊集合的第一子磁盤塊集合的每個(gè)塊號(hào)映射到Bloom Filter數(shù)組中,將所述每個(gè)塊號(hào)映射到的位置的值由初始值置為第一特征值,所述Bloom Filter數(shù)組中所有位置的初始值為第二特征值;利用所述Hash函數(shù)將被檢查磁盤塊的塊號(hào)映射到所述Bloom Filter數(shù)組中;根據(jù)所述被檢查磁盤塊的塊號(hào)映射到的位置的值,判斷所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組;根據(jù)所述被檢查磁盤塊是否屬于所述Bloom Filter數(shù)組,確定所述被檢查磁盤塊是空閑磁盤塊還是非空閑磁盤塊。由此實(shí)現(xiàn)了只在建立Bloom Filter數(shù)組或無(wú)法判斷時(shí)才進(jìn)行讀盤操作,從而加快FSCK速度。
文檔編號(hào)G11B20/18GK103117075SQ20121057840
公開日2013年5月22日 申請(qǐng)日期2012年12月27日 優(yōu)先權(quán)日2012年12月27日
發(fā)明者張森, 黃巖 申請(qǐng)人:華為技術(shù)有限公司