
Estou tendo problemas para substituir um disco em um zpool existente em um sistema que executa o Solaris 10 em um processador x86. O zpool foi originalmente criado com duas fatias espelhadas. Uma das unidades falhou, então troquei-a fisicamente por uma nova unidade. Executei prvtoc e fmthard para copiar o rótulo do disco da unidade funcional para a nova unidade:
prtvtoc /dev/rdsk/c1t0d0s2 >/tmp/c1t0d0s2.out
fmthard -s /tmp/c1t0d0s2.out >/dev/rdsk/c1t1d0s2
Então tentei colocar a nova unidade on-line e recebi um aviso sobre o dispositivo ainda estar com defeito:
$ zpool online pool c1t1d0s6
warning: device 'c1t1d0s6' onlined, but remains in faulted state
A saída de zpool status -v é:
NAME STATE READ WRITE CKSUM
pool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c1t0d0s6 ONLINE 0 0 0
c1t1d0s6 UNAVAIL 0 0 0 corrupted data
(c1t1d0 é a unidade substituída.)
Então coloquei c1t1d0 off-line novamente e tentei executar o comando zpool replace, mas também não funcionou:
$ zpool replace pool c1t1d0s6
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t1d0s6 overlaps with /dev/dsk/c1t1d0s2
Alguém sabe o que está acontecendo? É seguro usar o sinalizador '-f'?
Editar:Depois de executar zpool replace -f, recebo:
pool: pool
state: DEGRADED
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
pool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c1t0d0s6 ONLINE 0 0 0
replacing-1 UNAVAIL 0 0 0 insufficient replicas
c1t1d0s6/old OFFLINE 0 0 0
c1t1d0s6 UNAVAIL 0 342 0 experienced I/O failures
Vejo erros na nova unidade na saída iostat -e. Acho que a nova unidade também pode ser ruim?
Editar 2: Não sei o que está acontecendo. Tentei uma unidade diferente com o mesmo procedimento. Depois de executar zpool replace -f, o pool zfs executou uma limpeza, mas a saída de status é:
pool: pool
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: scrub completed after 12h56m with 0 errors on Wed Aug 29 06:49:16 2012
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t0d0s6 ONLINE 0 0 0
replacing-1 ONLINE 5.54M 19.9M 0
c1t1d0s6/old UNAVAIL 0 0 0 corrupted data
c1t1d0s6 UNAVAIL 0 0 0 corrupted data
Depois de off-line c1t1d0s6, a saída de status do zpool é:
pool: pool
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: scrub completed after 12h56m with 0 errors on Wed Aug 29 06:49:16 2012
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t0d0s6 ONLINE 0 0 0
replacing-1 ONLINE 5.54M 19.9M 0
c1t1d0s6/old UNAVAIL 0 0 0 corrupted data
c1t1d0s6 UNAVAIL 0 0 0 corrupted data
Eu não entendo. O sistema não deveria ser capaz de substituir c1t1d0s6 usando o espelho em c1t0d0s6?
Responder1
Você limpou os alertas em fmadm
? E o zpool clear
... É seguro executar o zpool replace com o -f
switch, mas acho que sua afirmação está errada, a menos que você já tenha removido o disco defeituoso.
http://docs.oracle.com/cd/E19253-01/819-5461/gbcet/index.html
Responder2
Verifique os cabos ou o suporte e slot da unidade. Uma conexão SATA barulhenta gerará erros e o fmadm usará essas informações para determinar quando um dispositivo está com defeito. Tive unidades que achei ruins, mas foi apenas o ZFS percebendo que não estava obtendo dados válidos de maneira confiável. Notei um cabo SATA comprimido, substituí-o e executei zpool clear
, zpool scrub
sem mais erros.