Zfs

ZFS:備份系統需要鏡像?

  • January 29, 2016

我計劃通過zfs send. 我計劃將備份發送到的池專門為我的主系統的備份設置。我是否需要在遠端位置擁有驅動器鏡像,或者 zfs 是否足夠聰明以在下次呼叫時修復錯誤zfs send


澄清一下:在家裡,我有我的主伺服器,其中有兩個鏡像驅動器作為 zfs 池。現在我想將不可替換的數據發送到也執行帶有 zfs 的作業系統的異地伺服器。

問題是我是否還需要異地位置的冗餘。

假設zfs scrub在異地位置發現錯誤。會zfs send修復錯誤嗎?

Solaris ZFS 最佳實踐文件回答了這個問題:

未使用 ZFS 冗餘(RAIDZ 或鏡像)創建的池只能報告數據不一致。它無法修復數據不一致。在沒有 ZFS 冗餘的情況下創建的池更難管理,因為您無法在非冗餘 ZFS 配置中替換或分離磁碟。

由於zfs send/recv覆蓋數據(如果使用了正確的標誌),這取決於您的情況。例如,如果您每 5 分鐘傳輸一次新塊,並且您的主池在 2 分鐘後死亡,那麼與備份池僅每週、每月甚至更長時間更新一次的情況相比,損壞的可能性要低得多。

硬體可用性也可能很重要:如果您的備份磁碟死了(沒問題,您仍然有主池),但您一天都無法更換它,所以多個計劃備份現在會失敗怎麼辦?冗餘在硬體層面也有幫助,不僅是為了數據完整性。當然,如果您設置了另外兩台繼續工作的此類機器,這並不重要。

對於特殊案例(由於空間或埠限制,只有一個磁碟可能,池大小小於最大磁碟大小的一半)的替代方案可以設置copies=2為備份池。這樣,數據在備份池中內部複製(需要 200% 的空間)並為您提供數據完整性,但硬體故障仍會破壞您的備份池。儘管如此,它對於只能使用單個磁碟的長時間異地備份儲存或較小​​的系統可能很有用。請注意,它不適用於現有數據,因此需要之後進行完整備份。

另外,來自連結指南的警告:

如果您將 ZFS 發送流儲存在文件或磁帶上,並且該文件已損壞,則將無法接收它,並且任何數據都無法恢復。

這意味著,除非您有充分的理由不這樣做,否則您應該send與 結合使用receive,因為只能檢查活動的導入池是否損壞。如果你只是想儲存流(例如,如果一個目標池應該同時保存多個流),建議使用zstreamdump驗證完整性。

您不需要擁有鏡像,但這樣做會提高儲存在池中的數據的可靠性。

如果受影響的數據沒有冗餘,ZFS 將不會修復錯誤。磁碟本身通過在內部替換壞塊來處理壞塊,所以從這個意義上說,是的,再次發送一個池將某種“修復”問題。不過,我不會在這上面打太多賭,也不會更換一個經常出現錯誤的磁碟。

請注意,磁碟不會自行發現壞扇區,您需要讀取它們。該zpool scrub命令旨在掃描 zfs 池以查找錯誤。

引用自:https://unix.stackexchange.com/questions/249339