ZFS 池成员开始覆盖扇区,包括分区表和 L0 L1 标签。数据和 L2 L3 标签完好无损。如何恢复?

ZFS 池成员开始覆盖扇区,包括分区表和 L0 L1 标签。数据和 L2 L3 标签完好无损。如何恢复?

镜像 ZFS 池中有两个相同的 2Tb 磁盘。不幸的是,磁盘的开头被错误覆盖,neus 尝试通过 HP Smartarray P400 RAID 控制器将它们作为单独的 RAID0 逻辑卷连接起来,并在其中写入自己的元数据。

分区表(如果由 zpool create 创建 - 见下文)和 L0、L1 标签丢失。L1、L2 标签和数据完好无损,如十六进制所示。

zpool 最初是通过简单地将原始设备添加到镜像池来创建的,如下所示 - zpool create tank mirror /dev/sda /dev/sdb。

有沒有方法可以恢復?

答案1

是的,您的磁盘已无法使用......

也许 ZDB 魔法可以提供帮助,但创建 RAID 0 HP 逻辑驱动器是一项非常慎重的行动。会有一个明确的警告,指出磁盘上的数据将因智能阵列元数据而丢失。

一般而言,在硬件 RAID 控制器后面为 ZFS 设置多个 RAID 0 逻辑驱动器不是一个好主意。但这是一个严重的错误。


编辑:

我建议将这个问题提交给ZFS 讨论邮件列表或 IRC 频道。

答案2

最后我发现我的 ZFS 池没有损坏。旧服务器导入/导出池没有任何问题。唯一的区别在于 ZFS 内核版本和模块版本:

  • 旧版:内核 3.13.0-39-generic、SPL:v0.6.3-1~trusty、ZFS:v0.6.3-3~trusty

  • 新功能:内核 3.13.0-43-generic、SPL:v0.6.3-3~trusty、ZFS:v0.6.3-5~trusty

并且,zfs 切片是在单个分区中制作的,从块 2048 开始。因此,RAID 控制器根本不会影响 L0、L1 标签,只会将分区表归零。

我所做的唯一一件事就是导入 - 恢复分区表(zpool import 仍然显示池为 FAULTY)并创建目录/dev/disk/myzfs并为 zpool 成员分区设备创建符号链接,类似/dev/disk/by-id(我尝试将zpool import -d /dev/disk/by-id池显示为 FAULTY)。

zpool import -d /dev/disk/myzfs显示我的池处于在线状态并且zpool import -d /dev/disk/myzfs nas已成功。

不幸的是,我无法像在旧服务器上那样复制 kernel-SPL-ZFS 内核和模块组合 - 尚未找到如何获取旧ppa:zfs-native/stable软件包。因此,我无法判断这是模块修订更改还是其他原因。

相关内容