7.10 Información básica sobre RAID

7.10.1 Introducción

Un array de discos forma un disco lógico, y accede en paralelo a los discos físicos, permitiendo altas velocidades de transferencia. Por otro lado, como la información se guarda en forma redundante se empeora la velocidad de escritura (hay que hacer múltiples escrituras).

También sirve para distribuir la información en forma balanceada, evitando que se acceda de continuo a una cierta información en parte de un disco, mientras el resto de los discos permanecen ociosos.

Raid quiere decir Redundant Array of Inexpensive Disks, y precisamente tiende a aumentar la disponibilidad al aumentar la canditdad de discos: Array indica acceso en paralelo y mejor performance, Redundante indica tolerante a fallos.

Sin embargo, esto aumenta la probabilidad de falla en alguno de los discos (un tiempo medio de falla de 500.000 horas por disco implica un tiempo medio de falla de 500.000/100 = 5000 horas para un array con 100 discos). Por lo tanto mejora la disponibilidad, pero no la confiabilidad1.

Para optimizar desde el punto de vista de costos un RAID hay que minimizar el número de discos a los que se accede en paralelo, minimizar el tamaño de disco usado para datos redundantes, y minimizar el tiempo empleado para guardar información redundante y acceder en paralelo.

7.10.2 Forma de distribuir la información

Para distribuir datos en forma transparente sobre múltiples discos para que parezca que es un solo disco grande hay dos criterios a satisfacer:

  1. múltiples solicitudes independientes pueden satisfacerse en paralelo en discos separados, reduciendo el tiempo de espera en cola por las solicitudes de I/O.

  2. Solicitudes simples, multibloques pueden satisfacerse por múltiples discos actuando en forma coordinada: aumenta la velocidad de transferencia efectiva para una solicitud. La velocidad mejora cuantos más discos halla, pero cuantos más discos halla disminuye la confiabilidad de todo el array.

Y hay dos formas de guardar los datos, basada en la granularidad


  1. Si el array es de grano fino, la información se guarda en trocitos pequeños que se distribuyen uniformemente en todos los discos del array, obteniéndose velocidades de transferencia muy altas. Pero solamente una solicitud de I/O puede satisfacerse en un instante y todos los discos deberán reposicionar las cabezas para cada nueva solicitud.

  2. Si el array es de grano grueso, la información se guarda en bloques relativamente grandes para que una solicitud pequeña tenga que acceder solamente a un número pequeño de discos del array, y una solicitud de mucha información acceda a muchos discos. Así se pueden satisfacer muchas solicitudes simultaneas y a la vez que las grandes transferencias tengan velocidades altas derivadas de usar múltiples discos.

7.10.3 Forma de calcular y repartir la información redundante

Dado que un número grande de discos disminuye la confiabilidad de todo el array es importante incorporar redundancia para que el array pueda tolerar fallas y seguir operando sin perdida de datos.

Esto presenta dos problemas:

  1. Elegir el método para calcular información redundante (el más usado es la paridad, aunque algunos usan Hamming o Reed-Solomon).

  2. Elegir un método para distribuir la información redundante a través del array; hay dos tipos de métodos:

7.10.4 RAID 0

Un array no redundante RAID nivel 0 tiene el costo más bajo porque no emplea redundancia. Mejora la performance porque nunca necesita actualizar información redundante2, pero en general la mejor performance se alcanza mediante estrategias de planificación de solicitudes de lectura.

Sin redundancia, cualquier disco que se rompa tiene como consecuencia la pérdida de datos. Este tipo de array se usa en ambientes donde más importa la capacidad y la performance que la confiabilidad.

Bloques de datos se escriben en secuencia en todos los discos

B1 B2 B3 B4

B5 B6 B7 B8

...

7.10.5 RAID 1 (Espejado)

Es la solución tradicional (mirroring o shadowing) que usa el doble de discos que un array no redundante. Cuando un dato se escribe en un disco, el mismo dato se escribe en otro disco para que haya dos copias de la misma información.

Cuando se lee, se hace de cualquiera de los discos, en particular del que tenga un menor retardo en cola, de búsqueda y de retardo rotacional. Si un disco falla, la otra copia puede satisfacer las solicitudes.

El ámbito de aplicación es el de aplicaciones de bases de datos, donde la disponibilidad y el tiempo de transacción son más importantes que la eficiencia de almacenamiento (p.ej. la cantidad de discos usados).

7.10.6 RAID 2 (Memory-Style)

En vez de duplicar la información como en el espejado, empleo técnicas como Código de Hamming para guardar información redundante que me permita reconstruir los datos perdidos.

Esto permite que por ejemplo, cuatro discos de datos requieran solamente tres discos redundantes (uno menos que RAID nivel 1).

El número de discos redundantes es proporcional en forma logarítmica al total de los discos del sistema, por lo tanto la eficiencia de almacenamiento aumenta cuanto más discos de datos se usen.

Un RAID 2 normalmente tiene tantos discos como el tamaño de palabra de la computadora (p.ej. 32). P.e. un sistema con 32 discos de datos, requeriría 7 discos adicionales para un Código Hamming ECC.

No es un esquema práctico porque, por ejemplo, hoy en día cada disco tiene su propio ECC.

7.10.7 RAID 3, RAID 4 y RAID 5 (Bit-interleaved parity)

Como un controlador de disco puede identificar que disco falló, se puede usar una única paridad en vez de un conjunto de discos de paridad para reconstruir la información perdida. Esto mejora la eficiencia de almacenamiento.

Otras mejoras vienen dadas por RAID 4 (Block-Interleaved Parity, es similar al anterior, solo que para la paridad se usan bloques de cualquier tamaño), y RAID 5 (Block-Interleaved Distributed-Parity, que elimina el cuello de botella de RAID 4 distribuyendo la paridad uniformemente en todo el array).

7.10.8 RAID 6 (P+Q redundancy)

La paridad es un Código de redundancia capaz de corregir cualquier error individual. En la medida que en un RAID hay muchos discos, muchos fallos pueden suceder y códigos más complejos se hacen necesarios. Y cuando un disco falla, para reconstruir la información hay que acceder a otros discos que hayan fallado. Por lo tanto existe un alta probabilidad de que no se pueda corregir el error.

Un esquema mejor que la paridad es redundancia Q+P, que usa códigos Reed-Solomon para protegerse hasta de fallas en dos discos usando

7.10.9 RAID 10

El término se refiere a RAID que combina RAID 0 y RAID 1 (espejado). Los discos se espejan por pares para redundancia y mejorar performance, y luego la información es distribuida en 'tiras' entre múltiples discos.

Aunque usa más discos que RAID 5, también mejora la performance al poder leerse de todos los discos en paralelo (en RAID 5 hay un overhead debido a ciertas operaciones de escritura). En un RAID 10, un disco con fallas puede recuperarse leyendo solamente de su 'espejo'.

7.10.10 Respaldar la información a pesar de RAID

Aunque se use RAID, esto no significa que no haya que hacer respaldos del sistema. Por ejemplo, si un disco se rompe y se lo está cambiando, el RAID no es completamente redundante. Además, hay causas de pérdidas de datos no relacionadas a fallos de disco (errores humanos, de hardware, de software, etc.)

1Confiabilidad: que tanto puede funcionar un equipo sin que halla fallos. Disponibilidad: que tan bien puede funcionar un equipo en caso de fallos.

2Los esquemas redundantes que duplican datos, como el espejado, pueden tener mejor performance en lecutras planificando selectivamente las solicitudes en el disco con los menores retardos rotacionales y tiempos de búsqueda (en valor esperado).

Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.