¿Reparación de discrepancias en la limpieza de RAID6?

¿Reparación de discrepancias en la limpieza de RAID6?

Puede iniciar una limpieza de una matriz mdadm con echo 'check' > /sys/block/mdX/md/sync_actiony, si se encuentra un sector defectuoso, lo solucionará.reescribirlo automáticamente(desde un espejo o desde información de paridad para RAID5/6).

Sin embargo, sitodos los bloques se leen correctamente pero se descubre que no son consistentes, entonces esto se considera una falta de coincidencia. En este caso, la reparación es complicada porque mdadm no puede determinar qué espejo contiene los datos correctos (RAID1/10) o si son datos o paridad los que están dañados (RAID5).

En teoría, este no es el caso con RAID6 si entiendo RAID6 correctamente. Debido a que existe la doble paridad, debería ser posible identificar dónde se encuentra una única corrupción, ya sea en los datos o en la paridad.

  1. ¿Mi comprensión es correcta? ¿Debería ser esto posible en teoría?
  2. Si es correcto, ¿mdadm puede reparar estos datos inconsistentes sin adivinar qué bloque está dañado?

Respuesta1

Es posible en teoría: los datos+paridad le dan tres opiniones sobre cuáles deberían ser los datos; Si dos de ellos son consistentes, puedes asumir que el tercero es el incorrecto y reescribirlo basándose en los dos primeros.

Linux RAID6 no hace esto. En cambio, cada vez que hay una discrepancia, se supone que los dos valores de paridad son incorrectos y se recalculan a partir de los valores de los datos. Ha habido propuestas para cambiar a un sistema de "voto mayoritario", pero no se ha implementado.

El mdadmpaquete incluye elutilidad raid6checkque intenta determinar qué disco está defectuoso en caso de que la paridad no coincida, pero tiene algunas asperezas, no está instalado de forma predeterminada y no corrige los errores que encuentra.

Respuesta2

La raid6checkutilidad mdadmincluye un repairmodo desde la versión 3.3 (lanzada el 3 de septiembre de 2013) (más precisamente desde esta confirmación:https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=8a63c73123b9d022107c82bd684e17bf87bc081e)

información relacionada