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