Migration
當池具有超過 1/3 的可用空間時,將具有 3 個驅動器的 ZFS RAIDZ 就地遷移到 4 個磁碟
我假設在 ZoL 上創建我的 RAID-Z 池時,我以後可以輕鬆地插入額外的磁碟。與此同時,我了解到這是不可能的。
但是……我在創建我的初始池時遇到了類似的問題。只有 4 個空閒的 SATA 埠,但是一個帶有三個 2TB 磁碟的舊 RAID5 和一個帶有三個 4TB 磁碟的新 RAIDZ1。解決方案是 a) 降級 RAID5 和 b) 使用稀疏文件建構初始 RAIDZ 作為“虛擬第三驅動器”,在池創建後立即離線:
- 創建稀疏文件:
dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
- 創建 raidz 池:
zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
- 立即脫下稀疏文件:
zpool offline zfspool /zfs1
- 將數據遷移到
zfspool
. 解除安裝舊的 RAID5 磁碟,添加第三個,新的 4TB 磁碟- 用實際的第三個驅動器替換並重新同步池中的稀疏文件:
zpool replace zfspool /zfs1 /dev/disk3
這真的很棒!現在我了解到,雖然 ZFS 不直接支持將單個磁碟添加到 RAIDz,但它支持將更大的磁碟逐個替換。
所以這是我的計劃。有人看出其中的缺陷嗎?
- 購買第四個 4TB 磁碟並將一個磁碟從現有池中離線
- 在這兩個空閒磁碟上創建 2x2TB 分區。
- 用這四個“磁碟”建構一個 RAIDz:3x2TB = 6TB 網路儲存。
- 出於性能原因:立即使第二個分區之一離線
- 最大遷移 6TB 數據到新池並銷毀舊池
- 用一個真正的 4TB 舊池替換離線“2TB 磁碟”。等待重新同步。
- 在具有 2 個活動分區的驅動器上:使第二個 2TB 分區離線,並用舊池中的第二個 4TB 磁碟替換它。等待重新同步。
- 一對一:將剩餘的 2TB 分區離線,將分區擴展為 4TB,然後將磁碟重新添加到池中。等待重新同步。
- 沖洗並重複最後一個 2TB 磁碟/分區
這行得通嗎?我知道由於在此過程中缺少冗餘,我更容易受到數據失去的影響,但我將備份最重要的數據。對於整個 6TB 有效負載來說還不夠。
並且 ZFS 會在最後一步之後自動將池增長到 (3+1)x4TB = 12TB 嗎?
醜陋,但這會起作用。
除非它沒有;)。
- 指定分區和更換磁碟時要非常小心
- 事先在 am VM 中嘗試,像硬體一樣設置虛擬磁碟並空執行 1 或 2 次。
- 在開始之前進行擦洗並查看磁碟中的 SMART 資訊。你不會用已經很脆弱的磁碟嘗試這個。
重要提示:您最好在嘗試之前在其他介質或機器上進行測試備份!
是的,如果最後一個 2TB 磁碟或分區被替換為 4TB 磁碟或分區,ZFS 將擴大池(如果池有 autoexpand=on)
zpool get autoexpand $pool zpool set autoexpand=on $pool
附帶說明:您不應該在大於 2TB 的磁碟上使用 RAID-Z。更換故障磁碟時,您在重新同步時出錯的可能性非常高。請考慮 RAID-Z2。