ZFS显示池状态为FAULTED,但所有设备都在线; 我怎样才能恢复我的数据?

我们基于FreeNAS 8的100TB NAS由于停电而意外关机。 打开后,100TB zpool“projects”被卸载,状态为“FAULTED”。

我已经试过zpool import -fFX ,它运行了大约20个小时,但没有发生任何事情。 我已经用重置button重新启动服务器,因为kill -9和重新启动命令不起作用。

一些输出:

 [root@Projects_new] ~# zpool import pool: projects id: 8560768094429092391 state: FAULTED status: The pool metadata is corrupted. action: The pool cannot be imported due to damaged devices or data. The pool may be active on another system, but can be imported using the '-f' flag. see: http://www.sun.com/msg/ZFS-8000-72 config: projects FAULTED corrupted data gptid/49d49544-5a47-11e2-b516-00259095142c ONLINE ok gptid/49f3c886-5a47-11e2-b516-00259095142c ONLINE ok gptid/4a1052aa-5a47-11e2-b516-00259095142c ONLINE ok gptid/4a32bf15-5a47-11e2-b516-00259095142c ONLINE ok gptid/4a9b51d3-5a47-11e2-b516-00259095142c ONLINE ok gptid/4b2ee18b-5a47-11e2-b516-00259095142c ONLINE ok 

另外我find了未公开的选项: zpool import -V projects ,之后,zpool被导入,但仍然无法访问:

 [root@Projects_new] ~/zpool_restore# zpool status pool: projects state: FAULTED status: The pool metadata is corrupted and the pool cannot be opened. action: Destroy and re-create the pool from a backup source. see: http://www.sun.com/msg/ZFS-8000-72 scan: none requested config: NAME STATE READ WRITE CKSUM projects FAULTED 0 0 1 gptid/49d49544-5a47-11e2-b516-00259095142c ONLINE 0 0 0 gptid/49f3c886-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a1052aa-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a32bf15-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a9b51d3-5a47-11e2-b516-00259095142c ONLINE 0 0 0 gptid/4b2ee18b-5a47-11e2-b516-00259095142c ONLINE 0 0 0 

在此状态下, zpool clear -f projects输出“I / O错误”。

/ dev / gptid / 4 *是RAID0设备:4个Adaptec控制器和2个1个LSI控制器。

有没有办法导入和修复zpool并保存数据?

 NAME STATE READ WRITE CKSUM projects FAULTED 0 0 1 gptid/49d49544-5a47-11e2-b516-00259095142c ONLINE 0 0 0 gptid/49f3c886-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a1052aa-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a32bf15-5a47-11e2-b516-00259095142c ONLINE 0 0 2 gptid/4a9b51d3-5a47-11e2-b516-00259095142c ONLINE 0 0 0 gptid/4b2ee18b-5a47-11e2-b516-00259095142c ONLINE 0 0 0 

/ dev / gptid / 4 *是RAID0设备:4个Adaptec控制器和2个1个LSI控制器。

所以,让我直接从头开始。 您有一个由六个设备组成的ZFS池(如ZFS所示),条带化,没有冗余。 它们中的每一个都由一些未知数量的物理存储设备组成,它们本身没有冗余。 一个保守的估计说,你有一个地方的20-25纺纱,可能更多, 所有这些都必须完美地工作,为您的设置稳定。 请记住,物理磁盘故障最多是不相关的,在实践中倾向于在共享环境中批量发生(如果一个磁盘发生故障,可能一个或多个其他故障处于边缘地位,甚至在重新同步的情况下甚至可能失败)。 这使得最好的情况下,使用25个磁盘,失败的概率是单个磁盘的25倍,因为您有25个,每个失败的概率与单独失败的概率相同。

现在一些驱动器(或者可能是控制器)显然已经出现了一些问题,这已经stream传并且正在被ZFS报告。

在那个时候,我的问题或多或less是“你期望ZFS做什么?”。 不幸的是,我认为这个问题以及你的问题的答案是否定的,在这一点上确实没有太多的事情要做。

ZFS不是魔术。 它对很多不同types的失败都具有很强的适应能力,但是一旦失败,它就有一种倾向于以惊人的方式去做。 您可以通过使用冗余function来降低破损风险,无论出于何种原因您都select不这样做。 其复杂的磁盘格式也使得恢复比UFS,NTFS或ext3 / 4更复杂。

如果zpool import -fFX没有让您的池恢复到可用状态,那么最好的办法就是重新创build池,并恢复最近的备份。 这包括添加一些冗余,即使整个控制器或电源出现故障,整个池也不会失败。 此外,configuration您的控制器以JBOD方式将原始磁盘公开到ZFS,并使用ZFS的冗余支持为您的存储添加冗余; 允许ZFS决定数据放置位置以及如何安排冗余来降低失败风险。 (例如,通过将元数据复制到多个独立的vdevs,可以将元数据冗余存储。)