最近,我讀到了一些關於具有非 ECC RAM 和典型檔案系統的系統中的損壞率的令人震驚的統計數據。據我 Google 所知,擁有運行 ZFS 且具有 ECC RAM 的系統可能是防止損壞的最佳方法。大多數資訊都是在 NAS 討論的背景下提供的。
我可以看到擁有這樣的系統對於歸檔文件將非常有用,假設它們在來源電腦上尚未損壞並且透過網路完美傳輸。
我無法透過 Google 搜尋到的是:當我在不太可靠的電腦上處理文件時,擁有最可靠的 NAS 託管文件(或作為備份)有什麼意義?我也無法找到有關Samba 糾錯的好資訊(無論最新版本是在支援ZFS 的作業系統(如FreeNAS 或OpenIndiana)中)——如果它很容易出錯,那麼幾乎其他一切都是毫無意義的(除非我親自對所有內容進行哈希處理並驗證所有傳輸)。
如果我不想擔心位元腐爛等問題,我是否需要(象徵性地)扔掉當前的系統並用(迷你)伺服器級硬體替換它們?如果我走這條路,我是否可以合理地期望擁有除了運行 ZFS 之外的其他資源?不用花幾千塊?
我的用例:
我關心的不僅僅是播放(例如電影和其他媒體)。我經常在家用計算機上進行程式設計工作。例如,我有越來越多的用於各種專案的 SQLite 資料庫檔案。其中一個腐敗可能會成為一個問題。我還有很多千兆位元組的家庭和度假照片,我不僅想存檔,還想整理、標記等。 「悄然腐敗」。
答案1
ZFS 對於運行在什麼硬體上非常挑剔。
並不是說您必須擁有完全正確的晶片組、顯示卡、磁碟韌體版本等,而是指硬體提供的功能。請記住,ZFS 被設計為高階伺服器解決方案,它所做的某些假設反映了這一點。
ZFS 如此適合儲存您關心的資料的一個主要部分是,您可以透過既可以檢測又可以檢測的方式來設定它並糾正儲存錯誤。這可能是微不足道的錯誤,例如某處的單一位元翻轉,也可能是災難性的錯誤,例如多個磁碟同時崩潰。只要您保持在儲存佈局的冗餘閾值之上(例如,在 raidz2 vdev 中同時遇到問題的磁碟不超過兩個),ZFS 就可以使用冗餘資料修正任何錯誤。進一步的錯誤,取決於它們發生的位置和方式,可能會導致(半)優雅的系統恐慌,或簡單的 I/O 錯誤。
如果操作正確,您也可以將系統設定為定期清理 ZFS 池。這將在降級成為問題之前捕獲它,並通知您,以便您可以考慮在其成為問題之前更換無法保存資料的儲存裝置。
然而,那種偉大取決於 RAM 是否可信。所有這些驗證、更正、重寫等主要發生在 RAM 中。在高階伺服器上,除了 ECC RAM 之外什麼都找不到。
ZFS 以相同的方式保護(和處理)池元資料、檔案系統元資料和使用者資料。這裡沒有真正的區別。
如果您的工作站系統經歷 RAM 位元翻轉,那麼當您將位元翻轉資料寫入 ZFS 時,位元翻轉資料將成為 ZFS 最終寫入磁碟的基礎。這顯然很糟糕,因為這意味著您的檔案將被損壞。然而,位元翻轉的數據將是就 ZFS 而言是正確的。這實際上是好的,因為這意味著所有正常的 ZFS 恢復方法都將起作用。是的,相關文件的最新副本將被損壞,但是無論如何都會腐敗,無論您使用什麼檔案系統。您可以利用 ZFS 的快照至少能夠及時回到未損壞的副本。設定類似的東西zfs 自動捕捉定期、近距離地對檔案系統進行快照,保留較粗略的歷史記錄,並在需要時忘記它。 (例如,保持 10 個快照,間隔 10 分鐘;50 個快照,間隔 1 小時;30 個快照,間隔 6 小時;等等。)ZFS 中的快照實際上是免費的;如果你使用ZFS,使用快照以及。
如果執行 ZFS 的儲存伺服器遇到 RAM 損壞,無論是位元翻轉還是卡住(一個或多個)位,並且儲存伺服器中有 ECC RAM,則會偵測到這一情況,並記錄該事件,或者係統將停止(如果錯誤無法糾正)。無論哪種方式,儲存在伺服器上的資料的完整性都會保留。如果您的 ZFS 儲存伺服器具有非 ECC RAM,那麼錯誤可能會傳播到您的所有數據和元數據ZFS 試圖「修正」其實只是電腦想像中的錯誤。作為最壞的情況,這實際上發生在人們身上,您的整個池將因此而被破壞,您的所有資料都將消失。儲存級/虛擬設備級冗餘在這裡也沒有幫助。對於大多數其他檔案系統(沒有自動更正行為),只有直接受位元翻轉影響的一個地方會被損壞,如果檔案系統發生這種情況,元資料很可能可以透過傳統的檔案系統檢查器和復原輕鬆修復工具。 ZFS 沒有這個逃生艙口;沒有 fsck.zfs。(有zpool磨砂膏,但如果水池壞了無法修復,那就不起作用了。
我無法透過 Google 搜尋到的是:當我在不太可靠的電腦上處理文件時,擁有最可靠的 NAS 託管文件(或作為備份)有什麼意義?
這意味著您擁有一個值得信賴的資料儲存庫。您知道,一旦資料到達您的 NAS,就不會損壞。任何損壞都會自動修復,或者您將收到有關問題的通知(對於 ZFS,透過 I/O 錯誤)。當使用不太可靠的系統處理資料時,資料可能仍然會被損壞,但是您將有一個地方可以找到已知的未損壞的副本。即使只有 NAS 系統具有 ECC RAM、ZFS 和設定的高品質儲存監控和警報,這也是一個優勢。
然後,如果需要,您可以在預算允許的情況下為其他系統添加(特別是)ECC RAM,以堵住最後一個漏洞。
如果我不想擔心位元腐爛等問題,我是否需要(象徵性地)扔掉當前的系統並用(迷你)伺服器級硬體替換它們?如果我走這條路,我是否可以合理地期望擁有除了運行 ZFS 之外的其他資源?不用花幾千塊?
首先,您實際上並不需要伺服器級硬體。您需要的主要是 ECC RAM(以及支援 ECC RAM 的 CPU 和記憶體控制器/晶片組),相當可靠的永久存儲,理想情況下是一個可以在系統運行時輕鬆添加和刪除磁碟的情況。這不一定要非常昂貴,當然也不需要花費「數千美元」。
其次,ZFS喜歡RAM,但主要用於快取。對於大多數工作負載,8-16 GB RAM 應該足夠了,即使購買高品質品牌 ECC RAM,24-32 GB(即使使用「消費」主機板也很容易獲得)的價格仍然合理。 ZFS 對 CPU 的消耗並不大;你可以讓它需要大量的CPU(就像佐爾,透過設定 sha256、gzip-9 壓縮和可能的重複資料刪除組合),但您不必這樣做。我自己的系統運行 ZFS,不是非常高效能(FX-6100 CPU 降頻),我到處都使用 sha256,甚至在純粹的順序 I/O 中,磁碟也是限制因素:一旦它超過了最初的小-由於清理的隨機讀取部分,我在清理上獲得的吞吐量與在底層儲存設備上的原始資料上獲得的吞吐量大致相同dd
,並且還有 CPU 空閒。
答案2
我無法透過 Google 搜尋到的是:當我在不太可靠的電腦上處理文件時,擁有最可靠的 NAS 託管文件(或作為備份)有什麼意義?
出現問題的幾率是累積的。
換句話說(並且使用假數字):
如果 NAS 上出現問題的可能性為 10%,並且
如果其他設備上出現問題的可能性為 10%,
那麼當您出現故障時,失敗的可能性為 20%從NAS 讀取內容並在其他裝置上播放。
我也找不到有關 Samba 糾錯的好信息
哪個桑巴版本。三個版本之間的協議發生了很大變化。
如果它很容易出錯,那麼幾乎所有其他事情都是毫無意義的(除非我親自對所有內容進行哈希處理並驗證所有傳輸)。
總是存在出錯的風險。這些確實會發生。它們確實會被檢測到並修正(例如透過校驗和)。使用 RAM 時並非總是如此,您可以透過使用奇偶校驗和/或 ECC 來改進這一點。然而,這些問題相對不太可能出現,您需要在鍍金(且昂貴)設計和「足夠好」之間找到平衡。
對於我們中的一些人來說,這種平衡將有很大不同(例如銀行需要完美的東西)。他們可能不保證在用於播放電影的個人系統上使用 ECC。
答案3
連接:
我嘗試閱讀Samba網站上的文檔,但無法確定Samba是否具有糾錯功能。我不得不假設最壞的情況 - Samba 依賴底層網路來確保無錯誤。如果底層網路是 TCP/IP,那麼似乎唯一的保護就是弱校驗和。
我最終選擇了 iSCSI,因為它支援使用 CRC32C 演算法的可選標頭和資料摘要。這超出了 TCP/IP 檢查的範圍。
有什麼好處嗎?
對我來說,答案是“是的,至少在一種情況下。”我可以使用我信任的程式將檔案備份到伺服器級 ZFS 電腦。然後我可以定期檢查是否據推測原機器上未修改的檔案是實際上未經修改。如果存在差異,我可以從伺服器恢復備份。
唯一的弱點是在不可靠的消費級機器上故意修改文件時。因為在這麼短的時間內發生腐敗的可能性很小,所以我認為這是可以接受的。如果我碰巧發現修改過程中發生了損壞,我將依靠增量備份。
使用功能強大、足以運行 ZFS 的伺服器替換我的計算機,並保留剩餘資源作為我的主計算機?
也許吧,但這會非常昂貴。我對上述場景很滿意,所以我不會嘗試這個。