Zfs

是否可以通過重新發送來修復 ZFS 快照?

  • December 13, 2021

給定兩個 ZFS 池,其中一個的快照發送到另一個池,是否可以使用儲存在另一個池中的該快照的副本自動修復損壞的快照?

我希望這只是一個假設的問題,但似乎值得知道!據我所知,zfs scrub僅適用於單個池,並且僅在該池中有冗餘時才進行修復;我想我正在尋找一種比較兩個快照並使用另一個修復損壞的快照的方法(假設另一個是完整的)。

例如,如果我將 ZFS 設置限制在單個磁碟上,並且空間可能會限制使用該copies選項對所有數據進行自我修復的能力,例如在筆記型電腦上。在這種情況下,ZFS 的其他功能(本機壓縮和加密、損壞檢測以及使用 備份的速度)仍然很好zfs send,但是,單個翻轉位可能會導致文件損壞。雖然在這種微不足道的情況下我可以只替換一個文件,但我仍然很好奇快照是否可以用於更複雜的情況(例如,如果某些元數據已損壞,或者無法辨識特定文件)。

ZFS 快照無法“修復”。您可以重新發送它,但如果您的池沒有冗餘,則不能簡單地糾正單個損壞的塊。

對於數據位腐爛,應該能夠對損壞的數據進行手動低級覆蓋(即:重寫原始塊以匹配儲存的校驗和),但我從未嘗試過。元數據位腐爛通常意味著發生了一些非常錯誤的事情,因為即使在單磁碟池上,ZFS 預設也會保留所有元數據的多個副本。

作為旁注,據我所知,這種“快照修復”方法在項目的 github 問題上進行了討論,因為它從未實施過。

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