“zpoolreplace”挂起并locking池

鉴于我的四个磁盘RAIDZ1,一个磁盘变得嘈杂,没有产生错误,但听起来不健康。 所以我select先发制人地replace它。

我已经做好了:

zpool offline tank0 ad6 

关机,卸下并更换磁盘

 zpool replace tank0 ad6 ad6 

永远挂起。

zpool status也会永久挂起, zpool history

如果我删除了磁盘重新启动计算机,一切正常,如预期的降级模式。

现在我该怎么做? 担心,因为我的数据现在容易受到单个磁盘故障的影响。

OS是FreeBSD 7.3-RELEASE-p1 – 又名FreeNAS 7.0.2.5226

尽pipeFreeBSD 7.3-RELEASE-p7(FreeNAS 0.7.2.8191,稍后的版本),我只是尝试了相同的操作在一个虚拟机,完美的作品。 试用FreeNAS的最早版本,我现在可以find(7.0.2.5799),稍后会更新。

另外, zpool replace不需要文件系统的使用? NAS上的另一个守护进程有可能使用文件系统。 我认为这样可以,但这当然可能是错误的。


更新,2012-01-10

我使用FreeNAS 8启动了机器,并执行了zpool replace – 启动后,立即开始抛出一堆数据损坏错误和内核恐慌 – 尽pipe每周清理一次池,永远不会发现任何问题。 我不认为我做了一些愚蠢的事情,比如告诉它来replace错误的磁盘。 我立即发出shutdown -h因为我知道数据很好。

无论如何,我现在有一个退化池,停在replace被暂停的状态,我正在复制我的数据到一个3TB的外部驱动器,花费巨资购买,所以我可以摧毁这个池并重新开始。 谢天谢地,数据看起来没问题 – 我碰巧有大约100GB的文件,到目前为止似乎是完好无损的,我已经设法恢复了一切,这是真正无法替代的。

我现在正在等待更多的内存,因为FreeNAS 8保持kmem_max太小的错误,我似乎无法调整周围,机器RAM内存约束(4 GB RAIDZ1 1 GB的RAM)panicing。

关于备份的重要经验教训,还有对ZFS / FreeNAS / FreeBSD的信心。


更新13/1/12

那么我的数据现在似乎已经安全备份了。

即使故障模式设置为继续,zpool状态-v也会挂起。 这是zpool状态的输出,插入新磁盘(ada1)

  pool: tank0 state: DEGRADED status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scrub: none requested config: NAME STATE READ WRITE CKSUM tank0 DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada0 ONLINE 0 0 0 replacing DEGRADED 0 0 3.17K 6540253751212815210 UNAVAIL 0 0 0 was /dev/ada3/old ada1 ONLINE 0 0 0 errors: 3130 data errors, use '-v' for a list 

在插入旧磁盘而不是新磁盘的情况下,ZFS将不会导入池,而zfs status

 tank0 UNAVAIL insufficient replicas raidz1 FAULTED corrupted data ada2 ONLINE ada3 ONLINE ada0 FAULTED corrupted data replacing UNAVAIL insufficient replicas ada1 FAULTED corrupted data ada1 FAULTED corrupted data 

我不明白为什么ada0应该插入新磁盘(ada1)FAULTED,但插入旧磁盘ONLINE? 我不明白ada0是如何相关的。

让我们试着恢复这个池作为一个学习练习。

真的被支持到这个angular落。 已经结束了平铺池,并从备份恢复文件到FreeNAS 8。

到目前为止,感觉更稳定 – 新的x64操作系统,4GB内存可能都有贡献。

我不是一个ZFS大师,但我会试试:这听起来像ZFS子系统仍然试图访问故障的驱动器,并挂在某种原因。 尝试将池的failmodezpool set failmode=continuecontinuezpool set failmode=continue )并查看是否使该挂起消失,并让您知道发生了什么。

(请注意,这不是一个解决方法:系统仍然无法访问它认为应该可以访问的驱动器,它只是告诉它返回一个错误,继续而不是阻塞,直到收到答案。)

我最近有一种听起来很相似的情况,虽然我没有遇到挂起,但我无法replace发生故障的驱动器。 当然,我处在一个完全不同的环境中:带有ZFS保险丝的Linux。 然而,与你不同,我没有被告知我曾经遇到数据损坏,我看到:

  state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q [...] disk/by-id/ata-Hitachi_HDS722020ALA330_JK1105B8GNNADX-part4 UNAVAIL 0 0 0 cannot open 

现在,在进一步讨论之前,重要的是要认识到这个池中的数据都是不可替代的,一切都是备份的或是其他系统的备份。 如果这些数据没有很好的备份,那么在做这些事情之前,您可能需要停下来制作光盘的原始拷贝,否则会使情况变得更糟。

我最终做的工作是这样的。

首先,我用“zfs export POOLNAME”导出了池。 然后我重新启动并做了一个“zfs导入POOLNAME”。

现在,当我做了一个“zpool状态”,我得到了这个:

 state: DEGRADED [...] 12640132412556728613 UNAVAIL 0 0 0 was /dev/disk/by-id/ata-Hitachi_HDS722020ALA330_JK1105B8GNNADX-part4 

现在我可以使用上面的数字来replace光盘了:

 zpool replace POOLNAME 12640132412556728613 /dev/DEVILCENAME 

现在它显示为在“zpool status”中replace驱动器:

  state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h0m, 0.00% done, 282h43m to go 

它“仅”运行了大约48小时,而不是估计的282以上。 🙂