該文章主要整理論壇內容。論壇地址:http://bbs.et8.net/bbs/showthread.php?t=1026112)
很多人遇到過伺服器RAID5掛掉,往往掉一個盤後,第二個盤也立刻掛掉。
引用:RAID 5也是以資料的校正位來保證資料的安全,但它不是以單獨硬碟來存放資料的校正位,而是將資料區段的校正位互動存放於各個硬碟上。這樣,任何一個硬碟損壞,都可以根據其它硬碟上的校正位來重建損壞的資料。硬碟的利用率為n-1。如果掛掉兩個盤,資料就玩完了。 理論上兩個硬碟同時失效的機率是很低的,但為什麼會這樣呢? 引用:從數學角度說,每個磁碟的平均無故障時間 (MTBF) 大約為 50 萬至 150 萬小時(也就是每 50~150 年發生一次硬碟損壞)。實際往往不能達到這種理想的情況,在大多數散熱和機械條件下,都會造成硬碟正常工作的時間大幅減少。考慮到每個磁碟的壽命不同,陣列中的任何磁碟都可能出現問題,從統計學角度說,陣列中 N 個磁碟發生故障的機率比單個磁碟發生故障的機率要大 N 倍。結合上述因素,如果陣列中的磁碟數量合理,且這些磁碟的平均無故障時間 (MTBF) 較短,那麼在磁碟陣列的預期使用壽命過程中,就很有可能發生磁碟故障(比方說每幾個月或每隔幾年就會發生一次故障)。 兩塊磁碟同時損壞的幾率有多大呢(“同時”就是指一塊磁碟尚未完全修複時另一塊磁碟也壞掉了)?如果說 RAID 5 陣列的MTBF相當於MTBF^2,那麼這種幾率為每隔10^15個小時發生一次(也就是1萬多年才出現一次),因此不管工作條件如何,發生這種情況的機率是極低的。從數學理論角度來說,是有這種機率,但在現實情況中我們並不用考慮這一問題。不過有時卻是會發生兩塊磁碟同時損壞的情況,我們不能完全忽略這種可能性,實際兩塊磁碟同時損壞的原因與MTBF基本沒有任何關係。 對這種情況來說,這裡首先要引入一個一般人不常接觸到的概念:BER 硬碟誤碼率,英文是BER(Bit Error Rate),是描述硬碟效能的一個非常重要的參數,是衡量硬碟出錯可靠性的一個參數。這個參數代表你寫入硬碟的資料,在讀取時遇到 不可修複的讀錯誤的機率。從統計角度來說也比較少見,一般來說是指讀取多少位後會出現一次讀取錯誤。 隨著硬碟容量增加,磁碟機讀取資料的誤讀率就會增加,而硬碟容量暴漲,誤碼率的比例一直保持相對增加。一個1TB的磁碟機是需要更多讀取整個磁碟機,這是在RAID重建期間發生錯誤的機率會比300G 磁碟機遇到錯誤的幾率大。
那這個錯誤的幾率到底有多大呢?或者說,我們寫入多少GB資料,才會遇到1byte的讀取錯誤呢?看這篇文章:
http://lenciel.cn/docs/scsi-sata-reliability/
對於不同類型的硬碟以前企業級、伺服器、資料中心級硬碟用SCSI/光纖,商用、民用層級是IDE;現在對應的則是SAS/SATA; 他們的MRBF平均無故障時間)是接近的,但是BER便宜的SATA硬碟要比昂貴的SCSI硬碟的誤碼率BER)要高得多。
也就是說,出現某個sector無法讀取的情況,SATA要比SCSI嚴重得多。具體區別在韌體上:遇到讀取不過去,或者寫入不過去的壞道時,家用硬碟會花費1分鐘以上的時間去嘗試糾正錯誤,糾正不了就直接用備用扇區代替,這個時間超過陣列控制器能容忍的限度,所以遇到這種情況直接掉盤;企業級的磁碟會把這項工作放在後台進行,不需要停頓1分鐘左右的時間,從而不影響陣列運行。在BER 硬碟誤碼率上沒有任何區別。 按照文中的計算,一個1TB的硬碟,通常你無法讀取所有sector的機率達到了56%,因此你用便宜的大容量SATA盤,在出現硬碟故障的情況下重建RAID的希望是:無法實現。 用1TB的SATA硬碟做RAID5的話,當你遇到一個硬碟失效的情況,幾乎剩下的兩個以上硬碟RAID5最少組合是3個)鐵定會遇到一個硬碟讀取錯誤,從而重建失敗。
所以,以前小硬碟做RAID5,基本很少遇到同時掛掉兩個盤的情況;現在硬碟大了,出問題的機率也越來越大了。 對於跑RAID的使用者,對整個硬碟進行讀取的事情經常發生。即使系統足夠和諧,知道不對你報告那些出現在你從不讀取的檔案中的壞道,但是也只是略過了報告這一步:它還是會找到所有的壞道,56%就來了。還有所謂的監控專用企業級SATA,其原理就是在韌體上做手腳,讓硬碟即使遇到寫入的資料讀取錯誤,也不管三七二十一直接跳過,不再重試讀取標準硬碟的讀取方式是遇到某個扇區CRC錯誤自動重新再去讀,直到讀到正確的資料為止)。這對監控資料來說是理所當然的大多數監控的硬碟都是在不停地寫入,但是很少需要讀取),除非遇到出現問題需要重現影像時。 現有的Raid5陣列的磁碟中有未檢測到的錯誤的話,Hot Spare沒辦法解決。Hot Spare只能在某個磁碟下線的時候,及時的替換下線的盤進行Raid重建,如果其他磁碟有錯誤的話,重建還是會可能失敗。 解決方案還是要在陣列健康狀態下,進行定期或者其他方式的錯誤檢查。一般的硬體陣列卡,也就是插在主板PCI/PCIX/PCIE/或者主板整合的RAID5,壓根就沒資料巡檢scrub)功能。企業級的資料存放區,也只有到盤陣層級比如IBM DS3000/4000/5000,DELL MD3000....etc)才有這類功能,但是你也看不到檢查的結果,最多能在日誌裡看到某個硬碟CRC失敗,然後跳紅燈掉出來,陣列櫃警示通知你換硬碟。你別想知道這個硬碟到底是徹底掛了呢,還是有讀取錯誤,還是有壞道。。。總之兩眼一抹黑。ZFS上的RAIDZ有資料巡檢scrub)功能) 總結遇到RAID5一次掛掉倆盤的機率1、使用越大容量的硬碟做RAID5,遇到BER 扇區的機率越大;比如用100G硬碟做RAID5就比用1TB的安全;2、使用越多盤數的硬碟做RAID5,遇到BER 扇區的機率越大;比如用3個盤做的RAID5,比6個盤做的RAID5安全;3、使用越便宜的硬碟做RAID5,遇到BER 扇區的機率越大;比如用SCSI/FC/SAS盤比用IDE/SATA的RAID5安全;4、RAID5裡面存放的資料越多,塞得越滿,遇到BER 扇區的機率越大;比如存了100G資料的比存了1TB資料的RAID5安全;REBUID時唯讀取存過資料的扇區,某些卡則不管三七二十一要讀完整個盤) RAID1/RAID10參與重建的只有一個盤,與raid5所有盤都需要參與重建相比,故障機率降低;RAID1 某一組磁碟故障,也不需要強制上線的操作,因為資料仍然存在,不需要組RAID也能讀取,哪怕是換到其他沒有raid卡的機器上資料仍能讀出;而RAID5如果不能強制第二個掉下的硬碟上線,你一點東西都讀不到。 對於DB來說:做raid 1+0 是最好不過啦!備份時必不可少的;當RAID處理降級狀態時,如重要資料容量不大,建議先做備份,當然這種備份應該是異機的,不可備份至當前已降級的RAID中。如果在REBUILD當中出現另外硬碟離線的情況導致RAID卷OFFLINE,切不可重建RAID,如確定後離線的硬碟,可通過強制上線恢複資料(有些控制器沒有選項,就沒辦法了)
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://weipengfei.blog.51cto.com/1511707/1006565