本發(fā)明涉及flash存儲系統(tǒng)中的快照技術(shù)領(lǐng)域,尤其涉及一種在存儲系統(tǒng)中刪除快照卷的方法及裝置。
背景技術(shù):
快照實現(xiàn)技術(shù)包括寫時拷貝(cow)和寫時重定向(row)。如圖1所示,寫時拷貝(cow)情況為:往源卷寫新數(shù)據(jù)a’時,首先將舊數(shù)據(jù)a從源卷讀出,其次將a寫到快照卷對應(yīng)位置,最后將a’寫到源卷中,這樣最終新數(shù)據(jù)a’在源卷,舊數(shù)據(jù)a在快照卷,用戶從源卷讀數(shù)據(jù)時,讀出新數(shù)據(jù)a’。寫時重定向(row)情況為:往源卷寫新數(shù)據(jù)a’時,直接將a’寫到快照卷對應(yīng)位置,同時為了維護源卷的數(shù)據(jù)一致性,需要修改源卷的映射信息,以便源卷知道新數(shù)據(jù)a’在快照卷,這樣最終新數(shù)據(jù)a’在快照卷,舊數(shù)據(jù)a在源卷,用戶從源卷讀數(shù)據(jù)時,依然讀出新數(shù)據(jù)a’。
從而得出結(jié)論:寫時拷貝(cow)技術(shù)每個寫請求會帶來一個讀和兩個寫操作,而寫時重定向(row)技術(shù)每個寫請求只產(chǎn)生一個寫操作。寫時拷貝(cow)技術(shù),源卷上的數(shù)據(jù)在物理分布上是連續(xù)的,而寫時重定向(row)技術(shù),每個寫操作在物理分布上是離散的;寫時拷貝(cow)技術(shù),源卷上都是新數(shù)據(jù),而寫時重定向(row)技術(shù)源卷和快照卷一起維護新數(shù)據(jù)。這樣刪除快照時,為維護源卷的數(shù)據(jù)一致性,對于寫時重定向(row)技術(shù),需要進(jìn)行數(shù)據(jù)從快照卷到源卷的遷移,而對于寫時拷貝(cow)技術(shù),不需要遷移數(shù)據(jù)。
傳統(tǒng)機械硬盤存儲系統(tǒng)適用的快照技術(shù):因為傳統(tǒng)機械硬盤存儲系統(tǒng)采用機械尋道的方式,數(shù)據(jù)分布越連續(xù),其讀性能越高。根據(jù)上面的總結(jié),可知寫時拷貝(cow)算法可以在物理分布上提供較好的連續(xù)性,因此傳統(tǒng)機械硬盤存儲系統(tǒng)中更適用寫時拷貝 (cow)算法。
閃存(flash)等存儲介質(zhì)由于可以較好地支持隨機讀寫,因此更適用寫時重定向(row)算法。
技術(shù)實現(xiàn)要素:
flash存儲系統(tǒng)采用寫時重定向(row)算法,一方面可以比較好地支持寫性能(與cow相比,操作減少,沒有額外的讀寫);另一方面由于flash介質(zhì)的特性,在物理隨機分布下有較好的讀性能。但是row算法需要在刪除快照時,將快照卷維護的新數(shù)據(jù)遷移到源卷。
現(xiàn)有技術(shù)一般采用修改源卷的映射信息方法,但是這種方法會帶來新的問題。一方面每個映射信息項較小(幾個字節(jié)~幾十字節(jié)),另一方面固態(tài)硬盤介質(zhì)本身存在著寫入放大的問題。這兩者結(jié)合導(dǎo)致刪除快照卷時固態(tài)硬盤上大量的寫入放大問題。
卷的映射信息用于記錄該卷所屬的邏輯地址與存儲位置的對應(yīng)關(guān)系。映射信息還用于記錄源卷以及一個或多個快照之間的關(guān)聯(lián)關(guān)系。
根據(jù)本發(fā)明的一個方面,提供了一種在存儲系統(tǒng)中刪除快照卷的方法,所述存儲系統(tǒng)包括記錄快照卷的邏輯地址與存儲位置的映射關(guān)系的映射集合和記錄上鄰卷的邏輯地址與存儲位置的映射關(guān)系的映射集合,所述方法包括:接收指定快照卷的刪除命令;將指定快照卷的映射集合中的元素,合并到所述上鄰卷的映射集合中;反饋刪除所述指定快照卷的操作完成;其中,所述上鄰卷創(chuàng)建時間晚于且緊鄰所述指定快照卷的創(chuàng)建時間。
根據(jù)本發(fā)明的一個實施方式,其中將指定快照卷的映射集合中的元素,合并到所述上鄰卷的映射集合中,包括:對于指定快照卷的映射集合中的每一元素,判定其邏輯地址是否在上鄰卷的映射集合中,如果所述指定快照卷的映射集合中的元素的邏輯地址不存在于所述上鄰卷的映射集合中,則將所述指定快照卷的映射集合中的元素添加到所述上鄰卷的映射集合中。
根據(jù)本發(fā)明的一個實施方式,進(jìn)一步包括:在反饋刪除所述指定快照卷的操作完成之前,在nvdimm中記錄代表刪除指定快照卷的日志。
根據(jù)本發(fā)明的一個實施方式,所述存儲系統(tǒng)包括數(shù)據(jù)塊映射集合,數(shù)據(jù)塊映射集合記錄存儲位置的數(shù)據(jù)塊是否有效的信息,所述方法進(jìn)一步包括:若所述指定快照卷的映射集合中的第一元素的邏輯地址存在于所述上鄰卷的映射集合中,則在數(shù)據(jù)塊映射集合中標(biāo)記第一元素的存儲位置的數(shù)據(jù)塊無效。
根據(jù)本發(fā)明的一個實施方式,進(jìn)一步包括:刪除所述指定快照卷的映射集合。
根據(jù)本發(fā)明的一個實施方式,其中,所述存儲系統(tǒng)中的存儲介質(zhì)為非易失性存儲器。
根據(jù)本發(fā)明的一個實施方式,進(jìn)一步包括:依據(jù)所述數(shù)據(jù)塊映射集合執(zhí)行垃圾回收操作。
根據(jù)本發(fā)明的一個實施方式,其中,依據(jù)數(shù)據(jù)塊映射集合執(zhí)行垃圾回收操作包括:取得數(shù)據(jù)塊映射集合中標(biāo)記為有效的第一數(shù)據(jù)塊;判定與第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù)(即卷標(biāo)識符)所指示的快照卷是否存在,其中,若與所述第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù)所指示的快照卷不存在,用所述上鄰卷的卷標(biāo)識數(shù)據(jù)更新與第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù),并將并將更新后的與第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù)寫入nvdimm;若與所述第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù)所指示的快照卷存在,將與第一數(shù)據(jù)塊相對應(yīng)的卷標(biāo)識數(shù)據(jù)寫入nvdimm。
根據(jù)本發(fā)明的一個實施方式,進(jìn)一步包括,將寫入nvdimm的數(shù)據(jù)聚合并寫入非易失性存儲器。
根據(jù)本發(fā)明的一個實施方式,進(jìn)一步包括,更新與第一數(shù)據(jù)塊相關(guān)聯(lián)的映射集合的元素的存儲位置。
根據(jù)本發(fā)明的一個實施方式,其中,所述存儲系統(tǒng)進(jìn)一步包括:記錄下鄰卷的邏輯地址與存儲位置的映射關(guān)系的映射集合,所述方 法進(jìn)一步包括,使上鄰卷的映射集合的訪問指針指向下鄰卷的映射集合,其中,所述下鄰卷創(chuàng)建時間早于且緊鄰所述指定快照卷的創(chuàng)建時間。
根據(jù)本發(fā)明的第二方面,還提供了一種在存儲系統(tǒng)中刪除快照卷的裝置,所述存儲系統(tǒng)包括記錄快照卷的邏輯地址與存儲位置的映射關(guān)系的映射集合和記錄上鄰卷的邏輯地址與存儲位置的映射關(guān)系的映射集合,所述裝置包括:用于接收指定快照卷的刪除命令的模塊;用于將指定快照卷的映射集合中的元素,合并到所述上鄰卷的映射集合中的模塊;用于反饋刪除所述指定快照卷的操作完成的模塊;其中,所述上鄰卷創(chuàng)建時間晚于且緊鄰所述指定快照卷的創(chuàng)建時間。
根據(jù)本發(fā)明的第三方面,還提供了一種在存儲系統(tǒng)中創(chuàng)建快照卷的方法,所述存儲系統(tǒng)包括記錄源卷的邏輯地址與存儲位置的映射關(guān)系的第一映射集合,所述方法包括:接收創(chuàng)建第一快照卷的指示;將所述第一映射集合標(biāo)記為記錄第一快照卷的邏輯地址與存儲位置的映射關(guān)系的映射集合;創(chuàng)建空的第二映射集合,作為記錄源卷的邏輯地址空間與存儲位置的映射關(guān)系的第二映射集合;反饋創(chuàng)建第一快照卷的操作完成。
根據(jù)本發(fā)明的第三方面的一個實施方式,還包括:響應(yīng)于接收到更新第一邏輯地址的第一數(shù)據(jù)的請求,將第一數(shù)據(jù)記錄到第一存儲位置,以及在所述第二映射集合中記錄第一邏輯地址與第一次存儲位置的映射關(guān)系。
根據(jù)本發(fā)明的第三方面的一個實施方式,還包括:響應(yīng)于訪問第一邏輯地址的請求,若在所述第二映射集合中找到具有所述第一邏輯地址的第一元素,依據(jù)第一元素記錄的存儲位置取得數(shù)據(jù);以及若在所述第二映射集合中未找到具有所述第一邏輯地址的元素,則在所述第一映射集合中查找具有所述第一邏輯地址的第二元素,并依據(jù)所述第二元素記錄的存儲位置取得數(shù)據(jù)。
根據(jù)本發(fā)明的第四方面,提供一種包含計算機程序代碼的計算機程序,當(dāng)被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代 碼使所述計算機系統(tǒng)執(zhí)行根據(jù)本發(fā)明一方面提供的在存儲系統(tǒng)中刪除快照卷的方法或者根據(jù)本發(fā)明第三方面提供的在存儲系統(tǒng)中創(chuàng)建快照卷的方法。
根據(jù)本發(fā)明的第五方面,提供一種包括程序代碼的程序,當(dāng)被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述計程序代碼使所述存儲設(shè)備執(zhí)行根據(jù)本發(fā)明一方面提供的在存儲系統(tǒng)中刪除快照卷的方法或者根據(jù)本發(fā)明第三方面提供的在存儲系統(tǒng)中創(chuàng)建快照卷的方法。
本發(fā)明刪除快照卷時,不是每個單獨去修改映射元數(shù)據(jù),而是采用后臺遷移數(shù)據(jù),并且聚合新生成的映射數(shù)據(jù)成一個大塊的方式,以避免固態(tài)硬盤的寫放大問題。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。其中在附圖中,參考數(shù)字之后的字母標(biāo)記指示多個相同的部件,當(dāng)泛指這些部件時,將省略其最后的字母標(biāo)記。在附圖中:
圖1為現(xiàn)有技術(shù)中寫時拷貝(cow)技術(shù)和寫時重定向(row)技術(shù)的示意圖;
圖2示出了根據(jù)本發(fā)明的一個實施方式的快照鏈的結(jié)構(gòu)示意圖;
圖3示出了根據(jù)本發(fā)明的一個實施方式的映射集合的結(jié)構(gòu)示意圖;
圖4a示出了根據(jù)本發(fā)明的一個實施方式的在存儲系統(tǒng)中創(chuàng)建快照卷的示意圖;
圖4b示出了根據(jù)本發(fā)明的一個實施方式的存儲系統(tǒng)中創(chuàng)建快照卷的方法的流程圖;
圖5a示出了根據(jù)本發(fā)明的一個實施方式的刪除快照卷的示意圖;
圖5b示出了根據(jù)本發(fā)明的一個實施方式的刪除快照卷的方法的流程圖;
圖6示出了根據(jù)本發(fā)明的另一個實施方式的在存儲系統(tǒng)中刪除快照 卷的方法的流程圖;
圖7a出了根據(jù)本發(fā)明一個實施方式的非易失性存儲器(nvm)中的數(shù)據(jù)組織的示意圖;
圖7b示出了根據(jù)本發(fā)明一個實施方式的非易失性存儲器中的數(shù)據(jù)組織的示意圖;
圖8示出了根據(jù)本發(fā)明的另一個方面的上電過程中恢復(fù)快照鏈及其映射集合的方法的流程圖;
圖9a示出了據(jù)本發(fā)明一個實施方式的執(zhí)行垃圾回收操作的示意圖;
圖9b示出了根據(jù)本發(fā)明一個實施方式的垃圾回收的方法的流程圖;
圖10示出了根據(jù)本發(fā)明的另一個方面的在存儲系統(tǒng)中刪除快照卷的裝置的結(jié)構(gòu)示意圖。
在附圖中,使用相同或類似的標(biāo)號來指代相同或類似的元素。
具體實施方式
下面結(jié)合附圖和具體的實施方式對本發(fā)明作進(jìn)一步的描述。
圖2示出了根據(jù)本發(fā)明的一個實施方式的快照鏈的結(jié)構(gòu)示意圖。
如圖2所示,存儲系統(tǒng)中包括快照鏈??煺真湴ㄔ淳?10、快照卷tn220、快照卷tn-1230……快照卷t1240與快照卷t0250。就時間順序而言,快照卷tn新于快照卷tn-1,快照卷t0數(shù)據(jù)最舊。即,快照卷t0最早被創(chuàng)建,而在圖2的多個快照卷中,快照卷tn最晚被創(chuàng)建。在圖2中箭頭表示數(shù)據(jù)訪問的鏈?zhǔn)巾樞?。在根?jù)本發(fā)明的實施例中,快照鏈上包括多個快照卷,對快照卷的數(shù)量沒有限制,n可以為正整數(shù)。
從源卷210上讀某個數(shù)據(jù)時,若源卷210的映射集合中沒有記錄要訪問的邏輯地址,則沿圖2的箭頭所示的順序,訪問快照卷tn,嘗試在快照卷tn的映射集合中查找要訪問的邏輯地址。若快照卷tn依然沒有要訪問的邏輯地址,則訪問tn-1。按此方式依次訪問圖2的快照鏈上的各個節(jié)點。若最終若t0上也沒有該數(shù)據(jù),則告訴用戶或請求方該數(shù)據(jù)不存在。在一個例子中,為每個卷提供映射集合訪問指針,用以指示圖2 的箭頭所指示的訪問順序。
圖3示出了根據(jù)本發(fā)明的一個實施方式的映射集合的結(jié)構(gòu)示意圖。
如圖3所示,在根據(jù)本發(fā)明的實施例中,為圖2中的每個卷(源卷/快照卷)提供映射集合。映射集合的元素中提供該卷的邏輯地址與存儲位置的對應(yīng)關(guān)系。一般情況下,映射集合被保持在內(nèi)存中,使得在訪問映射集合時能夠得到快速響應(yīng)。映射集合的部分或全部也可存在于非易失性存儲器上,從而減少對系統(tǒng)內(nèi)存的占用或者降低因掉電等因素導(dǎo)致映射信息丟失的風(fēng)險。
如圖3所示,根據(jù)本發(fā)明實施例的映射集合包括映射信息元素310、映射信息元素320、映射信息元素330與映射信息元素340。在映射集合中映射信息元素可以有多個。在圖3中,映射信息元素310提供邏輯地址與存儲位置,從而指示映射信息元素310的邏輯地址與存儲位置的對應(yīng)關(guān)系,例如在該卷中,邏輯地址l處的數(shù)據(jù)存儲在存儲位置p。在一個例子中,映射信息元素中記錄有邏輯地址。在另一個例子中,邏輯地址可以由內(nèi)存地址隱含提供,而不占據(jù)映射信息元素的空間。
映射集合中的存儲位置可以是物理地址,也可以是虛擬化的存儲資源的地址。映射集合可利用多種數(shù)據(jù)結(jié)構(gòu)維護卷映射信息,例如數(shù)組、鏈表、樹、哈希表等。
圖4a示出了根據(jù)本發(fā)明的一個實施方式的在存儲系統(tǒng)中創(chuàng)建快照卷的結(jié)構(gòu)示意圖,圖4b示出了根據(jù)本發(fā)明的一個實施方式的存儲系統(tǒng)中創(chuàng)建快照卷的方法的流程圖。
參看圖4a,創(chuàng)建快照之前,初始情況下,快照鏈400中包括卷1節(jié)點420與空(null)節(jié)點430。卷1節(jié)點420具有映射集合,用于記錄源卷的邏輯地址與存儲位置的映射關(guān)系。卷1節(jié)點420的映射集合訪問指針指向空(null)節(jié)點430。源卷指針指向卷1節(jié)點420,以指示卷1為源卷。在更新數(shù)據(jù)時,修改卷1節(jié)點420(基于卷1是源卷)的映射集合,在映射集合中記錄所更新數(shù)據(jù)的邏輯地址與存儲位置的對應(yīng)關(guān)系。
如圖4a和圖4b所示,在創(chuàng)建一個新快照卷時,目標(biāo)是保留源卷 的當(dāng)前狀態(tài)。源卷的當(dāng)前映射集合記錄在卷1節(jié)點420中。在步驟s450,創(chuàng)建新卷(卷2)節(jié)點440,該卷2節(jié)點440具有空的映射集合,用以作為新的源卷承載快照創(chuàng)建后對卷的更新。在步驟s452,將卷2節(jié)點440的映射集合訪問指針指向快照卷1節(jié)點420,從而在卷2的映射集合中找不到要訪問的邏輯地址時,依照映射集合訪問指針來訪問快照卷1。圖5a中的快照鏈402示出了此時的快照鏈結(jié)構(gòu)。進(jìn)一步地,還將卷1節(jié)點420的映射集合設(shè)置為只讀,從而避免在快照創(chuàng)建過程中修改所創(chuàng)建的快照。而卷1節(jié)點420指示了所創(chuàng)建的存儲系統(tǒng)的快照。
在步驟s454,將源卷的指針指向卷2節(jié)點440,用以表明卷2成為當(dāng)前的源卷,從而在源卷的映射集合中找不到要訪問的邏輯地址時,依照映射集合訪問指針來訪問快照卷1節(jié)點420。圖5a中的快照鏈406示出了此時的快照鏈結(jié)構(gòu)。
在步驟s456,作為快照創(chuàng)建的結(jié)果,返回快照卷1節(jié)點420作為快照卷的指示。卷1節(jié)點420成為所創(chuàng)建的存儲系統(tǒng)的快照。此后,在更新數(shù)據(jù)時,修改卷2節(jié)點440(基于卷2是源卷)的映射集合,在卷2節(jié)點440的映射集合中記錄所更新數(shù)據(jù)的邏輯地址與存儲位置的對應(yīng)關(guān)系。
在一個例子中,希望訪問源卷的數(shù)據(jù)?;谠淳碇羔槪诰?節(jié)點440的映射集合中查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。若卷2節(jié)點440的映射集合中不存在所查找的邏輯地址,依據(jù)卷2節(jié)點440的映射集合訪問指針,在卷1節(jié)點420的映射集合中查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。
在一個例子中,希望訪問快照卷1的數(shù)據(jù)。在卷1節(jié)點420的映射集合中查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。若卷1節(jié)點420的映射集合中不存在所查找的邏輯地址,依據(jù)卷1節(jié)點420的映射集合訪問指針,發(fā)現(xiàn)卷1節(jié)點420的映射集合訪問指針指向空(null)節(jié)點430,從而確定所訪問的數(shù)據(jù)在快照卷1中不存在。
在依然另一個實施例中,快照鏈的結(jié)構(gòu)如圖4a的406所示。在此 情況下,希望創(chuàng)建快照。類似于在圖4b中描述的方法,創(chuàng)建新卷(例如,快照卷3)節(jié)點以及空的映射集合;將新卷的映射集合訪問指針指向卷2節(jié)點440;將源卷的指針指向新卷節(jié)點;并將卷2節(jié)點440作為快照創(chuàng)建的結(jié)果。
在根據(jù)本發(fā)明的另一個實施例中,在創(chuàng)建快照卷1后,還在nvdimm中記錄日志,在日志中指示對快照卷1的創(chuàng)建。在nvdimm中記錄的日志會被刷寫到nvm中。nvdimm是用于計算設(shè)備的存儲器,其兼具類似dram(dynamicrandomaccessmemory)的高速數(shù)據(jù)存取能力與非易失存儲器的數(shù)據(jù)保持能力,即使發(fā)生意外掉電,nvdimm中存儲的數(shù)據(jù)依然不會丟失。在另外一個例子中,在創(chuàng)建快照卷1后,還在nvm中記錄日志,而無需將日志寫入nvdimm。
下面通過具體實施例詳細(xì)描述在存儲系統(tǒng)中刪除快照卷的方法。
圖5a示出了根據(jù)本發(fā)明的一個實施方式的刪除快照卷的示意圖。圖5b示出了根據(jù)本發(fā)明的一個實施方式的刪除快照卷的方法的流程圖。
如圖5a所示,快照鏈500包括源卷510、t1時刻的快照卷t1520、t0時刻的快照卷t0522與空(null)530。源卷510的映射集合訪問指針指向快照卷t1520??煺站韙1520的映射集合訪問指針指向快照卷t0522,快照卷t0522的映射集合訪問指針指向空(null)節(jié)點530。
作為舉例,從快照鏈500中刪除快照卷t1520。在圖5b中示出了從快照鏈中刪除快照卷的方法流程圖。
步驟s510:接收刪除的指定快照卷(即快照卷t1)的命令。
步驟s520:為刪除快照卷t1,修改源卷510的映射集合訪問指針,使之指向快照卷t0522。
在步驟s520中,快照卷t0522是與待刪除的快照卷t1520在時間上相緊鄰,且創(chuàng)建時間早于待刪除的快照卷t1的快照。將快照卷t0稱為快照卷t1的下鄰卷。源卷510是與待刪除的快照卷t1520在時間上相緊鄰,且創(chuàng)建時間晚于待刪除的快照卷t1520的卷。將源卷510稱為快照卷t1的上鄰卷。因而,在步驟s520中,將待刪除快照卷t1的上鄰卷 的映射集合訪問指針修改為指向待刪除快照卷t1的下鄰卷。
需要說明的是,若在快照鏈中不存在創(chuàng)建時間早于待刪除快照卷t1的快照,則修改源卷映射集合訪問指針,使之指向空節(jié)點(null)。以及在圖5a、圖5b的例子中,源卷是與待刪除快照卷t1在時間上相緊鄰的卷,且在源卷與快照卷t1之間不存在其他快照。在此情況下,在刪除快照卷t1時,修改源卷510的映射集合訪問指針,使之指向快照卷t0。從而在快照鏈502中,使得源卷510的映射集合訪問指針指向快照卷t0522。
步驟s530:將快照卷t1520的映射集合合并到源卷510的映射集合。
在快照鏈500中,源卷510是快照卷t1520的上鄰卷。因而在刪除快照卷t1520時,將快照卷t1520的映射集合合并到源卷510的映射集合。
在步驟s530中,為合并快照卷t1520的映射集合與源卷510的映射集合,對于快照卷t1520中的任意的不存在于源卷510的映射集合中的元素,將快照卷t1520中的該元素添加到源卷510的映射集合中。
在合并快照卷t1520與源卷510的映射集合的過程中,快照卷t1520的映射集合中的元素在源卷510的映射集合中存在,是指對于快照卷t1520的映射集合中的該元素的邏輯地址,在源卷510的映射集合中存在記錄有該邏輯地址的元素。而對于快照卷t1520的映射集合中的每一元素,若一元素在源卷510的映射集合中存在,則不將該元素插入源卷510的映射集合。
步驟s540:反饋刪除快照卷t1520的操作完成。
進(jìn)一步地,還銷毀快照卷t1520及其在內(nèi)存中的映射集合,得到如圖5a中所示的快照鏈502。在快照鏈502中,源卷510的映射集合訪問指針指向快照卷t0522,而快照卷t0522的卷映射信息訪問指針指向空節(jié)點(null)530。至此,對快照卷t1520的刪除操作完成。
在另一個例子中,若在快照卷t1520創(chuàng)建后,還創(chuàng)建了快照卷t3,快照卷t3與快照卷t1在時間上緊鄰且在后。將快照卷t3稱為快照卷t1的上鄰卷。那么在刪除快照卷t1520時,修改與待刪除快照卷t1520 在時間上緊鄰且創(chuàng)建時間晚于待刪除快照卷t1520的快照卷t3的映射集合訪問指針,使之指向與待刪除快照卷t1520在時間上緊鄰且創(chuàng)建時間早于待刪除快照卷t1520的快照卷t0522。在刪除快照卷t1520時,將快照卷t1520的映射集合合并到快照卷t3的映射集合。
參看圖5a的快照鏈502,在刪除快照卷t1520后,若訪問源卷510的數(shù)據(jù),則首先查找源卷510的映射集合,查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。若源卷510的映射集合中不存在所查找的邏輯地址,依據(jù)源卷510的映射集合訪問指針,快照卷t0522的映射集合中查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。
在一個例子中,希望訪問快照卷t0522的數(shù)據(jù)。在快照卷t0522的映射集合中查找邏輯地址與存儲位置的對應(yīng)關(guān)系,從而在存儲位置處訪問數(shù)據(jù)。若快照卷t0522的映射集合中不存在所查找的邏輯地址,依據(jù)快照卷t0522的映射集合訪問指針,發(fā)現(xiàn)快照卷t0522的映射集合訪問指針指向空(null)節(jié)點530,從而確定所訪問的數(shù)據(jù)在快照卷t0522中不存在。
圖6示出了根據(jù)本發(fā)明另一個實施方式的在存儲系統(tǒng)中刪除快照卷的方法的流程圖。
作為舉例,在圖6中示出了從快照鏈500(參看圖5a)中刪除快照卷t1520(參看圖5a)的方法流程圖。
步驟s610:接收刪除的指定快照卷(即快照卷t1)的命令。
步驟s620:對于快照卷t1520的映射集合中的每一元素,判定快照卷t1520的映射集合的元素的邏輯地址是否存在于上鄰卷的映射集合中。參看圖5a的例子,快照卷t1520的上鄰卷為源卷510。
步驟s630:對于快照卷t1520中的任意的不存在于上鄰卷的映射集合中的元素,將快照卷t1520中的該元素添加到上鄰卷的映射集合中。
參看圖5a的例子,快照卷t1520的上鄰卷為源卷510。在合并快照卷t1520與源卷510的映射集合的過程中,快照卷t1520的映射集合 中的元素在源卷510的映射集合中存在,是指對于快照卷t1520的映射集合中的該元素的邏輯地址,在源卷510的映射集合中存在記錄有該邏輯地址的元素。而對于快照卷t1520的映射集合中的每一元素,若一元素在源卷510的映射集合中存在,則不將該元素插入源卷510的映射集合。
在進(jìn)一步的例子中,存儲系統(tǒng)中還提供數(shù)據(jù)塊映射集合,應(yīng)用記錄存儲位置的數(shù)據(jù)塊是否有效的信息。對于快照卷t1520的映射集合中的每一元素,若一元素的邏輯地址在源卷510的映射集合中存在,則在數(shù)據(jù)塊映射集合中標(biāo)記該元素的存儲位置的數(shù)據(jù)塊無效。
步驟s632:為刪除快照卷t1,修改上鄰卷(源卷510)的映射集合訪問指針,使之指向快照卷t0522的映射集合。
在步驟s632中,快照卷t0是與待刪除的快照卷t1在時間上相緊鄰,且創(chuàng)建時間早于待刪除的快照卷t1的快照。需要說明的是,若在快照鏈中不存在創(chuàng)建時間早于待刪除快照卷t1的快照,則修改源卷映射集合訪問指針,使之指向空節(jié)點(null)。以及在圖5a、圖5b的例子中,源卷是創(chuàng)建時間晚于且緊鄰待刪除快照卷t1的卷,在源卷與快照卷t1之間不存在其他快照。在此情況下,在刪除快照卷t1時,修改源卷510的映射集合訪問指針,使之指向快照卷t0。從而在快照鏈502中,使得源卷510的映射集合訪問指針指向快照卷t0522。
步驟s634,在nvdimm記錄代表刪除快照卷t1520的日志。
在刪除快照卷t1520后,還在nvdimm中記錄日志,在日志中指示對快照卷t1520的刪除。在nvdimm中記錄的日志會被刷寫到非易失性存儲器(nvm)中??蛇x的,在刪除快照卷t1520后,還在非易失性存儲器(nvm)中記錄日志,而無需將日志寫入nvdimm。
在nvdimm或nvm中記錄日志,以應(yīng)對在快照鏈500修改為快照鏈502(參看圖5a)后,物理存儲介質(zhì)中的數(shù)據(jù)與快照卷的映射關(guān)系被更新前,存儲系統(tǒng)宕機(如掉電)等情況。記錄日志所引入的開銷較小,從而存儲系統(tǒng)在刪除快照時能體現(xiàn)出較短的響應(yīng)時間。
在進(jìn)一步的例子中,指示存儲系統(tǒng)的垃圾回收模塊,對快照卷t1520 所對應(yīng)的物理存儲介質(zhì)中的數(shù)據(jù)進(jìn)行遷移。物理存儲介質(zhì)中記錄有數(shù)據(jù)以及數(shù)據(jù)所屬的卷信息。在下文中結(jié)合圖xx將對此詳細(xì)描述。當(dāng)刪除了快照卷時,需要修改物理介質(zhì)中記錄的數(shù)據(jù)所屬的卷信息。在根據(jù)本發(fā)明的實施例的快照卷刪除過程中,無需對物理存儲介質(zhì)中記錄的數(shù)據(jù)所屬的卷信息進(jìn)行修改,即可反饋快照刪除操作完成。為此目的,在完成被刪除的快照卷與源卷的映射集合的合并后,通知垃圾回收模塊,由垃圾回收模塊在垃圾回收過程中,一并處理對數(shù)據(jù)塊的卷信息的修改。在垃圾回收中進(jìn)行數(shù)據(jù)遷移的過程將在后文中詳細(xì)描述。
步驟s640:反饋刪除快照卷t1520的操作完成。
圖7a示出了根據(jù)本發(fā)明一個實施方式的非易失性存儲器(nvm)中的數(shù)據(jù)組織的示意圖。
非易失性存儲器例如可以是ssd、閃存、nvdimm等。在nvm中,以存儲塊或頁作為基本存儲單元?;敬鎯卧梢允莕vm的物理頁、物理塊或超級塊??蛇x的,數(shù)據(jù)塊包括nvm的多個物理頁、多個物理塊或多個超級塊。在圖7a中,示出了數(shù)據(jù)塊710、數(shù)據(jù)塊720、數(shù)據(jù)塊730與數(shù)據(jù)塊740。nvm的每個數(shù)據(jù)塊包括:數(shù)據(jù)、該數(shù)據(jù)的邏輯地址、該數(shù)據(jù)所屬于的卷的卷標(biāo)識符。在圖7a中示出的邏輯地址與圖3中示出的邏輯地址是相同的邏輯地址,因而從圖7a所示的nvm中能夠重建如圖3所示的映射集合。卷標(biāo)識符用于唯一標(biāo)識該數(shù)據(jù)塊所屬于的卷(源卷或快照卷),例如以序號或通用唯一識別碼uuid作為卷標(biāo)識符。
返回參看圖5a、圖5b,在步驟s530中,在合并快照卷t1520與源卷510的映射集合的過程中,對于快照卷t1520的映射集合中的每一元素,若一元素在源卷510的映射集合中不存在,則將該元素插入源卷510的映射集合。在此情況下,該元素所指示的存儲位置的數(shù)據(jù)所屬的卷改變。在圖5a的例子中,該元素所指示的存儲位置的數(shù)據(jù)所屬的卷從原屬于快照卷t1520,變更為屬于源卷510。因而還可以修改該元素所指示的存儲位置的數(shù)據(jù)塊中的卷標(biāo)識符(參看圖7a)。在進(jìn)一步的實施例中,將數(shù)據(jù)塊的修改記錄在nvdimm中,以及在nvdimm中 聚合了多個對nvm的修改操作后,再寫入到nvm中。
在根據(jù)本發(fā)明的另一個實施例中,數(shù)據(jù)塊中還包括版本信息??墒褂糜糜谟涗浽摂?shù)據(jù)塊被生成的時間的時間戳,用于記錄該數(shù)據(jù)塊被生成的順序的順序號等作為版本信息。一般將數(shù)據(jù)塊中除數(shù)據(jù)部分之外的內(nèi)容(諸如邏輯地址、卷標(biāo)識符等信息)稱為元數(shù)據(jù)。
在依然另一個實施例中,數(shù)據(jù)與元數(shù)據(jù)相分離地存儲。例如,在nvm中,將數(shù)據(jù)存儲在一個基本存儲單元,而將該數(shù)據(jù)的元數(shù)據(jù)存儲在另一個基本存儲單元。元數(shù)據(jù)的例子包括邏輯地址、卷標(biāo)識符、版本信息標(biāo)識符等。
圖7b示出了根據(jù)本發(fā)明一個實施方式的非易失性存儲器中的數(shù)據(jù)組織的示意圖。
圖7b展示了根據(jù)本發(fā)明又一實施例的nvm上的存儲資源組織方式。在根據(jù)本發(fā)明的實施例中,將存儲設(shè)備提供的存儲資源組織為一個或多個存儲對象。在一個例子中,將ssd的存儲資源(例如,塊)池化,并組成一個或多個存儲對象。存儲對象又被稱為容器。將數(shù)據(jù)寫入存儲設(shè)備或從存儲設(shè)備中讀出數(shù)據(jù)時,以存儲對象作為訪問的基本單元。存儲對象的數(shù)量由存儲系統(tǒng)的容量決定。
參看圖7b,盤0、盤1、盤2與盤3是諸如ssd的存儲設(shè)備。在其他例子中,盤0、盤1、盤2與盤3也可以是機械硬盤。作為舉例,盤0作為存儲設(shè)備提供地址空間。將盤0的地址空間分為多個大塊(chunk),例如圖7b中的大塊01410、大塊11412……大塊n。大塊可包括多個塊。類似地,將盤1、盤2與盤3的每個的地址空間分為多個大塊,例如大塊1420與大塊1422由盤3提供。
在圖7b的例子中,由盤0、盤1、盤2與盤3提供的多個大塊形成了存儲資源池。從存儲資源池中將若干個大塊組織為存儲對象(在圖7b中展示為容器)。例如,容器0包括來自盤0的大塊0(大塊0-1)、來自盤1的大塊1(大塊1-1)與來自盤2的大塊0(大塊2-0),容器1包括來自盤0的大塊2(大塊0-2)與來自盤1的大塊2(大塊1-2)。根據(jù)本發(fā)明實施例的存儲系統(tǒng)提供多個容器,每個容器可包括相同或不 同數(shù)量的大塊。在容器內(nèi),可以提供諸如raid的數(shù)據(jù)保護機制。例如,在容器0內(nèi),大塊0-0與大塊1-1用于存儲用戶數(shù)據(jù),而大塊2-0用于存儲與大塊0-0、大塊1-1相對應(yīng)的校驗數(shù)據(jù)。容器0內(nèi),校驗數(shù)據(jù)的存儲位置不限于大塊2-0,也可以存儲在大塊0-0或大塊1-1。作為另一個例子,容器1的大塊0-2與大塊1-2均用于存儲用戶數(shù)據(jù)。依然作為一個例子,構(gòu)成容器0的多個大塊(大塊0-0、大塊1-1與大塊2-0)來自不同的盤,從而對容器0的訪問將分布于盤0、盤1與盤2。以此方式,增加了對盤的訪問的并行性,使存儲性能得以提升。所屬領(lǐng)域技術(shù)人員也將意識到,存儲系統(tǒng)中的盤可具有不同的容量,盤可能被更換,從而容器內(nèi)的大塊可來自相同的盤。
在根據(jù)本發(fā)明的一個實施例中,映射集合(參看圖3)的邏輯地址用于索引容器中的大塊和/或大塊內(nèi)的偏移值。在容器中,還與用戶數(shù)據(jù)相對應(yīng)地存儲元數(shù)據(jù)。元數(shù)據(jù)包括相對應(yīng)數(shù)據(jù)屬于的卷的卷標(biāo)識符、版本信息和/或邏輯地址。由于大塊已經(jīng)是邏輯層存儲對象,也可以在大塊的數(shù)據(jù)或元數(shù)據(jù)中不存儲邏輯地址。
返回參看圖5a和圖5b,在步驟530,在合并快照卷t1520與源卷510的映射集合的過程中,對于快照卷t1520的映射集合中的每一元素,若一元素在源卷510的映射集合中不存在,則將該元素插入源卷510的映射集合。在此情況下,該元素所指示的存儲位置的數(shù)據(jù)所屬的卷改變。在圖5a的例子中,該元素所指示的存儲位置的數(shù)據(jù)所屬的卷從原屬于快照卷t1520,變更為屬于源卷510。因而在圖7b的例子中,還修改該元素所指示的存儲位置的大塊相對應(yīng)的元數(shù)據(jù)中的卷標(biāo)識符。在進(jìn)一步的實施例中,將對圖7b的容器中的元數(shù)據(jù)的修改記錄在nvdimm中,以及在nvdimm中聚合了多個對元數(shù)據(jù)的更新操作后,再寫入到nvm中。
在圖7b的例子中,展示了以大塊構(gòu)成容器的例子。可由其他方式來構(gòu)成大塊。例如在另一個例子中,不提供大塊,容器對應(yīng)于盤的一段存儲空間,例如一段連續(xù)的邏輯地址空間。
在根據(jù)本發(fā)明的實施例中,為提升存儲系統(tǒng)性能,向容器寫入數(shù)據(jù) 時,采用追加寫或順序?qū)懛绞健Q句話說,容器只能從頭寫到尾,而容器的任意位置不能被覆蓋寫入。
在存儲系統(tǒng)重新上電后,需要重新構(gòu)建快照鏈及其映射集合。圖8為根據(jù)本發(fā)明實施例的存儲系統(tǒng)上電過程的流程圖。在步驟s810,從nvdimm和nvm中讀出卷操作日志,將nvdimm中的卷操作日志與nvm中的卷操作日志合并,從而在內(nèi)存中構(gòu)建出存儲系統(tǒng)中應(yīng)當(dāng)存在的一個或多個卷,并且構(gòu)建出諸如圖2所示的快照鏈,以展現(xiàn)源卷與一個或多個快照卷之間的關(guān)系。在卷操作日志中,記錄了卷/快照的創(chuàng)建與刪除以及創(chuàng)建與刪除操作的先后順序。在另一個例子中,日志僅存在于nvm或nvdimm中,在存儲系統(tǒng)重新上電時,僅從nvm或nvdimm中讀取卷操作日志。
在步驟s820,從nvm、容器和/或nvdimm中讀取數(shù)據(jù)與元數(shù)據(jù),從中獲得數(shù)據(jù)與元數(shù)據(jù)的對應(yīng)關(guān)系,用于重建如圖3所示的映射集合,其中每個數(shù)據(jù)與元數(shù)據(jù)對作為待重建的映射集合的一個元素。元數(shù)據(jù)包括邏輯地址、卷標(biāo)識符和/或時間戳。若從元數(shù)據(jù)中取得的卷標(biāo)識符存在于步驟s810中重建的一個或多個卷之一中,則將該數(shù)據(jù)與元數(shù)據(jù)對添加到映射集合中。若從元數(shù)據(jù)中取得的卷標(biāo)識符不存在于步驟s810中重建的多個卷中,則表明相應(yīng)的卷已被刪除,相應(yīng)的數(shù)據(jù)是無效數(shù)據(jù)。在此情況下還記錄指示該數(shù)據(jù)無效的信息。在一個例子中,用數(shù)據(jù)塊映射集合(例如,位圖)記錄存儲位置的數(shù)據(jù)的有效性。在另一個例子中,將指示該數(shù)據(jù)無效的信息傳送給垃圾回收部件,由垃圾回收部件在適當(dāng)?shù)那闆r下,回收無效數(shù)據(jù)。在依然另一個例子中,垃圾回收部件依據(jù)記錄數(shù)據(jù)的有效性的數(shù)據(jù)塊映射集合,對存儲無效數(shù)據(jù)的存儲位置進(jìn)行回收,和/或?qū)τ行У臄?shù)據(jù)進(jìn)行搬移。
在進(jìn)一步的實施例中,若從元數(shù)據(jù)中取得的卷標(biāo)識符存在于步驟s810中重建的一個或多個卷之一中,且存在屬于該卷的對應(yīng)于相同映射集合條目的多個數(shù)據(jù)與元數(shù)據(jù)對(例如,多個具有相同邏輯地址的數(shù)據(jù)與元數(shù)據(jù)對),依據(jù)元數(shù)據(jù)中的版本信息,選擇最新的數(shù)據(jù)與元數(shù)據(jù)對添加到映射集合中。
通過掃描nvm、容器和/或nvdimm,重建出存儲系統(tǒng)中的一個或多個卷的映射集合,從而存儲系統(tǒng)能夠依據(jù)映射集合響應(yīng)數(shù)據(jù)訪問請求。
如前所述,根據(jù)本發(fā)明的一個實施例,在完成被刪除的快照卷與源卷的映射集合的合并后,通知垃圾回收模塊,由垃圾回收模塊在垃圾回收過程中,一并處理對數(shù)據(jù)塊的卷信息的修改。由垃圾回收部件依據(jù)記錄數(shù)據(jù)的有效性的數(shù)據(jù)塊映射集合,對存儲無效數(shù)據(jù)的存儲位置進(jìn)行回收,和/或?qū)τ行У臄?shù)據(jù)進(jìn)行搬移。
圖9a示出了據(jù)本發(fā)明一個實施方式的執(zhí)行垃圾回收操作的示意圖。如圖9a所示,在存儲區(qū)域1中,data1是有效數(shù)據(jù),而data2是無效數(shù)據(jù)。metadata1是與data1對應(yīng)的元數(shù)據(jù),metadata2是與data2對應(yīng)的元數(shù)據(jù)。在垃圾回收過程中,將有效數(shù)據(jù)data1遷移到存儲區(qū)域2,而無需遷移無效數(shù)據(jù)data2。返回參看圖5a和圖5b中,當(dāng)刪除快照卷t1520時,快照卷t1520的部分?jǐn)?shù)據(jù)將成為無效數(shù)據(jù),而另一部分?jǐn)?shù)據(jù)雖然有效但需要從屬于快照卷t1520變更為屬于源卷510。為此目的,需要將data1的元數(shù)據(jù)metadata1修改為metadata1’。而由于nvm的特點,對元數(shù)據(jù)metadata1的修改將實現(xiàn)為將data1與metadata1’寫入到存儲區(qū)域2。
垃圾回收操作用于回收無效數(shù)據(jù)所占據(jù)的存儲區(qū)域。垃圾回收操作還用于在遷移有效數(shù)據(jù)的過程中,更新數(shù)據(jù)塊所對應(yīng)的卷標(biāo)識符。在根據(jù)本發(fā)明的實施例中,因刪除快照卷或其他原因?qū)е孪到y(tǒng)中出現(xiàn)無效數(shù)據(jù)后,或者數(shù)據(jù)塊所對應(yīng)的卷標(biāo)識符與該數(shù)據(jù)塊所屬的卷不一致時,并非立即執(zhí)行垃圾回收操作??梢罁?jù)多種策略決定執(zhí)行垃圾回收的時機。例如,當(dāng)存儲區(qū)域1中的無效數(shù)據(jù)超過一定比例時,執(zhí)行垃圾回收;或者當(dāng)存儲空間不足時,執(zhí)行垃圾回收;在另一個例子中,響應(yīng)于對垃圾回收操作的請求而立即執(zhí)行垃圾回收。在依然另一個例子中,周期性地執(zhí)行垃圾回收,或者在存儲系統(tǒng)任務(wù)負(fù)荷較低的時候執(zhí)行垃圾回收。
圖9b是根據(jù)本發(fā)明實施例的垃圾回收(gc)的方法的流程圖。下面結(jié)合圖9a來描述垃圾回收(gc)的方法。
如圖9b所示,垃圾回收(gc)的方法包括:
步驟s910:選取無效數(shù)據(jù)最多的存儲區(qū)域1;
步驟s920:掃描區(qū)域1的數(shù)據(jù)塊映射集合,獲取區(qū)域1中的有效數(shù)據(jù)data1和/或無效數(shù)據(jù)data2;
步驟s930:判斷data1對應(yīng)的卷是否存在;
步驟s940:如果data1對應(yīng)的卷不存在,將與data1相對應(yīng)的元數(shù)據(jù)修改為記錄data1所對應(yīng)的卷的上鄰卷的卷標(biāo)識符;
步驟s950:如果data1對應(yīng)的卷存在,則無需修改與data1相對應(yīng)的元數(shù)據(jù)中所記錄的卷標(biāo)識符;
步驟s960:將要更新的元數(shù)據(jù)寫入nvdimm,并在nvdimm中將更新的數(shù)據(jù)聚合為大塊后,再寫入nvm。
在步驟s910,選取無效數(shù)據(jù)最多的區(qū)域1作為垃圾回收的對象。所屬領(lǐng)域技術(shù)人員將意識到,有多種方式觸發(fā)垃圾回收操作或確定垃圾回收操作的對象。
在步驟s920,掃描對應(yīng)于存儲區(qū)域1的位圖,獲取存儲區(qū)域1中的有效數(shù)據(jù)(例如data1)和/或無效數(shù)據(jù)。在另一個例子中,使用鏈表、數(shù)組或其他數(shù)據(jù)結(jié)構(gòu)來記錄存儲區(qū)域中的數(shù)據(jù)的有效性。
在步驟s930,判斷有效數(shù)據(jù)data1所對應(yīng)的卷是否被刪除。其中,元數(shù)據(jù)包括卷標(biāo)識符。通過與有效數(shù)據(jù)data1所對應(yīng)的元數(shù)據(jù)metadata1獲取有效數(shù)據(jù)data1所在的卷標(biāo)識符,判斷該卷標(biāo)識符所對應(yīng)的卷(下稱卷1)在存儲系統(tǒng)中是否存在。若不存在,表明該卷1已被刪除,在步驟s940,在當(dāng)前的快照鏈(參見圖2)中尋找與該卷1在時間上相緊鄰,且創(chuàng)建時間晚于該卷1的上鄰卷(下稱卷2)。卷2可以是快照卷或源卷。在一個例子中,從日志中獲取卷1的上鄰卷(卷2)。在步驟s940,將與有效數(shù)據(jù)data1對應(yīng)的元數(shù)據(jù)metadata1中的卷標(biāo)識符修改為卷2的卷標(biāo)識符。
在步驟s930,若判斷有效數(shù)據(jù)data1所對應(yīng)的卷未被刪除,則無需修改與有效數(shù)據(jù)data1相對應(yīng)的元數(shù)據(jù)中的卷標(biāo)識符(步驟s950)。
在步驟s960,將要更新的元數(shù)據(jù)metadata1’寫入nvdimm,并在nvdimm中將更新的數(shù)據(jù)聚合為大塊后,再寫入nvm。從而避免產(chǎn)生寫放大的問題。
所屬領(lǐng)域技術(shù)人員將意識到,將更新的元數(shù)據(jù)寫入nvdimm的步驟不是必須的,要更新的元數(shù)據(jù)可被直接寫入到nvm中。在根據(jù)本發(fā)明的進(jìn)一步的實施例中,在進(jìn)行數(shù)據(jù)遷移時,將有效數(shù)據(jù)data1直接寫入到nvm中,而將與有效數(shù)據(jù)data1相對應(yīng)的元數(shù)據(jù)寫入nvdimm,并經(jīng)聚合成大尺寸數(shù)據(jù)后,再寫入nvm。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供一種在存儲系統(tǒng)中刪除快照卷的裝置,所述存儲系統(tǒng)包括快照鏈和快照卷的邏輯地址與存儲位置的映射關(guān)系的映射集合,如圖10所示,包括:用于接收快照鏈中的指定快照卷的刪除命令的裝置1000;對于指定快照卷的映射集合中的每一元素,用于判定其邏輯地址是否在上鄰卷的映射集合中的裝置2000,其中,如果所述指定快照卷中的指定元素的邏輯地址不存在于所述上鄰卷的映射集合中,則將所述指定快照卷中的指定元素添加到所述上鄰卷的映射集合中;用于反饋刪除所述指定快照卷的操作完成的裝置3000;其中,所述上鄰卷創(chuàng)建時間晚于且緊鄰所述指定快照卷,所述元素包括數(shù)據(jù)、該數(shù)據(jù)的邏輯地址和該數(shù)據(jù)的存儲位置。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供一種包含計算機程序代碼的計算機程序,當(dāng)被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行上面所述的方法。
根據(jù)本發(fā)明的另一個方面,還提供一種包括程序代碼的程序,當(dāng)被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述計程序代碼使所述存儲設(shè)備執(zhí)行上面所述的方法。
本發(fā)明取得有益效果:解決刪除快照時引入的寫放大問題;減少固態(tài)硬盤的擦除次數(shù),進(jìn)而提高固態(tài)硬盤介質(zhì)的使用壽命;刪除快照卷時,縮短執(zhí)行快照刪除操作的時間。
應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以分別由包括計算機程序指令的各種裝置來實施。這些計算機程序指令 可以加載到通用計算機、專用計算機或其他可編程數(shù)據(jù)控制設(shè)備上以產(chǎn)生機器,從而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令創(chuàng)建了用于實現(xiàn)一個或多個流程圖框中指定的功能的裝置。
這些計算機程序指令還可以存儲在可以引導(dǎo)計算機或其他可編程數(shù)據(jù)控制設(shè)備的計算機可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計算機可讀存儲器中的指令來制造包括用于實現(xiàn)一個或多個流程圖框中所指定功能的計算機可讀指令的制品。計算機程序指令還可以加載到計算機或其他可編程數(shù)據(jù)控制設(shè)備上以使得在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行一系列的操作步驟,從而產(chǎn)生計算機實現(xiàn)的過程,進(jìn)而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令提供了用于實現(xiàn)一個或多個流程圖框中所指定功能的步驟。
因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的步驟的組合和用于執(zhí)行指定功能的程序指令裝置的組合。還應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或步驟的、基于硬件的專用計算機系統(tǒng)實現(xiàn),或由專用硬件和計算機指令的組合實現(xiàn)。
上述的不同塊、操作以及技術(shù)的至少一部分可以被執(zhí)行,通過使用硬件,控制設(shè)備執(zhí)行固件指令,控制設(shè)備執(zhí)行軟件指令,或者及其任意組合。當(dāng)采用執(zhí)行固件以及軟件指令的控制設(shè)備執(zhí)行時,軟件或固件指令可以被存儲在任意計算機可讀存儲介質(zhì)中,例如磁盤,光盤或者其他存儲介質(zhì),在ram或者rom或者flash存儲器,控制設(shè)備,硬盤,光盤,磁盤等等。同樣地,軟件和固件指令可以被傳輸?shù)接脩艋蛘呦到y(tǒng),通過任意已知的或者期望的傳輸方式包括,例如,在計算機可讀盤或者其他便攜式計算機存儲機制或者通過通信媒介。通信媒介典型地具體化計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),序模塊或者在已調(diào)制數(shù)據(jù)信號中的其它數(shù)據(jù)例如載波或者其他傳輸機制。通過示例,并非限制,通信介質(zhì)包括有線介質(zhì)例如有線網(wǎng)絡(luò)或者單線連接,以及無線媒介,例如聲、無線頻率,紅外以及其它無線介質(zhì)。從而,軟件和固件指令可以被傳輸給用戶或者系統(tǒng),通過通信信道,例如電話線,dsl線,電纜電視線,光纖線纜, 無線信道,因特網(wǎng),等等(通過便攜式存儲介質(zhì)提供這樣的軟件,其被看作是相同的或者可互換的)。軟件或者固件指令可以包括機器可讀指令,這些可讀指令在由控制設(shè)備執(zhí)行時,導(dǎo)致控制設(shè)備執(zhí)行不同動作。
當(dāng)在硬件中執(zhí)行時,硬件可以包括一個或多個離散組件,集成電路,應(yīng)用的集成電路(asic),等等。
需要理解的是,本發(fā)明可以以純軟件、純硬件、固件以及上述的各種組合來實現(xiàn)。硬件例如可以是控制設(shè)備、專用集成電路、大規(guī)模集成電路等等。
雖然當(dāng)前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。
這些實施方式所涉及的、從上面描述和相關(guān)聯(lián)的附圖中呈現(xiàn)的教導(dǎo)獲益的領(lǐng)域中的技術(shù)人員將認(rèn)識到這里記載的本發(fā)明的很多修改和其他實施方式。因此,應(yīng)該理解,本發(fā)明不限于公開的具體實施方式,旨在將修改和其他實施方式包括在所附權(quán)利要求書的范圍內(nèi)。盡管在這里采用了特定的術(shù)語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。