本技術(shù)涉及容量回收,特別是涉及一種存儲(chǔ)容量回收方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)。
背景技術(shù):
1、當(dāng)前的計(jì)算機(jī)存儲(chǔ)系統(tǒng)在容量管理上存在一定的局限性。以現(xiàn)有的分布式存儲(chǔ)系統(tǒng)為例,這些系統(tǒng)并非直接管理磁盤(pán)中的每個(gè)字節(jié),而是通過(guò)最小分配單元來(lái)管理磁盤(pán)空間。由于最小分配單元的大小是固定的,當(dāng)寫(xiě)入數(shù)據(jù)的字節(jié)數(shù)小于這個(gè)最小分配單元時(shí),系統(tǒng)會(huì)將寫(xiě)入數(shù)據(jù)的長(zhǎng)度按最小分配單元的大小處理。因此,實(shí)際寫(xiě)入的數(shù)據(jù)大小與所占用的磁盤(pán)空間大小不一致,導(dǎo)致磁盤(pán)存儲(chǔ)空間的浪費(fèi),從而降低了存儲(chǔ)系統(tǒng)的容量利用率。
2、目前的技術(shù)在處理存儲(chǔ)容量浪費(fèi)時(shí),主要依賴于垃圾數(shù)據(jù)回收機(jī)制。通過(guò)對(duì)空閑狀態(tài)下的應(yīng)用文件進(jìn)行數(shù)據(jù)掃描及垃圾回收,在回收過(guò)程中,如果發(fā)現(xiàn)有垃圾殘留,會(huì)進(jìn)一步鎖定垃圾殘留的應(yīng)用文件,進(jìn)行二次回收,從而釋放存儲(chǔ)容量。然而,這種方法僅適用于存在垃圾文件的應(yīng)用程序,在不改變數(shù)據(jù)本身的情況下,無(wú)法有效釋放存儲(chǔ)容量,難以滿足現(xiàn)有的需求。
技術(shù)實(shí)現(xiàn)思路
1、基于此,有必要針對(duì)上述技術(shù)問(wèn)題,提供一種在不改變數(shù)據(jù)的情況下,系統(tǒng)性地識(shí)別并回收存儲(chǔ)系統(tǒng)中浪費(fèi)的空間,從而優(yōu)化存儲(chǔ)資源的分配,提高存儲(chǔ)系統(tǒng)的總體效率的存儲(chǔ)容量回收方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)。
2、一方面,提供一種存儲(chǔ)容量回收方法,所述方法包括:
3、獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量;
4、根據(jù)各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量計(jì)算各存儲(chǔ)對(duì)象浪費(fèi)的容量;
5、將浪費(fèi)容量超過(guò)第一閾值的存儲(chǔ)對(duì)象確定為待回收對(duì)象;
6、在放置策略組中構(gòu)造元對(duì)象,將每個(gè)放置策略組內(nèi)的待回收對(duì)象記錄至第一容器中,并將所述容器記錄至所述元對(duì)象的屬性中;
7、讀取放置策略組中元對(duì)象屬性信息以獲取該放置策略組內(nèi)待回收對(duì)象;
8、讀取所述待回收對(duì)象,并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作。
9、在本技術(shù)的一實(shí)施例中,在所述獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量之前,還包括:
10、復(fù)用存儲(chǔ)設(shè)備容量上報(bào)線程獲取存儲(chǔ)設(shè)備容量、存儲(chǔ)池容量;
11、根據(jù)所述存儲(chǔ)設(shè)備容量、存儲(chǔ)池容量計(jì)算所述存儲(chǔ)設(shè)備服務(wù)浪費(fèi)的容量;
12、根據(jù)所述存儲(chǔ)設(shè)備服務(wù)浪費(fèi)的容量以及第二閾值,確定是否觸發(fā)獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量。
13、在本技術(shù)的一實(shí)施例中,通過(guò)容量掃描線程來(lái)獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量,并通過(guò)掃描狀態(tài)標(biāo)記來(lái)標(biāo)記容量掃描線程的狀態(tài),其中所述掃描狀態(tài)標(biāo)記包括掃描中以及未掃描;
14、所述根據(jù)所述存儲(chǔ)設(shè)備服務(wù)浪費(fèi)的容量以及第二閾值,確定是否觸發(fā)獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量,包括:
15、響應(yīng)于所述存儲(chǔ)設(shè)備服務(wù)浪費(fèi)的容量超過(guò)第二閾值,且所述掃描狀態(tài)標(biāo)記為未掃描,
16、則啟動(dòng)容量掃描線程獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量。
17、在本技術(shù)的一實(shí)施例中,所述方法還包括:
18、獲取存儲(chǔ)設(shè)備的存儲(chǔ)壓力值;
19、根據(jù)所述存儲(chǔ)壓力值調(diào)整所述容量掃描線程的單次掃描對(duì)象個(gè)數(shù)和/或掃描時(shí)間間隔;
20、根據(jù)調(diào)整后的單次掃描對(duì)象個(gè)數(shù)和/或掃描時(shí)間間隔掃描獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量。
21、在本技術(shù)的一實(shí)施例中,根據(jù)所述存儲(chǔ)壓力值調(diào)整所述容量掃描線程的單次掃描對(duì)象個(gè)數(shù)和/或掃描時(shí)間間隔,包括:
22、響應(yīng)于存儲(chǔ)系統(tǒng)壓力小于第一壓力閾值,增大單次掃描個(gè)數(shù)且減小掃描時(shí)間間隔;
23、響應(yīng)于存儲(chǔ)系統(tǒng)壓力大于第一壓力閾值且小于第二壓力閾值,增大單次掃描個(gè)數(shù)或減小掃描時(shí)間間隔;
24、響應(yīng)于存儲(chǔ)系統(tǒng)壓力大于第二壓力閾值,減少單次掃描個(gè)數(shù)且增大掃描時(shí)間間隔。
25、在本技術(shù)的一實(shí)施例中,讀取所述待回收對(duì)象并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作,包括:
26、輪詢各放置策略組,讀取每個(gè)放置策略組內(nèi)所有待回收對(duì)象;
27、在進(jìn)行待回收對(duì)象重寫(xiě)之前,對(duì)待回收對(duì)象進(jìn)行一致性檢查,驗(yàn)證待回收對(duì)象的狀態(tài)是否符合業(yè)務(wù)規(guī)則;
28、將符合業(yè)務(wù)規(guī)則的待回收對(duì)象作為目標(biāo)回收對(duì)象;
29、根據(jù)存儲(chǔ)設(shè)備磁盤(pán)最小分配單元的大小對(duì)所述目標(biāo)回收對(duì)象進(jìn)行重組,生成目標(biāo)寫(xiě)入對(duì)象;
30、根據(jù)所述目標(biāo)寫(xiě)入對(duì)象構(gòu)建為寫(xiě)請(qǐng)求,包括:將所述待回收對(duì)象序列化,按照序列化順序構(gòu)建包含所述目標(biāo)寫(xiě)入對(duì)象數(shù)據(jù)、標(biāo)識(shí)符、完整版本信息的寫(xiě)請(qǐng)求消息;
31、根據(jù)系統(tǒng)需求,選擇寫(xiě)入策略,所述系統(tǒng)需求包括以下至少一項(xiàng):強(qiáng)一致性需求、可用性需求、安全性需求;
32、根據(jù)所述目標(biāo)寫(xiě)入對(duì)象的標(biāo)識(shí)符,將目標(biāo)寫(xiě)入對(duì)象根據(jù)所述寫(xiě)入策略寫(xiě)入磁盤(pán),并將所述寫(xiě)入操作記錄至操作日志;
33、響應(yīng)于目標(biāo)寫(xiě)入對(duì)象寫(xiě)入完成,刪除所述目標(biāo)回收對(duì)象;
34、其中,根據(jù)系統(tǒng)需求,選擇寫(xiě)入策略,包括:
35、根據(jù)所述強(qiáng)一致性需求,選擇同步復(fù)制;
36、根據(jù)所述可用性需求,選擇局部復(fù)制;
37、根據(jù)所述安全性需求,選擇支持校驗(yàn)。
38、在本技術(shù)的一實(shí)施例中,所述讀取所述待回收對(duì)象并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作,還包括:
39、若讀取待回收對(duì)象失敗,或重寫(xiě)待回收對(duì)象失敗,則將所述回收失敗的對(duì)象記錄至第二容器,并將所述第二容器記錄至元對(duì)象屬性;
40、將所述元對(duì)象屬性記錄至操作日志。
41、另一方面,提供了一種存儲(chǔ)容量回收裝置,所述裝置包括:
42、獲取模塊,用于獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量;計(jì)算模塊,用于根據(jù)各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量計(jì)算各存儲(chǔ)對(duì)象浪費(fèi)的容量;
43、確定模塊,用于將浪費(fèi)容量超過(guò)第一閾值的存儲(chǔ)對(duì)象確定為待回收對(duì)象;
44、記錄模塊,用于在放置策略組中構(gòu)造元對(duì)象,將每個(gè)放置策略組內(nèi)的待回收對(duì)象記錄至第一容器中,并將所述容器記錄至所述元對(duì)象的屬性中;
45、容量回收模塊,用于讀取放置策略組中元對(duì)象屬性信息以獲取該放置策略組內(nèi)待回收對(duì)象;以及用于讀取所述待回收對(duì)象,并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作。
46、再一方面,提供了一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)以下步驟:獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量;根據(jù)各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量計(jì)算各存儲(chǔ)對(duì)象浪費(fèi)的容量;將浪費(fèi)容量超過(guò)第一閾值的存儲(chǔ)對(duì)象確定為待回收對(duì)象;在放置策略組中構(gòu)造元對(duì)象,將每個(gè)放置策略組內(nèi)的待回收對(duì)象記錄至第一容器中,并將所述容器記錄至所述元對(duì)象的屬性中;讀取放置策略組中元對(duì)象屬性信息以獲取該放置策略組內(nèi)待回收對(duì)象;讀取所述待回收對(duì)象,并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作。
47、又一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)以下步驟:獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量;根據(jù)各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量計(jì)算各存儲(chǔ)對(duì)象浪費(fèi)的容量;將浪費(fèi)容量超過(guò)第一閾值的存儲(chǔ)對(duì)象確定為待回收對(duì)象;在放置策略組中構(gòu)造元對(duì)象,將每個(gè)放置策略組內(nèi)的待回收對(duì)象記錄至第一容器中,并將所述容器記錄至所述元對(duì)象的屬性中;讀取放置策略組中元對(duì)象屬性信息以獲取該放置策略組內(nèi)待回收對(duì)象;讀取所述待回收對(duì)象,并對(duì)所述待回收對(duì)象進(jìn)行重寫(xiě)操作。
48、上述存儲(chǔ)容量回收方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì),能夠適用于任何數(shù)據(jù),擴(kuò)大了容量回收方法的適用對(duì)象范圍,提高了該方法的適用性,同時(shí),通過(guò)獲取存儲(chǔ)設(shè)備中各存儲(chǔ)對(duì)象的大小以及該對(duì)象占用硬盤(pán)的容量,計(jì)算各存儲(chǔ)對(duì)象浪費(fèi)的容量,并將浪費(fèi)容量超過(guò)第一閾值的存儲(chǔ)對(duì)象確定為待回收對(duì)象,可以識(shí)別出存儲(chǔ)對(duì)象在存儲(chǔ)容量上的浪費(fèi)情況,針對(duì)浪費(fèi)容量嚴(yán)重的存儲(chǔ)對(duì)象進(jìn)行容量回收,避免處理存儲(chǔ)容量小幅度的浪費(fèi)情況。同時(shí),通過(guò)重寫(xiě)操作,釋放出更多可用的存儲(chǔ)空間,從而通過(guò)系統(tǒng)性地識(shí)別浪費(fèi)的容量并回收優(yōu)化存儲(chǔ)資源的分配,提高存儲(chǔ)系統(tǒng)的總體效率。