
Tengo problemas para reemplazar un disco en un zpool existente en un sistema que ejecuta Solaris 10 en un procesador x86. El zpool se creó originalmente con dos sectores reflejados. Una de las unidades falló, así que la cambié físicamente por una nueva. Ejecuté prvtoc y fmthard para copiar la etiqueta del disco de la unidad en funcionamiento a la nueva unidad:
prtvtoc /dev/rdsk/c1t0d0s2 >/tmp/c1t0d0s2.out
fmthard -s /tmp/c1t0d0s2.out >/dev/rdsk/c1t1d0s2
Luego intenté conectar la nueva unidad y recibí una advertencia acerca de que el dispositivo aún tenía fallas:
$ zpool online pool c1t1d0s6
warning: device 'c1t1d0s6' onlined, but remains in faulted state
La salida de zpool status -v es:
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 es la unidad reemplazada).
Luego volví a desconectar c1t1d0 e intenté ejecutar el comando zpool replace, pero tampoco funcionó:
$ zpool replace pool c1t1d0s6
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c1t1d0s6 overlaps with /dev/dsk/c1t1d0s2
¿Alguien sabe qué está pasando? ¿Es seguro utilizar el indicador '-f'?
Editar:Después de ejecutar zpool replace -f, obtengo:
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
Veo errores en la nueva unidad en la salida de iostat -e. ¿Supongo que el nuevo disco también podría estar defectuoso?
Editar 2: No sé qué está pasando. Probé con una unidad diferente con el mismo procedimiento. Después de ejecutar zpool replace -f, el grupo zfs ejecutó una limpieza, pero el resultado del estado es:
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
Después de desconectar c1t1d0s6, el resultado del estado de zpool es:
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
No lo entiendo. ¿No debería el sistema poder reemplazar c1t1d0s6 usando el espejo en c1t0d0s6?
Respuesta1
¿Borraste las alertas en fmadm
? Y el zpool clear
... Es seguro ejecutar el reemplazo de zpool con el -f
interruptor, pero creo que su afirmación es incorrecta, a menos que ya haya eliminado el disco defectuoso.
http://docs.oracle.com/cd/E19253-01/819-5461/gbcet/index.html
Respuesta2
Verifique los cables o el sled y la ranura de la unidad. Una conexión SATA ruidosa producirá errores y fmadm usa esa información para determinar cuándo un dispositivo tiene fallas. He tenido unidades que pensé que estaban defectuosas, pero fue simplemente ZFS el que notó que no estaba obteniendo datos válidos de manera confiable. Noté un cable SATA pinchado, lo reemplacé y ejecuté zpool clear
y zpool scrub
no más errores.