本發明涉及計算機技術領域,特別涉及一種磁盤中邏輯卷克隆的方法、裝置及磁盤。
背景技術:
在傳統的克隆技術中,采用的多是單純的物理復制技術即采用直接復制源卷的方法,復制過程中要求源存儲卷中數據不發生變化,這個要求會隨著源存儲卷越大、復制時間越長、造成的影響就越大。由于很難保證在復制過程中不對源卷進行寫操作,一旦在復制源卷的過程中,對源卷中尚未復制過的數據進行了寫操作且寫入數據和原數據不一致,那么就不能保證所復制數據的實時有效性;因此,如何有效的避免對源卷寫操作時破壞源卷數據的有效性,是本領域技術人員需要解決的技術問題。
技術實現要素:
本發明的目的是提供一種磁盤中邏輯卷克隆的方法、裝置及磁盤,均能夠對源卷執行克隆的過程中可以對源卷進行任意的讀寫操作,能夠有效的避免對源卷寫操作時破壞源卷數據的有效性。
為解決上述技術問題,本發明提供一種磁盤中邏輯卷克隆的方法,包括:
源卷啟動克隆時,當所述源卷要寫入數據到存儲位置時,判斷克隆表中對應所述存儲位置的標記是否為未復制;
若是,則將所述源卷中所述存儲位置的原數據讀取并寫入到目的卷中與所述存儲位置對應的存儲位置中,再將所述源卷要寫入數據寫入到所述存儲位置中,并將所述克隆表中對應所述存儲位置的標記設置為已復制;
若否,則將要寫入數據寫入到所述源卷中所述存儲位置;
當所述克隆表中所有的標記都為已復制時,完成所述源卷的克隆。
其中,源卷啟動克隆之前,還包括:建立源卷和目的卷的克隆關系;所述建立源卷和目的卷的克隆關系包括:
設置與源卷存儲空間大小相同的目的卷;
分別對所述源卷和所述目的卷按照預定大小進行分片;
設置克隆表,將所述克隆表中各位與所述源卷和所述目的卷中各相同位置的分片建立映射關系,并將所述克隆表中每一位初始設置為未復制。
其中,建立源卷和目的卷的克隆關系之前,還包括:
判斷所述源卷的存儲空間是否大于預定值;
若是,則執行建立源卷和目的卷的克隆關系。
其中,所述源卷未完成克隆之前讀取克隆數據的方法,包括:
判斷所述克隆表中要讀取的克隆數據對應的存儲位置的標記是否為已復制;
若是,則從所述目的卷對應的存儲位置中讀取克隆數據;
若否,則從所述源卷對應的存儲位置中讀取克隆數據。
本發明還提供一種磁盤中邏輯卷克隆的裝置,包括:
第一判斷模塊,用于源卷啟動克隆時,當所述源卷要寫入數據到存儲位置時,判斷克隆表中對應所述存儲位置的標記是否為未復制;
COW模塊,用于若未復制,則將所述源卷中所述存儲位置的原數據讀取并寫入到目的卷中與所述存儲位置對應的存儲位置中,再將所述源卷要寫入數據寫入到所述存儲位置中,并將所述克隆表中對應所述存儲位置的標記設置為已復制;若已復制,則將要寫入數據寫入到所述源卷中所述存儲位置;
第二判斷模塊,用于判斷所述克隆表中所有的標記是否都為已復制,若是,完成所述源卷的克隆。
其中,該裝置還包括:克隆關系建立模塊,所述克隆關系建立模塊包括:
目的卷單元,用于設置與源卷存儲空間大小相同的目的卷;
分片單元,用于分別對所述源卷和所述目的卷按照預定大小進行分片;
克隆表設置單元,用于設置克隆表,將所述克隆表中各位與所述源卷和所述目的卷中各相同位置的分片建立映射關系,并將所述克隆表中每一位初始設置為未復制。
其中,該裝置還包括:
第三判斷模塊,用于判斷所述源卷的存儲空間是否大于預定值;若是,則執行建立源卷和目的卷的克隆關系。
其中,該裝置還包括:
克隆數據讀取模塊,用于判斷所述克隆表中要讀取的克隆數據對應的存儲位置的標記是否為已復制;若是,則從所述目的卷對應的存儲位置中讀取克隆數據;若否,則從所述源卷對應的存儲位置中讀取克隆數據。
本發明還提供一種磁盤,包括:根據上述任一項所述的磁盤中邏輯卷克隆的裝置。
本發明所提供的磁盤中邏輯卷克隆的方法,該方法包括源卷啟動克隆時,當源卷要寫入數據到存儲位置時,判斷克隆表中對應存儲位置的標記是否為未復制;若是,則將源卷中存儲位置的原數據讀取并寫入到目的卷中與存儲位置對應的存儲位置中,再將源卷要寫入數據寫入到存儲位置中,并將克隆表中對應所述存儲位置的標記設置為已復制;若否,則將要寫入數據寫入到源卷中所述存儲位置;當克隆表中所有的標記都為已復制時,完成源卷的克隆;
可見,該方法在源卷執行寫操作時,判斷需要克隆的原數據是否已經復制,若復制過則直接進行寫操作,若沒有則需要先對原數據進行復制,再在對應的存儲位置上寫入數據;即在對源卷執行克隆的過程中可以對源卷進行任意的讀寫操作,能夠有效的避免對源卷寫操作時破壞源卷數據的有效性;本發明還提供了一種磁盤中邏輯卷克隆的裝置及磁盤,具有上述有益效果,在此不再贅述。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
圖1為本發明實施例所提供的磁盤中邏輯卷克隆的方法的流程圖;
圖2為本發明實施例所提供的磁盤中邏輯卷克隆時刻的狀態示意圖;
圖3為本發明實施例所提供的磁盤中邏輯卷克隆執行過程中的狀態示意圖;
圖4為本發明實施例所提供的磁盤中邏輯卷克隆完成時刻的狀態示意圖;
圖5為本發明實施例所提供的磁盤中邏輯卷克隆的裝置的結構框圖。
具體實施方式
本發明的核心是提供一種磁盤中邏輯卷克隆的方法、裝置及磁盤,均能夠對源卷執行克隆的過程中可以對源卷進行任意的讀寫操作,能夠有效的避免對源卷寫操作時破壞源卷數據的有效性。
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
請參考圖1,圖1為本發明實施例所提供的磁盤中邏輯卷克隆的方法的流程圖;該方法可以包括:
S100、源卷啟動克隆時,當所述源卷要寫入數據到存儲位置時,判斷克隆表中對應所述存儲位置的標記是否為未復制;
其中,在源卷進行克隆之前需要建立克隆關系,即建立對源卷進行克隆后的目的卷,源卷與目的卷的之間對應關系以及它們與克隆表的關系。具體的過程可以如下:
設置與源卷存儲空間大小相同的目的卷;
分別對所述源卷和所述目的卷按照預定大小進行分片;
設置克隆表,將所述克隆表中各位與所述源卷和所述目的卷中各相同位置的分片建立映射關系,并將所述克隆表中每一位初始設置為未復制。
具體的即克隆關系包括源卷和目的卷,這里目的卷和源卷的大小必須一致,因為要克隆源卷的全部存儲位置的數據;然后分別對源卷和目的卷按照固定大小分片(例如:每一片為256KB),這里的預定大小也即固定大小可以根據實際需求進行確定,例如源卷寫入不是特別頻繁,則這里的預定大小可以設置大一些,源卷寫入特別頻繁,則這里的預定大小可以設置小一些;這里的每一片可以稱之為一個顆粒。分片之后,需要設置克隆表(例如bitmap),在克隆表中每一位與所述源卷和所述目的卷中各對應的分片為一一對應的關系;例如假設源卷的大小是2G,那么可以分成8096個顆粒;在內存中用一個位(bit)來標記一個顆粒的話,需要開辟1KB大小的空間做為一個bitmap大小的bitmap中每一位對應源卷/目的卷中的一個顆粒,用來標記是否已經將數據從源卷復制到了目的卷。Bitmap中的位用1來表示數據尚未復制,0來表示數據已經復制(反之1表示已復制,0表示尚未復制亦可,或者用其它標記形式也可以,只要能夠用兩種狀態分別表示已復制和未復制即可)。
這里為了進一步在不影響克隆有效性的基礎上提高速度的話,需要對源卷的大小進行判斷,假設源卷很小的話其克隆過程會很快,下這個過程中原數據發生改變的可能性較小,因此,可以直接進行克隆操作,不需要進行克隆表的建立。優選的,判斷所述源卷的存儲空間是否大于預定值;若是,則執行建立源卷和目的卷的克隆關系;若否,則對源卷進行傳統的克隆操作(直接拷貝)。
這里可以對判斷條件進行增加,例如源卷的大小很小,且寫操作發生頻率比較低,這里的條件的設置以及條件中的比較值的設置都可以根據用戶的實際情況進行,可以綜合考慮有效性和效率。
請參考圖2,給出了步驟S100的初始狀態,圖中的數值均以舉例子的形式給出。克隆關系建立好之后,就可以啟動克隆操作了。如附圖2所示,左邊的卷是克隆源卷,右邊的卷是克隆目的卷。在T0時刻啟動克隆,這時數據還沒有開始復制,Bitmap中每一位還都是初始值1。
S110、若是,則將所述源卷中所述存儲位置的原數據讀取并寫入到目的卷中與所述存儲位置對應的存儲位置中,再將所述源卷要寫入數據寫入到所述存儲位置中,并將所述克隆表中對應所述存儲位置的標記設置為已復制;
S120、若否,則將要寫入數據寫入到所述源卷中所述存儲位置;
其中,步驟S110和步驟S120是克隆過程,具體可以參考圖3,具體舉例過程如下:
假設到T1時刻,源卷產生寫操作,要寫入數據T1(即源卷要寫入數據)。這時候采用COW技術,先分析Bitmap(即克隆表),T1時刻寫入存儲位置對應Bitmap位上值是1,表示尚未復制過,表示該存儲位置是第一次寫入。將該位置的原數據T0(即需要克隆的原數據)先讀取出來寫入目的卷對應的存儲位置,再將T1數據寫入源卷存儲位置上,最后將Bitmap中對應的位標記為0,即表示該位對應顆粒已經寫入過數據。
假設到T2時刻,源卷寫入了數據T2,寫入步驟同上即S110。
假設到T3時刻,在源卷的相同位置上寫數據T3,這時分析Bitmap得知數據已經寫入過一次,這不是首次寫入該位置數據了,就不再進行COW操作,而是對源卷直接覆蓋寫即S120。
S130、當所述克隆表中所有的標記都為已復制時,完成所述源卷的克隆。
其中,請參考圖4,當所有顆粒都已經進行過一遍寫操作時,Bitmap中的所有標記為置為0,目的卷中的每一個顆粒的數據內容都已經是源卷在T0時刻的數據了,這時候克隆結束即完成源卷的克隆,最初建立的克隆關系也將被刪除。這個時候的目的卷就是源卷的一個在T0時刻的完整復制,并且目的卷和源卷不再有任何關系。
傳統的克隆是要停止源卷的寫操作的,在復制源卷的過程中對無法寫入,影響了生產,而此方法將復制過程進行了分解,在每次寫源卷時復制,每一次復制時間短,不會影響生產。
基于上述技術方案,所述源卷未完成克隆之前讀取克隆數據的方法,包括:
判斷所述克隆表中要讀取的克隆數據對應的存儲位置的標記是否為已復制;
若是,則從所述目的卷對應的存儲位置中讀取克隆數據;
若否,則從所述源卷對應的存儲位置中讀取克隆數據。
即當讀取克隆數據時,如果目的卷上的存儲位置是COW如S110寫入的,直接讀取即可,如果目的卷上的存儲位置沒有進行COW寫入,那么重定向到源卷上對應位置上讀取。當存儲位置上的所有數據都COW過之后,即可停止COW操作。
其中,“第一次寫時復制(Copy On First Write,簡稱COFW或COW)”技術。這種技術是指當數據第一次寫入某個存儲位置時,要先將該存儲位置中原數據讀取出來并寫到另一個存儲中對應的位置上,最后再將數據寫入該存儲位置。此技術可以有效的保存下來原存儲中在啟動COW技術這個時間點的數據,無論原存儲中的數據是否被改動或被多次改動過。
基于上述技術方案,本發明實施例提的磁盤中邏輯卷克隆的方法,在啟動克隆的時候對源卷開始進行COW操作,對于某個存儲位置如果是第一次寫數據,則將該存儲位置上的數據復制到目的卷上,再對該存儲位置進行寫操作;如果對某個存儲位置不是首次寫數據,則可以直接在該存儲位置上覆蓋寫;當讀取克隆數據時,如果目的卷上的存儲位置是COW寫入的,直接讀取即可,如果目的卷上的存儲位置沒有進行COW寫入,那么重定向到源卷上對應位置上讀取。當存儲位置上的所有數據都COW過之后,即可停止COW操作,此時克隆目的卷就等價于物理克隆出來的目的卷,與源卷再無關系。即在克隆過程中可以對源卷進行任意的讀寫操作,能夠有效的避免對源卷寫操作時破壞源卷數據的有效性。
下面對本發明實施例提供的磁盤中邏輯卷克隆的裝置及磁盤進行介紹,下文描述的磁盤中邏輯卷克隆的裝置及磁盤與上文描述的磁盤中邏輯卷克隆的方法可相互對應參照。
請參考圖5,圖5為本發明實施例所提供的磁盤中邏輯卷克隆的裝置的結構框圖;該裝置可以包括:
第一判斷模塊100,用于源卷啟動克隆時,當所述源卷要寫入數據到存儲位置時,判斷克隆表中對應所述存儲位置的標記是否為未復制;
COW模塊200,用于若未復制,則將所述源卷中所述存儲位置的原數據讀取并寫入到目的卷中與所述存儲位置對應的存儲位置中,再將所述源卷要寫入數據寫入到所述存儲位置中,并將所述克隆表中對應所述存儲位置的標記設置為已復制;用于若已復制,則將要寫入數據寫入到所述源卷中所述存儲位置;
第二判斷模塊300,用于判斷所述克隆表中所有的標記是否都為已復制,若是,完成所述源卷的克隆。
基于上述技術方案,還包括:克隆關系建立模塊,所述克隆關系建立模塊包括:
目的卷單元,用于設置與源卷存儲空間大小相同的目的卷;
分片單元,用于分別對所述源卷和所述目的卷按照預定大小進行分片;
克隆表設置單元,用于設置克隆表,將所述克隆表中各位與所述源卷和所述目的卷中各相同位置的分片建立映射關系,并將所述克隆表中每一位初始設置為未復制。
基于上述技術方案,還包括:
第三判斷模塊,用于判斷所述源卷的存儲空間是否大于預定值;若是,則執行建立源卷和目的卷的克隆關系;若否,則對源卷進行傳統的克隆操作(直接拷貝,不需要建立源卷和目的卷的克隆關系)。
基于上述技術方案,還包括:
克隆數據讀取模塊,用于判斷所述克隆表中要讀取的克隆數據對應的存儲位置的標記是否為已復制;若是,則從所述目的卷對應的存儲位置中讀取克隆數據;若否,則從所述源卷對應的存儲位置中讀取克隆數據。
本發明還提供一種磁盤,包括:根據上述任一項技術方案所述的磁盤中邏輯卷克隆的裝置。
說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
專業人員還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結合來實現,為了清楚地說明硬件和軟件的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執行,取決于技術方案的特定應用和設計約束條件。專業技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發明的范圍。
結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執行的軟件模塊,或者二者的結合來實施。軟件模塊可以置于隨機存儲器(RAM)、內存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術領域內所公知的任意其它形式的存儲介質中。
以上對本發明所提供的磁盤中邏輯卷克隆的方法、裝置及磁盤進行了詳細介紹。本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明的方法及其核心思想。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以對本發明進行若干改進和修飾,這些改進和修飾也落入本發明權利要求的保護范圍內。