隨著RAID磁盤陣列技術的發展,存儲的性能和安全性都有了很好的保障。對於中小項目常用的RAID磁盤陣列5(包括RAID磁盤陣列5e,RAID磁盤陣列5ee和RAID磁盤陣列6)這種級別的RAID磁盤陣列,都能保證在1-2塊磁盤/FLASH出現故障的情況下,RAID磁盤陣列保證數據的完整性,但RAID磁盤陣列5的保護機制是否能完整的保護數據,答案卻是否定的。
RAID磁盤陣列5和RAID磁盤陣列6對於普通的磁盤故障有很好的糾錯能力,但RAID磁盤陣列對於儲存的底層故障,RAID磁盤陣列5和RAID磁盤陣列6都無法進行糾錯恢復。
硬件RAID磁盤陣列的缺點:可以檢測並嘗試恢復Noisy Error,我們常見的磁盤損壞包括Bit Rot就是代表性的顯性錯誤,但是RAID磁盤陣列無法檢測到隱性錯誤。常見的RAID磁盤陣列儲存底層隱性錯誤有以下幾種:
Phantom writes “幻影寫入”。RAID磁盤陣列磁盤已經發出指令寫入磁道,由於RAID磁盤陣列內部故障,並未寫入成功,但在RAID磁盤陣列儲存表象為寫入完成的狀態。
Misdirected reads or writes 誤讀寫。舉例:RAID磁盤陣列數據要在01扇區進行讀寫,卻在02扇區做了這個操作,導致數據混亂。
DMA parity errors DMA傳輸過程中發生的error。
Accidental overwrites 在頻繁的Swapping(文件交換)中數據誤讀寫。
隨著RAID磁盤陣列儲存設備技術的進化,上面這四種只是常見的Silent Error,當然會有其他更多的RAID磁盤陣列種類,涉及到很多RAID磁盤陣列底層的技術。
我們遇到的RAID磁盤陣列VDD Error就是屬於可以檢測並嘗試恢復RAID磁盤陣列Noisy Error,但是無法檢測到RAID磁盤陣列Silent Error,所以故障層面只顯示統壹的RAID磁盤陣列VDD錯誤,但RAID磁盤陣列底層的故障卻不壹定是相同的。
對於硬件RAID磁盤陣列來說,RAID磁盤陣列在陣列卡和光纖卡的級別,RAID磁盤陣列並不會去確認故障是哪壹種error,這是硬件RAID磁盤陣列先天的硬件特性限制。
我們可以看看下面這個例子,做了RAID磁盤陣列6,並劃分了LUN。RAID磁盤陣列在故障的表現層面,RAID磁盤陣列櫃的硬件並未出現故障告警,RAID磁盤陣列出現VDD錯誤告警,RAID磁盤陣列在告警之後又進行了修復:
RAID磁盤陣列VDD Repair start開始修復的動作。當VDD Repair到壹定程度,完全無法repair的時候,才會表現為服務器告警(故障燈亮)。
但由於RAID磁盤陣列底層故障是Silent Error,不可避免的會有幾率出現hantom writes 或Misdirected reads or writes 讀寫誤載 這些Silent Error,這些錯誤導致的結果就是錯誤的RAID磁盤陣列數據被相互校檢到RAID磁盤陣列5的其他盤了,這在硬件RAID磁盤陣列屬於不可勘測的部分(當然在超高端的儲存設備還是有這些檢測的機制)。
在更換了故障的RAID磁盤陣列磁盤之後。我們回到Storage Manager的日常event,
像上面這種例子的RAID磁盤陣列故障,在近幾年的RAID磁盤陣列儲存故障發生得越來越頻繁,壹方面由於RAID磁盤陣列儲存容量的翻倍提升帶來的磁盤/FLASH密度高速增減,另壹方面不斷下降的成本也導致RAID磁盤陣列感覺不如原來的穩定了。
所以RAID磁盤陣列5(e、ee、raid6)級別的這種RAID磁盤陣列技術,並非在單盤雙盤損壞的情況下都能保持良好的重構工作。在壹些RAID磁盤陣列數據安全需求高、成本又受限的地方,我們不能只依靠RAID磁盤陣列5的技術來規避數據丟失。
ZFS文件系統,在系統層面能補充硬件RAID磁盤陣列的這種不可規避的數據丟失情況,所以在每個RAID磁盤陣列項目的規劃初期,應該要規劃好相應的RAID磁盤陣列系統和文件格式。