如何在重新安装ZFS池后销毁ZFS“幽灵”池

3

我有几个新的硬盘需要在ZFS镜像模式下设置(使用Ubuntu-16.04-Root-on-ZFS)。可惜我在安装grub时搞砸了什么东西,不得不重新开始。当我重启电脑(在文档中的6.5步骤)时,出现了一个错误:

cannot import 'rpool': more than one matching pool
import by numeric ID instead

系统将我推入了initramfs shell。确实有两个rpools,但其中一个已经损坏了...可能是原始安装的那个。我能够使用其ID导入“好”的rpool并重新导出它。

然而,我无法导入“损坏”的rpool(无论是按名称还是ID)。我想做的就是销毁它。我的猜测是在创建新分区之前应该将非数据分区清零(步骤2.2)。我现在没有真正的数据,所以我可以(并且可能应该)再次进行安装(并首先清零分区)。

在重新安装之前,我很好奇是否有一种方法可以摧毁那个不良/虚假的rpool。

根据请求,我附上了重新导出rpoolgood后“zfs import”的屏幕截图。我记得,在进行grub安装时,我错误地指定了分区而不是磁盘..当我意识到我的错误时,我只在其中一个磁盘上进行了操作。

enter image description here


我假设“坏”的存储池使用了相同的物理设备?执行命令:zpool import -D 是否列出任何已损坏的存储池? - airhuff
运行zdb命令来查看你的zpool.cache文件是否存在异常,这可能会(或可能不会)对问题有所启示。如果发现任何异常情况,删除/etc/zfs/zpool.cache应该是安全的,然后运行_zpool set cachefile=/etc/zfs/zpool.cache <pool>_ 来创建一个新的缓存文件。虽然我认为这值得尝试,但我不认为这是最终解决方案。 - airhuff
根据您的要求,附上了一个屏幕截图。感谢任何意见,airhuff。 - Modular
谢谢,这很有帮助。我在FreeBSD论坛上找到了一个脚本,以为它会起作用,但是它让我失望了。它运行时好像一切正常,但是没有任何变化。你可以尝试一下(https://forums.freebsd.org/threads/26282/),因为你没有什么可失去的。如果你尝试了,请告诉我。 - airhuff
很抱歉我帮不上更多的忙,祝你好运。我建议在某个时候运行_zpool labelclear_。 - airhuff
显示剩余5条评论
1个回答

2

部分解决:

总结:我删除了所有分区,然后使用dd命令清除每个磁盘的前10MB和后10MB(若想要更好地清除磁盘的最终部分,可以参考[这篇文章][1])。虽然这没有恢复“良好”的存储池,但清除并重新安装系统是首要目标(这也做到了)

稍微详细一些:

我进行了一些探索,得出的结论是,如果您想将一个磁盘从一个zpool重新用于另一个zpool,最好的方法是擦除(至少部分)磁盘。销毁以前的池可能有用,但我没有这样做(而且不清楚是否可以这样做,因为我弄乱了grub安装,所以我的分区可能已经损坏了)

Ubuntu的说明确实提到了如果您曾在mdadm软件RAID阵列中使用过该磁盘,则需要清除超级块。我应该将评论推广,但无论如何,这是一个薄弱的答案,因为我没有发现一种清理元数据的干净方法。


至少比没有好,你可以从这一切中继续前进。这里(http://serverfault.com/questions/297029/zfs-on-freebsd-recovery-from-data-corruption)有一个与(BSD)ZFS分区标签元数据相关的讨论,可能会引起您的兴趣。他们的结论的关键是:“ZFS维护4个带有分区元信息的标签,而HPA防止ZFS看到上面两个标签。”再次祝贺您解决了这个问题。 - airhuff
我尝试使用zpool labelclear -f /dev/sda,但它没有起作用,同样的错误再次发生。可能唯一靠谱的方法是将整个磁盘清零。 - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接