你的數據有多安全?關於RAID你了解多少?
隨著電腦和智能手機的普及,很多人的數據越來越重要,工作學習資料,照片視頻,聊天溝通記錄等等。萬一丟失,輕則花時間精力重新收集,重則永遠無法找回。
很多人的個人數據並不多,用大容量U盤或者移動硬碟備份,或者直接上傳到各種雲盤網盤備份就可以了。但某些朋友因為工作關係或者興趣原因,有大量的視頻資料。一般的移動硬碟放不下,網盤容量也有限而且上傳下載非常耗費時間,於是各種原來用於企業的RAID方案開始進入普通消費者的視線:主板集成RAID控制器、操作系統提供類似RAID的功能、外置磁碟陣列櫃、家用NAS等等。
很多人對RAID的概念就是如果有一個硬碟壞了,數據不會丟失。真的是這樣么?是不是就這麼簡單呢?
首先,我們先簡單了解一下RAID。RAID,現在一般叫Redundant Array of Independent Disks,獨立冗餘磁碟陣列,以前叫Redundant Array of Inexpensive Disks,廉價冗餘磁碟陣列。之所以叫廉價,是因為以前大容量磁碟比多個小容量磁碟貴的多,其實現在也是更貴一點的,但和以前相比也沒有貴太多,一方面是磁碟容量便宜下來了,二來是最近磁碟的單盤容量增長陷入瓶頸,更大容量的磁碟和小容量磁碟的主要區別只是在碟片數量。而且早期磁碟陣列只有少量硬碟,發展到現在,幾百上千個磁碟的陣列櫃並不少見,自然這種陣列並不再廉價。而且隨著伺服器集群技術的成熟,多台伺服器共用一個陣列的情況也很常見,陣列成為網路中一個獨立的單位,而不再是單台伺服器的專用存儲設備。所以現在一般叫獨立冗餘磁碟陣列。
RAID分若干個級別:常見的有0、1、5、6。以及多個RAID再組成一個新的RAID,根據組合的不同,常見的有10、50和60(分別是多個RAID1/5/6再用RAID0的方式組成一個新的)。
具體的很多資料都有,這裡簡單再說一下。
RAID 0:需要2個以上硬碟,可以更多。一份數據按照一定大小拆開,平均分散存儲在組成RAID 0的各個磁碟上,又稱條帶。容量是單個硬碟的N倍,持續讀寫速度也是單個硬碟的N倍。數據安全方面,如果一個硬碟壞了,整個陣列上的數據都會丟失。
RAID 1:通常只有兩個硬碟,一份數據同時存儲在兩個硬碟上。容量和單個硬碟一樣,寫入性能和單個硬碟一樣,讀取性能是單個硬碟的兩倍。數據安全方面,如果一個硬碟壞了,另外一個硬碟可以正常使用;用新硬碟替換掉舊硬碟可以重建RAID1。
RAID 5:需要3個以上硬碟,可以更多。一份數據按照一定大小拆開,並且按照特定的演算法,每N-1份數據計算一份校驗數據,拆分的數據和校驗數據平均分散存儲在組成RAID 5的各個磁碟上。容量是單個硬碟的N-1倍,持續讀取速度是單個硬碟的N-1倍,持續寫入速度要看RAID控制器的性能和寫入策略,理論上最高寫入速度可以達到單個硬碟的N-1倍。數據安全方面,如果一個硬碟壞了,陣列會降級為RAID0運行;用新硬碟替換舊硬碟可以重建RAID5。
RAID6:和RAID5類似,但多生成一份校驗數據,也就比同等配置的RAID5多需要一塊硬碟,而容量性能不變。如果一塊硬碟壞了會降級為RAID5,兩塊硬碟壞了降級為RAID0。
其它:
- RAID3和RAID5類似,但是所有校驗數據都寫入到同一塊硬碟上,某些特定的寫入策略下,回導致校驗盤頻繁讀寫而縮短壽命,現在幾乎看不到了。同樣消失的RAID級別還有2和4,之所以提RAID3,是因為後面提到的SnapRAID和RAID3有一定程度的相似。
- 組合陣列理論上可以由任何兩個級別組成,實際使用上一般是由多個帶冗餘的陣列再組成一個RAID 0。其中RAID10需要最少4個硬碟,RAID50需要最少6個硬碟,RAID60需要最少8個硬碟。
- 如果組成一個陣列的多個硬碟容量不同,上面所說的單盤容量按照容量最小的計算。也就說大容量硬碟多出來的空間會被浪費掉。
- 很多RAID控制器廠家支持RAID的動態遷移(升級),例如0->5, 1->5,5->6;或者動態增加磁碟,例如3盤RAID5增加1個磁碟成為4盤RAID5。動態遷移過程中RAID是可用的。
RAID5的重建失敗概率
對於家用,受限於家用級別的機箱體積、廠家設計、噪音、主板介面(或者多埠RAID卡成本)、硬碟成本,很少有人搭建超過4盤的陣列。4盤陣列中,RAID10和RAID6的數據容量都只有兩個硬碟容量,RAID0的數據風險又很大,所以很多人會偏向搭建RAID5。然而在3T、4T容量為主流,6T、8T硬碟的價格也能被家庭用戶承受的今天,這並不是一個好的選擇。
上面說了,RAID5允許一塊硬碟失效,失效後可以替換一塊新硬碟重建RAID5,然而這只是理論上的情況。在企業應用中,RAID5單盤失效後的正確操作流程是:不管它,此時陣列以RAID0級別運行,等到下班後,備份陣列上的數據。然後換新硬碟,刪除舊陣列配置,重新構建陣列(不是自動重建),然後恢復備份上的數據。為什麼不直接把新硬碟換上去重建?因為1、重建慢,2、重建有可能失敗。
這裡先說一下重建慢的問題,RAID5單盤失效降級為RAID0,並不能達到N-1盤RAID0的性能,而是大幅下降。通常做陣列的一個重要原因是為了保證單盤失效的時候數據是可用的(起碼短時間內可能),所以除非這個時候是業務空閑期間,陣列可以馬上離線進行重建,否則陣列本身性能下降,重建又會佔用大量IO,會影響正常業務進行。同時,正常業務產生的IO也會拖慢重建速度。如果是高端的陣列卡/盤櫃,並且陣列可以離線重建的話,這個重建速度通常可以接近新硬碟的持續寫入速度,不過按照現在硬碟100~200MBps的速度範圍(取平均值150MBps),寫入3T數據也需要將近6個小時。如果數據量更多或者RAID卡/盤櫃的重建性能較差,這個時間只會更長。
然後來解釋為什麼RAID5重建會失敗,首先我們看一下硬碟的一個參數:URE(Nonrecoverable Read Errors,不可恢復讀取錯誤),常見的希捷硬碟URE是以下情況:
- 酷魚、鐵狼(4TB及以下型號):1/10e14
- 酷魚Pro、鐵狼(6TB及以上型號)、鐵狼Pro以及所有企業級硬碟:1/10e15
也就是說,酷魚和小容量的鐵狼硬碟,每讀取1bit數據,有一百萬億(1後面14個零)分之一的概率出現不可恢復的錯誤。其他硬碟的概率是一千萬億(1後面15個零)分之一。磁碟讀取錯誤產生的原因很多,磁碟碟片上的磁性單元失效,電路問題,宇宙射線,磁碟震動都有可能導致讀取錯誤,不過每個磁碟扇區都有一段CRC數據可以用來糾錯。然而糾錯機制只能在一定範圍內生效,單個扇區發生的錯誤多了就無法糾正了,這時就產生URE了。從數字上來看,這個概率還是很小的,然而當單個硬碟容量達到1TB,也就是10e12位元組,8*10e12bit的時候,這就不是一個可以忽略的數字了。
既然是概率,再低也會有發生的時候,為什麼一般人從來不會留意到呢?這是因為,硬碟上,佔據空間最多的通常是照片、音樂、視頻,就算是普通程序,也是界面上的圖片資源佔用的空間佔大部分。當讀取到1 bit錯誤數據的時候,可能導致的後果是照片/視頻某一幀上某個像素偏紅了點,播放的音樂中某個音調高了幾赫茲——有幾個人能感覺出來?當然,也有可能代表銀行賬上某個餘額,從幾百塊變成幾十億——然而銀行系統設計的時候就會考慮到這種錯誤或者有人手工改數據,餘額變成幾十億不怕,只要你往外轉錢,相關校驗程序啟動馬上就能發現問題。
當4盤組成的RAID5單盤失效後重建的時候,需要從其它三個完好的硬碟上讀取數據並根據校驗演算法逆向推算出失效硬碟的數據,以4塊1T硬碟,使用了80%空間來算。需要讀取3*8*10e12*80%=1.92*10e13 bit,根據概率學,這個時候發生URE的概率是1-(1-1/10e14)^(1.92*10e13)=17.46%。下表是兩種URE硬碟,不同容量組成的4盤RAID5,空間使用率80%,單盤失效後重建過程中發生URE的概率:
而RAID通常是硬體實現的,RAID控制器不知道這個失效的位代表什麼含義,最安全的做法是停下來——於是重建就失敗了。對於4T硬碟組成的四盤RAID5,這個概率超過五成。
很多人對於這種因為1bit錯誤,導致幾個T的陣列無法重建表示不理解,但硬體廠家也很無奈,萬一這是某個重要數據呢?這個責任可背不起。
硬體不行軟體上,Sun的ZFS文件系統就可以建立類似RAID5的RAIDZ,重建過程中碰到URE怎麼辦?文件系統可是知道這是個什麼文件,跳過去重建其它文件的數據就好,回頭寫個報告告訴操作員某某文件重建失敗就是了。
對於已經在使用RAID5的用戶,萬一真的有一個硬碟壞了怎麼辦?也不用太擔心,數據本身還是在的,陣列也還是能用的,只是變成了RAID 0而已。這個時候需要做的,先把重要數據拷貝出來,剩下的,能重建就重建,重建不過去就刪配置重新建RAID。只是對於家庭用戶來說,如果沒有那麼大的空間備份,沒備份的數據只能忍痛放棄了。
而打算使用RAID的用戶,條件許可的話,為了免除這種麻煩,最好還是建RAID 10,或者RAID 6(如果RAID卡/NAS支持),如果覺得RAID 10/6過於浪費空間,可以考慮使用更多的硬碟來攤低單位存儲成本。如果熟悉*nix的,自行搭建支持ZFS的NAS,使用RAIDZ。
不打算弄NAS或者不會用*nix的,可以找一個叫SnapRAID的工具,可以在Windows下使用,SnapRAID本身是命令行工具,有一個圖形界面工具叫Elucidate(我個人沒用過,似乎還不是很成熟)。SnapRAID的原理是類似於文件級的RAID 3,但不是每次讀寫數據的時候都進行校驗,而是需要手動生成校驗數據。所以如果某個硬碟壞了,上次生成校驗數據後新增加的文件或者修改過的文件是無法恢復的,比較適合一般家庭大部分文件很少更新的情況。另外,SnapRAID可以支持多個不同容量的硬碟而不會浪費空間,隨時可以增加硬碟,硬碟數量太多了也可以增加校驗盤,每增加一個校驗盤可以允許多一個硬碟同時失效。對於做過校驗的文件,萬一誤刪除或者改錯了,也可以直接恢復。這些特性都比較符合家庭使用的場景。有興趣的可以找一下相關資料。
推薦閱讀:
※raid有哪幾種有什麼區別?希望講通俗點。
※軟 RAID 和硬 RAID 各有什麼優劣?
※NVMe SSD RAID是什麼樣的體驗?