正如標題所說,我關心的是,我們怎麼能避免資料遺失由於硬碟(機械 HDD 或 SSD)壞扇區。
\更多資訊\
問題定義明確。問題到這裡就結束了。讓我嘗試提供更多資訊。儲存設備故障(硬體故障,首先排除病毒的事情)主要分為兩種。
整個磁碟故障。磁碟內部的任何機械和/或電子問題都會導致磁碟無法存取。
壞扇區。只有某個部分有問題。整個磁碟似乎運作正常。如果不訪問/檢查某個壞扇區,我們將永遠不會知道存在壞扇區。
\RAID無法避免因壞扇區導致的資料遺失\
RAID1、RAID5或RAID6可以避免情況1導致的資料遺失。的情況。如果第一個磁碟中出現壞磁區,則第一個磁碟中的檔案已損壞。此時,我們在第二個碟中仍然有鏡像檔。但我們不知道有壞扇區。因此,RAID1陣列不會指示磁碟故障,也不會觸發復原。隨著時間的推移,壞道越來越多。 (每個硬體都會磨損,這只是時間問題。)第二個磁碟中的確切鏡像位元/鏡像部分也有可能出現壞磁區。此時,就不再有多餘的副本了。受影響的資料將永遠遺失。同樣,我們也不會立即註意到這一點。只有在存取該資料之前,我們才會發現這種損失。
\是 ZFS(帶有校驗和的檔案系統)一個辦法?\
由於擔心我希望避免因壞扇區導致的資料遺失,我開始研究文件校驗和。似乎沒有太多流行的檔案系統包含每個檔案的校驗和。我對 Gentoo Linux 有一些了解。因此我計劃在 Gentoo Linux 上使用 ZFS。
ZFS「儲存管理應該簡單」和「冗餘應該由檔案系統處理」的想法很好。在我看來,如果 ZFS 磁碟中出現壞磁區,它會默默地恢復它(不是嗎?我還無法確認這一點)。如果ZFS磁碟中出現越來越多的壞磁區,是否表示該ZFS磁碟的大小會縮小?如果沒有,我如何注意到壞扇區發生?我如何知道硬碟壞扇區太多而必須更換另一個健康的硬碟?我想我需要一些 ZFS 監視器和 ZFS 實用程序,但我在 Internet 上找不到太多資訊。
答案1
鑑於您假設資料儲存最終總是會失敗,您只需要保留多份副本數據,偶爾檢查並確保可以成功讀取數據。
使用某種類型的 RAID 聽起來像是擁有至少一個備份副本的好方法,但額外的副本是一個好主意,至少出於不將所有副本保留在同一建築物、房間和機器中的明顯原因。線上備份是讓其他人擔心他們的驅動器故障的好方法。
為了確保資料仍然可讀,只需保留自己的校驗和並定期驗證它們即可。一個基本的 CRC 就可以工作,例如cksum
GNU 的核心實用程序,甚至是 md5sum 或 shaXsum(儘管在我看來,它們對於壞扇區來說太過殺傷力了)。
[出於顯而易見的原因,並保留一些校驗和文件的副本。
即使 ZFS 有自己的校驗和,您仍然應該保留自己的副本,以驗證儲存在其他檔案系統或線上的副本。我假設你或 ZFS 無論如何都必須讀取所有檔案來驗證它們(我相信它被稱為ZFS 資料清理,用zpool scrub
) 顯式調用。
考慮到許多驅動器(尤其是閃存驅動器)都有自己的壞塊管理(和磨損均衡),將壞塊和邊緣塊替換為新的備用塊,所有(大部分)都是默默地進行,您或操作系統甚至都沒有註意到,這也很有趣。我曾經讀到過有關閃存卡的內容,16GB 的內存中只有足夠好的內存來製作 512MB 或 1G 的卡。
答案2
關於 RAID 5/6
RAID 5/6 有奇偶校驗資料。
如果它可以重建整個磁碟,那麼肯定有足夠的奇偶校驗資料來還原單一磁區。
最糟糕的情況是,您檢測到壞扇區,更換整個驅動器,現在一切都已重建。
因此,如果 RAID 5/6 偵測到壞磁區應該自動使用奇偶校驗資料來修復它。
我的 Adaptec RAID 控制器甚至在 GUI 中具有特殊的「驗證/修復」選項。
另請注意校驗和、sha1、sha2、CRC 等僅提供偵測何時發生錯誤的能力。它確實提供了修復它們的能力。