我是 ZFS 新手,由于无知,我犯了严重的错误。删除 zvol,它是池的顶级 vdev。所以我正在寻找一种方法来从池中收集未损坏的数据。
长话短说:
- 使用两个 raidz 创建一个池
- 存储一些数据(DataA)
- 将 zvol 添加到池中
- 存储一些数据(DataB)
- 刪除數據B
- 删除 zvol
- 池已降级,正在寻找读取数据的方法
长篇故事就从这里开始:
我用 raidz 创建了一个 zpool 并存储了一些数据(DataA)。突然我需要更多空间来临时存储一些数据(DataB)。我有多余的 zfs 磁盘,并且找到了“zpool add”和“zpool remove”。所以我想“似乎我可以通过添加顶层 vdev 来增加池大小,然后再将其删除!现在对我来说很完美!”并执行了该计划。删除 DataB 后,我发现“zpool remove”只能在非常受限的情况下完成。我决定重建池。但我很忙,需要立即释放 zvol 占用的空间。因为 DataA 是在添加 zvol 之前存储的,我认为 DataA 仅在 raidzs 中被条带化,即使我删除了 zvol,DataA 也是可读的。所以我删除了它。这是一个非常愚蠢的想法。
池已降级且无法导入。我设法通过将 readonly on、zfs_max_missing_tvds 设置为 1、spa_load_verify_data 和 spa_load_verify_metadata 设置为 False 来导入池。但顶级路径上出现“在以下文件中检测到永久错误”错误,我无法挂载池。
这是游泳池的当前状态。
我正在制定一些策略,但我不知道该怎么做,也不知道是否可行。以下是一些策略:
- 找到读取当前状态下数据的方法。
- 制作假的“rv-part1”并导入池并进行清理
- 用其他 vdev 替换“rv-part1”并清理
- 备份池并在工作池中恢复
总之,如果有办法或提示可以恢复我的数据,请告诉我,如果您需要任何信息,我会尽快提供。
PS raidz1-0 和 raidz1-1 具有相同的物理磁盘似乎很奇怪......还有另一个愚蠢的故事......