自我修復檔案系統對於一般用途有多大好處?

自我修復檔案系統對於一般用途有多大好處?

我最近研究了高級檔案系統(Btrfs、ZFS)的資料冗餘和可用性,並對它們提供的附加功能很感興趣,尤其是它們針對資料損壞的「自我修復」功能。

然而,我認為我需要退後一步,嘗試了解與傳統的mdadm-Raid1 + 相比,對於一般家庭/SMB 使用來說,這種好處是否勝過其缺點(Btrfs 錯誤和未解決的問題以及ZFS 可用性和效能影響) Ext4 解決方案。無論哪種方式都可以使用鏡像備份。

假設我有幾個用於存檔目的的檔案伺服器,它們的資源有限,但有 ECC 記憶體和穩定的電源。

  1. 我遇到實際資料損壞導致文件不可讀的可能性有多大?如何?
  2. Ext4 或系統檔案管理器是否可以偵測到複製/移動操作中的資料錯誤,至少讓我意識到問題?
  3. 如果由於其中一個驅動器有壞扇區而導致 madam-Raid1 驅動器中的一個驅動器保存不同的數據,會發生什麼情況?我是否仍然能夠檢索正確的文件,或者數組是否無法確定哪個文件是正確的文件並完全丟失?

答案1

是的,功能性校驗和檔案系統是一件非常好的事情。然而,真正的動機並不存在於神話般的「bitrot」中,雖然發生,是非常罕見的。相反,主要優點是這樣的檔案系統提供和端對端資料校驗和,主動保護您免受錯誤磁碟行為的影響,例如與磁碟本身專用 DRAM 快取失敗和/或由於電源問題而導致行為不當相關的錯誤寫入和資料損壞。

當 Linux RAID 1 陣列因電源問題而損壞時,我親身經歷過這個問題。一個磁碟的快取開始損壞數據,並且嵌入磁碟區本身的 ECC 沒有捕獲任何內容,這僅僅是因為寫入的數據已經被破壞了ECC 是根據損壞的資料本身計算的。

由於其校驗和日誌檢測到了一些奇怪的東西並暫停了檔案系統,XFS 限制了損害;但是,某些檔案/目錄已損壞且無法修復。由於這是一台備份機器,不會面臨立即停機壓力,因此我使用 ZFS 對其進行了重建。當問題再次出現時,在第一次清理期間,ZFS 透過從其他磁碟讀取良好副本來修正受影響的區塊。結果:沒有資料遺失,也沒有停機。這是使用校驗和檔案系統的兩個很好的理由。

值得注意的是,資料校驗和非常有價值,以至於設備映射器的目標是提供它(透過模擬 T-10 DIF/DIX 規範),稱為DM-完整性,正是為了將這種保護擴展到經典塊設備(特別是冗餘塊設備,如 RAID1/5/6)而開發的。憑藉著斯特拉蒂斯項目,它將被整合到一個全面的管理 CLI/API 中。

但是,您有一個觀點,即此類檔案系統帶來的任何潛在優勢都應該與它們繼承的劣勢進行比較。 ZFS 的主要問題是它沒有被主流化到標準核心中,但除此之外它非常快速且穩定。另一方面,BTRFS 在主線化時,有許多重要問題和效能問題(對資料庫或虛擬機的常見建議是停用 CoW,這反過來又禁用校驗和 - 坦率地說,這不是一個可接受的答案)。我會使用 XFS 並希望得到最好的結果,而不是使用 BTRFS,或使用 dm-integrity 受保護的裝置。

答案2

  1. 我的希捷硬碟每次執行 zfs scrap 時都會出現校驗和失敗的情況。幾週後失敗了。 ZFS 和 Btrfs 具有資料和元資料的校驗和。 ext4 僅具有元資料校驗和。

  2. 僅 CRC 錯誤和元資料校驗和錯誤。可能會發生資料損壞。

  3. 如果它有壞扇區,那就不是問題。整個磁碟將“出現故障”,但另一個磁碟“正常”。問題是資料具有正確的 CRC,但資料已損壞。由於磁碟較大,這種情況可能會隨機發生。

答案3

我在 Linux 和 FreeBSD 下的伺服器和家庭辦公室 NAS 生產中使用 ZFS 已經超過 6 年了。我發現它穩定、快速、可靠,而且我親自看到它能夠檢測和(當能夠時)糾正簡單md設備或ext4檔案系統無法做到的錯誤。

然而,我認為我需要退後一步,嘗試了解這種好處是否大於其缺點(Btrfs 錯誤和未解決的問題以及 ZFS 可用性和效能影響)

關於許可,ZFS 是開源的,它只是在 CDDL 許可證下發布,而 CDDL 許可證不是合法地與 Linux 核心發布的 GPLv2 許可證相容。詳細資訊在這裡。這並不意味著它處於“一段時間的林森邊緣”狀態,也不意味著有任何技術的不相容。它只是意味著主線 Linux 核心原始碼沒有模組,必須從類似的地方檢索它們https://zfsonlinux.org請注意,某些發行版(例如 debian)在其發行版中包含 ZFS在 Debian / Ubuntu 上安裝 ZFS 通常可以使用單一命令完成apt

至於效能,如果有足夠的 RAM,ZFS 的效能對我來說可以是接近 ext4 到超過 ext4,這取決於記憶體、可用池空間和資料的可壓縮性。我認為 ZFS 最大的缺點是記憶體使用:如果生產伺服器的 RAM 小於 16 GiB,您可能需要避免使用 ZFS。這是一個過於簡化的經驗法則;網路上有很多有關 ZFS 記憶體需求的資訊。我個人在具有 32GB RAM 的家庭辦公室 Linux 系統上運行一個 10TB 池和一個 800GB 池以及一些備份池,性能非常好。這個伺服器執行 LXC 並執行多個服務。

ZFS 的功能遠遠超出了資料校驗和和自我修復功能;它強大的快照比 LVM 快照要好得多,而且它的內聯 lz4 壓縮實際上可以透過減少磁碟寫入來提高效能。我個人在 10TB 池上節省了 1.55 倍(在僅 6.3GiB 的磁碟空間中儲存 9.76GiB 的資料)

根據我的經驗,當池使用率達到 75% 或 80% 時,ZFS 效能就會下降。只要保持在該點以下,性能就足以滿足一般家庭/中小企業的使用。

在我見過的 ZFS 檢測並修正壞數據的案例中,根本原因尚不清楚,但很可能是壞磁碟區塊。我也有 ECC 內存並使用 UPS,所以我不相信 RAM 中的資料已損壞。事實上,您需要 ECC RAM 才能從 ZFS 校驗和中獲益。然而,在過去 6 年裡,我見過少數(約 10-15)個區塊校驗和失敗的案例。ZFS 相對於 md RAID 的一大優勢是 ZFS 知道哪些檔案受到校驗和錯誤的影響。因此,如果沒有冗餘的備份池出現校驗和錯誤,ZFS 會告訴我精確的受影響的文件,允許我替換這些文件。

儘管 ZFS 使用的許可證與 Linux 核心不相容,但安裝模組非常容易(至少在 Debian 上),一旦熟悉了工具集,管理就很簡單。儘管許多人在互聯網上表示擔心 ZFS 會丟失全部數據,但我還是絕不自從遷移到 ZFS 以來,我丟失了任何數據,而 ZFS 快照和數據校驗和/冗餘的結合使我個人避免了多次數據丟失的情況。這是一場明顯的勝利,我個人永遠不會回到陣列md

答案4

我可以補充一點,ZFS 非常強大,這主要歸功於它的起源(它是由 Sun Microsystems 於 2001 年開發的)。目前可用的開源版本是 Sun Microsystems 大約 10 年前發布的最後一個開源版本之一的分支,在 Oracle 收購 Sun Microsystems 後關閉了 ZFS 來源之後,開源社群進一步開發了該版本。

Oracle 本身仍然維護著在其企業儲存系統中使用的 ZFS 閉源版本。

不過,ZFS 有一點學習曲線,因為它非常強大,有很多東西可以調整。而且,它是我開發過的少數維護實際上很容易的儲存檔案系統之一。我遇到過一種情況,需要將池從 RAID5 設定遷移到 RAID6(或更準確地說,從 RAID-Z1 遷移到 RAID-Z2)。通常,這樣的操作意味著複製出所有數據,重新配置 RAID,然後將數據複製回來。另一個命令將池複製回。

但也有一些問題:

  1. 要從 ZFS 中獲益,您需要讓 ZFS 自行處理磁碟。所以你的驅動器控制器需要支援JBOD,這樣ZFS才能直接看到磁碟。所有 RAID 配置均在 ZFS 中處理,因為它使用奇偶校驗資料進行清理和其他任務,因此無法透過 RAID 控制器將其隱藏。
  2. 正如其他人所說,ECC 記憶體是強力推薦。 ZFS 不需要它,但它完全期望寫入 RAM 的任何內容都是不可變的並且不會被損壞。因此,如果您在具有非ECC RAM 的系統上運行它並且內存變壞,ZFS 在清理陣列時實際上可能會損壞您的數據(清理意味著ZFS 從池中讀取數據,計算它應該從奇偶校驗中讀取的內容)保存在其他磁碟機上的信息,並更正發現的任何錯誤)。
  3. 儘管 ZFS 在防止資料遺失方面非常出色,但其 RAID-Z1 仍然遇到與 RAID5 相同的問題。如果磁碟機 URE 率太高,則在重建陣列時,大型 (1TB+) 磁碟機的大型陣列可能會在單一磁碟故障後完全失敗,因為在重建時從其餘磁碟機的奇偶校驗中讀回所有資料幾乎可以保證由於驅動器大小而導致的不可恢復的讀取錯誤。如果您不是作業系統儲存系統的專家並且碰巧知道自己在做什麼,請執行 RAID6 / RAID-Z2。

對於初學者和家庭環境,我通常推薦 FreeNAS,它維護得很好並且設定簡單,這對初學者來說很有好處。

相關內容