專利名稱:進行硬盤陣列數(shù)據(jù)遷移的方法與相關(guān)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種進行硬盤陣列數(shù)據(jù)遷移的方法及相關(guān)裝置,特別涉及一種藉由較佳的遷移進度規(guī)劃/記錄以及優(yōu)化的數(shù)據(jù)讀寫而能增進遷移效能、確保遷移安全的數(shù)據(jù)遷移方法及相關(guān)裝置。
背景技術(shù):
計算機系統(tǒng)是現(xiàn)代信息社會最重要的硬件基礎(chǔ)之一,各種資料、數(shù)據(jù)、信息與知識都能以計算機系統(tǒng)來管理、處理及儲存;現(xiàn)代信息廠商也致力研究各種技術(shù),以使計算機系統(tǒng)能儲存更多數(shù)據(jù),并且更快速地存取這些數(shù)據(jù)。
一般來說,現(xiàn)行計算機系統(tǒng)普遍設(shè)有單一硬盤以做為非易失性的儲存裝置;然而,隨著硬盤成本降低,在計算機系統(tǒng)中安裝多個硬盤以整合組織出一硬盤陣列的作法,其可行性也越來越高。在現(xiàn)行技術(shù)中,已經(jīng)有多種不同的硬盤陣列架構(gòu)被提出,像是RAID0、RAID1到RAID5乃至于RAID0+1的冗余廉價硬盤陣列架構(gòu)(Redundant Array of Inexpensive Disks),或是矩陣式冗余廉價硬盤陣列(matrix RAID)架構(gòu)。這些硬盤陣列架構(gòu)可利用不同的方式將多個硬盤內(nèi)個別的存儲空間整合為一,并取得某些數(shù)據(jù)存取與管理上的優(yōu)勢。舉例來說,在RAID0架構(gòu)下的硬盤陣列,一筆要儲存至硬盤陣列的數(shù)據(jù)會被劃分為多個不同的數(shù)據(jù)片段(stripe),不同的數(shù)據(jù)片段會被交錯寫入至該硬盤陣列中不同的硬盤;要從硬盤陣列中讀取該筆數(shù)據(jù)時,就可從不同的硬盤中平行地同時將對應(yīng)的數(shù)據(jù)片段讀出,并重新由各個數(shù)據(jù)片段組合出原來的數(shù)據(jù)。換句話說,在由硬盤陣列中存取一筆數(shù)據(jù)時,實際上只要同時從各個硬盤存取該筆數(shù)據(jù)的一部份(也就是數(shù)據(jù)片段),故可實現(xiàn)較佳的數(shù)據(jù)存取速度與效能。另外,如RAID5架構(gòu)下的硬盤陣列,除了以硬盤陣列中的各個硬盤分散儲存一筆數(shù)據(jù)的不同數(shù)據(jù)片段外,還可另外儲存一同位檢查數(shù)據(jù);這也使得此類的硬盤陣列不僅能比單一硬盤更快速地存取數(shù)據(jù),還能檢查其所儲存的數(shù)據(jù)是否毀損,甚至還能將毀損的數(shù)據(jù)恢復(fù)為正確的數(shù)據(jù)。
雖然硬盤陣列有上述優(yōu)點,不過,由于硬盤陣列的硬件建置成本較高,現(xiàn)行的計算機系統(tǒng)在出廠時多半都還只建置一個硬盤;若使用者有個別的需要,才會在計算機系統(tǒng)中加裝其它的硬盤以升級實現(xiàn)出效能較高的硬盤陣列。在將硬盤陣列升級時,除了加裝硬盤之外,使用者還要進行數(shù)據(jù)遷移(datamigration),以將原來的硬盤中的數(shù)據(jù)讀出,再依升級后的硬盤陣列架構(gòu),將數(shù)據(jù)重新回存至升級后的硬盤陣列。如何協(xié)助使用者進行數(shù)據(jù)遷移,也就成為現(xiàn)代信息廠商的研發(fā)重點之一。在現(xiàn)行的現(xiàn)有技術(shù)中,如英特爾(intel)等信息廠商即已針對RAID0的硬盤陣列發(fā)展出數(shù)據(jù)遷移程序;在計算機系統(tǒng)中執(zhí)行數(shù)據(jù)遷移程序,就能完成數(shù)據(jù)遷移。
然而,現(xiàn)有的數(shù)據(jù)遷移程序效能較差,需耗費較多的時間才能完成數(shù)據(jù)遷移,不能快速有效率地完成數(shù)據(jù)遷移,且其應(yīng)用范圍也有限制,雖能對RAID0的硬盤陣列進行數(shù)據(jù)遷移,但對其他數(shù)據(jù)架構(gòu)(如RAID5等等)的硬盤陣列可能就不能完全支持。
發(fā)明內(nèi)容
因此,本發(fā)明的主要目的,即在于提供一種效能較佳、應(yīng)用范圍較廣且能維持數(shù)據(jù)遷移安全的數(shù)據(jù)遷移方法與相關(guān)裝置,能協(xié)助使用者將硬盤升級為硬盤陣列,并克服現(xiàn)有技術(shù)的缺點。
如前面討論過的,在各種硬盤陣列架構(gòu)下,數(shù)據(jù)會被劃分為片段數(shù)據(jù),在各個硬盤中以片段數(shù)據(jù)為單位而被存取。而在將一硬盤升級為硬盤陣列時,原來的硬盤就可視為一來源硬盤,而硬盤陣列中加裝的其它硬盤可視為成員硬盤;進行數(shù)據(jù)遷移的目的,就是要將來源硬盤中原本儲存的數(shù)據(jù)劃分為許多數(shù)據(jù)片段,并依照硬盤陣列的架構(gòu)分別將這些數(shù)據(jù)片段重新分配/寫入至硬盤陣列中的各個硬盤(包括來源硬盤及各個成員硬盤)。在進行數(shù)據(jù)遷移時,除了數(shù)據(jù)的讀寫之外,還要能兼顧數(shù)據(jù)遷移安全,也就是當數(shù)據(jù)遷移過程中斷后(像是因不可預(yù)期的停電而中斷),還能正確無誤地恢復(fù)數(shù)據(jù)遷移,不會因數(shù)據(jù)遷移的意外中斷而導致數(shù)據(jù)的流失或損毀。在本發(fā)明中,就是利用較佳的遷移進度規(guī)劃/記錄來增進數(shù)據(jù)遷移的效能、維持數(shù)據(jù)遷移安全,并在數(shù)據(jù)遷移期間利用較佳的讀寫管理來提高數(shù)據(jù)遷移的速度,縮短數(shù)據(jù)遷移所需的時間。
當本發(fā)明在進行遷移進度規(guī)劃時,是將來源硬盤中待遷移的各個數(shù)據(jù)片段數(shù)據(jù)依序歸類于各個區(qū)域(zone),各個區(qū)域中有多個要分別寫入(儲存)至不同硬盤的片段數(shù)據(jù);當本發(fā)明在進行數(shù)據(jù)遷移時,就是以區(qū)域為一整體來依序進行。當本發(fā)明將來源硬盤中第j個區(qū)域的數(shù)據(jù)片段都順利寫入至硬盤陣列的各個硬盤后,此一區(qū)域就可被視為一可覆寫區(qū);要繼續(xù)遷移第(j+1)個區(qū)域中的數(shù)據(jù)片段時,第(j+1)個區(qū)域里要寫入至來源硬盤中的數(shù)據(jù)片段就可覆寫于第j個區(qū)域中。由于各個區(qū)域中的數(shù)據(jù)片段是要被寫入至硬盤陣列的不同硬盤中的,故要寫入至來源硬盤的數(shù)據(jù)片段個數(shù)會少于該區(qū)域中所有數(shù)據(jù)片段的個數(shù),也因此,次一區(qū)域的大小(其所具有的數(shù)據(jù)片段的個數(shù))就可大于前一區(qū)域的大小。
舉例來說,在兩個硬盤的RAID0硬盤陣列中進行數(shù)據(jù)遷移時,本發(fā)明就會使來源硬盤中的每個區(qū)域具有偶數(shù)個數(shù)據(jù)片段,其中一半是要寫入至來源硬盤本身的,另一半是要寫入至另一個硬盤的。在此情形下,若第j個區(qū)域中有2*M個數(shù)據(jù)片段,第(j+1)個區(qū)域就可具有4*M個數(shù)據(jù)片段。因為,當?shù)趈個區(qū)域中的數(shù)據(jù)片段皆完成數(shù)據(jù)遷移后(有M個數(shù)據(jù)片段被重新寫入至來源硬盤中的第(j-1)個區(qū)域,另M個數(shù)據(jù)片段被寫入至成員硬盤),第(j+1)個區(qū)域中要被重新寫入至來源硬盤的2*M個數(shù)據(jù)片段,就剛好可以被寫入至第j個區(qū)域,覆寫第j個區(qū)域中原本的2*M個數(shù)據(jù)片段。以此類推,第(j+2)個區(qū)域中就可具有8*M個數(shù)據(jù)片段,第(j+3)個區(qū)域中則可具有16*M個數(shù)據(jù)片段,等等。換句話說,在本發(fā)明的遷移進度規(guī)劃下,不同區(qū)域的大小(其所具有的數(shù)據(jù)片段的個數(shù))可呈指數(shù)型態(tài)增加,直到區(qū)域的大小到達一適當?shù)呐R限值為止。
在上述的遷移進度規(guī)劃之下,本發(fā)明進行遷移進度管理的情形則可描述如下。本發(fā)明是在硬盤陣列的各個硬盤中都分別儲存一個起始數(shù)據(jù),用來記錄正在進行數(shù)據(jù)遷移的區(qū)域的起始地址。舉例來說,在對來源硬盤中第j個區(qū)域的數(shù)據(jù)片段進行數(shù)據(jù)遷移時,起始數(shù)據(jù)記錄的就是第j個區(qū)域的起始地址;等到第j個區(qū)域中的所有數(shù)據(jù)片段都已完全被寫入至硬盤陣列中的各個硬盤后,各硬盤中的起始數(shù)據(jù)才會被更新為第(j+1)個區(qū)域的起始地址,代表第j個區(qū)域中的數(shù)據(jù)片段已經(jīng)能被覆寫,并可開始對第(j+1)個區(qū)域內(nèi)的數(shù)據(jù)片段進行數(shù)據(jù)遷移,也就開始將第(j+1)個區(qū)域內(nèi)要重新寫入至來源硬盤的數(shù)據(jù)片段覆寫至第j個區(qū)域中,并將第(j+1)個區(qū)域內(nèi)要寫入至其它成員硬盤的數(shù)據(jù)片段分別寫入至對應(yīng)的成員硬盤。在將第(j+1)個區(qū)域內(nèi)的數(shù)據(jù)片段全部寫入至對應(yīng)的硬盤之前,起始數(shù)據(jù)都不會被更新,而會持續(xù)記錄著第(j+1)個區(qū)域的起始地址。一直要等到第(j+1)個區(qū)域內(nèi)的所有數(shù)據(jù)片段都已經(jīng)被順利分別寫入至對應(yīng)的硬盤后,起始數(shù)據(jù)才會被更新為第(j+2)個區(qū)域的起始地址,代表數(shù)據(jù)遷移的進度要推進至第(j+2)個區(qū)域,也代表第(j+1)個區(qū)域中的數(shù)據(jù)片段已經(jīng)可以被覆寫。
換句話說,起始數(shù)據(jù)指向的區(qū)域是正在進行數(shù)據(jù)遷移的區(qū)域,該區(qū)域中的數(shù)據(jù)片段絕對不會被覆寫,該區(qū)域的前一區(qū)域才是可覆寫的區(qū)域。除非某一區(qū)域中的所有數(shù)據(jù)片段已經(jīng)被正確地寫入至各個硬盤,起始數(shù)據(jù)都會持續(xù)地指向該區(qū)域而不會被更新,也保護了該區(qū)域中的所有數(shù)據(jù)片段不會被覆寫;直到該區(qū)域中的所有數(shù)據(jù)已被寫入至各個對應(yīng)的硬盤,起始數(shù)據(jù)才會指向次一個區(qū)域,而原來的區(qū)域也才會變成一個可覆寫的區(qū)域。
利用上述的管理機制,本發(fā)明就可以維持數(shù)據(jù)遷移的安全。舉例來說,在將第(j+1)個區(qū)域中的數(shù)據(jù)寫入至各個對應(yīng)硬盤時,若突然發(fā)生停電而使數(shù)據(jù)遷移的過程中斷,等到電力恢復(fù)而要重新恢復(fù)數(shù)據(jù)遷移時,本發(fā)明就可根據(jù)起始數(shù)據(jù)中所記載的地址,重新由第(j+1)個區(qū)域的第一個數(shù)據(jù)片段開始數(shù)據(jù)遷移,也就是重新將第(j+1)個區(qū)域中所有的數(shù)據(jù)片段寫入至各個對應(yīng)的硬盤。由于數(shù)據(jù)遷移過程是在遷移第(j+1)個區(qū)域時中斷的,起始數(shù)據(jù)會持續(xù)記錄著第(j+1)個區(qū)域的起始地址;等到數(shù)據(jù)遷移要重新恢復(fù)時,就可以根據(jù)起始數(shù)據(jù)來判斷數(shù)據(jù)遷移中斷于哪一個區(qū)域。更重要的是,由于起始數(shù)據(jù)指向第(j+1)個區(qū)域,故在數(shù)據(jù)遷移重新恢復(fù)后,第(j+1)個區(qū)域中所有的數(shù)據(jù)片段(不管已遷移或未遷移)都還未曾被覆寫,這也使得數(shù)據(jù)不會因數(shù)據(jù)遷移意外中斷而流失或損毀。
值得注意的是,在本發(fā)明中,即使不同區(qū)域的大小會呈指數(shù)型態(tài)地增加,上述的遷移進度管理機制還是能確保數(shù)據(jù)遷移的安全,不會因為要遷移的區(qū)域較大而無法維持遷移安全。事實上,較大的區(qū)域劃分可減少起始數(shù)據(jù)的更新次數(shù),有助于提升本發(fā)明數(shù)據(jù)遷移的效能。由于起始數(shù)據(jù)要能在電力中斷期間持續(xù)記錄區(qū)域的起始地址,合理的選擇之一就是將其記錄在硬盤陣列的各個硬盤內(nèi),作非易失性的儲存。然而,若每個區(qū)域都很小(具有較少的數(shù)據(jù)片段),又要在每遷移一個區(qū)域就要更新起始數(shù)據(jù),那在整個數(shù)據(jù)遷移過程中,勢必要頻繁地更新各個硬盤中的起始數(shù)據(jù),導致效能的消耗。但事實上,本發(fā)明中的區(qū)域規(guī)劃是可以讓不同區(qū)域呈指數(shù)型態(tài)增加的,較大的區(qū)域規(guī)劃就可以減少數(shù)據(jù)遷移期間更新起始數(shù)據(jù)的次數(shù),在兼顧數(shù)據(jù)遷移安全的情形下,還能增進數(shù)據(jù)遷移的效能。
另外,在數(shù)據(jù)遷移的過程中,本發(fā)明也會采用優(yōu)化的讀寫管理來增加效能。在將數(shù)據(jù)由來源硬盤中遷移到硬盤陣列的各個硬盤時,要先將各個待遷移的數(shù)據(jù)片段由來源硬盤中讀出,再分別寫入至各個硬盤。如熟悉技術(shù)者所知,要控制硬盤讀出或?qū)懭霐?shù)據(jù),就要向硬盤發(fā)出特定格式的讀取或?qū)懭胫噶?;而在業(yè)界現(xiàn)行普遍采用的指令格式中,讀取或?qū)懭胫噶钜淮嗡艽嫒〉臄?shù)據(jù)均有其上限。舉例來說,在現(xiàn)行ATA(Advanced Technology Attachment)標準下的指令,一個讀取指令最多可控制一硬盤讀取128K字節(jié)的數(shù)據(jù),一個寫入指令最多可將128K字節(jié)的數(shù)據(jù)寫入至一硬盤。由于每次對硬盤發(fā)出讀取或?qū)懭胫噶疃家南喈數(shù)臅r間與系統(tǒng)資源,故在數(shù)據(jù)遷移過程中,最好能充分利用每一次發(fā)出讀取/寫入指令的機會,盡量在每一讀取/寫入指令中讀取或?qū)懭胼^多(最多)的數(shù)據(jù),以減少寫入/讀取指令所需的次數(shù)。在現(xiàn)有的數(shù)據(jù)遷移技術(shù)中,會因為遷就硬盤陣列架構(gòu)而浪費了每次發(fā)出寫入指令的機會;舉例來說,當現(xiàn)有技術(shù)要在一個兩硬盤的RAID0硬盤陣列中遷移256K字節(jié)時,會先向來源硬盤發(fā)出128K字節(jié)讀取指令,隨即依照RAID0的數(shù)據(jù)架構(gòu)將讀出的128K字節(jié)劃分為兩個64K字節(jié)的部分,同時以兩個64K字節(jié)寫入指令將兩部分各64K字節(jié)的數(shù)據(jù)分別寫入至兩硬盤中,再發(fā)出另一128K字節(jié)的讀取指令,同樣以兩個64K字節(jié)寫入指令遷移另外128K字節(jié)的數(shù)據(jù)。遷移完256K字節(jié)的數(shù)據(jù),現(xiàn)有技術(shù)總計要分四次發(fā)出六個讀取/寫入指令。
相較之下,本發(fā)明優(yōu)化的讀寫管理技術(shù)就會先重復(fù)讀取指令以累積讀取足夠多的數(shù)據(jù),以便在每次寫入指令中寫入較多的數(shù)據(jù),充分利用每個寫入指令。同樣在兩硬盤的RAID0硬盤陣列中遷移256K字節(jié)的數(shù)據(jù),本發(fā)明會先向來源硬盤發(fā)出兩次128K字節(jié)讀取指令以累積讀出256K位的數(shù)據(jù),再同時發(fā)出兩個128K字節(jié)的寫入指令將256K字節(jié)的兩部分分別寫入至兩個硬盤,總計僅需分三次發(fā)出四個讀取/寫入指令即能完成256K字節(jié)的數(shù)據(jù)遷移。利用本發(fā)明的讀寫管理優(yōu)化技術(shù),本發(fā)明就能更進一步地提升數(shù)據(jù)遷移的效能與速度,減少數(shù)據(jù)遷移過程中所需耗用的系統(tǒng)資源與時間。
本發(fā)明上述的技術(shù)特征除了適用于RAID0的硬盤陣列數(shù)據(jù)遷移,還能推廣運用于其它種類以平行方式存取分散數(shù)據(jù)的硬盤陣列架構(gòu),像是RAID0+1、RAID5或是矩陣式的冗余廉價硬盤陣列架構(gòu),以在這些架構(gòu)下進行高效能、省時、安全的數(shù)據(jù)遷移。
圖1為本發(fā)明計算機系統(tǒng)一實施例的示意圖。
圖2為圖1中計算機系統(tǒng)進行數(shù)據(jù)遷移的流程示意圖。
圖3為一兩硬盤的RAID0硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的示意圖。
圖4及圖5示意的是本發(fā)明在圖3中硬盤陣列進行遷移進度規(guī)劃的情形。
圖6至圖10示意的是本發(fā)明在圖3中硬盤陣列進行數(shù)據(jù)遷移時的情形。
圖11至圖12示意的是本發(fā)明在圖3中硬盤陣列恢復(fù)數(shù)據(jù)遷移的情形。
圖13示意的是本發(fā)明在圖3中硬盤陣列進行數(shù)據(jù)遷移時實施讀寫優(yōu)化管理的情形。
圖14為一N個硬盤的RAID0硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的示意圖。
圖15及圖16示意的是本發(fā)明在圖14中硬盤陣列進行遷移進度規(guī)劃的情形。
圖17至19示意的是本發(fā)明在圖14中硬盤陣列進行數(shù)據(jù)遷移的情形。
圖20示意的是本發(fā)明在圖14中硬盤陣列進行數(shù)據(jù)遷移時實施讀寫優(yōu)化管理的情形。
圖21表列的是本發(fā)明在不同架構(gòu)的硬盤陣列下進行數(shù)據(jù)遷移進度規(guī)劃的情形。
圖22為一RAID0+1架構(gòu)下的硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的示意圖。
圖23為一RAID5架構(gòu)的硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的示意圖。
第24至26圖示意的是本發(fā)明在圖23中硬盤陣列進行數(shù)據(jù)遷移的情形。
圖27示意的是一矩陣式冗余廉價硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的情形。
組件符號說明10計算機系統(tǒng)12中央處理器14芯片組16硬盤陣列控制器18內(nèi)存 20據(jù)遷移程序22A規(guī)劃程序 22B區(qū)域遷移程序22C讀寫管理程序 22D記錄程序22E恢復(fù)程序 100流程
102-116步驟HD(0)-HD(N-1)硬盤G(.)群組 S(.)(.)數(shù)據(jù)片段Z(.)區(qū)域 P(.)檢查數(shù)據(jù)D0、D、D1-D2數(shù)據(jù) MSA起始數(shù)據(jù)具體實施方式
請參考圖1;圖1為本發(fā)明計算機系統(tǒng)10一實施例的示意圖。計算機系統(tǒng)10中設(shè)有一中央處理器12、一芯片組14、一硬盤陣列控制器16、一內(nèi)存18(像是動態(tài)隨機存取內(nèi)存)以及多個硬盤HD(0)、HD(1)至HD(N-1)。中央處理器12可執(zhí)行程序、運算數(shù)據(jù)及處理數(shù)據(jù),并主控計算機系統(tǒng)10的運作;內(nèi)存18即用來暫存中央處理器12運作期間所需的程序代碼及相關(guān)數(shù)據(jù)、數(shù)據(jù)。硬盤陣列控制器16設(shè)有多個總線信道(channel),各信道分別連接至一硬盤,使硬盤陣列控制器16得以整合控制這些硬盤的數(shù)據(jù)存取,將這些硬盤組織為一硬盤陣列。而芯片組14則用來管理中央處理器12、內(nèi)存18及硬盤陣列控制器16(與其它周邊電路)間的數(shù)據(jù)往來傳輸。其中,硬盤陣列控制器16可以和芯片組1 4整合為一,或者,硬盤陣列控制器16也可以是以附插卡(像是PCI附插卡,PCI為peripheral communication interconnect),以透過附插卡的接口(像是PCI接口)連接至芯片組14。
在計算機系統(tǒng)10中,本發(fā)明的數(shù)據(jù)遷移技術(shù)可以利用一軟件的數(shù)據(jù)遷移程序20來實現(xiàn);當使用者要將單一硬盤升級為硬盤陣列時,就可操控計算機系統(tǒng)10而使中央處理器12開始執(zhí)行數(shù)據(jù)遷移程序20,以依據(jù)硬盤陣列的架構(gòu)(RAID0、RAID0+1或RAID5等等)而將數(shù)據(jù)由原來的單一硬盤(即來源硬盤)遷移、分散至硬盤陣列的各個硬盤。數(shù)據(jù)遷移程序20中可設(shè)有一規(guī)劃程序22A、一區(qū)域遷移程序22B、一讀寫管理程序22C、一記錄程序22D及一恢復(fù)程序22E。執(zhí)行規(guī)劃程序22A可規(guī)劃數(shù)據(jù)遷移的進度;在本發(fā)明中,是將來源硬盤中待遷移的數(shù)據(jù)區(qū)分為不同區(qū)域,并以區(qū)域為一整體來進行數(shù)據(jù)遷移,當一區(qū)域中的數(shù)據(jù)已經(jīng)正確無誤地完成遷移后,才會再遷移次一區(qū)域內(nèi)的數(shù)據(jù),且各個區(qū)域可以涵蓋不同大小的存儲空間,而規(guī)劃程序22A即可決定各個區(qū)域的大小。執(zhí)行區(qū)域遷移程序22B時,中央處理器12就可透過芯片組14/硬盤陣列控制器16而實際向各個硬盤發(fā)出讀取/寫入的指令,以實際遷移一個區(qū)域中的數(shù)據(jù)。在執(zhí)行區(qū)域遷移程序22B時,讀寫管理程序22C可優(yōu)化讀取/寫入的過程,盡量使每個寫入指令都在硬盤中能寫入較多(最多)的數(shù)據(jù),以充分利用每一次對硬盤發(fā)出寫入指令的機會,進一步地增進數(shù)據(jù)遷移的效能。
在遷移一區(qū)域中的數(shù)據(jù)后,記錄程序22D可將該區(qū)域的起始地址記錄于一起始數(shù)據(jù),代表數(shù)據(jù)遷移的進度;在本發(fā)明的較佳實施例中,起始數(shù)據(jù)將被復(fù)制儲存在各個硬盤中,使每一個硬盤內(nèi)都儲存有一份內(nèi)容相同的起始數(shù)據(jù)。遷移完一區(qū)域中的數(shù)據(jù)時,起始數(shù)據(jù)就會被更新而記錄次一區(qū)域的起始地址;根據(jù)更新的起始數(shù)據(jù),區(qū)域遷移程序22B就可以開始遷移次一區(qū)域內(nèi)的數(shù)據(jù)。由于起始數(shù)據(jù)已經(jīng)儲存在各個硬盤內(nèi),若數(shù)據(jù)遷移程序20中斷執(zhí)行而中途停止了數(shù)據(jù)遷移,等到數(shù)據(jù)遷移程序20再度被執(zhí)行時,恢復(fù)程序22E就能再度讀取各個硬盤中的起始數(shù)據(jù),以根據(jù)起始數(shù)據(jù)來判斷數(shù)據(jù)遷移已經(jīng)進行至哪一個區(qū)域,并使區(qū)域遷移程序22B從該區(qū)域繼續(xù)進行未完成的數(shù)據(jù)遷移。
請參考圖2(及圖1),計算機系統(tǒng)10執(zhí)行數(shù)據(jù)遷移程序20而以本發(fā)明的技術(shù)進行數(shù)據(jù)遷移的過程,可進一步用圖2中的流程100來描述;流程100中有下列步驟步驟102開始進行數(shù)據(jù)遷移。當使用者將單一硬盤擴充為多硬盤的硬盤陣列時,就可使計算機系統(tǒng)10進行流程100以進行數(shù)據(jù)遷移,將數(shù)據(jù)由原來的硬盤(即來源硬盤)依據(jù)硬盤陣列的架構(gòu)而分布遷移至各個硬盤。另外,流程100也可以是在中斷后再重新進行的。舉例來說,當計算機系統(tǒng)10在進行流程100期間,使用者可能會因某種原因(如要執(zhí)行其它高優(yōu)先的程序)而暫時中斷流程100,或是因不可預(yù)料的意外(如停電)而中斷了流程100。在中斷后,使用者還是可以使計算機系統(tǒng)10重新進行流程100,接續(xù)之前中斷的數(shù)據(jù)遷移。
步驟104存取數(shù)據(jù)遷移的起始數(shù)據(jù)。若是在先前未進行任何數(shù)據(jù)遷移的情形下而開始流程100,就可在此步驟中初始化一個起始數(shù)據(jù),使這個起始數(shù)據(jù)記錄待遷移數(shù)據(jù)的起始地址;在本發(fā)明的較佳實施例中,此起始數(shù)據(jù)會被復(fù)制儲存至硬盤陣列中的每一個硬盤,使每一個硬盤都儲存有內(nèi)容相同的起始數(shù)據(jù)。若先前已進行過流程100但卻中途中斷,各硬盤中應(yīng)該已經(jīng)儲存有起始數(shù)據(jù),等重新進行流程100而到達此步驟時,就可由硬盤中讀出此一起始數(shù)據(jù)。
步驟106根據(jù)起始數(shù)據(jù)來規(guī)劃待遷移的區(qū)域。如前面描述過的,在各種硬盤陣列架構(gòu)中,數(shù)據(jù)會被劃分為多個固定大小(可以是4K、8K或16K字節(jié))的數(shù)據(jù)片段而分散儲存在各個硬盤中。故在進行數(shù)據(jù)遷移時,來源硬盤中的數(shù)據(jù)也會被劃分為數(shù)據(jù)片段;將來源硬盤中的各個數(shù)據(jù)片段依據(jù)硬盤陣列的架構(gòu)而寫入至其所對應(yīng)的硬盤,也就完成了數(shù)據(jù)遷移。在將待遷移的數(shù)據(jù)劃分為各個數(shù)據(jù)片段后,本發(fā)明還會將多個要分別遷移至不同硬盤的數(shù)據(jù)片段歸類于同一個區(qū)域,進而將所有要遷移的數(shù)據(jù)劃分為多個區(qū)域,并以區(qū)域為一整體來進行數(shù)據(jù)遷移。在本發(fā)明的較佳實施例中,不同區(qū)域中可以具有不同數(shù)目的數(shù)據(jù)片段;而在此步驟中,就可根據(jù)起始數(shù)據(jù)指向的起始地址而規(guī)劃出待遷移區(qū)域,并可規(guī)劃待遷移區(qū)域中可具有多少個數(shù)據(jù)片段。
步驟108將待遷移區(qū)域中的數(shù)據(jù)片段分散寫入至硬盤陣列中的各個硬盤,也就是將待遷移區(qū)域中的數(shù)據(jù)片段由來源硬盤中讀出,并重新分配/寫入至不同的硬盤。在本發(fā)明的遷移進度規(guī)劃下,每個遷移區(qū)域中都會有部分的數(shù)據(jù)片段是要遷移至來源硬盤本身的,其它部分的數(shù)據(jù)片段則是要寫入至其它硬盤的。而那些要遷移至來源硬盤本身的數(shù)據(jù)片段就可被寫入至待遷移區(qū)域的前一區(qū)域,也就是將待遷移區(qū)域的前一區(qū)域視為一可覆寫區(qū)。
在進行本步驟時,為了增進數(shù)據(jù)讀取/寫入的效能,本發(fā)明會實施優(yōu)化的讀寫管理,以充分發(fā)揮每一個讀取/寫入指令的效益。如前面討論過的,在對硬盤發(fā)出讀取/寫入指令時,每一指令可讀取/寫入的數(shù)據(jù)有一極值(譬如說是128K字節(jié));由于每一次向硬盤發(fā)出讀取/寫入指令都會消耗相當?shù)臅r間與系統(tǒng)資源,故應(yīng)充分利用每一次發(fā)出指令的機會,盡量在每一讀取/寫入指令中讀取/寫入接近極值的數(shù)據(jù),避免頻繁地發(fā)出讀取/寫入指令。而在本發(fā)明的較佳實施例中,優(yōu)化的讀寫管理是先重復(fù)多個讀取指令以從待遷移區(qū)域中累積讀出較多的數(shù)據(jù),等到要寫入至某一硬盤的數(shù)據(jù)已經(jīng)累積接近至寫入指令的寫入極值,才以一個寫入指令將這些累積的數(shù)據(jù)寫入至該硬盤。這樣,就可以善用每一個讀取/寫入指令,進而增進數(shù)據(jù)遷移的效能。
步驟110若在步驟108中已將待遷移區(qū)域中的數(shù)據(jù)片段分別寫入對應(yīng)的硬盤,就能進行至步驟112;若步驟108中斷而未能順利地將待遷移區(qū)域中的所有數(shù)據(jù)片段分別寫入至對應(yīng)的硬盤,就直接進行至步驟116而結(jié)束流程100。值得注意的是,即使步驟110中斷,待遷移區(qū)域的起始地址還是已經(jīng)被記錄在起始數(shù)據(jù)內(nèi)(即步驟104)。等下一次再度進行流程100時,就可根據(jù)起始數(shù)據(jù)再度找出待遷移區(qū)域,并繼續(xù)進行數(shù)據(jù)遷移。
步驟112判斷是否還有數(shù)據(jù)未遷移。若還有未遷移的數(shù)據(jù),就再度進行至步驟114;若來源硬盤中所有待遷移數(shù)據(jù)均已按照硬盤陣列架構(gòu)而分配至各硬盤,就可進行至步驟116。
步驟114遷移完前一區(qū)域的數(shù)據(jù)片段后,若來源硬盤中還有未遷移的數(shù)據(jù),就可以更新各硬盤中的起始數(shù)據(jù),將后續(xù)未遷移數(shù)據(jù)的起始地址記錄在各硬盤的起始數(shù)據(jù)內(nèi),并進行至步驟106,再度在未遷移的數(shù)據(jù)中規(guī)劃出未遷移區(qū)域,進行次一區(qū)域的數(shù)據(jù)遷移。
步驟116結(jié)束流程100。
為了進一步說明本發(fā)明進行數(shù)據(jù)遷移的情形,以下將先以兩硬盤的RAID0硬盤陣列為例,描述本發(fā)明在此種硬盤陣列下進行數(shù)據(jù)遷移的情形,再將本發(fā)明的技術(shù)精神推廣至N個硬盤的RAID0硬盤陣列,乃至在其它硬盤陣列架構(gòu)下的數(shù)據(jù)遷移。
請參考圖3(并一并參考圖1);假設(shè)圖1中的計算機系統(tǒng)10設(shè)有兩個硬盤(N=2),圖3示意的就是兩硬盤的RAID0硬盤陣列在數(shù)據(jù)遷移前后的情形。在數(shù)據(jù)遷移前,硬盤HD(0)為來源硬盤,硬盤HD(1)則是加裝的成員硬盤。如前面討論過的,在RAID0的硬盤陣列架構(gòu)下,數(shù)據(jù)是以數(shù)據(jù)片段的形式交錯分布在硬盤陣列的各個硬盤中;在硬盤陣列中存取數(shù)據(jù),就相當于在各個硬盤中平行地存取各個數(shù)據(jù)片段。就如圖3中所示,在數(shù)據(jù)遷移前,來源硬盤HD(0)中的數(shù)據(jù)可依序被劃分為S0(0)、S0(1)、S1(0)、S1(1)、S2(0)、S2(1)至Sm(0)、Sm(1)等等的數(shù)據(jù)片段,而數(shù)據(jù)遷移的目的,就是將這些數(shù)據(jù)片段交錯地分布至硬盤HD(0)及HD(1)中。舉例來說,數(shù)據(jù)片段S1(0)、S2(0)、S3(0)這些原本就儲存在硬盤HD(0)的數(shù)據(jù)片段要遷移至硬盤HD(0)的其它地址,而數(shù)據(jù)片段S0(1)、S1(1)、S2(1)、S3(1)等則要被遷移至成員硬盤HD(1)。為了后續(xù)討論的方便,以下將把硬盤陣列中會被并行存取的數(shù)據(jù)片段歸類為同一群組。如圖3所示,數(shù)據(jù)片段S0(0)、S0(1)在數(shù)據(jù)遷移后的硬盤陣列中分別是硬盤HD(0)、HD(1)的第一個數(shù)據(jù)片段,分布在數(shù)據(jù)陣列中的「同一層」,會被平行地同時存取,故可歸類在同一群組G(0)。同理,數(shù)據(jù)片段S3(0)、S3(1)可被歸類在同一群組G(3),數(shù)據(jù)Sm(0)、Sm(1)可被歸類在群組G(m)。
延續(xù)圖3的例子,請參考圖4及圖5。圖4即為本發(fā)明進行遷移進度規(guī)劃而在待遷移數(shù)據(jù)中規(guī)劃出不同區(qū)域的示意圖;圖5則表列了圖4中各區(qū)域中所具有的群組數(shù)目以及數(shù)據(jù)片段數(shù)目。如圖4所示,在本發(fā)明的較佳實施例中,待遷移數(shù)據(jù)的第一個區(qū)域Z(0)可具有一個群組G(0),第二個區(qū)域Z(1)亦具有一個群組,而接下來的各個區(qū)域的大小就可呈指數(shù)型態(tài)地增加,像區(qū)域Z(2)可具有兩個群組,次一區(qū)域Z(3)就可具有四個群組,再次一個區(qū)域Z(4)將可具有八個群組,以此類推。圖5則歸納了各個不同區(qū)域所分別具有的群組數(shù)目及數(shù)據(jù)片段個數(shù);到了區(qū)域Z(j),就可具有2^(j-1)個群組,也就是2^j個數(shù)據(jù)片段(每群組中有兩個數(shù)據(jù)片段)。
由數(shù)據(jù)遷移的實際過程,將可進一步了解本發(fā)明區(qū)域規(guī)劃的原理以及本發(fā)明中各項技術(shù)實現(xiàn)的方式。延續(xù)圖3中的例子,請參考圖6至圖10(并一并參考圖2);當流程100開始進行,圖6至第10即分別用來示意流程100進行至不同階段的情形。如圖6所示,當圖2中的流程100從頭開始時,各硬盤HD(0)、HD(1)會儲存一個初始化的起始數(shù)據(jù)MSA(步驟104),而此起始數(shù)據(jù)MSA就指向待遷移數(shù)據(jù)的起始地址;由于還沒有任何數(shù)據(jù)被遷移,故起始數(shù)據(jù)MSA中的起始地址就是來源硬盤HD(0)中第一個區(qū)域的起始地址,也就是所有待遷移數(shù)據(jù)的起始地址。進行至步驟108,區(qū)域Z(0)中要被遷移至成員硬盤HD(1)的數(shù)據(jù)片段S0(1)就會從來源硬盤HD(0)中被讀出,再寫入(儲存)至成員硬盤HD(1),相當于將數(shù)據(jù)片段S0(1)由硬盤HD(0)復(fù)制至硬盤HD(1)。對照圖3可知,在數(shù)據(jù)遷移后,數(shù)據(jù)片段S0(0)的地址就是其未被遷移前的地址,故在圖6中不需對其做作任何遷移。
若順利將數(shù)據(jù)片段S0(1)復(fù)制至硬盤HD(1),就完成了區(qū)域Z(0)的遷移,而流程100就可經(jīng)由步驟110、112進行至步驟114。如圖7所示,到了步驟114,兩硬盤中的起始數(shù)據(jù)MSA都會被更新為區(qū)域Z(1)的起始地址,代表區(qū)域Z(1)為新的待遷移區(qū),而前一區(qū)域Z(0)就可視為一個可覆寫區(qū)。再度進行至步驟108時,因為區(qū)域Z(0)中的數(shù)據(jù)片段S0(1)已經(jīng)復(fù)制至硬盤HD(1),硬盤HD(0)中原本用來儲存數(shù)據(jù)片段S0(1)的地方就能用來儲存區(qū)域Z(1)中的數(shù)據(jù)片段S1(0);故在對區(qū)域Z(1)進行遷移時,就是將數(shù)據(jù)片段S1(0)讀出并覆寫至區(qū)域Z(0)的數(shù)據(jù)片段S0(1),相當于將數(shù)據(jù)片段S1(0)復(fù)制/覆寫至區(qū)域Z(1)。同時,區(qū)域Z(1)中的數(shù)據(jù)片段S1(1)也會被讀出而寫入至硬盤HD(1)中,相當于將數(shù)據(jù)片段S1(1)復(fù)制至硬盤HD(1)中。在對區(qū)域Z(1)中的數(shù)據(jù)片段進行上述的遷移時,起始數(shù)據(jù)MSA都不會被改變/更新。
順利將區(qū)域Z(1)中的數(shù)據(jù)片段S1(0)、S1(1)復(fù)制至對應(yīng)的硬盤后,流程100又再度進行至步驟114。如圖8所示,再度進行至步驟114時,硬盤HD(0)、HD(1)中的起始數(shù)據(jù)MSA又再度更新,指向次一區(qū)域Z(2)的起始地址,也就是使區(qū)域Z(2)變成待遷移區(qū)域,而前一區(qū)域Z(1)就成為可覆寫區(qū)。由于區(qū)域Z(1)原本的數(shù)據(jù)片段S1(0)、S1(1)都已經(jīng)復(fù)制至對應(yīng)的硬盤,區(qū)域Z(2)中要遷移至來源硬盤本身的數(shù)據(jù)片段S2(0)、S3(0)就可以覆寫至區(qū)域Z(1)中,另外兩個數(shù)據(jù)片段S2(1)、S3(1)則要復(fù)制至硬盤HD(1)。在這里可注意到,由于區(qū)域Z(1)中有兩個可覆寫的數(shù)據(jù)片段,區(qū)域Z(2)中就可以分配有兩個群組;這是因為每一個群組中只有一個數(shù)據(jù)片段會被寫入至區(qū)域Z(1)(另一個要被寫入至成員硬盤),故區(qū)域Z(1)中的兩個可覆寫數(shù)據(jù)片段就可對應(yīng)于區(qū)域Z(2)中的兩個群組,使區(qū)域Z(2)可以是區(qū)域Z(1)的兩倍大。
順利將區(qū)域Z(2)中的四個數(shù)據(jù)片段分別復(fù)制至對應(yīng)硬盤后(步驟108),流程100會再度進行至步驟114,以遷移次一區(qū)域Z(3)中的各個數(shù)據(jù)片段。如圖9所示,各硬盤中的起始數(shù)據(jù)MSA會被更新為區(qū)域Z(3)的起始地址,而區(qū)域Z(2)中的四個數(shù)據(jù)片段也就成為可覆寫的數(shù)據(jù)片段,剛好可容納區(qū)域Z(3)中的數(shù)據(jù)片段S4(0)、S5(0)、S6(0)及S7(0);另外四個數(shù)據(jù)片段S4(1)、S5(1)、S6(1)及S7(1)則依硬盤陣列架構(gòu)而要復(fù)制至硬盤HD(1)中。同樣地,由于區(qū)域Z(2)中空出了四個可覆寫的數(shù)據(jù)片段,故區(qū)域Z(3)中就可以分配有四個群組;這也使得區(qū)域Z(3)變成區(qū)域Z(2)的兩倍大,也就是區(qū)域Z(1)的四倍大。觀察本發(fā)明中各區(qū)域大小漸增的趨勢可了解,除了第一個區(qū)域Z(0)之外,前一區(qū)域中有幾個數(shù)據(jù)片段,后一區(qū)域中就可以有同樣數(shù)量的群組;這也使得本發(fā)明中各區(qū)域的大小可以呈現(xiàn)指數(shù)型態(tài)的增長,如圖5中所表列的。
將區(qū)域Z(3)的各個數(shù)據(jù)片段分別復(fù)制至對應(yīng)的硬盤后,如圖10所示,各硬盤中儲存的起始數(shù)據(jù)MSA又會再度更新而指向區(qū)域Z(4)的起始地址,以遷移區(qū)域Z(4)中的16個數(shù)據(jù)片段,其中有8個數(shù)據(jù)片段會被復(fù)制/覆寫至前一區(qū)域Z(3),另8個數(shù)據(jù)片段會被復(fù)制至成員硬盤HD(1)。依據(jù)類似的作法依序遷移后續(xù)的每個區(qū)域,最終就能完成所有數(shù)據(jù)的遷移。如圖10所示,進行至圖10的階段時,數(shù)據(jù)片段S0(0)至S7(0)、S0(1)至S7(1)均已按照硬盤陣列架構(gòu)的要求而交錯分配至兩個硬盤。
至于本發(fā)明在數(shù)據(jù)遷移期間維護遷移安全的情形可描述如下。延續(xù)圖3的例子,請參考圖9、圖11及圖12。假設(shè)當流程100進行至圖9的階段時中斷,中斷時各數(shù)據(jù)片段分布的情形則如圖11所示;其中,數(shù)據(jù)片段S4(0)、S5(0)、S4(1)、S5(1)已順利復(fù)制至對應(yīng)的位置,但區(qū)域Z(3)中還有群組G(6)、G(7)的數(shù)據(jù)片段未遷移。由于流程100是在對區(qū)域Z(3)進行數(shù)據(jù)遷移時中斷的,故各硬盤中的起始地址還是指向至區(qū)域Z(3)。由圖11可知,雖然數(shù)據(jù)遷移在進行到區(qū)域Z(3)時中斷,但區(qū)域Z(3)中的所有數(shù)據(jù)片段都未曾被覆寫;區(qū)域Z(2)中的數(shù)據(jù)片段可能被覆寫,或甚至因覆寫過程不正常中斷而損毀,但區(qū)域Z(2)中的數(shù)據(jù)片段早已被復(fù)制至各硬盤的對應(yīng)位置,不管區(qū)域Z(2)中各數(shù)據(jù)片段的狀態(tài)如何,只要區(qū)域Z(3)中的數(shù)據(jù)片段未被覆寫而完整保存,數(shù)據(jù)遷移的過程就能恢復(fù)。等到流程100再度進行而要恢多據(jù)遷移時,其運作情形就如圖12所示;根據(jù)硬盤中非易失性保存的起始數(shù)據(jù)MSA可知,數(shù)據(jù)遷移是進行至區(qū)域Z(3)(圖2中的步驟104),而流程100就會由區(qū)域Z(3)的初始地址開始重新遷移區(qū)域Z(3)的所有數(shù)據(jù)片段,將數(shù)據(jù)片段S4(0)、S5(0)、S6(0)及S7(0)重新覆寫至區(qū)域Z(2)中(不管這些數(shù)據(jù)片段在中斷前是否已經(jīng)被成功寫入至區(qū)域Z(2)),同時也重新將數(shù)據(jù)片段S4(1)、S5(1)、S6(1)及S7(1)重新寫入至硬盤HD(1)(不管這些數(shù)據(jù)在中斷前是否已經(jīng)被成功寫入硬盤HD(1))。這樣,數(shù)據(jù)遷移的過程就能由區(qū)域Z(3)開始重新恢復(fù),不會有任何數(shù)據(jù)的毀損與流失。
由圖11、圖12的例子可知,當起始數(shù)據(jù)指向某區(qū)域Z(j)而在遷移區(qū)域Z(j)的數(shù)據(jù)片段時,本發(fā)明不會覆寫區(qū)域Z(j)的數(shù)據(jù)片段,只會將區(qū)域Z(j)中的數(shù)據(jù)復(fù)制而覆寫至前一區(qū)段Z(j-1);故遷移過程的中斷僅會影響到區(qū)域Z(j-1)中的數(shù)據(jù)片段。而由流程100可知,當起始數(shù)據(jù)由區(qū)域Z(j-1)指向區(qū)域Z(j)時,就代表區(qū)域Z(j-1)的原本儲存的數(shù)據(jù)片段已經(jīng)順利復(fù)制到對應(yīng)的硬盤,故區(qū)域Z(j-1)不論受到如何的影響,其原先的數(shù)據(jù)都不會流失或損毀,也不會影響區(qū)域Z(j)內(nèi)的數(shù)據(jù)片段,也因此,本發(fā)明得以維護數(shù)據(jù)遷移期間的數(shù)據(jù)安全。值得注意的是,即使本發(fā)明中的各個區(qū)域的大小可呈指數(shù)型態(tài)增長,但由上述討論可知,數(shù)據(jù)遷移的安全仍可確保,不會因區(qū)域增大而影響數(shù)據(jù)遷移的安全。事實上,指數(shù)型態(tài)增長的區(qū)域還可增進數(shù)據(jù)遷移的效能,因為本發(fā)明在遷移每個區(qū)域后,就要于各個硬盤中更新起始數(shù)據(jù)MSA,增大的區(qū)域可減少起始數(shù)據(jù)被更新的必要,等效上也就增進了效能。另外,除了記錄數(shù)據(jù)遷移的進度之外,起始數(shù)據(jù)MSA中記錄的信息也可協(xié)助計算機系統(tǒng)了解硬盤陣列的配置;舉例來說,計算機系統(tǒng)的基本輸出入系統(tǒng)(BIOS,basicinput/output system)就可在開機時經(jīng)由起始數(shù)據(jù)MSA判斷硬盤陣列的狀況,像是要如何從硬盤陣列中加載操作系統(tǒng)程序等等。
考慮到中斷后恢復(fù)所需的時間,本發(fā)明可對各區(qū)域的大小設(shè)定一適當?shù)呐R限值。由圖11、圖12的討論可知,當數(shù)據(jù)遷移過程中斷于某區(qū)域時,本發(fā)明會在數(shù)據(jù)遷移恢復(fù)時重新遷移該區(qū)域內(nèi)的所有數(shù)據(jù)片段。若該區(qū)域過大,重新遷移該區(qū)域可能就需要相當?shù)臅r間;為了避免此種情形,各區(qū)域的大小可以有一上限的臨限值,譬如說是來源硬盤容量的1%。當然,此臨限值是可以視情況調(diào)整的,舉例來說,若數(shù)據(jù)遷移過程中斷的機會很少,或使用者不在乎較長的恢復(fù)時間,此臨限值就可增加,譬如說是來源硬盤容量的5%等等。
延續(xù)圖3的例子,請參考圖13;圖13示意的是本發(fā)明在數(shù)據(jù)遷移其間時實施優(yōu)化讀寫管理的情形。由圖6至圖10可知,在對各區(qū)域進行數(shù)據(jù)遷移時,會涉及許多的讀取/寫入運作,包括將待遷移的數(shù)據(jù)片段由來源硬盤讀出,并寫入至對應(yīng)的硬盤。為了增進讀寫運作的效能,本發(fā)明會進行優(yōu)化的讀寫管理。如前面討論過的,在對一硬盤發(fā)出一讀取/寫入指令時,其讀取/寫入的數(shù)據(jù)大小有一極值,譬如說是128K字節(jié)。由于每次對硬盤發(fā)出讀取/寫入指令均會消耗相當?shù)臅r間與系統(tǒng)效能,故應(yīng)充分利用每一個讀取/寫入指令,盡量使每一讀取/寫入指令能讀取/寫入較多(或最多)的數(shù)據(jù)。在圖13的圖面左方,顯示的就是現(xiàn)有技術(shù)中未優(yōu)化的讀寫過程;假設(shè)要在兩硬盤的RAID0硬盤陣列中遷移256K字節(jié)的數(shù)據(jù),此時現(xiàn)有技術(shù)會先對來源硬盤發(fā)出一個128K字節(jié)讀取指令,讀出128K字節(jié)的數(shù)據(jù),再依據(jù)RAID0硬盤陣列架構(gòu),將128K字節(jié)劃分為各64K字節(jié)的兩部分,同時以兩個64K字節(jié)寫入指令將這兩部分的數(shù)據(jù)分別寫入至兩個硬盤。重復(fù)上述的「128K字節(jié)讀取指令-兩個64K字節(jié)讀取指令」,就能完成256K字節(jié)的數(shù)據(jù)遷移。
觀察現(xiàn)有的讀寫過程可知,現(xiàn)有技術(shù)并沒有充分利用寫入指令,因為一個寫入指令最多可寫入128K字節(jié)的數(shù)據(jù),但現(xiàn)有技術(shù)僅寫入了64K字節(jié)的數(shù)據(jù)。為了充分利用每個寫入指令,本發(fā)明會采用圖13圖面右方的優(yōu)化讀寫過程,先重復(fù)兩個128K字節(jié)的讀取指令,由來源硬盤累積讀出256K字節(jié)的數(shù)據(jù),再依據(jù)硬盤陣列架構(gòu)將256K字節(jié)劃分為各128K字節(jié)的兩部分,并同時以兩個128K字節(jié)的寫入指令將128K字節(jié)的數(shù)據(jù)分別寫入至對應(yīng)的硬盤,完成256K字節(jié)的數(shù)據(jù)遷移。同樣是在兩個硬盤的硬盤陣列中遷移256K字節(jié)的數(shù)據(jù),現(xiàn)有技術(shù)需分四次發(fā)出六個讀取/寫入指令,本發(fā)明的優(yōu)化讀寫過程僅需分三次發(fā)出四個讀取/寫入指令,故本發(fā)明能進一步地增進數(shù)據(jù)遷移過程中的讀寫效能,縮短數(shù)據(jù)遷移所需的時間。
基本上,就如前面討論過的,本發(fā)明是以「區(qū)域」為一整體來進行數(shù)據(jù)遷移的;也就是說,本發(fā)明在將某一區(qū)域的各個數(shù)據(jù)片段讀出并寫入至對應(yīng)的硬盤時,不會在同一讀取指令中讀取不同區(qū)域的數(shù)據(jù)片段,不同區(qū)域的數(shù)據(jù)片段一定會以不同的讀取指令而由來源硬盤中讀出。因為,若同一讀取指令中可讀取不同區(qū)域的數(shù)據(jù)片段,當數(shù)據(jù)遷移過程在該讀取指令進行期間中斷時,就無法確定數(shù)據(jù)遷移過程是在對那個區(qū)域進行遷移時中斷。當本發(fā)明的流程100剛開始進行時,最初的幾個區(qū)域都很小,如區(qū)域Z(0)、Z(1)僅有兩個數(shù)據(jù)片段(可參考圖5),各數(shù)據(jù)片段通常為4、8或16K字節(jié),故單一一個讀取指令就能讀出所有的數(shù)據(jù)片段。但是,隨著各區(qū)域的大小呈指數(shù)型態(tài)成長,就越能凸顯本發(fā)明優(yōu)化讀寫管理的優(yōu)點。譬如說,區(qū)域Z(5)會有16個數(shù)據(jù)片段,若各數(shù)據(jù)片段為16K字節(jié),區(qū)域Z(5)就會有256K字節(jié)的數(shù)據(jù),可利用圖13中的優(yōu)化讀寫過程來加速其數(shù)據(jù)遷移。區(qū)域Z(5)之后的各個區(qū)域會越變越大,就更能發(fā)揮優(yōu)化讀寫管理的優(yōu)點了。
在圖3至圖13中,是以兩硬盤的RAID0硬盤陣列為例子來討論本發(fā)明的各項技術(shù)細節(jié)。以下將推廣本發(fā)明的應(yīng)用,討論本發(fā)明在N個硬盤的RAID0硬盤陣列下進行數(shù)據(jù)遷移的情形。請參考圖14,圖14所示的就是N個硬盤的RAID0硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分配的情形。數(shù)據(jù)遷移前,數(shù)據(jù)儲存于來源硬盤HD(0);加裝成員硬盤HD(1)至HD(N-1)而組成一硬盤陣列后,來源硬盤中的數(shù)據(jù)就會被劃分為多個數(shù)據(jù)片段而交錯分配于各個硬盤。如圖14所示,來源硬盤HD(0)中被劃分出來的數(shù)據(jù)片段S0(0)至S0(N-1)會在數(shù)據(jù)遷移后被重新分配至硬盤HD(0)至HD(N-1),在硬盤陣列中形成同一層會被并行存取的數(shù)據(jù)片段,而這N個數(shù)據(jù)片段就可被歸類在同一群組G(0)。同理,數(shù)據(jù)片段Sm(0)至Sm(N-1)會在數(shù)據(jù)遷移后成為同一層被并行存取的數(shù)據(jù)片段,這N個數(shù)據(jù)片段就可歸類在同一群組G(m)。
延續(xù)圖14的例子,請參考圖15及圖16;圖15示意的是本發(fā)明進行區(qū)域規(guī)劃的示意圖,圖16則表列了各個區(qū)域的大小,也就是各區(qū)域所能具有的群組數(shù)目及數(shù)據(jù)片段的數(shù)目。由圖15、圖16可知,推廣到N個硬盤的例子,各個區(qū)域的大小還是會呈指數(shù)型態(tài)增長。基本上,區(qū)域Z(0)中有一個數(shù)據(jù)片段(也就是數(shù)據(jù)片段S0(0))是不用被遷移的,故區(qū)域Z(0)在數(shù)據(jù)遷移后會有(N-1)個數(shù)據(jù)片段是可覆寫的,也因此,區(qū)域Z(1)就可具有(N-1)個群組;因為每個群組中只有一個數(shù)據(jù)片段會被寫入至區(qū)域Z(0),其它的數(shù)據(jù)片段會被寫入至其它的成員硬盤,故區(qū)域Z(0)中空出來的(N-1)個可覆寫數(shù)據(jù)片段就可對應(yīng)于區(qū)域Z(1)中的(N-1)個群組。依據(jù)相同的原理,若前一區(qū)域Z(j)中有M個可覆寫的數(shù)據(jù)片段,次一區(qū)域Z(j+1)就可以有M*N個群組(也就是M*N*N個數(shù)據(jù)片段),形成各區(qū)域大小指數(shù)型態(tài)增長的趨勢,如圖16所示。如同前面討論過的,考慮到數(shù)據(jù)遷移中斷后恢復(fù)所需的時間,本發(fā)明可對區(qū)域的大小設(shè)定一臨限值,譬如說是來源硬盤容量的1%;換句話說,區(qū)域Z(j)的大小就是min{(N-1)*(N^j)個數(shù)據(jù)片段的總?cè)萘?,臨限值),也就是在「臨限值」與「(N-1)*(N^j)個數(shù)據(jù)片段的總?cè)萘俊归g取一較小值來決定區(qū)域Z(j)的大小。
請參考圖17至圖20;延續(xù)圖14、圖15中的例子,第17至圖19就示意了本發(fā)明圖2中的也就是流程100對N個硬盤的硬盤陣列進行數(shù)據(jù)遷移的過程。首先,如圖17所示,數(shù)據(jù)遷移開始,各硬盤中的起始數(shù)據(jù)MSA指向區(qū)域Z(0)的起始地址,并開始將區(qū)域Z(0)中的各個數(shù)據(jù)片段S0(1)至S0(N-1)分別復(fù)制(寫入)至硬盤HD(1)至HD(N-1);數(shù)據(jù)片段S0(0)則不需遷移。接下來,如圖18所示,在順利將區(qū)域Z(0)中的數(shù)據(jù)片段S0(1)至S0(N-1)復(fù)制至各個成員硬盤后,起始數(shù)據(jù)MSA就會被更新,指向次一區(qū)域Z(1),開始對區(qū)域Z(1)進行數(shù)據(jù)遷移,而前一區(qū)域Z(0)就成為可覆寫區(qū),其內(nèi)的數(shù)據(jù)片段S0(1)至S0(N-1)就可被區(qū)域Z(1)中(N-1)個群組的第一個數(shù)據(jù)片段S1(0)、S2(0)至S(N-1)(0)所覆寫。同時,區(qū)域Z(1)中各群組的數(shù)據(jù)片段S1(1)、S2(1)至S(N-1)(1)會被復(fù)制至硬盤HD(1),以此類推;數(shù)據(jù)片段S1(N-1)、S2(N-1)至S(N-1)(N-1)則會被復(fù)制到硬盤HD(N-1)。
等區(qū)域Z(1)中(N-1)個群組的所有數(shù)據(jù)片段都已經(jīng)被復(fù)制至對應(yīng)的硬盤之后,區(qū)域Z(1)中的N*(N-1)個數(shù)據(jù)片段就成為可覆寫的數(shù)據(jù)片段。承接圖18的情形,更一般化(general)的數(shù)據(jù)遷移過程可用圖19來表示。假設(shè)區(qū)域Z(j)有M個群組、M*N個數(shù)據(jù)片段,區(qū)域Z(j+1)就可以有M*N個群組(即群組G(m+1)至G(m+M*N))、M*(N^2)個數(shù)據(jù)片段。當數(shù)據(jù)遷移過程進行至區(qū)域Z(j+1)時,起始數(shù)據(jù)MSA指向區(qū)域Z(j+1)而記錄了區(qū)Z(j+1)的起始地址,而數(shù)據(jù)遷移的過程,就是將群組G(m+1)至G(m+M*N)中的第一個數(shù)據(jù)片段(共M*N個)復(fù)制/覆寫至區(qū)域Z(j)中,同時也將群組G(m+1)至G(m+M*N)中的第二個數(shù)據(jù)片段(共M*N個)復(fù)制至硬盤HD(1),以此類推;群組G(m+1)至G(m+M*N)中的第N個數(shù)據(jù)片段(共M*N個)則復(fù)制至硬盤HD(N-1)。根據(jù)圖19依序在不同區(qū)域中進行數(shù)據(jù)遷移,就能完成所有的數(shù)據(jù)遷移。
延續(xù)圖14的例子,本發(fā)明在N硬盤的硬盤陣列中進行優(yōu)化讀寫管理的情形則示意于圖20。在現(xiàn)有未優(yōu)化的讀寫過程中,每次向來源硬盤發(fā)出一讀取指令后就隨即將讀出的數(shù)據(jù)劃分寫入至各硬盤,故每個寫入指令都僅寫入少數(shù)的數(shù)據(jù);要完成N*128K字節(jié)的數(shù)據(jù)遷移,現(xiàn)有讀寫過程可能需要分2*N次發(fā)出N*(N+1)個讀取/寫入指令。相較之下,本發(fā)明可先向來源硬盤重復(fù)發(fā)出多筆讀取指令,累計讀出較多的數(shù)據(jù)后,才將累計讀出的數(shù)據(jù)一次寫入至對應(yīng)的硬盤。同樣要完成N*128字節(jié)的數(shù)據(jù)遷移,本發(fā)明僅需分(N+1)次發(fā)出2*N個讀取/寫入指令,藉由對寫入指令的充分利用,本發(fā)明就可在數(shù)據(jù)遷移期間節(jié)省可觀的時間與系統(tǒng)資源。當然,本發(fā)明不一定要累積N次讀取指令才發(fā)出寫入指令,可視系統(tǒng)資源來調(diào)整優(yōu)化讀取的方式。舉例來說,由于重復(fù)多次讀取指令所累積取得的數(shù)據(jù)可緩沖暫存在內(nèi)存內(nèi),讀取指令可重復(fù)的次數(shù)就和內(nèi)存能提供多少存儲資源有關(guān)。若使用者在數(shù)據(jù)遷移過程還要執(zhí)行其它的程序,就可適當?shù)販p少讀取指令重復(fù)的次數(shù),減少數(shù)據(jù)遷移所需占用的內(nèi)存資源?;旧希灰苤貜?fù)讀取指令累積讀出的數(shù)據(jù),就能優(yōu)于現(xiàn)有未優(yōu)化的讀寫過程。
除了RAID0的硬盤陣列之外,本發(fā)明的精神還可推廣運用于其它種類的硬盤陣列架構(gòu),像是RAID0+1、RAID5以及矩陣式冗余廉價硬盤陣列(matrixRAID)架構(gòu)。請先參考圖21;圖21表列的即為本發(fā)明在不同架構(gòu)的硬盤陣列下進行數(shù)據(jù)遷移時遷移進度及區(qū)域的規(guī)劃情形。在不同架構(gòu)的硬盤陣列中,本發(fā)明還是可沿用圖2中的流程100來進行數(shù)據(jù)遷移,只不過各區(qū)域、群組的規(guī)劃會稍微不同。在進行數(shù)據(jù)遷移時,本發(fā)明還是將來源硬盤中的各個數(shù)據(jù)片段依序歸類為不同群組,并將各群組依序歸類在各個區(qū)域,各區(qū)域、各群組中所具有的數(shù)據(jù)片段個數(shù),就表列在圖21中。圖21非常類似于圖16;推廣至各種不同硬盤陣列架構(gòu)時,一個群組固定具有Q個數(shù)據(jù)片段,而各區(qū)域的大小則隨K的乘方而成指數(shù)型態(tài)增長。在RAID0(與矩陣式冗余廉價硬盤陣列)的架構(gòu)下,常數(shù)Q就等于硬盤陣列中硬盤的個數(shù),也就是N。在RAID0+1的硬盤陣列架構(gòu)下,常數(shù)Q就等于硬盤陣列中的硬盤個數(shù)之半(要組成RAID0+1的硬盤陣列,必定要有偶數(shù)個硬盤)。在RAID5的硬盤陣列架構(gòu)下,常數(shù)Q則等于硬盤陣列中硬盤數(shù)目減1。以下將舉例來說明本發(fā)明在不同硬盤架構(gòu)下進行數(shù)據(jù)遷移的情形。
請參考圖22。圖22示意的是一個由四硬盤形成的RAID0+1硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的情形;其中,硬盤HD(0)為來源硬盤,HD(1)至HD(3)為新增的成員硬盤?;旧?,RAID0+1硬盤陣列是分別以一半數(shù)目的硬盤各自組成兩個RAID0的硬盤陣列,而其中一個RAID0硬盤陣列為另一個RAID0硬盤陣列的鏡像備份。如圖22所示,硬盤HD(0)與HD(1)形成一RAID0硬盤陣列,另外的硬盤HD(2)用來備份硬盤HD(0)中的數(shù)據(jù),硬盤HD(3)則用來備份硬盤HD(1)中的數(shù)據(jù)。所以,在將本發(fā)明的數(shù)據(jù)遷移技術(shù)推廣運用于N個硬盤的RAID0+1硬盤陣列時(N為偶數(shù)),就相當于在(N/2)個硬盤中進行RAID0硬盤陣列的數(shù)據(jù)遷移。這也就是圖21中以Q=(N/2)的原因。像在圖22的例子,當本發(fā)明運用在四個硬盤的RAID0+1硬盤陣列時,其實是將來源硬盤中會在硬盤HD(0)、HD(1)內(nèi)被并行存取的數(shù)據(jù)片段分類在一群組,像是將數(shù)據(jù)片段S0(0)、S0(1)分為群組G(0),后續(xù)的兩個數(shù)據(jù)片段S1(0)、S1(1)則為群組G(1),等等;而區(qū)域的規(guī)劃則可利用圖21的列表,以Q=2來計算各區(qū)域的大小。在實際進行遷移時,可以直接沿用圖2中的流程100來進行,只不過,在對某一區(qū)域Z(j)進行步驟108時,要覆寫至前一區(qū)域Z(j-1)的數(shù)據(jù)片段要另行復(fù)制至硬盤HD(2),要由來源硬盤HD(0)寫入至硬盤HD(1)的數(shù)據(jù)片段同時也要寫入至硬盤HD(3)。
以下將以三個硬盤的RAID5硬盤陣列為例,來說明本發(fā)明的數(shù)據(jù)遷移技術(shù)推廣運用于RAID5硬盤陣列的情形。請先參考圖23;圖23示意的是三個硬盤的RAID5硬盤陣列在數(shù)據(jù)遷移前后的數(shù)據(jù)分布情形。除了類似于RAID0硬盤陣列架構(gòu)的數(shù)據(jù)片段劃分之外,RAID5硬盤陣列的另一特征就是同位檢查數(shù)據(jù)的運算與分布。在N個硬盤的RAID5硬盤陣列中,每(N-1)個會被并行存取的數(shù)據(jù)片段就可計算(像是根據(jù)異或的同位運算)出一個檢查數(shù)據(jù),這(N-1)個數(shù)據(jù)片段連同計算出的檢查數(shù)據(jù)就可被視為N個片段而分別儲存在硬盤陣列中的一個硬盤。若N個硬盤中有一個硬盤故障,利用其它(N-1)個硬盤的(N-1)個片段就可重新計算出毀損的那個片段。就像圖2 3所繪示的,利用來源硬盤HD(0)的兩個片段S0(0)、S0(1)可計算出檢查數(shù)據(jù)P0,而片段S0(0)、S0(1)及P0在數(shù)據(jù)遷移后會被分別分配至各硬盤HD(0)至HD(2),形成同一層會被并行存取的三個片段。同理,由來源硬盤HD(0)的次兩個數(shù)據(jù)片段S1(0)、S1(1)可計算出一對應(yīng)的檢查數(shù)據(jù)P1,而片段S1(0)、S1(1)及P(1)就會在數(shù)據(jù)遷移后分別分配至一硬盤(至于那個片段會被分配至那個硬盤可以有多種不同的實施方式,像在圖23的例子中,檢查數(shù)據(jù)P1會被分配至HD(1))。以此類推,根據(jù)數(shù)據(jù)片段S2(0)、S2(1)可計算出檢查數(shù)據(jù)P2,而片段S2(0)、S2(1)及P2就會在數(shù)據(jù)遷移后在各硬盤中成為同一層的片段。
將本發(fā)明的技術(shù)精神推廣至N個硬盤的RAID5硬盤陣列時,由于每(N-1)個數(shù)據(jù)片段就可計算出一個檢查數(shù)據(jù)而湊成N個同一層的片段,故可將(N-1)個數(shù)據(jù)片段歸類在同一個群組,這也就是圖21中Q=(N-1)的緣故。像圖23中有三個硬盤的RAID5硬盤陣列,就可以將未遷移數(shù)據(jù)中的每兩個數(shù)據(jù)片段歸類在同一群組,利用圖21的公式來計算遷移進度中各區(qū)域的大小。在實際進行數(shù)據(jù)遷移時,本發(fā)明可沿用圖2的流程100來對RAID5硬盤陣列進行數(shù)據(jù)遷移,只有步驟108要稍加修改要遷移區(qū)域Z(j)中各群組的數(shù)據(jù)時,要根據(jù)同一群組中的數(shù)據(jù)片段計算出對應(yīng)的檢查數(shù)據(jù),再將同一群組中的數(shù)據(jù)片段連同檢查數(shù)據(jù)分別寫入至各硬盤;其中有一片段會被覆寫至前一區(qū)域Z(j-1)中。延續(xù)圖23的例子,請參考第24至圖26;圖24至圖26即為本發(fā)明在三個硬盤的RAID5硬盤陣列中進行數(shù)據(jù)遷移的示意圖。首先,如圖24所示,在數(shù)據(jù)遷移之初,起始數(shù)據(jù)MSA指向區(qū)域Z(0),在根據(jù)區(qū)域Z(0)中的數(shù)據(jù)片段S0(0)、S0(1)計算出檢查數(shù)據(jù)P0后,數(shù)據(jù)片段S0(1)及檢查數(shù)據(jù)P0就可分別復(fù)制到硬盤HD(1)及HD(2),完成區(qū)域Z(0)的數(shù)據(jù)遷移。
接下來,在圖25中,起始數(shù)據(jù)MSA被更新而指向區(qū)域Z(1);根據(jù)數(shù)據(jù)片段S1(0)、S1(1)計算出檢查數(shù)據(jù)P1后,數(shù)據(jù)片段S1(0)、S1(1)及檢查數(shù)據(jù)P1就可被寫入至各個硬盤HD(0)至HD(2);其中,數(shù)據(jù)片段S1(0)可覆寫在區(qū)域Z(0)中。
如圖26所示,在完成區(qū)域Z(1)中的數(shù)據(jù)遷移后,起始數(shù)據(jù)MSA就可被更新而指向區(qū)域Z(2),而區(qū)域Z(1)就成為可覆寫區(qū),使區(qū)域Z(1)原本的兩個數(shù)據(jù)片段可對應(yīng)于區(qū)域Z(2)的兩個群組。根據(jù)群組G(2)中的各個數(shù)據(jù)片段算出檢查數(shù)據(jù)P2后,群組G(2)中的各個數(shù)據(jù)片段連同檢查數(shù)據(jù)P2就能寫入至各個硬盤,其中,依照RAID5硬盤陣列架構(gòu),檢查數(shù)據(jù)P2可覆寫區(qū)域Z(1)中的數(shù)據(jù)片段S1(0)。同理,根據(jù)群組G(3)中的各個數(shù)據(jù)片段算出檢查數(shù)據(jù)P3后,群組G(3)中的數(shù)據(jù)片段S3(0)、S3(1)以及檢查數(shù)據(jù)P3就能分別寫入至各硬盤;其中,數(shù)據(jù)片段S3(0)可覆寫區(qū)域Z(2)中的數(shù)據(jù)片段S1(1)。以類似的原理依序遷移各個區(qū)域,就能完成RAID5硬盤陣列的數(shù)據(jù)遷移。由圖24至圖26的討論可知,本發(fā)明的數(shù)據(jù)進度規(guī)劃/記錄/恢復(fù)與優(yōu)化的讀寫管理技術(shù)皆可延伸推廣于RAID5架構(gòu)的硬盤陣列。
請參考圖27;以兩個硬盤的硬盤陣列為例,圖27即為矩陣式冗余廉價硬盤陣列在數(shù)據(jù)遷移前后數(shù)據(jù)分布的示意圖;硬盤HD(0)為來源硬盤,硬盤HD(1)則是成員硬盤。在矩陣式冗余廉價硬盤陣列中,是將硬盤陣列的存儲空間配置為不同型態(tài)的硬盤陣列架構(gòu);舉例來說,原本在來源硬盤HD(0)中的數(shù)據(jù)D0會依據(jù)RAID0的硬盤陣列架構(gòu)分配至各硬盤(也就是會被劃分為各數(shù)據(jù)片段而交錯地分配至硬盤HD(0)及HD(1)),而來源硬盤中的其它數(shù)據(jù)D則會依據(jù)其它種類的硬盤架構(gòu)(譬如說是RAID0+1等等)分配為數(shù)據(jù)D1、D2而分別儲存在硬盤HD(0)、HD(1)。在對矩陣式冗余廉價硬盤陣列進行數(shù)據(jù)遷移時,就可利用本發(fā)明的技術(shù)來遷移那些需要以RAID0架構(gòu)分布的數(shù)據(jù);在此情形下,可直接套用圖16的公式來規(guī)劃數(shù)據(jù)遷移進度,并沿用圖2中的流程100來進行數(shù)據(jù)遷移。
總結(jié)來說,本發(fā)明揭露了較佳的遷移進度規(guī)劃/記錄與優(yōu)化的讀寫管理,以增進硬盤陣列數(shù)據(jù)遷移的效能,并能兼顧數(shù)據(jù)遷移的安全;即使數(shù)據(jù)遷移過程中斷,也不會造成數(shù)據(jù)的流失或損毀,還能在中斷后繼續(xù)恢復(fù)數(shù)據(jù)遷移。在遷移進度規(guī)劃/記錄方面,本發(fā)明是將來源硬盤中待遷移的數(shù)據(jù)片段歸類于各個區(qū)域,每個區(qū)域中有多個要遷移至不同硬盤的數(shù)據(jù)片段,再以各區(qū)域為一整體依序進行數(shù)據(jù)遷移,并在硬盤陣列的各硬盤中儲存一個起始數(shù)據(jù)以記錄數(shù)據(jù)遷移的進度(也就是待遷移區(qū)域的起始地址),以作為遷移中斷后回復(fù)的依據(jù)。當某一區(qū)域Z(j)在進行數(shù)據(jù)遷移而將其數(shù)據(jù)片段復(fù)制至硬盤陣列的各個硬盤時,起始數(shù)據(jù)就會記錄該區(qū)域的起始地址;當區(qū)域Z(j)的數(shù)據(jù)均已被復(fù)制至對應(yīng)的硬盤后,起始數(shù)據(jù)就可以更新至次一區(qū)域Z(j+1);而區(qū)域Z(j+1)中要分布至來源硬盤的數(shù)據(jù)就可被復(fù)制而覆寫至前一區(qū)域Z(j+1),要分布至其它硬盤的數(shù)據(jù)片段也同時被復(fù)制到各個對應(yīng)的硬盤。在遷移區(qū)域Z(j+1)中的數(shù)據(jù)片段時,由于這些數(shù)據(jù)片段是被復(fù)制到其它的硬盤或來源硬盤中的前一區(qū)域,故區(qū)域Z(j+1)中的數(shù)據(jù)片段不會被覆寫或改變。也就是說,即使數(shù)據(jù)遷移過程在遷移區(qū)域Z(j+1)時中斷,區(qū)域Z(j+1)中的數(shù)據(jù)也不會流失或損毀;當數(shù)據(jù)遷移恢復(fù)時,就可由區(qū)域Z(j+1)恢復(fù)中斷的數(shù)據(jù)遷移。另外,基于本發(fā)明遷移進度規(guī)劃的原則,區(qū)域Z(j+1)只會有一部份的數(shù)據(jù)片段要覆寫至區(qū)域Z(j),其它的數(shù)據(jù)片段則是要寫入至其它硬盤,故區(qū)域Z(j+1)的大小就可以大于前一區(qū)域Z(j),并使各個區(qū)域的大小可呈指數(shù)型態(tài)增長。大小漸增的區(qū)域規(guī)劃可減少起始地址被更新的次數(shù),還能與本發(fā)明優(yōu)化的讀寫管理相輔相成,可累積較多的數(shù)據(jù)以充分利用每一個讀取/寫入指令,增進數(shù)據(jù)遷移的效能。而本發(fā)明的技術(shù)精神不僅能在RAID0架構(gòu)下的硬盤陣列進行數(shù)據(jù)遷移,還能推廣運用于其它種類架構(gòu)的硬盤陣列,像是RAID0+1、RAID5以及矩陣式冗余廉價硬盤陣列。相較于現(xiàn)有技術(shù),本發(fā)明能在確保數(shù)據(jù)遷移安全的情形下增進數(shù)據(jù)遷移的效能,減少數(shù)據(jù)遷移所需耗費的時間與計算機系統(tǒng)資源,并可廣泛運用于不同種類的硬盤陣列。
以上所述僅為本發(fā)明的較佳實施例,凡依本發(fā)明申請專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
權(quán)利要求
1.一種于一硬盤陣列中進行數(shù)據(jù)遷移的方法,該硬盤陣列中包含有一來源硬盤及至少一成員硬盤;該方法是用來將該來源硬盤中的數(shù)據(jù)分散儲存至該硬盤陣列的各個硬盤,而該方法包含有將該來源硬盤中待遷移的數(shù)據(jù)劃分為多個數(shù)據(jù)片段;將該來源硬盤的存儲空間劃分為一可覆寫區(qū)及一待遷移區(qū),使該可覆寫區(qū)記錄有多筆數(shù)據(jù)片段,而該待遷移區(qū)中記錄有另外多筆數(shù)據(jù)片段;以及對該待遷移區(qū)中的數(shù)據(jù)片段進行數(shù)據(jù)遷移,使該待遷移區(qū)中的各個數(shù)據(jù)片段分別寫入至一成員硬盤或覆寫至該來源硬盤的可覆寫區(qū)中,并使被覆寫至該可覆寫區(qū)中的數(shù)據(jù)片段的數(shù)目少于該待遷移區(qū)中數(shù)據(jù)片段的數(shù)目。
2.如權(quán)利要求1所述的方法,其另包含有將該待遷移區(qū)的起始地址記錄為一起始數(shù)據(jù)。
3.如權(quán)利要求2所述的方法,其另包含有將該起始數(shù)據(jù)記錄在該來源硬盤及各個成員硬盤中。
4.如權(quán)利要求2所述的方法,其另包含有在對該待遷移區(qū)中的數(shù)據(jù)片段進行數(shù)據(jù)遷移后,若該待遷移區(qū)中的各個數(shù)據(jù)片段均已分別被寫入至一對應(yīng)的成員硬盤或該來源硬盤,則將該待遷移區(qū)當作一新的可覆寫區(qū),并從該來源硬盤的待遷移數(shù)據(jù)中劃分出一個新的待遷移區(qū),使該待遷移區(qū)具有多個待遷移的數(shù)據(jù)片段;以及更新該起始數(shù)據(jù),使該起始數(shù)據(jù)記錄該新的待遷移區(qū)的起始地址。
5.如權(quán)利要求2所述的方法,其另包含有在對該待遷移區(qū)中的數(shù)據(jù)片段進行數(shù)據(jù)遷移時,若該待遷移區(qū)中尚有數(shù)據(jù)片段未被寫入至一對應(yīng)的成員硬盤或該來源硬盤時數(shù)據(jù)遷移即中斷,則在重新開始數(shù)據(jù)遷移時,根據(jù)該起始數(shù)據(jù)找到該待遷移區(qū),并重新將該待遷移區(qū)的每一數(shù)據(jù)片段寫入至一對應(yīng)的成員硬盤或覆寫至該來源硬盤的可覆寫區(qū)。
6.如權(quán)利要求1所述的方法,其中,每一硬盤可接收一讀取指令以從該硬盤中讀出數(shù)據(jù)量大小不超過一讀取極值的數(shù)據(jù),并可接收一寫入指令以將數(shù)據(jù)寫入至該硬盤,而該方法另包含有對該待遷移區(qū)中的數(shù)據(jù)片段進行數(shù)據(jù)遷移時,若該待遷移區(qū)中所有數(shù)據(jù)片段的數(shù)據(jù)量大小已超過該讀取極值,則先利用多個讀取指令由該來源硬盤中讀出待遷移的數(shù)據(jù)片段后,再以寫入指令將多個讀取指令累積讀出的數(shù)據(jù)寫入至該硬盤陣列的各個硬盤。
7.一種計算機系統(tǒng),其包含有一硬盤陣列,其包含有一來源硬盤及至少一成員硬盤,各硬盤用來提供存儲空間以記錄數(shù)據(jù);一中央處理器,用來主控該計算機系統(tǒng)的運作;以及一內(nèi)存,其可儲存一數(shù)據(jù)遷移程序;當該中央處理器執(zhí)行該數(shù)據(jù)遷移程序時,可使該來源硬盤中的數(shù)據(jù)分散儲存至該硬盤陣列的各個硬盤,而該遷移程序包含有一規(guī)劃程序;當該中央處理器執(zhí)行該規(guī)劃程序時,可將該來源硬盤中待遷移的數(shù)據(jù)劃分為多個數(shù)據(jù)片段,并將該來源硬盤的存儲空間劃分為一可覆寫區(qū)及一待遷移區(qū),使該可覆寫區(qū)記錄有多筆數(shù)據(jù)片段,而該待遷移區(qū)中記錄有另外多筆數(shù)據(jù)片段;以及一區(qū)域遷移程序;當該中央處理器執(zhí)行該區(qū)域遷移程序時,可對該待遷移區(qū)中的數(shù)據(jù)片段進行數(shù)據(jù)遷移,使該待遷移區(qū)中的各個數(shù)據(jù)片段分別寫入至一成員硬盤或覆寫至該來源硬盤的可覆寫區(qū)中,并使被覆寫至該可覆寫區(qū)中的數(shù)據(jù)片段的數(shù)目少于該待遷移區(qū)中數(shù)據(jù)片段的數(shù)目。
8.如權(quán)利要求7所述的計算機系統(tǒng),其中,該遷移程序另包含有一記錄程序;當該中央處理器執(zhí)行該記錄程序時,可將該待遷移區(qū)的起始地址記錄為一起始數(shù)據(jù)。
9.如權(quán)利要求8所述的計算機系統(tǒng),其中,當該中央處理器執(zhí)行該記錄程序時,另可將該起始數(shù)據(jù)記錄在該來源硬盤及各個成員硬盤中。
10.如權(quán)利要求8所述的計算機系統(tǒng),其中,當該中央處理器執(zhí)行該區(qū)域遷移程序時,若該待遷移區(qū)中的各個數(shù)據(jù)片段均已分別被寫入至一對應(yīng)的成員硬盤或該來源硬盤,則該中央處理器可將該待遷移區(qū)當作一新的可覆寫區(qū),再從該來源硬盤的待遷移數(shù)據(jù)中劃分出一個新的待遷移區(qū),使該待遷移區(qū)具有多個待遷移的數(shù)據(jù)片段,而該中央處理器也會執(zhí)行該記錄程序,以更新該起始數(shù)據(jù),使該起始數(shù)據(jù)記錄該新的待遷移區(qū)的起始地址。
11.如權(quán)利要求8所述的計算機系統(tǒng),其中,該遷移程序中另包含有一恢復(fù)程序;當該中央處理器執(zhí)行該區(qū)域遷移程序時,若該待遷移區(qū)中尚有數(shù)據(jù)片段未被寫入至一對應(yīng)的成員硬盤或該來源硬盤時數(shù)據(jù)遷移即中斷,則當該中央處理器在重新執(zhí)行該遷移程序時會執(zhí)行該恢復(fù)程序,以根據(jù)該起始數(shù)據(jù)找到該待遷移區(qū),并重新將該待遷移區(qū)的每一數(shù)據(jù)片段寫入至一對應(yīng)的成員硬盤或覆寫至該來源硬盤的可覆寫區(qū)。
12.如權(quán)利要求7所述的計算機系統(tǒng),其中,每一硬盤可接收一讀取指令以從該硬盤中讀出數(shù)據(jù)量大小不超過一讀取極值的數(shù)據(jù),并可接收一寫入指令以將數(shù)據(jù)寫入至該硬盤,而該遷移程序中另包含有一讀寫管理程序,當該中央處理器執(zhí)行該區(qū)域遷移程序時,該中央處理器會執(zhí)行該讀寫管理程序,以判斷該待遷移區(qū)中所有數(shù)據(jù)片段的數(shù)據(jù)量大小是否已超過該讀取極值;若是,則該中央處理器可先利用多個讀取指令由該來源硬盤中讀出待遷移的數(shù)據(jù)片段后,再同時以各個寫入指令將多個讀取指令累積讀出的數(shù)據(jù)寫入至該硬盤陣列的各個硬盤。
全文摘要
本發(fā)明提供一種硬盤陣列數(shù)據(jù)遷移的方法與相關(guān)裝置。在將一來源硬盤中的數(shù)據(jù)分割并遷移至硬盤陣列中的各個硬盤時,本發(fā)明是將來源硬盤中待遷移的各個數(shù)據(jù)片段歸類于不同的區(qū)域;在將某一給定區(qū)域中的多個數(shù)據(jù)片段分別寫入至不同硬盤后,就可將次一區(qū)域中的數(shù)據(jù)片段覆寫至該給定區(qū)域中。由于次一區(qū)域中的所有數(shù)據(jù)片段會分散寫入至各個硬盤,僅有少數(shù)會覆寫至該給定區(qū)域中,故次一區(qū)域中數(shù)據(jù)片段個數(shù)可大于該給定區(qū)域中的數(shù)據(jù)片段個數(shù),以在兼顧遷移安全的情形下使每一區(qū)域均大于前一區(qū)域,方便遷移進度的管理及數(shù)據(jù)讀寫過程的優(yōu)化。
文檔編號G06F12/00GK1614573SQ20041009800
公開日2005年5月11日 申請日期2004年12月1日 優(yōu)先權(quán)日2004年12月1日
發(fā)明者胡國玉, 鄒興良 申請人:威盛電子股份有限公司