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

镜像ZFS池中有两个相同的2Tb磁盘。 不幸的是,覆盖错误的磁盘启动尝试通过HP Smartarray P400 RAID控制器作为单独的RAID0逻辑卷附加它们,在那里写入它自己的元数据。

分区表(如果是由zpool create创build的 – 请参见下文)和L0,L1标签丢失。 L1,L2标签和数据在hex中是完整的。

zpool最初是通过简单地向镜像池添加裸设备来创build的 – zpool create tank mirror / dev / sda / dev / sdb。

有什么方法可以恢复?

是的,你已经使你的磁盘不可用

也许有一些ZDB的魔法可以帮助,但创buildRAID 0 HP逻辑驱动器是一个相当有意义的行动。 会有一个明确的警告,即由于Smart Array元数据,磁盘上的数据将会丢失。

一般来说,ZFS的多个RAID 0逻辑驱动器在硬件RAID控制器背后是一个坏主意。 但这是一个很糟糕的错误。


编辑:

我build议把这个问题带到ZFS讨论邮件列表或者IRC频道。

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

旧:kernel 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

而且,从块2048开始,在单个分区中创buildzfs片。所以RAID控制器根本不会影响L0,L1标签,只是归零分区表。

我做的唯一一个导入 – 恢复分区表(zpool导入仍然显示池为FAULTY),并使/ dev / disk / myzfs目录和符号链接到zpool成员分区设备类似/ dev / disk / by-id有(尝试“zpool导入-d / dev / disk / by-id”显示池为FAULTY)。

“zpool import -d / dev / disk / myzfs”显示我的池为ONLINE,“zpool import -d / dev / disk / myzfs nas”成功。

不幸的是,我无法像旧服务器一样复制内核-SPL-ZFS内核和模块组合 – 还没有find如何获得旧的ppa:zfs-native / stable软件包。 所以,我不能说这是否是模块修订版本的变化,或者它可能是什么。