Some of the links shared in this post are affiliate links. If you click on the link and make a purchase, we will receive an affiliate commission at no additional cost to you.
unRAID utiliza la paridad para protegerse de la pérdida de datos. Si falla una unidad de la matriz, los datos de las demás unidades pueden combinarse con los datos de paridad para reconstruir los datos que faltan.
¿Por qué 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.
Cómo funciona la paridad
En general, un proceso de paridad está diseñado para reconocer un único cambio de bit en un conjunto concreto de bits, 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 denomina bit de paridad.
Con unRAID, los bits de paridad se almacenan en una unidad de paridad independiente de las unidades de datos. Este bit de paridad funciona mediante el conjunto de bits en la misma posición relativa de bit en cada unidad. Así, el 57º bit de la unidad de paridad es el bit de paridad del 57º bit de todas las unidades de datos. Por tanto, una comprobación de paridad de la posición del bit 57 suma todos los bits 57 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 PAR, se cambia el bit de paridad para que la comprobación de paridad devuelva un número PAR.
¿Por qué un número PAR? unRAID utiliza “paridad par”, lo que significa simplemente que el proceso de suma (mediante 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 tienes 4 unidades con los valores de bits 1,1,1,1, la paridad es 0 (1+1+1+1+0=par). Si los valores de bits son 1,0,0,0, la paridad es 1 (1+0+0+0+1=par).
Si 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 esta unidad. Un valor cero no tiene ningún efecto sobre la paridad. Una vez que la nueva unidad está llena de ceros, unRAID puede insertarla fácilmente en la matriz sin tener que restaurar la paridad. De esta forma, 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 unRAID se utilizan para reconstruir datos:
- cuando se reconstruye un soporte de datos; y
- si se detecta un sector defectuoso.
En esos momentos, se leen todos los discos (incluida la paridad) para reconstruir los datos que se van a escribir en el disco de destino. Como la suma de los bits siempre es 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
Como la paridad es tan importante para la reconstrucción de datos, debes asegurarte de que la paridad es correcta realizando comprobaciones periódicas de paridad.
Si eliminas físicamente un solo disco de tu matriz, puedes seguir leyendo y escribiendo en él. Se simula leyendo todos los demás discos de datos y el de paridad. Del mismo modo, el disco de paridad se actualiza según sea necesario al escribir en el disco simulado. Si ahora instalas un disco de repuesto, se puede reconstruir completamente utilizando el contenido recién reconstruido basándose en la paridad y en 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.
Durante 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 paridad almacenada. Esta operación tiene una bandera:
CORRECTO - si se produce un desajuste de paridad, escribe el disco de paridad con la paridad calculada e informa en syslog NOCORRECTO - sólo informa en syslog
Sólo se notifican los 100 primeros errores de comprobación de paridad. (Los mensajes del registro del sistema se generan por cada dirección de sector en la que se produce una coincidencia de paridad incorrecta. Por tanto, si realizas una comprobación de paridad en una matriz que no tiene 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, no coincidía) con la paridad almacenada. (Un “bloque” consta de 4096 bytes. También es el tamaño de PÁGINA de Linux, la unidad básica de E/S).
Un disco de paridad válido significa que existe un disco de paridad y que en algún momento del pasado se completó una sincronización de paridad sin errores (o se abortó). Una vez completada la sincronización de paridad, el disco de paridad siempre es “válido” (y tiene un punto verde). Válido” en este sentido significa que puede utilizarse para reconstruir un disco de datos averiado.
(En realidad, “válido” es un estado que se aplica a todos los discos del array, tanto a los discos de datos como al disco de paridad. Si todos los discos del array excepto 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 paridad da lugar a errores, ¿por qué el disco de paridad sigue marcado como “válido”? Si el sistema marca el disco de paridad como “no válido” debido a un puñado de errores de paridad y luego falla otro disco, este otro disco ya no puede reconstruirse (porque ahora habría dos discos no válidos en la matriz). Por tanto, el disco de paridad completo no se marca como no válido debido a los errores de paridad detectados. Por supuesto, un usuario puede declarar inválida la paridad en cualquier momento anulando su asignación.
Una vez calculada la paridad, sólo debe haber 2 posibilidades de que se produzcan errores de comprobación de paridad:
- Un apagado no limpio, es decir, un corte de corriente repentino o un reinicio del sistema. En este caso, las operaciones de escritura en los discos de paridad y/o de datos pueden estar pendientes pero no completadas, por lo que la franja correspondiente tiene una paridad incoherente.
- Un error de hardware no reconocido (por ejemplo, corrupción silenciosa de la memoria).
Disco duro de paridad en Unraid
Talla
El tamaño del disco de paridad debe ser igual o mayor que el del disco de datos más grande.
Rendimiento
Utilizar la paridad para proteger tus datos afectará inevitablemente al rendimiento cuando escribas datos en la matriz. Cada vez que se escribe en un disco de datos, también debe actualizarse el disco de paridad. Cada operación de 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 realizar una rotación completa tras la lectura para reposicionar el cabezal del disco sobre el sector en el que se está escribiendo.
La escritura en la matriz unRAID también está limitada por la velocidad (de rotación) más lenta de las unidades implicadas. Si sólo la unidad de paridad es de 7200 rpm, seguirás estando limitado por la velocidad de la unidad de datos. No verás ninguna mejora en la velocidad de escritura a menos que se esté escribiendo en varias unidades de datos más lentas al mismo tiempo y una unidad de paridad de 7200 rpm más rápida esté intentando seguir el ritmo de ambas.
Doble paridad
En las matrices de gran tamaño, la “doble paridad”, es decir, la opción de tener un segundo disco duro de paridad, no es simplemente una réplica del primero. Esto permite dos fallos de disco simultáneos 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 habitual, 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. (Requiere la aclaración de que esto se utiliza realmente)