Next Previous Contents

5. Configuración RAID

5.1 Configuración general

Esto es lo que necesitáis para cualquiera de los niveles RAID:

Todo esto, salvo lo último, lo podéis encontrar en la última versión de vuestra distribución Linux favorita.

Si vuestro sistema soporta RAID, debería de existir un archivo en /proc/mdstat. Recordad, ese archivo es vuestro amigo. Si no está ahí puede que vuestro núcleo no soporte RAID. Podéis ver los contenidos de ese archivo ejecutando

  cat /proc/mdstat
Eso debería de aportar datos sobre las personalidades RAID presentes (modos RAID a tener en cuenta en el sistema) y, en este caso, que no hay dispositivos RAID activos. Todavía.

Cread, en este momento, las particiones que queréis incluir en los conjuntos RAID que vayáis a necesitar.

5.2 Descargando e instalando mdadm

Podéis descargar el tarball mas reciente de mdadm en http://www.cse.unsw.edu.au/~neilb/source/mdadm/. Ejecutad a continuación make install y eso bastará para compilar e instalar mdadm, su configuración, páginas del manual y archivos de ejemplo.

tar xvf ./mdadm-1.4.0.tgz
cd mdadm-1.4.0.tgz
make install
Si usáis una distribución basada en RPM, podéis descargar e instalar el paquete que hay en http://www.cse.unsw.edu.au/~neilb/source/mdadm/RPM.
rpm -ihv mdadm-1.4.0-1.i386.rpm  
Si estáis usando Debian Woody (3.0 o superior), podéis probar a ejecutar
apt-get install mdadm
Gentoo tiene este paquete disponible en el árbol de ports. Sólo tenéis que emplear estas instrucciones
emerge mdadm
Otras distribuciones probablemente también tendrán este paquete a tiro. Y ahora vamos con los distintos modos RAID.

5.3 Modo lineal

De acuerdo, tenéis dos o más particiones, probablemente de distintos tamaños, y queréis juntarlas todas en un gran bloque único, donde se sucederán, una detrás de otra.

Configuramos el /etc/raidtab para describir la configuración que pretendemos. Un /etc/raidtab para poner dos discos en modo lineal se ve así de bonito:

raiddev /dev/md0
        raid-level      linear
        nr-raid-disks   2
        chunk-size      32
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
Este modo no soporta discos libres: si un disco se os muere, el array se muere con él. Así de claro.

Los que estáis más despiertos, probablemente os estéis preguntando porque especificamos un chunk-size (tamaño de porción) aquí cuando resulta que el modo lineal solo empalma los discos en un gran array sin paralelismos... bueh, tenéis toda la razón, es un poco raro. Pero mejor dejémoslo correr por ahora, declarad ahí ese chunk-size y no os volváis a hacer esa pregunta. Gracias.

Vamos a crear el array.

  mkraid /dev/md0

Esto inicializa el array, escribe los superbloques persistentes y arranca el array.

Si usáis mdadm, el comando es

  mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2  /dev/sdb6 /dev/sdc5
Y con eso habéis, también, creado el array. Los parámetros son lo que parecen. Y la salida con la que os premiará mdadm será como esta:
  mdadm: chunk size defaults to 64K
  mdadm: array /dev/md0 started.

Echad ahora, el consabido vistazo al /proc/mdstat. Veréis que el array ya está en marcha. Final feliz.

Ahora podéis crear un sistema de archivos, como haríais en cualquier otro dispositivo, montarlo, incluirlo en el /etc/fstab y disfrutarlo.

5.4 RAID-0

En este caso, tenéis dos o más dispositivos, de aproximadamente el mismo tamaño, y queréis combinar sus capacidades de almacenamiento y también combinar sus rendimientos accediéndolos en paralelo.

Preparad el fichero /etc/raidtab para describir su configuración. Un raidtab de ejemplo se parece a esto:

raiddev /dev/md0
        raid-level      0
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size     4
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
Como en el modo lineal, los discos de reserva tampoco tienen sentido aquí. Un RAID-0 no tiene redundancia, por lo que cuando un disco muere, el array le acompaña al otro mundo.

Una vez más, ejecutad simplemente:

  mkraid /dev/md0
para inicializar el array. Esto debe de inicializar los superbloques y poner en funcionamiento el dispositivo RAID. Echad un vistazo a /proc/mdstat para ver qué sucede. Deberíais ver que el dispositivo ahora está en funcionamiento.

Ahora, /dev/md0 está listo para ser formateado, montado, usado y abusado.

5.5 RAID-1

Tenéis dos dispositivos de aproximadamente el mismo tamaño y queréis que cada uno de los dos sea un duplicado del otro. Además tenéis más dispositivos que vais a querer declarar como discos libres preparados, que automáticamente formarán parte del duplicado si uno de los dispositivos activos se rompe.

Configurad el fichero /etc/raidtab tal que así:

raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        chunk-size     4
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
Si tenéis discos libres, podéis añadirlos al final de la especificación de dispositivo mediante el uso de esta sintaxis:
        device          /dev/sdd5
        spare-disk      0
Recordad configurar la entrada nr-spare-disks adecuadamente.

De acuerdo, ahora estáis listos para comenzar la inicialización del RAID. Se debe construir el duplicado, es decir, los contenidos (de todos modos, sin importancia ahora, ya que el dispositivo todavía está sin formatear) de los dos dispositivos se deben sincronizar.

Dad la orden

  mkraid /dev/md0
para comenzar la inicialización del duplicado.

Comprobad el fichero /proc/mdstat. Debería deciros que se ha puesto en funcionamiento el dispositivo /dev/md0, que está siendo reconstruido el duplicado y una estimación del tiempo que falta para el final de la reconstrucción.

La reconstrucción se realiza usando el ancho de banda ocioso de E/S. De esta manera, vuestro sistema todavía debería ser capaz de responder en gran medida, aunque los LEDs de vuestros discos deben estar destelleando alegremente.

El proceso de reconstrucción es transparente, por lo que podéis usar tranquilamente el dispositivo en pleno proceso de reconstrucción del duplicado.

Intentad formatear el dispositivo mientras la reconstrucción se está realizando. Funcionará. También podéis montarlo y usarlo mientras la reconstrucción se esté realizando. Eso si, si el disco equivocado se rompe mientras se está realizando la reconstrucción, no hay solución.

5.6 RAID-4

Importante: No hemos comprobado esta configuración por nosotros mismos. La configuración que vamos a describir aquí es sólo un modelo teórico, no algo que realmente hayamos puesto en producción. Si alguno de vosotros usa RAID-4, que nos envíe unos e-mails y comparta su experiencia con nosotros.

Tenéis tres o más dispositivos de aproximadamente el mismo tamaño, un dispositivo es significativamente más rápido que los otros dispositivos y por ello queréis combinarlos todos en un único dispositivo más grande, conservando todavía alguna información de redundancia. Además, contáis varios dispositivos que queréis usar como discos de reserva.

Configurad el fichero /etc/raidtab así:

raiddev /dev/md0
        raid-level      4
        nr-raid-disks   4
        nr-spare-disks  0
        persistent-superblock 1
        chunk-size      32
        device          /dev/sdb1
        raid-disk       0
        device          /dev/sdc1
        raid-disk       1
        device          /dev/sdd1
        raid-disk       2
        device          /dev/sde1
        raid-disk       3
Si tenéis discos de reserva, los insertáis de esta forma, siguiendo las especificaciones de discos RAID;
        device         /dev/sdf1
        spare-disk     0
como de costumbre.

El array se puede inicializar con la orden

   mkraid /dev/md0
como es habitual.

Deberíais de consultar la sección de opciones especiales de mke2fs antes de formatear el dispositivo.

5.7 RAID-5

Tenéis tres o más dispositivos de aproximadamente el mismo tamaño, queréis combinarlos en un dispositivo mayor, pero conservando todavía cierto grado de redundancia para la seguridad de datos. Además, contáis con varios dispositivos para usar como discos de reserva, que no tomarán parte en el array antes de que otro dispositivo falle.

Si estáis usando N dispositivos donde el tamaño del más pequeño es S, el tamaño de todo el array será (N-1)*S. El espacio "perdido" se usa para información de paridad (redundancia). De esta manera, si cualquier disco falla, todos los datos permanecerán intactos. Pero si dos discos fallan, todos los datos se perderán.

Preparad el siguiente fichero /etc/raidtab:

raiddev /dev/md0
        raid-level      5
        nr-raid-disks   7
        nr-spare-disks  0
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      32
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1
        device          /dev/sdc1
        raid-disk       2
        device          /dev/sdd1
        raid-disk       3
        device          /dev/sde1
        raid-disk       4
        device          /dev/sdf1
        raid-disk       5
        device          /dev/sdg1
        raid-disk       6
Y para insertar discos libres, como siempre;
        device         /dev/sdh1
        spare-disk     0
Un tamaño de porción de 32KB es un buen valor por defecto para muchos sistemas de ficheros de propósito general de este tamaño. El array sobre el que se utiliza el raidtab anterior es un dispositivo de 7 por 6 GB = 36 GB (recuerde que (N-1)*S = (7-1)*6 = 36). Contiene un sistema de ficheros ext2 con un tamaño de porción de 4KB. Podría incrementar tanto el tamaño de porción del array como el tamaño de bloque del sistema de ficheros si su sistema de ficheros fuera o bien mucho mayor o bien si simplemente contuviera ficheros muy grandes.

Vale, ya hemos hablado bastante. Configurad ese raidtab y veamos si funciona. Ejecutad esto,

  mkraid /dev/md0
y observad lo que pasa. Es de esperar que esos discos comiencen a trabajar como locos para poder empezar con la reconstrucción de su array. Echadle, como siempre, un vistazo a /proc/mdstat para ver qué está sucediendo.

Si el dispositivo se ha creado correctamente, el proceso de reconstrucción comenzará ahora. El array no será consistente hasta que la fase de reconstrucción haya terminado. No obstante, el array es totalmente funcional (excepto, por supuesto, para la respuesta ante fallos de dispositivos) y podéis formatearlo y usarlo incluso mientras se esté reconstruyendo.

Consultad la sección de opciones especiales de mke2fs antes de formatear el array.

Bueno, y ahora que ya tenéis esos dispositivos RAID funcionando, siempre podéis pararlo o rearrancarlo usando las órdenes

  raidstop /dev/md0
o
  raidstart /dev/md0
respectivamente.

Si usáis mdadm, los equivalentes son

  mdadm -S /dev/md0
y
  mdadm -R /dev/md0
En lugar de colocar estos comandos en los ficheros de inicio y rearrancar un número astronómico de veces hasta que todo os funcione, seguid leyendo y haréis funcionar la autodetección.

5.8 El superbloque persistente

Antiguamente, las herramientas RAID (raidtools) leían su fichero /etc/raidtab y a continuación inicializaban el array. Sin embargo, esto requería que el sistema de ficheros sobre el que reside /etc/raidtab estuviera montado. Esto no es buena idea si quiere arrancar a partir de un RAID.

Además, la anterior aproximación producía complicaciones al montar sistemas de ficheros sobre dispositivos RAID. éstos no se podían colocar en el fichero /etc/fstab como era usual, sino que tenían que ser montados en los scripts de inicio.

Los superbloques persistentes solucionan estos problemas. Cuando un array se inicializa con la opción persistent-superblock en el fichero /etc/raidtab, se escribe un superbloque especial al principio de todos los discos participantes en el array. Esto permite al núcleo leer la configuración de los dispositivos RAID directamente de los discos involucrados, en lugar de leerla de algún fichero de configuración que puede no estar disponible en todo momento.

De todos modos, si no vais a usar mdadm, todavía deberéis de mantener un fichero /etc/raidtab consistente, ya que podéis necesitar este fichero para una reconstrucción posterior del array.

Los superbloques persistentes son obligatorios si vais a emplear la autodetección de dispositivos RAID durante el arranque del sistema. Esto se describe en la sección de autodetección.

5.9 Tamaños de porción

El tamaño de porción (chunk size) merece que entremos en detalles: no se puede escribir de forma totalmente paralela a un grupo de discos. Si tuvierais dos discos y quisierais escribir un byte, tendríais que escribir cuatro bits en cada disco, con lo que todos los segundos bits irían al disco 0 y los otros al disco 1. Sencillamente, el hardware no soporta eso. En su lugar, elegimos algún tamaño de porción que definimos como la masa "atómica" más pequeña de datos que puede ser escrita en los dispositivos. Una escritura de 16 KB con un tamaño de porción de 4 KB provocaría que la primera y tercera porción de 4KB se escribieran en el primer disco y la segunda y la cuarta porción en el segundo, en el caso de un RAID-0 de dos discos. De esta manera, para grandes escrituras, podríais observar una sobrecarga más pequeña teniendo porciones lo bastante grandes, mientras que los arrays que contuvieran principalmente ficheros pequeños se podrían beneficiar más de un tamaño de porción más pequeño.

Los tamaños de porción se pueden especificar para todos los niveles de RAID excepto para el modo lineal.

Para un rendimiento óptimo, deberíais de experimentar con el valor, así como con el tamaño de bloque del sistema de ficheros que pusiera en el array.

El argumento de la opción chunk-size en /etc/raidtab especifica el tamaño de porción en kilobytes. Por tanto, "4" significa "4 KB".

RAID-0

Los datos se escriben "casi" en paralelo en todos los discos del array. En realidad, se escriben chunk-size bytes en cada disco, en serie (o sea, de forma consecutiva).

Si especificais un tamaño de porción de 4 KB para escribir 16 KB a un array de 3 discos, el sistema RAID escribirá 4 KB a los discos 0, 1 y 2, en paralelo, y a continuación los 4 KB restantes al disco 0.

Un tamaño de porción de 32 KB es un punto de inicio razonable para la mayoría de los arrays. Pero el valor óptimo depende muchísimo del número de discos implicados, del contenido del sistema de ficheros que coloca y de muchos otros factores. Experimentad con él para obtener el mejor rendimiento.

RAID-1

Para las escrituras, el tamaño de porción no afecta al array, ya que se deben escribir todos los datos a todos los discos y punto. Para las lecturas, sin embargo, el tamaño de porción indica cuántos datos leer consecutivamente de los discos participantes. Ya que todos los discos activos del array contienen la misma información, las lecturas se pueden hacer en paralelo al estilo de un RAID-0.

RAID-4

Cuando se realiza una escritura en un array RAID-4, también se debe actualizar la información de paridad en el disco de paridad. El tamaño de porción es el tamaño de las porciones de paridad. Si se escribe un byte a un array RAID-4, entonces se leerán chunk-size bytes de los N-1 discos, se calculará la información de paridad y se escribirán chunk-size bytes al disco de paridad.

El tamaño de porción afecta al rendimiento de las lecturas de la misma forma que en un RAID-0, ya que las lecturas de un RAID-4 se realizan exactamente igual en ambos modos.

RAID-5

En RAID-5 el tamaño de porción tiene exactamente el mismo significado que en un RAID-0. Escribir en RAID-5 es un poco más complicado: cuando una porción se escribe en un array RAID-5, la porción de paridad correspondiente debe ser actualizado también. Actualizar una porción de paridad requiere una de estas dos cosas:

La implementación RAID escogerá la forma más fácil de actualizar cada porción de paridad a medida que se van sucediendo los accesos de lectura.

Un tamaño de porción razonable para un RAID-5 es 128 KB pero, como siempre, podéis experimentar con éste.

Consultad también la sección de opciones especiales de mke2fs. Esto afecta al rendimiento de un RAID-5.

5.10 Opciones de mke2fs

Hay disponible una opción especial cuando se formatean dispositivos RAID-4 y RAID-5 con mke2fs. La opción -R stride=nn permitirá a mke2fs situar mejor diferentes estructuras de datos específicas de ext2 en un dispositivo RAID de forma inteligente.

Si el tamaño de porción es 32 KB significa que 32 KB de datos consecutivos residirán en un único disco. Si queremos construir un sistema de ficheros ext2 con un tamaño de porción de 4KB, nos damos cuenta de que habrá 8 porciones del sistema de ficheros en una porción del array. Podemos pasar esta información a la utilidad mke2fs cuando se cree el sistema de ficheros:

  mke2fs -b 4096 -R stride=8 /dev/md0
El rendimiento de un RAID-{4,5} se ve fuertemente influido por esta opción. No estamos seguros de cómo la opción stride afectará a otros niveles RAID. Si alguien tiene información sobre esto, por favor, que nos la envíe.

El tamaño de bloque de ext2fs influye severamente en el rendimiento del sistema de archivos. Deberíais de usar siempre un tamaño de porción de 4KB en cualquier sistema de archivos más grande que unos pocos cientos de megabytes... a no ser que se guardéis en él un número muy grande de archivos minúsculos.


Next Previous Contents