Migration

當池具有超過 1/3 的可用空間時,將具有 3 個驅動器的 ZFS RAIDZ 就地遷移到 4 個磁碟

  • December 22, 2014

我假設在 ZoL 上創建我的​​ RAID-Z 池時,我以後可以輕鬆地插入額外的磁碟。與此同時,我了解到這是不可能的。

但是……我在創建我的初始池時遇到了類似的問題。只有 4 個空閒的 SATA 埠,但是一個帶有三個 2TB 磁碟的舊 RAID5 和一個帶有三個 4TB 磁碟的新 RAIDZ1。解決方案是 a) 降級 RAID5 和 b) 使用稀疏文件建構初始 RAIDZ 作為“虛擬第三驅動器”,在池創建後立即離線:

  1. 創建稀疏文件:dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
  2. 創建 raidz 池:zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
  3. 立即脫下稀疏文件:zpool offline zfspool /zfs1
  4. 將數據遷移到zfspool. 解除安裝舊的 RAID5 磁碟,添加第三個,新的 4TB 磁碟
  5. 用實際的第三個驅動器替換並重新同步池中的稀疏文件:

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。

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