如何使用不同扇区大小的新磁盘重建 ZFS 池?

如何使用不同扇区大小的新磁盘重建 ZFS 池?

我安装了安装了 ZFS 的 Ubuntu 12.04。有两个池:rpool(根文件系统)和 rdata(所有数据)。rdata 是在 ZFS 镜像中使用 2 个 1TB WD EADS 驱动器(具有 512 字节物理扇区)构建的。rdata 上有许多按层次结构的数据集。

rdata 空间不足,所以我购买了 2 个 Seagate 3TB 硬盘。不幸的是,当我尝试将一个新硬盘添加到镜像中以便重新同步时,zpool 附加失败,提示

cannot attach /dev/disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F1EE1G-part1 to /dev/disk/by-id/scsi-SATA_WDC_WD10EADS-00_WD-WCAU47275172-part1: devices have different sector alignment

我现在知道这是因为新驱动器有 4k 个物理扇区,唯一的恢复途径是重建池。我建议执行以下操作:

  1. 确保 rdata 上所有数据集都有快照。
  2. 删除 rdata 镜像的 1 个元素(这样我有一个已知的良好备份并释放一个 SATA 端口)
  3. 将其中一个新驱动器连接到机器
  4. 创建一个名为 rdata1 的新池,具有 4k 个扇区和一个物理设备
  5. 使用 zpool recv 将 rdata 数据集的快照恢复到 rdata1
    • 此时,rdata1 应该与 rdata 相同
  6. 导出 rdata1 所在的设备
  7. 销毁数据
  8. 将包含 rdata1 的设备导入为 rdata
  9. 删除旧物理磁盘并将其替换为其他新磁盘
  10. 将另一个新磁盘连接到新创建的 rdata 以重新创建镜像

这听起来合理吗?如果出现问题,我仍然有第二个旧磁盘,作为最后的手段,我还有另一台 FreeNAS 服务器,里面有所有快照的完整备份;以防万一。

加雷思

答案1

最终,这件事情因我的失误而被迫进行。我最终采用的程序是:

  1. 关闭系统并断开原始池的一个元素;用新磁盘上的元素替换它。
  2. 启动电源并使用单个新磁盘创建新池
  3. 使用 rsync 来传输数据,而不是 zpool recv
  4. 导出两个池
  5. 使用旧名称导入新池
  6. 关闭电源,用新驱动器替换另一个旧驱动器
  7. 打开电源并将新驱动器连接到新池。

不幸的是,系统拒绝忘记旧池。我已将其移至新问题:如何从 ZFS 中删除池?

相关内容