Linux

硬碟/SSD——檢測和處理錯誤——是否可靠地防止了無聲數據損壞?

  • June 11, 2015

當驅動器上發生錯誤時,假設它總是被檢測到並報告給作業系統(如果是軟體 RAID,如 mdadm)或 RAID 控制器(如果是硬體 RAID)作為讀取失敗(即它不會靜默返回損壞的數據),然後 RAID 軟體/控制器將採用該事實並使用 RAID 中的其他驅動器來讀取數據(假設它是具有冗餘的 RAID 類型)?

據我了解,現代企業級驅動器有適當的錯誤檢測方案,所以我假設是這種情況,但很難在網上找到任何結論性的東西。我想這個答案在一定程度上取決於驅動器內置錯誤檢測的質量,所以如果它很重要,我最感興趣的是英特爾 DC S3500 系列 SSD。

編輯 2015 年 6 月 5 日 - 澄清:

具體來說,我想知道今天用於檢測錯誤的算法是否防彈。在一個簡單的例子中,如果錯誤檢測只是對扇區中的所有位進行 XOR,那麼如果兩個位被翻轉,則不會檢測到錯誤。我想它們比這更先進,但我想知道錯誤未被發現的機率是多少,如果它是如此之低以至於我們甚至不必擔心它,以及是否有一些權威來源或值得信賴的文章在某個地方可以被引用。

編輯 2015 年 6 月 10 日

更新了問題標題和問題正文,使其更適用於磁碟錯誤的概念(不像最初那樣以 mdadm 為中心)。

硬碟驅動器確實有多種糾錯方法來防止數據損壞。硬碟驅動器分為扇區,其中一些可能會變得完全不可寫/不可讀或通過數據損壞返回錯誤數據 - 我們稱第一個壞扇區損壞和後一個無聲數據損壞

壞部門腐敗

驅動器本身已經通過多種方式處理了第一個損壞。在工廠,每個製造的驅動器都經過壞扇區測試,這些壞扇區被放入主要缺陷列表 (p-list)。在驅動器的正常使用過程中,內部系統可能會通過正常的磨損發現更多的壞扇區——這些壞扇區被放入*Grown Defect List(g-list)*中。有些驅動器有更多列表,但這兩個是最常見的。

驅動器本身通過將對硬碟驅動器扇區的訪問重新映射到備用扇區而不通知作業系統來應對這些錯誤。但是,每次重新映射發生時,硬碟驅動器 SMART 系統中的適當值都會增加,從而表明硬碟驅動器的磨損越來越大。要查找的指標是 SMART 5 - Reallocated Sector Count,而其他重要的指標是 187(報告的不可糾正錯誤)、197(目前待處理的扇區數)和 198(離線不可糾正)。

為了找到壞扇區,硬碟驅動器使用內部糾錯碼 (ECC),可用於確定特定扇區中數據的完整性。這樣,它可以檢查扇區中的寫入和讀取錯誤,並在必要時更新 g-list。

來源

靜默數據損壞

由於我們確實有相當多的內部數據完整性檢查,因此無聲數據損壞應該非常少見——畢竟,由於硬碟驅動器的任務是可靠地保存數據,它們應該正確地完成這項工作。

為了將使用者請求讀取或寫入之外的靜默數據損壞量降至最低,RAID 系統會定期檢查完整驅動器的 ECC 以更新 g-list(數據清理)。如果發生錯誤,則在檢查扇區 ECC 後從另一個 RAID 成員重建數據。

然而,所有的數據校正和完整性檢查都必須在某個地方完成——韌體。這些低級程序中的錯誤可能仍然會導致問題,機械問題和誤報 ECC 總和也可能會導致問題。一個範例是未經檢查的寫入,其中韌體錯誤地報告寫入成功,而實際的硬碟驅動器寫入沒有發生或有故障(身份差異)。

有一些關於這些故障的統計發生的研究,其中文件系統數據完整性檢查確實報告了故障而沒有底層驅動器報告問題,因此顯示出無聲的數據損壞。

TLDR:在 17 個月的時間跨度內,平均低於 0.3% 的消費者磁碟和低於 0.02% 的企業磁碟包含此類身份差異,並檢查了 150 萬個磁碟(總共 365 個磁碟存在身份差異) - 請參閱表 10 和第 5 節在本出版物中。

來源

引用自:https://serverfault.com/questions/696216