Linux
如何在 zfs 中“重新平衡”數據?(確保數據分佈在所有條帶鏡像中)
以條帶鏡像(Raid 10)為例,如果將兩個磁碟擴展為四個,如何將兩個磁碟的數據在兩個鏡像之間“重新平衡”(分散)?
也就是說,如何將寫入一個鏡像的文件寫入兩個鏡像以利用條帶磁碟?
只有新寫入(附加)的數據會在所有目前活動的 vdev 之間拆分,ZFS 中沒有顯式的重新平衡操作。
兩種可能的解決方案:
- 等到所有舊數據被再次寫入(因為 CoW,這可能需要很長時間,在最壞的情況下,是完全寫入磁碟所需時間的兩倍)。
- 刪除所有數據並重新寫入(zfs send/recv 有助於將所有數據從池中取出並返回而不會失去任何內容)。這不必一次性完成,可以在同一個池中完成。
更準確地說,我會選擇第二種解決方案,並在系統負載較低的時候(例如晚上)分別傳輸每個文件系統:
- 拍攝一個
zfs snapshot -r
大小合適的文件系統(以及遞歸文件系統)的快照 ( )- 使用
zfs send | zfs recv
適當的選項將快照發送到新創建的臨時文件系統(如果空間允許,可以在同一個池中);此文件系統應與舊文件系統位於層次結構中的同一位置- 複製完成後(可能需要一些時間,因為磁碟要讀寫),
zfs destroy
舊快照和舊文件系統zfs rename
舊名稱的臨時系統- 檢查和更改掛載點
zfs mount
,重新安排替換文件系統的先前情況- 重複直到所有文件系統都被移動