隨著時間推移,在硬碟上的資料資料可能會因為硬體因素或其他原因,在沒有示警的狀況下,部分儲存單元異常導致資料毀損。舉例來說,下面兩張圖片,就是原檔和出現位元衰減毀損檔的比較,僅僅幾個位元的改動,也可能發生嚴重的資料損毀。本篇文章接著要分享的,即是利用 Data Scrubbing 藉由檢查和自動修正資料的方式來防止資料毀損。
在 Synology Data Scrubbing 的機制中,包含了以下兩件事情:RAID Scrubbing 和 Btrfs Scrubbing。
在進一步解釋 RAID Scrubbing 之前,首先讓我們介紹什麼是 RAID 。RAID 的全名是「獨立磁碟冗餘陣列」 (redundant arrayof independent disks),簡單說,就是結合多塊獨立的硬碟,組合成一個硬碟組,藉由多顆硬碟達到資料冗餘或是效能提升。RAID 有多種形態,RAID Scrubbing 則在 RAID 5 / RAID 6 系列的 RAID 上支援。
以下先簡短介紹 RAID 5。
RAID 5 : RAID 5 的基本機制仰賴至少三個硬碟,並利用資料區塊的奇偶校驗 (parity striping)進行寫入與讀取。如下圖,當寫入一段資料到磁碟陣列時,RAID 5 會依序寫入 A1、A2、A3、B1、B2 和 B3。而在讀取資料時,RAID 也會依序讀取數據。那 Pa、Pb 和 Pc 又是做什麼的呢?它們是分布在硬碟的奇偶校驗塊。當寫入 A1、A2 和 A3 時,RAID 5 會使用下列的 XOR 位元運算子計算 Pa,並寫入對應的區塊。
Pa = A1 (XOR) A2 (XOR) A3 (函數1)
假設其中一個硬碟毀損,RAID 5 可以藉由使用 Parity striping 和其他兩個硬碟的內容,修復消失的資料。假設包含 A2 資料的硬碟毀損,那麼我們可透過下列的XOR 計算加以重建資料:
A2 = A1 (XOR) A3 (XOR) Pa (函數 2)
這就是 RAID 5 透過冗餘功能,提供最多一顆硬碟損毀而資料不受影響的保護。
RAID Scrubbing
在初步了解 RAID 5 的特性後,我們就來說說什麼是 RAID Scrubbing。RAID Scrubbing 可掃描陣列中的所有內容,以確保所有 parity stripe 滿足函數 1;若不滿足的話,則會利用函數2 予以修復,直到所有的值都達成一致,如此一來即可確保資料在磁碟陣列中的正確性。
「只要定時進行RAID Data Scrubbing,我的資料就可以永保完整嗎?」遺憾的是,答案是否定的。我們無法確保寫入硬碟的資料永遠正確。有些資料毀損會在不知不覺中發生,我們稱之為無聲資料毀損,亦即某些資料有可能會在存於硬碟上,卻莫名地產生位元組資料改變。這種狀況可能肇因於諸多原因,包括硬碟錯誤和電磁干擾等等。
而 RAID Scrubbing 雖能確保存入的資料一致性,但卻無法防禦無聲資料損毀。假設我們今天要透過A1、A2 和 A3 (如果上圖的函數1 所示)重建 Pa,但是如果 A1、A2 和 A3 其中一筆毀損,那麼運作函數就會出錯,只會讀取到錯誤的內容,導致整個過程每況愈下。
這時就需要 Btrfs Data Scrubbing
首先 Btrfs 檔案系統可以將兩份中繼資料(metadata)儲存於一個儲存空間並計算其相關的檢查碼。而Btrfs Data Scrubbing 正是利用這個特性來做到自動的資料修復。
Btrfs Data Scrubbing 利用檢查碼機制 (checksum mechanism) 檢查儲存在 Btrfs 檔案系統的資料。如果監測到任何資料和檢查碼不一致,系統會試圖使用冗餘資料來修復。
此功能,僅需要使用者在建立新的共用資料夾時開啟資料檢查碼功能,Btrfs 檔案系統就會為每個寫入的檔案計算資料檢查碼 ( data checksum ),並用另一組檢查碼(metadata checksum) 保護資料檢查碼。
遏止資料毀損的風險
若使用者無法決定要使用哪一套 Data Scrubbing 系統也不用太擔心,Synology 的 Data Scrubbing 系統整合 Btrfs Data Scrubbing 和 RAID Scrubbing 以確保資料完整性。在 Btrfs 環境執行 Data Scrubbing 時,會先執行 Btrfs Data Scrubbing,在保障資料正確性後,接著執行RAID Data Scrubbing,進一步確保資料一致性。這兩項系統的攜手合作可以降低無聲資料毀損的風險,並確保儲存系統運作無礙。