昨天,我把一个新磁盘放入我的服务器。遗憾的是,我之前没有检查磁盘是否发生故障。
我使用命令将其添加到我的池中zpool add nas /dev/disk/by-id/scsi-SATA_ST31500341AS_9VS27Z4M-part1
不久之后,服务器的 CPU 负载几乎达到无穷大,我甚至无法重新登录。
因此我执行了硬重启 (Alt + SysRq + b),但服务器无法启动。(GRUB 出现后,大约 5 分钟内没有发生任何事。然后,我将其关闭并取出新磁盘。我启动后,它正常工作了。
但是现在,我遇到了一个问题,我无法访问所谓的“nas”池,因为最后一个(新)磁盘显示为状态“UNAVAIL”,并且因为它不是镜像池,所以整个池都处于 UNAVAIL 状态。
如果我再次放入磁盘并执行此操作,zpool online nas /dev/disk/by-id/scsi-SATA_ST31500341AS_9VS27Z4M-part1
它不起作用并告诉我“找不到磁盘”。
因此,我尝试了从 oracle-docs 中读到的一些可能性,并使用 将其导出zpool export nas
。现在,我甚至无法导入池。
zpool import nas -f
cannot import 'nas': one or more devices is currently unavailable
如果我看一下zpool import
,它会告诉我:
pool: nas
id: 3366469163144781663
state: UNAVAIL
status: One or more devices are missing from the system.
action: The pool cannot be imported. Attach the missing
devices and try again.
see: http://zfsonlinux.org/msg/ZFS-8000-6X
config:
nas UNAVAIL missing device
dm-name-linuxServer-nas ONLINE
ata-WDC_WD20EARX-00PASB0_WD-WCAZAC521840-part1 ONLINE
ata-WDC_WD20EFRX-68AX9N0_WD-WMC300228535-part1 ONLINE
Additional devices are known to be part of this pool, though their
exact configuration cannot be determined.
要明确一点:池子完全不重要,数据才是重要的。如果我能以某种方式访问数据,我可以将其导出到外部硬盘。
是的,我没有备份(真丢脸!),但我通常没有另外 6TB 的空间用于备份。
是否有可能访问这些数据?也许伪造磁盘以便 zpool 认为它是可用的,或者类似这样的?
任何帮助都将不胜感激。
答案1
我不想这么说,但你知道你基本上是在添加未受袭击磁盘添加到池中?
您提供的命令基本上是说,“向池中添加另一个磁盘纳斯并将其与现有磁盘进行条带化。”
这就是你想要做的事吗?
此时池已完成,特别是如果有任何内容写入坏磁盘。如果这是一对镜像,则池将处于以下状态:故障并且您能够恢复。照这样来看,您可能已经丢失了数据。
答案2
我的建议是,首先获取一组重复的磁盘,然后将原始内容复制到另一组磁盘上。一旦您恢复了数据(如果可能),您就可以使用磁盘进行镜像或其他备份。这样,您就可以在尝试恢复池时有更大的回旋余地。您还会遗漏重要信息,例如您在哪种模式下创建了池。z-1 z-2
看 http://www.joyent.com/blog/zfs-forensics-recovering-files-from-a-destroyed-zpool你可能运气不错。我也会验证磁盘是否真的坏了。如果不是,那么你可能遇到了另一个问题,比如控制器不稳定。如果磁盘坏了,你可以通过复制内容来处理它。我还没有对 zfs 导入磁盘进行足够的了解,不知道是否可以告诉 zfs 替换磁盘是故障磁盘,特别是因为它是通过 id 而不是插槽。可能无法欺骗 zfs 使用替换驱动器上的复制数据来从故障中恢复。不过,这个想法是我在计算机方面的其他经验让我想到的。