我正在尝试恢复一个已降级并被忽视的池,然后第二个镜像成员发生故障,导致池出现故障。无论出于什么原因,备用池从未自动更换,即使该池已设置该选项,但这不是重点。
这是在 OmniOS 服务器上。池信息如下:
pool: dev-sata1
state: UNAVAIL
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: http://illumos.org/msg/ZFS-8000-JQ
scan: resilvered 1.53T in 21h6m with 0 errors on Sat Jun 17 13:18:04 2017
config:
NAME STATE READ WRITE CKSUM
dev-sata1 UNAVAIL 227 623 0 insufficient replicas
mirror-0 ONLINE 0 0 0
c1t5000C5003ECEEC42d0 ONLINE 0 0 0
c1t5000C5003ED6D008d0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
c1t5000C500930358EAd0 ONLINE 0 0 0
c1t5000C500930318E1d0 ONLINE 0 0 0
mirror-3 ONLINE 0 0 0
c1t5000C5003F362DA7d0 ONLINE 0 0 0
c1t5000C5003F365D94d0 ONLINE 0 0 0
mirror-4 ONLINE 0 0 0
c1t5000C50064D11652d0 ONLINE 0 0 0
c1t5000C500668EC894d0 ONLINE 0 0 0
mirror-5 ONLINE 0 0 0
c1t5000C5007A2DBE23d0 ONLINE 0 0 0
c1t5000C5007A2DF29Cd0 ONLINE 0 0 0
mirror-6 UNAVAIL 457 1.22K 5 insufficient replicas
15606980839703210365 UNAVAIL 0 0 0 was /dev/dsk/c1t5000C5007A2E1359d0s0
c1t5000C5007A2E1BAEd0 FAULTED 37 1.25K 5 too many errors
mirror-7 ONLINE 0 0 0
c1t5000C5007A34981Bd0 ONLINE 0 0 0
c1t5000C5007A3929B6d0 ONLINE 0 0 0
logs
mirror-2 ONLINE 0 0 0
c1t55CD2E404B740DD3d0 ONLINE 0 0 0
c1t55CD2E404B7591BEd0 ONLINE 0 0 0
cache
c1t50025388A0952EB0d0 ONLINE 0 0 0
spares
c1t5000C5002CD7AFB6d0 AVAIL
磁盘“c1t5000C5007A2E1BAEd0”目前位于数据恢复设施,但他们已经用尽了替换磁头,包括我们提供的捐赠磁盘的磁头。标记为丢失的磁盘最终被找到,并且有可能被恢复,但这是最后的结果,因为我不知道它与其他磁盘相比有多过时,以及这对一致性意味着什么。要被视为捐赠者,序列的前 3 个字母需要匹配,站点代码也需要匹配。池中还有其他 4 个磁盘符合该标准,并且在池关闭时处于健康状态。
那么,我的问题是:使用 dd 将整个供体磁盘复制到每个新磁盘后,是否可以用 4 个新磁盘替换其他 4 个可能与供体兼容的磁盘(基于序列号)?
我不清楚池在导入磁盘时是否需要 WWN 或序列号来匹配其存储的内容(如果它存储了缓存以外的内容),或者它是否会扫描每个磁盘上的元数据来确定是否可以导入池。如果后者是真的,我再获得 4 个捐赠磁盘的策略是否可行?
答案1
绝对不要使用dd
!ZFS 有一个内置命令,在Oracle 的文档。您应该能够使用zpool replace tank <old device> <new device>
来完成操作的主要部分,但是还有其他几个辅助命令:
以下是更换磁盘的基本步骤:
- 如果有必要,使用命令使磁盘脱机
zpool offline
。- 移除需要更换的磁盘。
- 插入替换磁盘。
- 运行
zpool replace
命令。例如:zpool replace tank c1t1d0
- 使用命令使磁盘联机
zpool online
。
手册页还包含一些附加信息:
zpool replace [-f] pool device [new_device]
Replaces old_device with new_device. This is equivalent to attaching
new_device, waiting for it to resilver, and then detaching
old_device.
The size of new_device must be greater than or equal to the minimum
size of all the devices in a mirror or raidz configuration.
new_device is required if the pool is not redundant. If new_device is
not specified, it defaults to old_device. This form of replacement
is useful after an existing disk has failed and has been physically
replaced. In this case, the new disk may have the same /dev path as
the old device, even though it is actually a different disk. ZFS
recognizes this.
-f Forces use of new_device, even if its appears to be in use.
Not all devices can be overridden in this manner.
当然,最好先在具有类似配置的 zpool 中的虚拟磁盘的 VM 上尝试此操作,而不是第一次在包含您关心的恢复数据的池上尝试此操作。
顺便一提,文档的另一部分进一步解释了热备件,也许还包含了一些提示来解释为什么你的热备件没有被使用。仔细研究一下以确保下次不会再次出错可能会很有价值 :(。