教程:RAID-5磁盤陣列故障分析
RAID-5磁盤陣列是現(xiàn)在使用最普遍的磁盤陣列方式。在RAID- 5這個磁盤陣列模式中,數(shù)據(jù)平均分布在每個硬盤中。所以即使某個硬盤損壞了,仍然可以憑借其他硬盤上的內(nèi)容恢復(fù)損壞硬盤中的數(shù)據(jù)。不過,當(dāng)有兩個以上硬盤同時出現(xiàn)故障時,那么硬盤中的數(shù)據(jù)將無法修復(fù)。為了讓磁盤陣列發(fā)揮其應(yīng)用的作用,Linux系統(tǒng)管理員需要對磁盤陣列的容錯性能力進(jìn)行分析。通常情況下,根據(jù)企業(yè)對待數(shù)據(jù)損失的不同,每個一個季度或者半年進(jìn)行測試一次,以保障磁盤陣列能夠正常工作。
一、測試磁盤陣列是否在起作用
有時候要測試磁盤陣列是否在起作用年,要對磁盤陣列進(jìn)行“破壞性”測試。這里的破壞性測試筆者是打上了引號的,不是真的去損壞硬盤。為了測試RAID-5磁盤陣列是否有硬盤損壞的情況,需要先把服務(wù)器關(guān)掉。然后把其中一塊硬盤的線拔掉,讓系統(tǒng)找不到這塊硬盤。如此的話系統(tǒng)就會認(rèn)為這塊硬盤損壞了。會嘗試使用其他硬盤中的數(shù)據(jù)來恢復(fù)損害的硬盤中的內(nèi)容。重新啟動Linux系統(tǒng)后,由于只是去掉了一塊硬盤,故系統(tǒng)仍然可以啟動RAID-5 磁盤陣列。而且采用了磁盤陣列之后,數(shù)據(jù)會自動恢復(fù)。即少了一塊硬盤之后,一切仍然可以正常運行。通過查看磁盤陣列的狀態(tài)記錄文件,可以查看相關(guān)的信息。
在Linux系統(tǒng)下,磁盤陣列狀態(tài)文件保存在/proc/mdstat下。在這個狀態(tài)文件中,可以看出當(dāng)前磁盤陣列中啟用了幾塊硬盤,會指明當(dāng)前硬盤的序號。雖然說同時損壞兩塊以上硬盤就無法恢復(fù)數(shù)據(jù),但是,這種情況畢竟還是少數(shù)。同時損壞2個硬盤的幾率并不是很高。故磁盤陣列在安全性上還是有比較高的利用價值。
在Linux下部署磁盤陣列的時候,還有一個好處。就是即使有兩塊硬盤損害了,雖然不能夠修復(fù)數(shù)據(jù),但是仍然可以啟動Linux操作系統(tǒng)。當(dāng)兩塊以上硬盤損壞時,重新啟動之后,系統(tǒng)會發(fā)出警告信息。此時管理員可以利用ROOT帳號進(jìn)行登陸。然后更改配置文件/ETC/RAIDTAB的文件名字再重新啟動,就可以順利登陸到Linux系統(tǒng)中。不過可惜的是,此時硬盤上的數(shù)據(jù)將無法恢復(fù)。
二、通過配用硬盤提高磁盤陣列的安全性
由于2個硬盤以上的損壞將無法恢復(fù)數(shù)據(jù)。所以Linux系統(tǒng)管理員就會考慮,能否在Linux系統(tǒng)中再掛載一個備用硬盤。平時的時候這塊硬盤不會包含到磁盤陣列中。當(dāng)磁盤陣列中某塊硬盤出現(xiàn)損壞時,就利用這塊備用硬盤替補。如此的話,即使管理員暫時沒有發(fā)現(xiàn)損壞的硬盤,對企業(yè)的影響也不會很大。
大部分的磁盤陣列技術(shù)都支持采用備用硬盤。當(dāng)某個硬盤工作不正常時,磁盤陣列會立刻啟動備用硬盤。并通過一定的容錯技術(shù),將數(shù)據(jù)恢復(fù)到正常狀態(tài)。但是并不是所有的磁盤陣列技術(shù)都支持這個備用硬盤。筆者在上篇文章中介紹過幾個常用的磁盤陣列方式。其中就提到過Linear模式。由于這種模式并不會分散存儲數(shù)據(jù),而是一塊硬盤存儲空間滿了以后再存儲到另一塊硬盤中,故并沒有容錯機(jī)制。此時備用硬盤也就不會起作用。不過在RAID-5 模式下,其是分散存儲數(shù)據(jù)的,具有很高的容錯性。所以此時若配置一塊額外的備用硬盤,能夠讓磁盤陣列的安全性更上一層樓。另外這里需要注意的是,當(dāng)操作系統(tǒng)啟動的時候,備用硬盤也會隨之啟動。只是平時的數(shù)據(jù)不會存儲到這一塊硬盤中。而只有當(dāng)某一個硬盤損壞時,才會這塊備用硬盤中存入數(shù)據(jù)。
如果系統(tǒng)管理員需要在已有的磁盤陣列中加入備用硬盤的話,則需要修改磁盤陣列的配置文件/etc/raidtab。其實這個更改也很簡單。通常情況下只需要向這個配置文件中加入兩條語句即可。
第一條語句:nr-spare-disk 1。這條語句主要用來說明這個硬盤是備用硬盤。除非其他硬盤損壞了否則的話磁盤陣列不會往這個硬盤中存入數(shù)據(jù)。
第二條語句:device /dev/had。這一條語句用來指定備用硬盤的分區(qū)名稱。我們知道,Linux系統(tǒng)跟微軟操作系統(tǒng)下的磁盤陣列技術(shù)有一個很大的不同。在微軟操作系統(tǒng)下,它是以硬盤為單位的。但是在Linux操作系統(tǒng)下,則是以分區(qū)為單位的。故在Linux操作系統(tǒng)中,即使只有一塊硬盤也可以實現(xiàn)磁盤陣列技術(shù),只是不能夠?qū)崿F(xiàn)相關(guān)的功能而以。所以,這里除了要指明硬盤外,還需要指明硬盤分區(qū)的名字。
另外還有一個注意事項。有些Linux管理員可能擔(dān)心多個硬盤會同時損壞。所以他們會為磁盤陣列配置多個備用硬盤。此時如果硬盤有損壞的話,系統(tǒng)就會考慮需要首先采用哪塊硬盤。此時可以利用spare-disk語句來指定首先采用哪塊硬盤。如果編號設(shè)置為0,就表示這塊備用硬盤是此磁盤陣列所使用的第一順序備用硬盤。其他的配置跟磁盤陣列的常規(guī)配置相同,這里就不做重復(fù)介紹了。
編輯推薦:強(qiáng)力推薦Linux下的五大BT下載工具
不過注意當(dāng)添加完備用硬盤之后,備用硬盤并不是馬上生效的。修改完成磁盤陣列的配置文件之后,需要先利用Raidstop命令停用磁盤陣列;然后再利用Mkriad命令重新初始化磁盤陣列。在這個初始化的過程中,系統(tǒng)會在后臺同步所有的硬盤數(shù)據(jù)。所以這個過程會隨著硬盤數(shù)據(jù)的多少而變化。當(dāng)硬盤中數(shù)據(jù)比較多時,這個過程可能會比較久。在這個過程中,千萬不要重新啟動Linux系統(tǒng)。設(shè)置好備用硬盤之后,如果磁盤陣列中有某一塊硬盤出現(xiàn)了損壞,則系統(tǒng)會自動啟動備用硬盤。并且會根據(jù)其他硬盤上的數(shù)據(jù)重建此備用硬盤上的數(shù)據(jù)。重建后的數(shù)據(jù)相當(dāng)于是損壞硬盤數(shù)據(jù)的一個拷貝。通過這種方式,就可以提高磁盤陣列的容錯性能。
三、注意磁盤陣列空間的使用率
磁盤空間的容量是不是幾塊硬盤容量的總合呢?其實不是。如在RAID-5磁盤陣列中,跟普通硬盤存儲數(shù)據(jù)不同,磁盤陣列技術(shù)會自動產(chǎn)生一個同位校驗碼。這個同位校驗碼主要用來解決硬盤損壞時數(shù)據(jù)恢復(fù)問題。這里要特別注意,RAID-5并不會特別保留固定的一個硬盤來保存同位校驗碼,而是將同為校驗碼分散存儲在所有的硬盤當(dāng)中。所以這種方式并不會因為保存同位校驗碼在同一個硬盤上而造成整體系統(tǒng)性能的瓶頸。
但是,雖然RAID-5 不會特別保留固定的一個硬盤來保存同位校驗碼,但是他會使用一個硬盤的容量來保存同位校驗碼。這是什么意思呢?也就是說,假設(shè)現(xiàn)在有四塊硬盤組成了一個磁盤陣列,其中每塊硬盤的容量為120G。那么RAID-5 并不會把全部的同位校驗碼都保存在同一塊硬盤上??墒瞧鋾谶@四塊硬盤上分別占用30G的空間,總共120G的容量。也就是說,此時真正可以存儲數(shù)據(jù)的數(shù)量為三塊硬盤的容量,即360G。對于這個容量,Linux管理員要有一個充分的認(rèn)識。特別是剛剛接觸磁盤陣列的人會有疑問,明明沒有這么多的數(shù)據(jù),為什么硬盤就這么快滿了呢?難道有病毒嗎?總之管理員要記住,同位校驗碼需要占用一個硬盤的容量。不過其并不是單獨保存在一個硬盤中,而是在各個硬盤上都獲取一定的空間。
另外需要注意,同位校驗碼不僅需要犧牲磁盤的容量,而且還會對硬盤的讀寫性能有不利的影響。讀寫數(shù)據(jù)時,磁盤陣列會將一個文件切割成一個個小塊,再以小的區(qū)塊為單位同時向硬盤中讀取數(shù)據(jù)。所以磁盤陣列可以提高硬盤的輸入輸出效率。從理論上講,如果有5個硬盤組成磁盤陣列,磁盤陳列會同時從4個硬盤中讀寫數(shù)據(jù)。故存取速率可以提高4倍。但是實際工作過程中,由于多處來了一個同位校驗碼。這個同位校驗碼的生成、保存也需要犧牲一定的系統(tǒng)資源,故最終的效率并不會達(dá)到這么高。不過從這里也可以說明一件事情,就是硬盤數(shù)量越多,其硬盤數(shù)據(jù)讀取效率里會越高。
故架設(shè)磁盤陣列時需要耗費比較多的CPU、內(nèi)存等硬件資源。如果這些硬件資源跟不上的話,磁盤陣列不但不能夠起到其應(yīng)有的作用,而且反而會增加Linux服務(wù)器的風(fēng)險。所以在磁盤陣列安全性分析時,也要考慮CPU、內(nèi)存等硬件資源能否支持磁盤陣列順利運轉(zhuǎn)。