Encontré una pregunta sobrediscos de repuesto mdadmlo que casi responde a mi pregunta, pero no me queda claro qué está pasando.
Tenemos un RAID5 configurado con 4 discos y todos están etiquetados en funcionamiento normal como active/sync
:
Update Time : Sun Sep 29 03:44:01 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 202 64 2 active sync /dev/sde
4 202 80 3 active sync /dev/sdf
Pero luego, cuando uno de los discos falló, el RAID dejó de funcionar:
Update Time : Sun Sep 29 01:00:01 2013
State : clean, FAILED
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 0 0 2 removed
3 0 0 3 removed
2 202 64 - faulty spare /dev/sde
4 202 80 - spare /dev/sdf
¿¿Qué está pasando aquí realmente??
La solución fue reinstalar el RAID; afortunadamente puedo hacerlo. La próxima vez probablemente tendrá algunos datos serios al respecto. Necesito entender esto para poder tener un RAID que no falle debido a una falla de un solo disco.
Me di cuenta de que no enumeré lo que esperaba frente a lo que sucedió.
Espero que un RAID5 con 3 discos buenos y 1 malo funcione en modo degradado: 3 activos/sincronizados y 1 defectuoso.
Lo que pasó fue que se creó un repuesto de la nada y se declaró defectuoso; luego se envió un repuesto nuevo.tambiéncreado de la nada y declarado sonido, después de lo cual el RAID fue declarado inoperativo.
Este es el resultado de blkid
:
$ blkid
/dev/xvda1: LABEL="/" UUID="4797c72d-85bd-421a-9c01-52243aa28f6c" TYPE="ext4"
/dev/xvdc: UUID="feb2c515-6003-478b-beb0-089fed71b33f" TYPE="ext3"
/dev/xvdd: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvde: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvdf: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
El TYPE y SEC_TYPE son interesantes ya que el RAID tiene XFS, no ext3....
Los registros de un intento de montaje en este disco, que dio como resultado el resultado final enumerado anteriormente, como cualquier otro montaje, tienen estas entradas de registro:
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
Oct 2 15:22:25 it kernel: [1686999.697076] XFS (md0): Mounting Filesystem
Oct 2 15:22:26 it kernel: [1686999.889961] XFS (md0): Ending clean mount
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423368 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423376 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423384 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423392 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423400 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423408 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423416 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423424 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423432 on xvde).
Oct 2 15:24:19 it kernel: [1687113.432129] md: md0: recovery done.
Oct 2 15:24:19 it kernel: [1687113.685151] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.691386] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.697529] Buffer I/O error on device md0, logical block 64
Oct 2 15:24:20 it kernel: [1687113.703589] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:51 it kernel: [1687205.682022] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.688477] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.694591] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.700728] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.748751] XFS (md0): last sector read failed
No veo xvdf en la lista...
Respuesta1
Este es un problema fundamental con RAID5: los bloques defectuosos durante la reconstrucción son mortales.
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
⋮
El conjunto ha sido ensamblado, degradado. Ha sido ensamblado con xvdc, xvde y xvdd. Aparentemente, hay un repuesto activo:
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
El mensaje 'tabla de particiones' no está relacionado. Los otros mensajes le indican que md está intentando realizar una recuperación, probablemente en un repuesto dinámico (que podría ser el dispositivo que falló antes, si intentó eliminarlo o volver a agregarlo).
⋮
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
Y esto aquí es md intentando leer un sector de xvde (uno de los tres dispositivos restantes). Eso falla [sector defectuoso, probablemente] y md (dado que la matriz está degradada) no se puede recuperar. Por lo tanto, expulsa el disco de la matriz y, si falla el doble disco, su RAID5 está inactivo.
No estoy seguro de por qué está etiquetado como repuesto; eso es extraño (aunque supongo que normalmente miro /proc/mdstat
, así que tal vez así es como lo etiqueta mdadm). Además, pensé que los kernels más nuevos eran mucho más reacios a eliminar bloques defectuosos, pero ¿tal vez estás ejecutando algo más antiguo?
¿Qué puedes hacer al respecto?
Buenas copias de seguridad. Esa es siempre una parte importante de cualquier estrategia para mantener vivos los datos.
Asegúrese de que la matriz se elimine periódicamente en busca de bloques defectuosos. Es posible que su sistema operativo ya incluya una tarea cron para esto. Para ello, haga eco de repair
o check
a /sys/block/md0/md/sync_action
. "Reparar" también reparará cualquier error de paridad descubierto (por ejemplo, el bit de paridad no coincide con los datos de los discos).
# echo repair > /sys/block/md0/md/sync_action
#
El progreso se puede observar con cat /proc/mdstat
, o con los distintos archivos en ese directorio sysfs. (Puede encontrar documentación algo actualizada en elArtículo mdstat de Linux Raid Wiki.
NOTA: En kernels más antiguos (no estoy seguro de la versión exacta), es posible que la verificación no solucione los bloques defectuosos.
Una última opción es cambiar a RAID6. Esto requerirá otro disco (ustedpoderejecutar un RAID6 de cuatro o incluso tres discos, probablemente no quiera hacerlo). Con núcleos suficientemente nuevos, los bloques defectuosos se solucionan sobre la marcha cuando es posible. RAID6 puede sobrevivir a dos fallas de disco, por lo que cuando un disco falla, aún puede sobrevivir a un bloque defectuoso y, por lo tanto, mapeará el bloque defectuoso y continuará con la reconstrucción.
Respuesta2
Me imagino que estás creando tu matriz RAID5 de esta manera:
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
Que no es exactamente lo que quieres. Más bien necesitas agregar los discos de esta manera:
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1
$ mdadm --add /dev/md0 /dev/sdd1
O puede usar mdadm
la opción para agregar repuestos como este:
$ mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
La última unidad de la lista será la de repuesto.
extracto de lapágina de manual de mdadm
-n, --raid-devices=
Specify the number of active devices in the array. This, plus the
number of spare devices (see below) must equal the number of
component-devices (including "missing" devices) that are listed on
the command line for --create. Setting a value of 1 is probably a
mistake and so requires that --force be specified first. A value
of 1 will then be allowed for linear, multipath, RAID0 and RAID1.
It is never allowed for RAID4, RAID5 or RAID6. This number can only
be changed using --grow for RAID1, RAID4, RAID5 and RAID6 arrays, and
only on kernels which provide the necessary support.
-x, --spare-devices=
Specify the number of spare (eXtra) devices in the initial array.
Spares can also be added and removed later. The number of component
devices listed on the command line must equal the number of RAID devices
plus the number of spare devices.