本文提供關於 RAID 陣列中資料錯誤、雙重故障和穿刺的資訊。此外,還有可預防/緩解這些問題的建議,以及如何在問題發生後加以解決。
目錄
- 資料錯誤和雙重故障
- 穿刺:這是什麼,以及發生的原因?
- 在問題發生前便進行預防,並在發生後解決穿刺
第 1 章:資料錯誤和雙重故障
RAID 陣列無法完全避免資料錯誤。 RAID 控制器和硬碟韌體的功能可在多種資料錯誤被寫入陣列/磁碟機之前,就偵測到它們並加以修正。 若使用過期的韌體,可能會因為缺乏最新韌體版本中處理錯誤/更正錯誤的功能,而讓錯誤的資料被寫入陣列/磁碟機中。
也可能因為實體損毀磁區導致資料錯誤。 例如,當讀/寫頭撞擊到正在旋轉的碟盤時 (這稱為「磁頭損壞」),便可能會發生這種情況。 隨著碟盤以磁性在特定位置儲存位元的效能降低,磁區也可能會隨著時間損毀。 碟盤效能降低導致的損毀磁區通常可成功讀取。 這樣的損毀磁區僅能間歇地偵測到,或是在磁碟機上進行更廣泛的診斷,才能偵測到此類損毀磁區。
損毀磁區又稱為損毀邏輯區塊定址 (LBA),也可能由邏輯資料錯誤所導致。 此問題發生在資料不正確寫入磁碟機時,即使報告為成功寫入。 此外,儲存在磁碟機上的良好資料可能會在不經意中遭到變更。 其中一個範例是「位元翻轉」,當讀/寫頭通過或寫入至附近位置時,便可能會發生這種狀況,並導致資料 (零和一) 變更為不同的值。 這類狀況會導致資料的「一致性」損壞。 特定磁區上的資料值與原始資料不同,並可能不再符合檢查總和。 實體 LBA 良好並可成功寫入,但目前包含不正確的資料,即可能會視為損毀磁區。
損毀的 LBA 通常會回報為
感應代碼 3/11/0。感應金鑰 3 為
中等錯誤。 其他感應代碼和其他等同 11/00 的感應定義為
未復原的讀取錯誤。 系統不會嘗試修正磁區,也無法判斷損毀的磁區是由於磁碟機碟盤上的實體損毀所導致,還是因為其他原因而發生的資料錯誤。 出現感應代碼 3/11/00 並不是自動代表實體磁碟機故障或應更換。
Dell 硬體型 RAID 控制器提供巡查讀取和檢查一致性等功能,可修正許多資料錯誤的狀況。 巡查讀取預設為自動化背景工作,它會檢查硬碟上所有的個別磁區,以確保資料能夠正確讀取。 巡查讀取會設法更正損毀磁區,或將無法修正的磁區重新對應到保留磁區。 檢查一致性是一項手動啟動 (也可以事先排定) 的功能,它會將陣列中所有的磁碟機彼此比較,以確保資料和冗餘完全相符。 舉例來說,它會比較 RAID 5 陣列中的三個磁碟機,以確保資料和同位檢查使用正確的值。 如果偵測到單一錯誤,剩餘的資料及/或同位檢查將用於重新寫入並修正錯誤的值。 同樣地,在 RAID 1 陣列中,會將一個磁碟機上的資料與另一個磁碟機進行比較,以確保資料的鏡像正確。
若未修正 RAID 陣列中的任何單一錯誤,可能會在陣列中造成更嚴重的錯誤,尤其是在發生第二個錯誤時。 只要陣列維持在最佳狀態,一或多個單一錯誤並不會導致資料遺失。 當陣列處於最佳狀態時,仍有足夠的資料與冗餘可正常運作。
由於控制器能在正常運作時修正錯誤,因此並不容易偵測資料底部發生的問題。 當存在一或多個單一錯誤狀況時,您很少會在控制器記錄、硬體記錄或作業系統事件記錄中看到任何錯誤或警示。 因此,儘管存在一致性錯誤和/或單一錯誤,陣列仍可能長時間顯示為正常運作。
圖 1:RAID 5 陣列中的多個單一故障 - 最佳狀態陣列
如圖 1 所示,陣列具有多個錯誤。 但是,由於任何 Stripe 中只有一個單一錯誤,因此由於 RAID 5 的冗餘,控制器仍可存取所有資料。 如果錯誤發生在同位檢查區段,則所有資料都為完整無誤,且此錯誤不會影響讀取作業。 如果錯誤發生在資料區段,則良好資料與良好同位檢查部分之間一定會進行 XOR 比較,以重新計算遺失/錯誤的資料區段。 在兩個情況中,因為由於任何 Stripe 中只有一個單一錯誤,因此仍有足夠的冗餘可成功存取所有資料。
當 RAID 陣列中有一或多個磁碟機含有資料錯誤,而陣列中的另一個磁碟機因為磁碟機故障、外部組態、磁碟機卸除或其他任何原因,而不再是該陣列的使用中成員,這種狀況就稱為「雙重故障」。 雙重故障狀況會導致受影響 Stripe 中的任何資訊發生立即資料遺失。
圖 2:故障磁碟機的雙重故障 (Stripe 1 和 2 的資料遺失) - 陣列效能降低
維持在最佳狀態的陣列也可能發生雙重故障狀況。 這發生在多個硬碟上出現完全相同的損毀 LBA。 由於現今大型硬碟上的 LBA 數量龐大,這類狀況極為罕見。 同時,多個硬碟上的相同 LBA 不太可能同時「損毀」。
定期檢查一致性作業可修正單一故障,無論是實體損毀磁區或資料邏輯錯誤。檢查一致性也會降低萬一發生其他錯誤而導致雙重故障狀況的風險。 如果任何一個指定 Stripe 中的單一錯誤不超過一個,檢查一致性幾乎都可以順利消除這個錯誤。
返回頂端
第 2 章:穿刺:這是什麼,以及發生的原因?
穿刺是 Dell PERC 控制器的一項功能,其設計目的是允許控制器還原陣列的冗餘,即使雙重故障導致資料遺失。 穿刺的另一個名稱是「以錯誤重新建置」。 RAID 控制器會偵測雙重故障,而且由於冗餘不足以還原受影響 Stripe 中的資料,因此控制器會在該 Stripe 中建立穿刺,並允許繼續重建。
- 任何導致多個磁碟機上相同 Stripe 資料無法存取的狀況,皆為雙重故障
- 雙重故障會導致受影響 Stripe 中的所有資料遺失
- 所有穿刺均為雙重故障,但並非所有雙重故障皆為穿刺
圖 3:穿刺的 Stripe (因為雙重故障,Stripe 1 和 2 中的資料將會遺失) - 最佳狀態陣列
若沒有穿刺功能,陣列重新建置將會失敗,並使陣列處於效能降低狀態。 在某些情況下,故障可能會造成其他磁碟機故障,並導致陣列處於無法運作的離線狀態。 穿刺陣列不會影響開機至陣列或存取陣列上的任何資料。 由於雙重故障導致的任何損壞或資料遺失皆為已發生狀況。
穿刺可能發生於以下兩種情況中的一種:
- 已存在雙重故障 (資料已遺失)
- 線上磁碟機上的資料錯誤會傳播 (複製) 至重新建置磁碟機
- 不存在雙重故障 (資料會在發生第二個錯誤時遺失)
- 處於效能降低狀態時,若線上磁碟機發生損毀磁區,則該 LBA 會遭到穿刺
穿刺陣列的優點是保持系統的生產可用性,並恢復陣列的冗餘。 無論是否發生穿刺,受影響 Stripe 中的資料均會遺失。 LSI 方法的主要缺點是當陣列具有穿刺時,每當存取受影響的資料 (如果有的話) 時,仍會繼續發生無法修正的錯誤。
穿刺可能會發生在三個位置。 首先,穿刺可能會發生在不含資料的空白區塊中。 此 Stripe 將無法存取,但由於該位置沒有資料,因此不會造成重大影響。 任何嘗試寫入由作業系統穿刺的 Stripe 都會失敗,且資料會寫入到不同的位置。
第二,穿刺可能會發生在含有非重要資料 (例如 README.TXT 檔案) 的 Stripe 中。 如果並未存取受影響的資料,則在正常 I/O 期間不會產生任何錯誤。 嘗試執行檔案系統備份時,將無法備份受穿刺影響的任何檔案。 執行檢查一致性或巡查讀取作業時,將會針對適用的 LBA 或 Stripe 產生感應代碼: 3/11/00。
第三,穿刺可能會發生在受到存取的資料空間中。 在這種情況下,遺失資料可能會導致各種錯誤。 這些錯誤可能是不會對生產環境造成不良影響的輕微錯誤。 這些錯誤也可能更嚴重,而且可能會使系統無法開機至作業系統,或導致應用程式故障。
遭到穿刺的陣列最後必須刪除並重新建置,以消除穿刺。 此程序會清除所有資料。在消除穿刺後,資料必須從備份重新建立或還原。 可因應業務需求,為穿刺解決方案排定更有利的時間。
如果偵測到穿刺 Stripe 內的資料存取錯誤,將會持續針對受影響的損毀 LBA 進行報告,且無法進行修正。最終 (可能是幾分鐘、幾天、幾星期、幾個月後),損毀磁區管理 (BBM) 表格將會填滿,導致將一或多個磁碟機標示為預測性故障。請參考圖 3,磁碟機 0 通常會是標示為預測性故障的磁碟機,因為磁碟機 1 和磁碟機 2 上的錯誤已經傳播至其上。實際上,磁碟機 0 可能可以正常運作,而即使更換磁碟機 0,更換的磁碟機最後也會被標示為預測性故障。
在發生穿刺後執行的檢查一致性將無法解決問題。 因此定期執行檢查一致性非常重要。若可行,在更換磁碟機之前進行檢查更為重要。陣列必須處於最佳狀態,才能執行檢查一致性。
當 RAID 陣列包含單一資料錯誤,加上硬碟故障等其他錯誤活動時,便會在將故障或更換的磁碟機重新建置回陣列時導致穿刺。例如,最佳狀態的 RAID 5 陣列包含三個成員:磁碟機 0、磁碟機 1 和磁碟機 2。如果磁碟機 0 故障 (圖 2) 且已更換,則會使用維持在磁碟機 1 和 2 上的資料與同位檢查,將遺失的資訊重新建置回更換的磁碟機 0。但是,如果磁碟機 1 上存在資料錯誤,且重新建置作業進行到該錯誤時,Stripe 中將沒有足夠的資訊可重建該 Stripe 中的遺失資料。進行重新建置時,磁碟機 0 沒有資料,磁碟機 1 的資料損毀,而磁碟機 2 具有良好的資料。該 Stripe 中有多個錯誤。磁碟機 0 和磁碟機 1 不具有有效的資料,因此該 Stripe 中的任何資料都無法復原,導致資料遺失。 圖 3 所示的結果是,在重新建置期間會產生穿刺 (在 Stripe 1 和 2 中)。錯誤會傳播到磁碟機 0。
穿刺陣列可修復冗餘,並將陣列恢復至最佳狀態。 這可讓陣列在發生其他錯誤或磁碟機故障時,不至於發生額外的資料遺失。
回到頁首
第 3 章:在問題發生前便進行預防,並在發生後解決穿刺
在內部部署下,「沒壞就別修」的想法可能很誘人。雖然在許多領域中,這可能是正確的,但為了妥善地保護和管理儲存子系統,強烈建議您例行執行定期維護。主動式維護可修正現有的錯誤,並避免某些錯誤發生。您無法預防所有錯誤的發生,但透過主動式維護,可大幅緩解最為嚴重的錯誤。對於儲存裝置和 RAID 子系統來說,這些步驟包括:
- 為控制器、硬碟、背板面和其他裝置更新驅動程式和韌體
- 例行執行檢查一致性作業
- 檢閱記錄以發現問題跡象
這不一定要是高層級的技術檢閱,只需要透過粗略的記錄檢視,尋找最為明顯的潛在問題跡象
若有任何問題或疑問,請聯絡 Dell 技術支援部門
最重要的一件事,是確保韌體保持在最新狀態。韌體為裝置提供運作的所有邏輯。它提供裝置的功能和功能性,以及各種錯誤處理和錯誤修正功能。將韌體保持在最新狀態,可提供更優異的效能和更少錯誤。也可透過韌體更新,為裝置增加新功能和增強功能。
韌體可能會位於多個位置。RAID 控制器包含韌體,以及安裝在系統或陣列中的個別硬碟。背板面和外部機櫃亦包含韌體,可能會影響其內部磁碟機和陣列的運作。
另一個主動維護建議是執行「檢查一致性」。 檢查一致性是一種手動作業,因為它會消耗 RAID 控制器的一部分整體可用頻寬。不過,您可以在對效能影響最小的時間排定檢查一致性。
檢查一致性會檢查磁碟機上的不良磁區,更重要的是,它會比較陣列中的資料,以確保所有部分都正確相符。當發現問題時,它會檢查陣列中其他磁碟機上的資料,以判斷資料的樣貌,並加以修正。在資料錯誤規模較小的時候進行修正,能較為有效地緩解因現有資料錯誤加上第二個錯誤或故障所導致的穿刺風險。若發生雙重故障和穿刺,會導致在將陣列和資料恢復至正常運作狀態所需的必要時間中生產力降低,甚至會使所有資料完全遺失。
發生雙重故障或穿刺狀況時,通常會遺失一些資料。如果這些錯誤的位置在空白空間或非關鍵資料空間內,則對生產環境資料的直接影響相對較小。然而,存在這些錯誤也可能表示存在更嚴重的問題。硬體錯誤和過時韌體可能需要立即的注意。
如果已知或疑似發生雙重故障或穿刺狀況,請依照下列步驟,將發生嚴重問題的風險降至最低:
- 執行檢查一致性 (陣列必須為最佳狀態)
- 判斷是否存在硬體問題
- 檢查控制器記錄
- 執行硬體診斷
- 視需要聯絡 Dell 技術支援
即使已完成這些步驟,也還有其他需要注意的部份。穿刺可能會導致硬碟在一段時間後進入預測性故障狀態。傳播到磁碟機的資料錯誤,會被當作磁碟機上發生的媒體錯誤加以回報,即使並沒有真正發生硬體問題。每次存取 LBA 時都會回報錯誤。當錯誤記錄已滿後,便會將磁碟機回報為預測性故障。
磁碟機上的單一穿刺 LBA 可能會受到多次回報。視穿刺次數而定,可能會將陣列中的多個磁碟機回報為預測性故障。更換預測性故障磁碟機會導致將現有的穿刺重新傳播至更換的磁碟機上,最終導致更換的磁碟機也被標示為預測性故障。在這種情況下,唯一的修正措施就是解決穿刺狀況。
請看圖 3,我們可以看到 Stripe 1 和 2 上有穿刺狀況。更換硬碟無法解決此問題,因為資料冗餘不足以重新建置原始資料。將會遺失穿刺 Stripe 中包含的任何資料 (除非保留在先前的備份中)。請記住,穿刺不會導致資料遺失,雙重故障才會導致資料遺失。穿刺是指將冗餘還原至包含雙重故障的陣列。
注意:以下為解決大部份穿刺情況的程序。您可能不需要執行所有這些步驟,即可解決問題。如果下列步驟無法解決問題,請聯絡 Dell 技術支援部門,以取得進一步協助。
警告:執行這些步驟將導致遺失陣列上的所有資料。請務必準備好從備份或其他方式還原,再執行下列步驟。請謹慎執行這些步驟,以避免影響任何其他陣列。
- 放棄保留的快取 (若有)
- 清除外部組態 (若有)
- 刪除陣列
- 將磁碟機的位置轉變一次 (以圖 1為例,將磁碟 0 移至插槽 1、磁碟 1 移至插槽 2,並將磁碟 2 移至插槽 0)
- 依需求重新建立陣列
- 為陣列執行完整初始化 (而不是快速初始化)
- 在陣列上執行檢查一致性
如果檢查一致性未發生錯誤,便代表陣列目前狀況良好,且已移除穿刺。資料現在可以還原至狀況良好的陣列。
在較嚴重的情況下,問題可能無法解決,且即使執行了這些步驟,錯誤可能會依然存在。如果下列步驟無法解決問題,請聯絡 Dell 技術支援,以取得進一步協助。
您可能需要更詳細地分析穿刺狀況,以判斷哪些磁碟機為共通。例如,在圖 3 中,控制器記錄會顯示磁碟 0 和 1 之間發生穿刺,以及磁碟 0 和 2 之間發生穿刺。磁片 0 便是共通磁碟機。請遵循上述的相同步驟,但請先完全卸下共通磁碟機。因此,以圖 1 為範例時,請先卸下磁碟 0,然後按照概述的步驟操作。使用剩餘的磁碟 (1 和 2) 建立陣列。完成後執行檢查一致性,判斷陣列狀況是否良好,然後將磁碟 0 新增回陣列,接著針對所有磁碟機再次執行步驟,或使用 RLM (RAID 層級遷移) 和/或 OCE (線上容量擴充) 功能,將剩餘的磁碟機新增回陣列。
應移除所有標示為預測性故障的磁碟機,且不應包含在復原程序中。再次以圖 3 作為範例,如果磁片 0 為預測性故障,請卸下此磁碟機。然後執行上述步驟。由於僅剩下 2 個磁碟機,因此所建立的 RAID 陣列將為 RAID 1 而非 RAID 5。在取得磁碟 0 的更換品 (由於預測性故障) 之後,請再次針對所有 3 個磁片磁碟機執行步驟,或使用 RLM 將磁碟 0 新增至現有陣列,並將其從具有 2 個磁碟機的 RAID 1 變更為具有 3 個磁碟機的 RAID 5。
此程序可能令人望而生畏,尤其有資料遺失的可能性。這裡非常適用「預防勝於治療」這句格言。根據過去的經驗顯示,透過在 RAID 硬體和陣列上執行主動式維護,幾乎可避免所有雙重故障和穿刺的情況。
注意:有效地監控系統,便能及時偵測和修正問題,進而降低發生嚴重問題的風險。
相關文章
PERC - 如何修復 RAID 穿刺
回到頁首