RAID-5是數據和奇偶校驗間斷分布在三個或更多物理磁盤上的、具有容錯功能的陣列方式。如果物理磁盤的某一部分失敗,您可以用餘下的數據和奇偶校驗重新創建磁盤上失敗的那一部分上的數據。對于多數活動由讀取數據構成的計算機環境中的數據冗餘來說,RAID-5是一種很好的解決方案。
有一些服務器或者磁盤陣列櫃會将RAID信息存儲在磁盤的某些地方,一般是陣列内每塊磁盤的最前面的一些扇區或者位于磁盤最後的一些扇區内。當RAID信息存儲在每塊磁盤的前面的扇區時,在分析與重組RAID的時候就需要人為的去掉這些信息,否則就會得到錯誤的結果。
在做RAID5的數據恢複的時候,除了需要知道RAID内數據的起始扇區,還需要了解(數據)塊大小(也稱深度,depth)、數據與校驗的方式等。
在實際應用中,陣列控制器一般要先把磁盤分成很多條帶(Stripe,如圖1上綠色線框起來的部分就是一個條帶),然後再對每組條帶做校驗。每個條帶上有且僅有一個磁盤上存放校驗信息,其他的磁盤上均存放數據。數據被控制器劃分為相等的大小,分别寫在每一塊硬盤上面。每一個數據塊的長度或者說數據塊的容量就被稱為塊大小或者叫(條帶)深度。在陣列内,條帶大小一般是相同的,即在每個磁盤内的數據塊的大小和校驗塊的大小是一緻的。
圖1
每一個條帶内的校驗盤上的内容是通過這個條帶上其他磁盤上的數據做異或而來,如P1=D1 XOR D2 XOR D3(見圖2)。一般來說,在盤序是正确的情況下,校驗塊在RAID5内每塊磁盤的寫入順序都是從第一塊盤到最後一塊盤或者從最後一塊盤到第一塊盤(如圖2)。從圖上看,校驗的排列總是從圖的左上角到右下角,或者從圖的有上角到左下角。這就為我們判斷磁盤的順序提供了依據。如果考慮上數據寫入磁盤的順序(這個就是所謂的校驗旋轉方式,以下簡稱旋轉方式),我們便得到了如圖2所示的4種數據與校驗的排列形式:forward 123(右不對稱)、forward dyn(右對稱)、backward 321(左不對稱)、backward dyn(左對稱)。其中forward dyn的方式比較不常見,在判斷旋轉方式的時候可以不考慮。
圖2
最後,不論是單獨使用的磁盤還是使用多塊磁盤組合成RAID,MBR始終是這個單獨磁盤或者RAID的0扇區。
二、恢複過程1.一般思路對于一般的RAID5數據恢複,我們需要了解以下參數:盤序、塊大小、旋轉方式和數據起始扇區等。所以,對于RAID5的數據恢複也就是通過文件系統、文件格式、磁盤内其它相關數據等來确定這四個參數的過程。當這四個參數确定後,便可以通過相關的工具将分散在每塊磁盤上數據還原為RAID5内實際的數據,從而達到恢複RAID5内數據的目的。
下面的是RAID5數據恢複的一般過程,之後将通過一個案例的分析過程來具體說明如何恢複RAID5的數據。
通過工具找到MBR與DBR,并判斷硬盤内的數據是否同步—〉通過MBR的位置判斷起始扇區位置—〉通過DBR找到NTFS分區的MFT記錄的位置—〉通過MFT記錄判斷塊大小、盤序、旋轉方式—〉數據重組、恢複RAID5内數據
2.恢複過程環境及工具:windows2003 server、Raid reconstructor3.02(以下簡稱RR3)、Runtimes DiskExplorer for NTFS 3.01(以下簡稱DE3)
基本情況:這是一組由四塊盤組成的RAID5,每塊硬盤為100M,windows2003的操作系統,分了一個分區290M,分區格式為NTFS。
首先,打開Raid reconstructor。①在 #drives 後面的文本框中輸入這個RAID5的盤數4。②分别在Drive1、Drive2、Drive3、Drive4後輸入每個磁盤或磁盤鏡像的路徑或單擊右鍵進行選擇。③單擊軟件下面的Open drives。
圖3
選擇Tools菜單中的XOR Test(這個命令用來測試RAID内的這些磁盤上的數據是否同步,即是否有硬盤是先掉線的),見到如圖4所示的窗口。④點擊軟件下方的Start鍵進行XOR測試。注意:這個測試需要這個RAID内的每一塊磁盤都參與測試,否則結果不具有參考價值。
圖4
等測試完成後會看到如圖5所示的結果。
圖5
在窗口的左側,RR3用帶有顔色的小方格表示測試的結果:一個小方格代表一個扇區,綠色表示XOR測試通過,紅色表示測試未通過,白色表示相應扇區上沒有數據。在窗口的右側,列出來的分區表(MBR)和啟動扇區(DBR)的相關信息。如在那個磁盤(鏡像文件)的第多少扇區上有MBR或DBR,并且會有關于這個MBR或者DBR一個簡要的說明。
對于當前的這個案例來講,從圖5上可以看出:在窗口的左面均是綠色的,說明XOR測試通過,這四塊磁盤上的數據是同步的;在窗口的右面,列出了在Disk1.img的第8扇區上有MBR,第71扇區上有DBR。在Disk3.img的1402扇區上有未知格式DBR。從基本情況描述上了解到,這個RAID内隻有一個NTFS的分區,所以這個未知格式DBR不是我們要尋找的。
我們現在來看Disk1.img上的MBR和DBR:MBR裡定義了一個NTFS的分區,這個分區是從63扇區開始,大小是578277個扇區。這些信息和這個RAID的基本情況描述的比較接近,所以這個MBR應該是這個RAID的MBR。根據在準備知識裡提到的MBR所在的扇區就是RAID的起始扇區,所以這個RAID在各個磁盤上的起始扇區就是8号扇區(扇區的編号是從0号開始的),即每塊磁盤的前面8個扇區是沒有用處的,在重組RAID時需要剔除掉。
使用DE3打開Disk1.img,找到DBR的位置(71扇區),在view菜單裡選擇as Boot Record或者直接按F10鍵,會看到如圖6所示内容。
圖6
注意紅框内的内容,它們分别表示每簇扇區數和$MFT所在的簇。用$MFT所在簇乘以每簇扇區數得到$MFT位于當前分區的哪個扇區上。因為在每個分區前面都有一部分的隐藏扇區,所以用$MFT在當前分區的位置加上當前分區前面的隐藏扇區數便得到了這個$MFT在RAID内的絕對位置(從這個RAID的0扇區開始)。RAID5的使用容量比磁盤的實際容量少一塊盤的容量(用來存儲交驗數據了),所以$MFT在每塊磁盤上的位置就應該是用$MFT的絕對位置除以盤數減一。又因為每塊磁盤前面存有一部分RAID信息,所以$MFT在單塊磁盤上的位置還要再加上RAID信息所占用的扇區數(起始扇區數)。具體公式如下:
由于數據是按照條帶存儲在硬盤上的,所以這個公式計算出來的MFT位置隻是個大概位置,MFT在每塊磁盤上的實際位置應該在這個位置附近。而且,在這之後的有關計算會因為計算時所選取的扇區号等原因出現一些誤差,一般在±4個扇區之内。
在這個例子中,MFT所在的位置=192759*1/(4-1) 8 =64261。所以,MFT在每塊磁盤上的位置為64261扇區附近。使用DE3打開每個鏡像文件的64261扇區,在view菜單裡選擇as File entry或者按F6鍵,會看到如圖7所示内容。
圖7
這裡面的每一條記錄對應MFT裡的一條記錄。這時,向下拖拽滑動條,會在記錄文件名的地方出現亂碼、文件名内出現非法字符(* ? \ / : ” < > | 等)或者不顯示文件名或文件的屬性(如圖8中紅框内部分)。
圖8
為什麼在MFT的記錄内會出現這種情況呢?在準備知識中曾經說過,RAID5直所以可以容錯是因為RAID5對每個條帶内的數據做了XOR校驗,并将校驗的結果按照規律均勻的存儲在RAID5内每塊硬盤上。之所以在MFT的記錄内會出現如圖8所示的現象就是因為這塊區域存儲的是校驗内容。所以,我們隻需要找到出現問題的MFT記錄起始位置與結束位置,就可以确定校驗塊的容量,而這個校驗塊的容量就是塊大小。如何在這個案例中,出現問題的MFT記錄是從64392扇區開始的,到64520扇區結束。所以,這個案例的塊大小就是64520-64392=128個扇區。
由于每個盤上的數據塊和校驗塊出現的順序是一定的(見圖1、圖2),所以可以通過确定校驗塊位于RAID5的哪個條帶上,從而确定磁盤的盤序。即,分别找到每一個磁盤或者鏡像文件内MFT記錄的一個校驗塊的末尾扇區,用這個扇區數減去起始扇區數的結果與塊大小和盤數的乘積取餘,所得的結果除以塊大小,最後的這個得數就是這個校驗塊位于哪個條帶上。具體公式如下:
所以,Disk1.img的校驗塊位于的條帶号是((64520—8)MOD(128*4))/128 =0 =4,用同樣的方法計算餘下硬盤鏡像内的校驗塊的位置,
Disk2.img的校驗塊位于的條帶号是((64898—8)MOD(128*4))/128≈2.95≈3,Disk3.img的校驗塊位于的條帶号是((64776—8)MOD(128*4))/128≈2,
Disk4.img的校驗塊位于的條帶号是((64646—8)MOD(128*4))/128≈1。
參考圖2,可以得到盤序是1234 Backward的或者是4321 Forward的。由于在Disk1.img上存在MBR,所以Disk1.img上的數據應該是RAID5内的起始數據塊,或者說Disk1.img上的數據是條帶1上D1。當盤序為1234 Backward時,這種數據的存放方式符合Disk1.img上的數據是條帶1上D1;當盤序為4321 Forward時,條帶上的第一個數據塊D1位于Disk3.img上,這個與Disk1.img上的數據是條帶1上D1不符。所以,盤序是1234 Backward。
至此,我們已經分析出來了起始扇區位置、盤序和塊大小,再分析出旋轉方式,對于RAID5的分析就完成了。再分析旋轉方式之前,先介紹一下MFT記錄文件的方式。MFT中對于文件的記錄采用的是一種被稱為”B-tree”的管理方式。簡單的說,就是在MFT中記錄的文件名一般都是按字母(中文按拼音字母)升序排列。使用DE3察看MFT記錄會看到每條文件記錄中的文件名與該條記錄附近記錄的文件名有很高的相關性(一緻性)。
圖9
這種對于文件記錄的管理方式為我們提供了判斷數據之間關系的依據,即相鄰的帶有MFT記錄的數據塊内的文件記錄的相關程度好與非相鄰數據塊内的文件記錄。
圖10
如圖10所示,當磁盤3中位于條帶1上的數據塊(D3)與磁盤4位于條帶2上的數據塊(D6,見圖10左側backward部分)相連時,旋轉方式就是backward dyn;當磁盤3中位于條帶1上的數據塊(D3)與磁盤1位于條帶2上的數據塊(D4,見圖10左側backward部分)相連時,旋轉方式就是backward 321。旋轉方式的判斷不僅限于使用D3數據塊來判斷,使用其他位置的數據也可以。如D5是與D6相連接還是與D7項連接等等。總之,隻要可以判斷數據的存儲的位置即可。
在這個案例中,我們選擇64648扇區這個位置,因為這個位置是磁盤3上一個校驗塊的首扇區,即圖10中P2的首扇區。将每個鏡像文件都定位到64648扇區,選擇view菜單中的as File entry,将64648扇區置于窗口的中間位置(如圖11—圖14所示),方便查看。
圖11 Disk1.img
圖12 Disk2.img
圖13 Disk3.img
圖14 Disk4.img
通過查看每個磁盤中MFT的文件記錄中的文件名(使用紅色粗線框起來的部分),可以發現:Disk3上的文件記錄與Disk4上的文件記錄的文件名的關聯程度要高于Disk3與Disk1上文件名的關聯程度,即Disk3上的數據與Disk4上的數據聯系更緊密一些,數據應該是寫完Disk3後寫Disk4。所以,旋轉方式是Backward dyn的(參考圖10或者圖2的數據存放方式)。
經過以上的分析,我們已經得到了起始扇區位置、盤序、塊大小和旋轉方式,将這些參數填加到RR3中(如圖15所示),⑤點擊open drives按鈕,⑥在Target的位置填寫輸出到設備或文件的路徑,⑦最後Copy按鈕。
圖15
如果重組好的目标設備是磁盤,一般可使直接打開(可能會需要重新啟動);如果重組的結果是鏡像文件,則可以通過工具打開,如R-studio等。
圖16就是使用R-studio打開重組後的鏡像文件。注意,一般來說,如果重組結果是正确的且原RAID内文件系統沒有問題,使用R-studio打開鏡像文件是不會出現任何錯誤提示的(圖16中紅框内部分),目錄結構也是正常的,文件名或目錄名不會出現亂碼。此時,可選擇該分區内的一些比較大的文件(文件大小最好大于三個數據塊的大小)恢複出來看一下結果,如果這些文件可以正常打開,則這個重組結果一般沒有問題。
圖16
至此,這個RAID5的各項參數已經分析完全,數據也已經恢複。
三、其他關于RAID5數據恢複的基本過程如上,但是,對于RAID5各個參數的分析方法、RAID5數據的恢複方法并不僅限于此。對于不同類型的RAID5,可能會有不同的、更簡捷的辦法,比如通過硬盤内的其他标志或者明文判斷盤序、通過修改RAID信息将RAID修好等等。當然,這些需要實際的操作經驗以及對文件系統、文件格式等的深入研究。
四、附錄1、關于Hp的RAID5雙循環首先,Hp的RAID5雙循環也是RAID5,它符合RAID5的所有特點,它的校驗也是XOR出來的。其次,RAID5雙循環是在RAID5的基礎上變形而來,在數據存儲的方式上較普通RAID5有了一定的變化。Hp的RAID5簡單的說,就是将RAID5的每一個條帶再細分為更小的條帶(如圖17)。所以,也可以通過上面介紹的辦法,先判斷出條帶的整體大小,再來分析其它的參數。
圖17
2、盤櫃
由于操作系統或RAID控制器在設計上原因,或由于實際需要,有一部分RAID卡在管理RAID,尤其是外接盤櫃的時候,會允許用戶将磁盤組分成多個Logical Drive,即多個RAID進行管理。每個Logical Drive之間可以相互關聯,也可以完全獨立。比如一個有6塊300G SCSI硬盤的盤櫃,可以使用這10塊硬盤先建立一個容量為200G RAID5,作為一個Logical Drive使用;再建立一個400G的RAID0;剩餘的空間再建立一個RAID5(如圖18所示)。此時,在每一個Logical Drive的首扇區都會有一個MBR,這個MBR裡定義的是當前這個Logical Drive的分區情況。所以,這些MBR内分區的容量要比實際的總容量小許多。在分析參數的時候,需要每一個Logical Drive作為一個單獨的RAID考慮。
圖18
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!