成長 ZFS RAID-Z[123] 而不會降低效能?

成長 ZFS RAID-Z[123] 而不會降低效能?

我知道在 ZFS 上,成長 RAID-Z(或 RAID-Z2 或 RAID-Z3)vdev 的唯一方法是用更大的磁碟取代磁碟;沒有辦法改變幾何形狀。然而,是否可以在不降低陣列性能的情況下做到這一點?

例如,假設我有一個包含 4 個磁碟的 RAID-Z 陣列:1x2TB 和 3x1TB 形成 3 TB 可用空間。在所有驅動器正常工作的情況下,我又購買了 3 個 2TB 的硬碟以擴大陣列(達到 6 TB 可用)。如果我刪除每個 1 TB 並用 2 TB 替換,一次一個,以強制每個重新同步,那麼我會不必要地重複降低陣列性能,並增加在此過程中失敗的風險。

我希望可以在更換每個磁碟之前對其進行鏡像。即,將第一個 2 TB 新增至備用托架,將第一個 1 TB 磁碟映像到其中,然後移除 1 TB,並將 2 TB 放入移除的磁碟機插槽中;然後對第二個和第三個 1 TB 磁碟重複此操作。無論如何,這甚至可能消除重新同步或重新計算平價的需要。

這樣的事可能嗎?

答案1

您提出的解決方案是可行的,但存在一些重大缺點:

  • zpool import -o readonly=on ${YOUR_ZFS_POOL}當磁碟複製正在進行時,您無法向池 ( ) 寫入任何內容。
  • 您必須zpool export ${YOUR_ZFS_POOL}為切換出的每個磁碟匯出池 ( )。

克隆 vdev 磁碟後,您必須:

  1. 導出池 ( zpool export ${YOUR_ZFS_POOL})。
  2. Zap ( zpool labelclear ${OLD_DISK_DEVICE}) 或實際刪除舊磁碟。
    警告:如果您修改磁碟,則無法撤銷。
  3. 如有必要,請在新磁碟上增大 vdev 分割區。
  4. 導入池 ( zpool import ${YOUR_ZFS_POOL})。
    警告:此後就無法撤銷。舊磁碟無法再在同一池中聯機。
  5. 展開磁碟 ( zpool online -e ${NEW_DISK_VDEV})。

對要更換的每個磁碟重複這些步驟後,新容量就會生效。


ZFS 的內建替換功能旨在避免上一節中描述的所有這些額外的複雜性。如果您擔心在重新同步期間損壞您的 RAID-Z zpool,也許您應該:

  • 已建立具有更多冗餘的池(RAID-Z2、RAID-Z3),或者
  • 在擴展陣列時將池備份到其他地方。

此外,如果磁碟確實出現故障,您還會滿足於 RAID-Z 嗎?

如果您的預算緊張並且確實無力承擔備份資料集的地方,那麼執行您的計劃確實更安全,因為克隆將是事務性的全有或全無操作,但請記住您的池將是唯讀的或者離線一段時間,並且您還面臨著在克隆後步驟中犯錯的風險。

使用zpool replace會:

  • 更快*,因為只有使用過的儲存才會被複製,而不是整個區塊裝置
    * 如果您有依序擦洗/重新鍍銀功能
  • 沒有停機時間,因為在重新同步發生時池將完全運行
  • 消除人為錯誤,因為您將使用 ZFS 預期的更換磁碟工作流程

相關內容