我安装了安装了 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 个物理扇区,唯一的恢复途径是重建池。我建议执行以下操作:
- 确保 rdata 上所有数据集都有快照。
- 删除 rdata 镜像的 1 个元素(这样我有一个已知的良好备份并释放一个 SATA 端口)
- 将其中一个新驱动器连接到机器
- 创建一个名为 rdata1 的新池,具有 4k 个扇区和一个物理设备
- 使用 zpool recv 将 rdata 数据集的快照恢复到 rdata1
- 此时,rdata1 应该与 rdata 相同
- 导出 rdata1 所在的设备
- 销毁数据
- 将包含 rdata1 的设备导入为 rdata
- 删除旧物理磁盘并将其替换为其他新磁盘
- 将另一个新磁盘连接到新创建的 rdata 以重新创建镜像
这听起来合理吗?如果出现问题,我仍然有第二个旧磁盘,作为最后的手段,我还有另一台 FreeNAS 服务器,里面有所有快照的完整备份;以防万一。
加雷思
答案1
最终,这件事情因我的失误而被迫进行。我最终采用的程序是:
- 关闭系统并断开原始池的一个元素;用新磁盘上的元素替换它。
- 启动电源并使用单个新磁盘创建新池
- 使用 rsync 来传输数据,而不是 zpool recv
- 导出两个池
- 使用旧名称导入新池
- 关闭电源,用新驱动器替换另一个旧驱动器
- 打开电源并将新驱动器连接到新池。
不幸的是,系统拒绝忘记旧池。我已将其移至新问题:如何从 ZFS 中删除池?