镜像 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
软件包。因此,我无法判断这是模块修订更改还是其他原因。