![成長 ZFS RAID-Z[123] 而不會降低效能?](https://rvso.com/image/1609701/%E6%88%90%E9%95%B7%20ZFS%20RAID-Z%5B123%5D%20%E8%80%8C%E4%B8%8D%E6%9C%83%E9%99%8D%E4%BD%8E%E6%95%88%E8%83%BD%EF%BC%9F.png)
我知道在 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 磁碟後,您必須:
- 導出池 (
zpool export ${YOUR_ZFS_POOL}
)。 - Zap (
zpool labelclear ${OLD_DISK_DEVICE}
) 或實際刪除舊磁碟。
警告:如果您修改磁碟,則無法撤銷。 - 如有必要,請在新磁碟上增大 vdev 分割區。
- 導入池 (
zpool import ${YOUR_ZFS_POOL}
)。
警告:此後就無法撤銷。舊磁碟無法再在同一池中聯機。 - 展開磁碟 (
zpool online -e ${NEW_DISK_VDEV}
)。
對要更換的每個磁碟重複這些步驟後,新容量就會生效。
ZFS 的內建替換功能旨在避免上一節中描述的所有這些額外的複雜性。如果您擔心在重新同步期間損壞您的 RAID-Z zpool,也許您應該:
- 已建立具有更多冗餘的池(RAID-Z2、RAID-Z3),或者
- 在擴展陣列時將池備份到其他地方。
此外,如果磁碟確實出現故障,您還會滿足於 RAID-Z 嗎?
如果您的預算緊張並且確實無力承擔備份資料集的地方,那麼執行您的計劃確實更安全,因為克隆將是事務性的全有或全無操作,但請記住您的池將是唯讀的或者離線一段時間,並且您還面臨著在克隆後步驟中犯錯的風險。
使用zpool replace
會:
- 更快*,因為只有使用過的儲存才會被複製,而不是整個區塊裝置
* 如果您有依序擦洗/重新鍍銀功能 - 沒有停機時間,因為在重新同步發生時池將完全運行
- 消除人為錯誤,因為您將使用 ZFS 預期的更換磁碟工作流程