Linux

如何在 zfs 中“重新平衡”數據?(確保數據分佈在所有條帶鏡像中)

  • October 29, 2019

以條帶鏡像(Raid 10)為例,如果將兩個磁碟擴展為四個,如何將兩個磁碟的數據在兩個鏡像之間“重新平衡”(分散)?

也就是說,如何將寫入一個鏡像的文件寫入兩個鏡像以利用條帶磁碟?

只有新寫入(附加)的數據會在所有目前活動的 vdev 之間拆分,ZFS 中沒有顯式的重新平衡操作。

兩種可能的解決方案:

  1. 等到所有舊數據被再次寫入(因為 CoW,這可能需要很長時間,在最壞的情況下,是完全寫入磁碟所需時間的兩倍)。
  2. 刪除所有數據並重新寫入(zfs send/recv 有助於將所有數據從池中取出並返回而不會失去任何內容)。這不必一次性完成,可以在同一個池中完成。

更準確地說,我會選擇第二種解決方案,並在系統負載較低的時候(例如晚上)分別傳輸每個文件系統:

  • 拍攝一個zfs snapshot -r大小合適的文件系統(以及遞歸文件系統)的快照 ( )
  • 使用zfs send | zfs recv適當的選項將快照發送到新創建的臨時文件系統(如果空間允許,可以在同一個池中);此文件系統應與舊文件系統位於層次結構中的同一位置
  • 複製完成後(可能需要一些時間,因為磁碟要讀寫),zfs destroy舊快照和舊文件系統
  • zfs rename舊名稱的臨時系統
  • 檢查和更改掛載點zfs mount,重新安排替換文件系統的先前情況
  • 重複直到所有文件系統都被移動

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