Explicación de la paridad Unraid

Explicación de la paridad Unraid

octubre 5, 2021 1 Por Tobias

La paridad es utilizada por unRAID para proteger contra la pérdida de datos. Si una unidad de la matriz falla, los datos de las otras unidades pueden combinarse con los datos de paridad para reconstruir los datos que faltan.

¿Por qué la paridad? Porque sólo hay dos tipos de discos duros en el mundo:

  • Discos duros que ya han fallado.
  • Discos duros que aún no han fallado, pero que sólo necesitan un poco más de tiempo antes de fallar.

Así funciona la paridad

En general, un proceso de paridad está diseñado para detectar un único cambio de bit en un conjunto de bits dado, ajustando el valor de un bit añadido para forzar una suma sobre ese conjunto de bits a un valor conocido. El bit añadido se llama bit de paridad.

En unRAID, los bits de paridad se almacenan en una unidad de paridad que es independiente de las unidades de datos. Este bit de paridad funciona por el conjunto de bits en la misma posición relativa de bits en cada unidad. Así, el 57º bit de la unidad de paridad es el bit de paridad para el 57º bit de todas las unidades de datos. Por lo tanto, una comprobación de paridad de la posición de 57 bits suma todos los 57 bits de todas las unidades, incluida la unidad de paridad, y comprueba si la suma es un número PAR. Si el valor devuelto no es EVEN, el bit de paridad se conmuta para que la comprobación de paridad devuelva un número EVEN.

¿Por qué un número PAR? unRAID utiliza la «paridad par», lo que significa simplemente que el proceso de suma (utilizando una operación matemática llamada «OR exclusivo» o «XOR») sobre este conjunto de bits debe devolver un valor que sea un número PAR.

Los datos digitales se almacenan como un 1 o un 0:

Si tiene 4 unidades con valores de bits 1,1,1,1, la paridad es 0 (1+1+1+0=par).
Si los valores de los bits son 1,0,0,0, la paridad es 1 (1+0+0+1=par).

Cuando se añade una unidad a una matriz unRAID protegida por paridad, primero se borra escribiendo ceros en todos los bits de todos los sectores de esa unidad. Un valor cero no tiene efecto en la paridad. Una vez que la nueva unidad está llena de ceros, unRAID puede insertarla silenciosamente en la matriz sin tener que restaurar la paridad. De este modo, se pueden añadir varios discos duros al mismo tiempo.

Reconstrucción de datos

Sólo hay dos situaciones en las que los datos de paridad de unRAID se utilizan para reconstruir los datos:

  • cuando se reconstruye un soporte de datos; y
  • cuando se detecta un sector defectuoso.

En estos momentos, se leen todos los discos (incluida la paridad) para reconstruir los datos que se escribirán en el disco de destino. Como la suma de los bits es siempre par, unRAID puede reconstruir UN elemento de datos que falte (la paridad o un disco de datos) siempre que los demás elementos sean correctos.

En los dos ejemplos anteriores, digamos que el 2.

  • 1+x+1+1+0=par, x debe ser igual a 1
  • 1+x+0+0+1=par, x debe ser igual a 0

Dado que la paridad es tan importante para la reconstrucción de los datos, debes asegurarte de que la paridad es correcta realizando comprobaciones periódicas de paridad.

Si retira físicamente un solo disco de su matriz, puede seguir leyendo y escribiendo en él. Se simula leyendo todos los demás discos de datos y la paridad. Del mismo modo, el disco de paridad se actualiza según sea necesario al escribir en el disco simulado. Si ahora se instala un disco de reemplazo, se puede reconstruir completamente utilizando el contenido recién reconstruido basado en la paridad y todos los demás discos de datos.

Comprobación de paridad

Durante una sincronización de paridad, el sistema lee todos los discos de datos y escribe la paridad calculada en el disco de paridad.

En una comprobación de paridad, el sistema lee todos los discos de datos y el disco de paridad y compara la paridad calculada con la almacenada. Esta operación tiene una bandera:

 CORRECT - if a parity mismatch occurs, write parity disk with computed parity and report in syslog
 NOCORRECT - just report in syslog

Sólo se notifican los 100 primeros errores de comprobación de paridad. (Los mensajes en el registro del sistema se generan para cada dirección de sector donde se produce una coincidencia de paridad incorrecta. Así, si se realizara una comprobación de paridad en una matriz que no tuviera paridad válida, el registro del sistema se haría rápidamente muy grande; de ahí el límite de 100 mensajes).

Estos errores de paridad se denominan «errores de sincronización» o «errores de sincronización de paridad». Indican cuántas direcciones de bloque se encontraron en las que la paridad calculada no estaba «sincronizada» (es decir, coincidía) con la paridad almacenada. (Un «bloque» consta de 4096 bytes. Este es también el tamaño de la PÁGINA de Linux – la unidad básica de E/S).

Un disco de paridad válido significa que hay un disco de paridad y que en algún momento del pasado se completó una sincronización de paridad sin error (o aborto). Una vez completada la sincronización de paridad, la placa de paridad es siempre «válida» (y tiene un punto verde). Válido» en este sentido significa que puede utilizarse para reconstruir un disco de datos que ha fallado.

(En realidad, «válido» es un estado que se aplica a todos los discos de la matriz, tanto los de datos como los de paridad. Si todos los discos del array menos uno son válidos, significa que el disco no válido puede reconstruirse con los datos de los demás).

Si una comprobación/corrección de la paridad da errores, ¿por qué el disco de paridad sigue marcado como «válido»? Si el sistema marca el disco de paridad como «inválido» debido a un puñado de errores de paridad y luego falla otro disco, este otro disco ya no puede ser reconstruido (porque ahora habría dos discos inválidos en el array). Así, todo el disco de paridad no se marca como no válido debido a los errores de paridad detectados. Por supuesto, un usuario puede invalidar la paridad en cualquier momento desasignándola.

Una vez calculada la paridad, sólo debería haber 2 posibilidades de que se produzcan errores de comprobación de paridad:

  • Un apagado no limpio, es decir, un corte de energía repentino o un reinicio del sistema. En este caso, podría haber escrituras pendientes en los discos de paridad y/o de datos que no se han completado, por lo que la franja correspondiente tiene una paridad inconsistente.
  • Un fallo de hardware no detectado (por ejemplo, corrupción silenciosa de la memoria).

Disco duro de paridad

Tamaño

El tamaño del disco de paridad debe ser igual o mayor que la unidad de datos más grande.

Rendimiento

El uso de la paridad para proteger los datos afecta inevitablemente al rendimiento cuando se escriben datos en la matriz. Cada vez que se escribe en un disco de datos, el disco de paridad también debe ser actualizado. Cada escritura en un disco de datos unRAID protegido por paridad da lugar a 4 operaciones de disco: Lectura y escritura para la paridad y lectura y escritura para los datos. El plato de cada disco debe hacer una rotación completa después de una lectura para reposicionar la cabeza del disco sobre el sector en el que se está escribiendo.

La escritura en el array unRAID también está limitada por la velocidad más lenta (de rotación) de las unidades implicadas. Si sólo la unidad de paridad es una unidad de 7200 rpm, sigue estando limitada por la velocidad de la unidad de datos. No verá una mejora en la velocidad de escritura a menos que se escriba en varias unidades de datos más lentas al mismo tiempo y una unidad de paridad de 7200 rpm más rápida esté tratando de seguir el ritmo de ambas.

Doble paridad

En el caso de las matrices grandes, la «doble paridad», es decir, la posibilidad de tener una segunda unidad de paridad, no es simplemente un espejo de la primera. Esto permite que se produzcan dos fallos simultáneos de la unidad sin pérdida de datos.

En un sistema de redundancia P + Q (como en un sistema RAID-6) habría dos discos de redundancia: «P», que es la paridad XOR ordinaria, y «Q», que es un código Reed-Solomon. Esto permite a unRAID recuperarse de 2 fallos de disco con un impacto mínimo en el rendimiento. (Es necesario aclarar que se utiliza realmente).

Share