我们的一个 Solaris/ZFS 文件服务器出现故障。硬件无法启动,我们并不担心服务器,但数据非常宝贵。我们从 raidz2 池中取出一组 8 个驱动器,并将它们连接到另一台 Solaris 机器上。阵列被识别,数据在 6 小时内完好无损,但 6 小时后池在中途变得不可用。我们关闭了机器的电源,但没有成功。
如果您能帮助我们恢复数据,我将不胜感激。
使用 **zpool import
命令我们得到以下错误:
zpool import
pool: p1z2
id: 16004911417686972288
state: UNAVAIL
status: One or more devices are unavailable.
action: The pool cannot be imported due to unavailable devices or data.
The pool may be active on another system, but can be imported using the '-f' flag.
config:
p1z2 UNAVAIL corrupted data
raidz2-0 DEGRADED
c0t5000C500959EC8DFd0 UNAVAIL cannot open
c0t5001B4D04D00A816d0 ONLINE
c0t5001B4D04D1E6803d0 ONLINE
c0t5000C50083375403d0 UNAVAIL cannot open
c0t5001B4D04D1F0807d0 ONLINE
c0t5001B4D04D101812d0 ONLINE
c0t5001B4D04D101817d0 ONLINE
c0t5001B4D04D233806d0 ONLINE
device details:
c0t5000C500959EC8DFd0 UNAVAIL cannot open
status: ZFS detected errors on this device.
The device was missing.
c0t5000C50083375403d0 UNAVAIL cannot open
status: ZFS detected errors on this device.
The device was missing.
iostat -en
---- errors ---
s/w h/w trn tot device
0 0 0 0 c0t5001B444A4E76FA2d0
0 0 0 0 c0t5001B4D04D090800d0
0 0 0 0 c0t5001B4D04D08D801d0
0 0 0 0 c0t5001B4D04D233802d0
0 0 0 0 c0t5001B4D04D1E6803d0
0 0 0 0 c0t5001B4D04D080804d0
0 0 0 0 c0t5001B4D04D101805d0
0 0 0 0 c0t5001B4D04D233806d0
0 0 0 0 c0t5001B4D04D1F0807d0
0 0 0 0 c0t5001B4D04D080810d0
0 0 0 0 c0t5001B4D04D080811d0
0 0 0 0 c0t5001B4D04D101812d0
0 0 0 0 c0t5001B4D04D00B813d0
0 0 0 0 c0t5001B4D04D080814d0
0 0 0 0 c0t5001B4D04D1E6815d0
0 0 0 0 c0t5001B4D04D00A816d0
0 0 0 0 c0t5001B4D04D101817d0
答案1
我不会在不了解您的池状态的情况下尝试提供答案。我建议针对池运行 ZFS 调试实用程序。它应该提供其他信息,可帮助确定主机拒绝导入降级池的原因(尽管它告诉您数据已损坏,但您仍可以回退到可以恢复的点)。
免责声明:zdb 本质上是 Oracle 技术支持的内部支持工具。在不了解其影响的情况下使用其各种选项可能会使情况变得更糟。
在下面的例子中,“-e”选项告诉它在当前未导入的池上进行操作。
zdb -e p1z2 | tee /tmp/zdb.log
请注意,这可能需要很长很长很长运行时间取决于你的池的大小和利用率。我刚刚针对一个健康-但导出了 1.4TB 池,我将其用于 Solaris 10U10(+ 最新 CPU 补丁)系统。此池的 79% 被数据利用,而 zdb仍然在 40 分钟后运行元数据校验(我今天快结束了,所以不想再等着看结果了)。输出结果可能非常多,所以我建议您使用 tee 将其记录到文件中。