我们基于 FreeNAS 8 的 100TB NAS 因电源故障意外关闭。重新开机后,100TB zpool“项目”被卸载,状态为“FAULTED”。
我试过了zpool import -fFX
,它运行了大约 20 个小时,但什么也没发生。我使用重置按钮重新启动了服务器,因为 kill -9 和 reboot 命令不起作用。
一些输出:
[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
另外,我还发现了未记录的选项: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 控制器上有 4 个,1 个 LSI 控制器上有 2 个。
有什么办法可以导入和修复 zpool 并保存数据吗?
答案1
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 控制器上有 4 个,1 个 LSI 控制器上有 2 个。
首先,让我先搞清楚一些事情。您有一个 ZFS 池,它由六个设备组成(ZFS 所见),这些设备是条带化的,没有冗余。每个设备都由一些未知数量的物理存储设备组成,这些设备本身也是条带化的,没有冗余。保守估计,您有大约 20-25 个旋转器,很可能更多,所有这些都必须完美运作确保设置稳定。请记住,物理磁盘故障最好不相关,实际上在共享环境中往往会成批发生(如果一个磁盘发生故障,则很可能一个或多个其他磁盘也处于边缘状态,甚至可能在重新同步的压力下发生故障)。这使得最佳情况是,对于 25 个磁盘,发生故障的概率是单个磁盘的 25 倍,因为您有 25 个磁盘,每个磁盘的故障概率与单个磁盘相同。
现在,其中一些驱动器(或可能是控制器)显然出现了某种问题,这些问题已经逐渐显现出来并被 ZFS 报告。
此时,我的问题或多或少是“你希望 ZFS 做什么?”。不幸的是,我认为这个问题和你的问题的答案都是不,目前确实没有太多事情可做。
ZFS 并不神奇。它对多种不同类型的故障具有很强的弹性,但一旦发生故障,就会以惊人的方式发生。您可以使用其冗余功能来降低故障风险,但出于某种原因,您选择不这样做。其复杂的磁盘格式也使恢复比 UFS、NTFS 或 ext3/4 等复杂得多。
如果zpool import -fFX
无法让您的池恢复到可用状态,那么最好的办法可能是以合理的方式重新创建池并恢复最新的备份。这包括添加一些冗余,这样即使整个控制器或电源发生故障,整个池也不会发生故障。此外,配置您的控制器以 JBOD 方式将原始磁盘公开给 ZFS,并使用 ZFS 的冗余支持为您的存储添加冗余;这允许 ZFS 决定将数据放置在何处以及如何安排冗余以尝试降低故障风险。(例如,可以通过将元数据复制到多个独立的 vdev 来冗余存储元数据。)