存儲系統(tǒng)及其數(shù)據(jù)保護(hù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)存儲系統(tǒng)領(lǐng)域,特別是涉及一種存儲系統(tǒng)及其數(shù)據(jù)保護(hù)方法。
【背景技術(shù)】
[0002]隨著固態(tài)盤(Solid State Drives,固態(tài)硬盤)的出現(xiàn),計算機(jī)存儲系統(tǒng)的性能有了很大提高,并且通過將計算機(jī)存儲系統(tǒng)與RAID (Redundant Array of Independent Disks,獨(dú)立磁盤冗余陣列)技術(shù)相結(jié)合,有效地提升了計算機(jī)存儲系統(tǒng)存儲數(shù)據(jù)的可靠性和安全性。
[0003]但是,通過將存儲系統(tǒng)與RAID技術(shù)結(jié)合,由于RAID計算出來的校驗(yàn)區(qū)塊需要經(jīng)常寫入,這就使得計算機(jī)存儲系統(tǒng)中的固態(tài)存儲模塊(如:固態(tài)盤)在RAID中,存放校驗(yàn)區(qū)塊比數(shù)據(jù)區(qū)塊有更多倍的寫入次數(shù),縮短了固態(tài)存儲模塊的壽命。
[0004]同時,當(dāng)固態(tài)存儲模塊為固態(tài)盤時,向固態(tài)盤中的Flash芯片寫入數(shù)據(jù)時以page (頁,2k, 4k, 8k)為單位,而刪除數(shù)據(jù)時則以 block (塊,64page, 128page, 256page)為單位,所以當(dāng)向Flash芯片中寫入小于block的數(shù)據(jù)時,必須先將Flash芯片中整個block讀出來,然后再將整個block寫回去,這就很容易導(dǎo)致寫入放大,影響固態(tài)盤的存儲性能,同樣縮短了固態(tài)盤的壽命。
【發(fā)明內(nèi)容】
[0005]基于此,有必要針對現(xiàn)有的存儲系統(tǒng)中的寫入放大和校驗(yàn)區(qū)塊的頻繁寫入縮短固態(tài)存儲模塊的壽命的問題,提供一種存儲系統(tǒng)及其數(shù)據(jù)保護(hù)方法。
[0006]為實(shí)現(xiàn)本發(fā)明目的提供的一種存儲系統(tǒng),包括多個固態(tài)存儲模塊、檢測模塊、控制模塊和備份模塊,其中:
[0007]所述多個固態(tài)存儲模塊組成RAID,用于數(shù)據(jù)寫入所述固態(tài)存儲模塊時,對所述數(shù)據(jù)進(jìn)行RAID計算,產(chǎn)生校驗(yàn)區(qū)塊數(shù)據(jù);
[0008]所述檢測模塊,用于檢測所述數(shù)據(jù)的數(shù)據(jù)量;
[0009]所述控制模塊包括第一控制單元和第二控制單元,其中:
[0010]所述第一控制單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量大于或等于所述固態(tài)存儲模塊的條帶寬度時,控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入所述固態(tài)存儲模塊;
[0011]所述第二控制單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量小于所述條帶寬度時,控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入所述備份模塊。
[0012]在其中一個實(shí)施例中,所述控制模塊還包括第三控制單元和第四控制單元,其中:
[0013]當(dāng)所述第一控制單元控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入所述固態(tài)存儲模塊時,所述第三控制單元用于更新映像方塊列表;
[0014]當(dāng)所述第二控制單元控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入所述備份模塊時,所述第四控制單元用于在所述映像方塊列表中存儲相應(yīng)記錄;
[0015]其中,所述映像方塊列表用于記錄所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的對應(yīng)關(guān)系。
[0016]在其中一個實(shí)施例中,還包括修復(fù)模塊,所述修復(fù)模塊包括第一讀取單元、第一判斷單元、第五控制單元和第六控制單元,其中:
[0017]所述第一讀取單元,用于修復(fù)所述固態(tài)存儲模塊的所述數(shù)據(jù)時,從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的所述對應(yīng)關(guān)系;
[0018]所述第一判斷單元,用于根據(jù)所述對應(yīng)關(guān)系,判斷所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置;
[0019]所述第五控制單元,用于當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述備份模塊時,從所述備份模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)修復(fù)所述數(shù)據(jù);
[0020]所述第六控制單元,用于當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述固態(tài)存儲模塊時,從所述固態(tài)存儲模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)修復(fù)所述數(shù)據(jù)。
[0021]在其中一個實(shí)施例中,還包括重建模塊,所述重建模塊包括第二讀取單元、第二判斷單元、第七控制單元、第八控制單元、第一檢測單元和第九控制單元,其中:
[0022]所述第二讀取單元,用于進(jìn)行所述RAID重建時,從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的所述對應(yīng)關(guān)系;
[0023]所述第二判斷單元,用于根據(jù)所述對應(yīng)關(guān)系,判斷所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置;
[0024]所述第七控制單元,用于當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述備份模塊時,從所述備份模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)重建所述數(shù)據(jù);
[0025]所述第八控制單元,用于當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述固態(tài)存儲模塊時,從所述固態(tài)存儲模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)重建所述數(shù)據(jù);
[0026]所述第一檢測單元,用于根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)重建所述數(shù)據(jù)時,實(shí)時檢測所述數(shù)據(jù)重建是否完成;
[0027]所述第九控制單元,用于當(dāng)所述數(shù)據(jù)重建未完成時,控制所述第二讀取單元重新從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的所述對應(yīng)關(guān)系。
[0028]值得說明的是,所述固態(tài)存儲模塊為固態(tài)盤,所述備份模塊為熱備盤。
[0029]作為一種可實(shí)施方式,所述熱備盤為磁盤、所述固態(tài)盤、企業(yè)級SLC固態(tài)盤、或外接式存儲裝置。
[0030]其中,所述條帶寬度為所述固態(tài)存儲模塊中塊的整數(shù)倍。
[0031]在其中一個實(shí)施例中,所述RAID的類型為RAID5或RAID6。
[0032]作為一種可實(shí)施方式,所述多個固態(tài)存儲模塊組成所述RAID5時,所述備份模塊的個數(shù)為I個;
[0033]所述多個固態(tài)存儲模塊組成所述RAID6時,所述備份模塊的個數(shù)為2個。
[0034]相應(yīng)的,基于上述任一種存儲系統(tǒng)的存儲原理,本發(fā)明還提供了一種存儲系統(tǒng)數(shù)據(jù)保護(hù)方法,包括如下步驟:
[0035]當(dāng)數(shù)據(jù)寫入固態(tài)存儲模塊時,控制所述數(shù)據(jù)進(jìn)行RAID計算,產(chǎn)生校驗(yàn)區(qū)塊數(shù)據(jù);
[0036]檢測所述數(shù)據(jù)的數(shù)據(jù)量;
[0037]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量大于或等于所述固態(tài)存儲模塊的條帶寬度時,控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入所述固態(tài)存儲模塊;
[0038]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量小于所述條帶寬度時,控制所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入備份模塊。
[0039]在其中一個實(shí)施例中,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量大于或等于所述固態(tài)存儲模塊的條帶寬度時,還包括如下步驟:
[0040]更新映像方塊列表;
[0041]所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)量小于所述條帶寬度時,還包括如下步驟:
[0042]在所述映像方塊列表中存儲相應(yīng)記錄;
[0043]其中,所述映像方塊列表,用于記錄所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的對應(yīng)關(guān)系。
[0044]在其中一個實(shí)施例中,還包括數(shù)據(jù)修復(fù)步驟,所述數(shù)據(jù)修復(fù)步驟包括如下步驟:
[0045]從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的所述對應(yīng)關(guān)系;
[0046]根據(jù)所述對應(yīng)關(guān)系,判斷所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置;
[0047]當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述備份模塊時,從所述備份模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)修復(fù)所述數(shù)據(jù);
[0048]當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述固態(tài)存儲模塊時,從所述固態(tài)存儲模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)修復(fù)所述數(shù)據(jù)。
[0049]在其中一個實(shí)施例中,還包括數(shù)據(jù)重建步驟,所述數(shù)據(jù)重建步驟包括如下步驟:
[0050]從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)與所述校驗(yàn)區(qū)塊數(shù)據(jù)寫入位置的所述對應(yīng)關(guān)系;
[0051]根據(jù)所述對應(yīng)關(guān)系,判斷所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置;
[0052]當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述備份模塊時,從所述備份模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)重建所述數(shù)據(jù);
[0053]當(dāng)所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置為所述固態(tài)存儲模塊時,從所述固態(tài)存儲模塊中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù),并根據(jù)所述校驗(yàn)區(qū)塊數(shù)據(jù)重建所述數(shù)據(jù);
[0054]實(shí)時檢測所述數(shù)據(jù)重建是否完成;
[0055]當(dāng)所述數(shù)據(jù)重建未完成時,返回所述從所述映像方塊列表中讀取所述校驗(yàn)區(qū)塊數(shù)據(jù)的寫入位置的所述對應(yīng)關(guān)系步驟。
[0056]本發(fā)明提供的存儲系統(tǒng)及其數(shù)據(jù)保護(hù)方法,通過將多個固態(tài)存儲模塊組成RAID,當(dāng)向其中任一固態(tài)存儲模塊中寫入數(shù)據(jù)時,控制數(shù)據(jù)經(jīng)過RAID計算,產(chǎn)生校驗(yàn)區(qū)塊數(shù)據(jù);并檢測數(shù)據(jù)的數(shù)據(jù)量;當(dāng)檢測到數(shù)據(jù)的數(shù)據(jù)量大于或等于固態(tài)存儲模塊的條帶寬度時,控制經(jīng)過RAID計算產(chǎn)生的校驗(yàn)區(qū)塊數(shù)據(jù)寫入固態(tài)存儲模塊