Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Antonio Castro

RECONOCIMIENTOS
Siempre estaré agradecido a todo el equipo de LinuxFocus que algunas veces desde una posición menos visible colaboran para dar un buen aspecto a un artículo así como a los traductores. En esta ocasión debo mencionar especialmente a otra persona.
Este artículo no hubiera sido posible sin el asesoramiento de Luis Colorado, quien correo tras correo me ha ido ayudando con sus conocimientos sobre sistemas RAID. Gracias Luis.

Contenidos:
Introduciónn
Elección de discos para un RAID
Características de los sistemas SCSI
En qué consisten los distintos RAID
Cómo instalar un RAID0

Instalación y Configuración de un Sistema RAID

[Ilustration]

Resumen:

RAID (Redundant Array of Inexpensive Disks) Consiste en una serie de sistemas para organizar varios discos como si de uno solo se tratara pero haciendo que trabajen en paralelo para aumentar la velocidad de acceso o la seguridad frente a fallos del hardware o ambas cosas.


Introducción

Existen soluciones hardware normalmente muy costosas basadas generalmente en el uso de tarjetas controladoras.

Al final otras soluciones basadas en tarjetas, permiten gestionar una serie de discos idénticos como RAID's gracias a un simple Z80 y un software que está almacenado en la tarjeta. En estas condiciones no se puede afirmar que la eficiencia sea mejor que en Linux.

Las soluciones basadas en tarjetas son caras y obligan a usar discos idénticos. Linux puede, con los drivers adecuados, usar algunas de estas tarjetas pero no resulta interesante ya que Linux permite utilizar una solución software totalmente gratuita que es igual de eficiente que las costosas implementaciones hardware.

... Linux permite utilizar una solución software totalmente gratuita que es igual de eficiente que las costosas implementaciones hardware.

La solución puramente software de Linux se implementa en el kernel y permide utilizar discos de distinto tipo. Se pueden mezclar incluso discos IDE con discos SCSI. Incluso discos de distinto tamaño pero en este caso habría que asociar particiones del mismo tamaño en todos los discos. La solución más normal es tomar los discos enteros del mismo tamaño para hacer un RAID pero Linux permite mayor flexibilidad. Por ejemplo, en un disco se puede usar parte para el RAID y parte fuera del RAID. Esto no suele ser buena idea ya que el uso de otras particiones del disco que no están en el RAID perjudicaría la velocidad de acceso de todo el sistema. Es decir que a pesar de que Linux permite usar cualquier tipo de disco lo mejor es usar discos con la misma capacidad y características parecidas. Otra cosa a tener en cuenta es que la tecnología SCSI permite acceso concurrente a los distintos dispositivos conectados al bus.

Por el contrario el uso de dos discos IDE con la misma tarjeta significa que nunca se podrán acceder simultáneamente ambos dispositivos. Es una lástima que los discos SCSI sean mucho más caros que los discos IDE. La solución puramente software disponible en Linux es igual de buena en eficiencia (puede que incluso mejor) que la solución basada en tarjetas y por supuesto mucho mas barata, y flexible permitiendo aprovechar discos de equipos anticuados.

Mientras que en un bus SCSI un dispositivo puede estar volcando datos al bus, otro puede estar recogiéndolos; a discos IDE primero se accede a un dispositivo y luego a otro.

Elección de discos para un RAID

Utilizar discos rápidos para montar un RAID no suele estar justificado. Son mucho más caros. Los discos rápidos suelen serlo debido a una mayor agilidad de las cabezas para posicionarse en la pista necesaria. Los cambios de pista es la operación que más tiempo consume en un disco duro, pero a diferencia por ejemplo de MSDOS en Linux están optimizadas de manera que la información no se accede en el mismo orden que es solicitada sino que se comporta de manera similar a un ascensor inteligente que va memorizando las peticiones y las va atendiendo por el orden más conveniente. También se usan otras estrategias que aumentan el rendimiento minimizando el numero de accesos a disco, como memorias cache. La velocidad de giro de los discos suele ser muy parecida pero puede haber diferencias en cuanto a densidad y número de cabezas que afectarían significativamente a la velocidad de transferencia. Este parámetro si que interesa tenerlo en cuenta. Por todo esto la recomendación sería usar preferiblemente discos SCSI iguales o similares y baratos. La velocidad vendrá por el acceso concurrente a los mismos.

Hay que tener en cuenta que para el arranque del sistema es necesario un disco no RAID y de pequeño tamaño tamaño porque la partición que contenga el sistema de ficheros raíz conviene que tenga pocas cosas.

Características de los sistemas SCSI

A la hora de decidir qué discos comprar surgen un montón de dudas por ello hablaremos un poco de las características.

Nombre NumBits NumDisp MB/s Conector Max Longitud Cable
SCSI-187550 pines BajaDens 6 mts
SCSI-2
(alias) Fast scsi, o Narrow scsi
871050 pines AltaDens 3 mts
SCSI-3
(alias) Ultra, o Fast20
872050 pines AltaDens 3 mts
Ultra Wide
(alias) Fast scsi-3
16154068 pines AltaDens 1,5 mts
Ultra216158068 pines AltaDens 12 mts

Un RAID se puede por tanto construir con varias particiones pero el resultado no es una partición lógica sino un disco lógico en el que sin embargo no podemos hacer particiones. El nombre de estos dispositivos es el de metadisco.

Al igual que en los discos IDE tenemos /dev/hd... para discos SCSI tenemos /dev/sd..., para los metadiscos una vez compilado el kernel con las opciones necesarias que más tarde comentaremos aparecerán cuatro dispositivos $ ls -l /dev/md*

brw-rw----   1 root     disk       9,   0 may 28  1997 md0
brw-rw----   1 root     disk       9,   1 may 28  1997 md1
brw-rw----   1 root     disk       9,   2 may 28  1997 md2
brw-rw----   1 root     disk       9,   3 may 28  1997 md3

Lo primero que hay que intentar beneficiar es la velocidad del swap y para ello hay que utilizar un metadisco pequeño en el RAID, o repartir el swap de la manera tradicional entre todos los discos físicos. Si se ponen varias particiones de swap, cada una sobre un disco distinto, entonces el propio sistema de swap de Linux hace el reparto de la carga entre todas, por lo que es innecesario el RAID en este caso.

En qué consisten los distintos RAID

RAID0 (Stripping mode)
En este modo, los discos se organizan alternativamente, de tal forma que los bloques se toman por igual de todos los discos, alternativamente, para conseguir mayor eficiencia. Al ser la probabilidad de encontrar los bloques de un fichero igual para todos los discos, éstos se ponen a trabajar todos a la vez, consiguiéndose que la eficiencia sea casi N veces la de un solo disco.
RAID1
En este modo, se pretende conseguir seguridad en los datos, estando éstos duplicados en todos los discos (cada bloque del disco `virtual' tiene un duplicado en cada uno de los discos físicos). Se consigue N veces la eficiencia en lectura, pero se degrada la eficiencia en escritura (las lecturas pueden organizarse para que al leer N bloques, cada uno venga de un disco diferente, pero al escribir, hay que hacerlo en los N discos) No se consigue ninguna ventaja en cuanto a capacidad de almacenamiento.
RAID4
(los modos RAID2 y RAID3 están obsoletos) En este modo, se intenta conseguir la ventaja de los modos RAID0 y RAID1. Los datos están organizados de forma que los bloques se organizan en modo stripping (RAID0) para los discos 1 a N-1 y el bloque correspondiente del disco N almacena la paridad de los bits individuales de los bloques correspondientes de los discos 1 a N-1. Si se rompe un disco, se puede generar la información a partir del disco de paridad. La eficiencia en lectura es N-1 y la eficiencia en escritura es 1/2 (ya que al escribir un dato, hay que escribir en el disco de paridad). Para restaurar un disco roto, tan solo hay que leer la información y volver a escribirla (la lectura obtiene la información a partir de la paridad, pero al escribirla, se emplea el disco nuevo para escribir los datos).
RAID5
Este modo es similar al modo RAID4, pero la información del disco de paridad está repartida por todos los discos (no existe realmente un `disco de paridad') Esto permite no hacer trabajar tanto al disco de paridad, que antes debía ser accedido en cada escritura (ahora el disco donde se guarda la paridad de la hilera es diferente para cada hilera)
... nos vamos a centrar en el RAID0 que desde el punto de vista de eficiencia es el más interesante aunque no tiene redundancia ...

Existen otros tipos de RAID mixtos basados en el RAID 1 y algún otro tipo de RAID. También existen algunas tentativas de hacer discos que utilicen compresión. Existe bastante polémica porque no está clara su utilidad. Seguramente seguirán otras propuestas en el futuro. Por el momento nos vamos a centrar en el RAID0 que desde el punto de vista de eficiencia es el más interesante, aunque no tiene redundancia para protección contra errores. Cuando el RAID está fomado por pocos discos (tres o cuatro) la redundancia tiene un costo excesivo (pierde un tercio o un cuarto de capacidad). La redundancia en un RAID nos protege contra errores de los discos, pero no de un borrado accidental de la información, por lo que tener un RAID redundante y no nos evita el tener que hacer copias de seguridad. Por contra, si se utiliza un número elevado de discos superior a cinco por ejemplo el desperdicio de espacio es menor. Algunas tarjetas SCSI de 16 bits admiten hasta 15 dispositivos. En estos casos un RAID5 sería muy conveniente.

Si no se puede trabajar con discos idénticos tenga en cuenta que los dispositivos RAID trabajan siempre con bloques de información idénticos. Es posible que los discos lentos trabajen por ello algo más aunque la mejora de rendimiento está asegurada. El aumento de rendimiento en un RAID correctamente configurado es muy espectacular. Casi se puede decir que se multiplica la velocidad por el número de discos montados en el RAID.

Cómo instalar un RAID0

A continuación describimos cómo instalar un RAID0. Si desea montar un RAID distinto de RAID0 en un kernel 2.0.xx, hay que conseguir un parche.

El RAID0 no tiene redundancia pero hay que pensar que para tener redundancia conviene tener un numero de discos elevado para no desperdiciar espacio en disco. Gastar todo un disco cuando tenemos tres es un despilfarro. Además esto no cubre todos los casos de perdida de información sino sólo los fallos por deterioro físico de un disco, lo cual no es muy frecuente. Por el contrario si tenemos 10 discos, gastar uno para el control de paridad no resulta demasiado desperdicio. En un RAID0 se perderá toda la información en caso de fallo de cualquiera de los discos que lo componen por lo cual una adecuada política de copias de seguridad resulta especialmente recomendable.

Lo primero será incluir los drivers en el kernel. Para Linux 2.0.xx RAID las opciones serán:

   Multiple devices driver support (CONFIG_BLK_DEV_MD) [Y/n/?] Y
      Linear (append) mode (CONFIG_MD_LINEAR) [Y/m/n/?] Y
      RAID-0 (striping) mode (CONFIG_MD_STRIPED) [Y/m/n/?] Y

Después de arrancar con el nuevo kernel aparecerá en /proc una entrada mdstat que contiene la información de los cuatro (cuatro es el valor por defecto) dispositivos nuevos creados como md0, md1, md2, md3. Como no hemos inicializado ninguno aparecerán todos como inactivos y aun no los podemos usar.

Para gestionarlos existen unas utilidades. 'mdutils'
	-mdadd
	-mdrun
	-mdstop
	-mdop
    

Puede obtenerlas en:sweet-smoke.ufr-info-p7.ibp.fr /pub/Linux, pero suelen estar incluidas en todas las distribuciones.

Para versiones del núcleo superiores a la 2.1.62 existe otro paquete distinto llamado 'RAIDtools' que permiten usar RAID0, RAID4 o RAID5.

En el ejemplo que sigue ilustramos como definir un metadisco RAID0 que usará dos discos duros. Concretamente /dev/sdb1 y /dev/sdc1.

meta-device RAID Mode Disk Partition 1 Disk Partition 1
/dev/md0linear/dev/sdb1/dev/sdc1

Se puede incluir mayor número de particiones.

Una vez formateado el metadisco no se debe alterar este registro ya que podría perderse toda la información.

mdadd -a
mdrun -a
    

Ahora debería aparecer inicializado el md0. Para formatearlo:

mke2fs /dev/md0
    

Y montarlo.

mkdir /mount/md0
mount /dev/md0 /mount/md0
    

Si todo ha funcionado correctamente, podemos incluir estas ordenes en los scripts de arranque para que la próxima vez que arranquemos el ordenador se monte automáticamente el RAID0. Para ello, añadiremos una entrada en /etc/fstab para montar el metadisco durante el arranque pero también habrá que incluir 'mdadd -a' y 'mdrun -a' en un fichero que se ejecute antes de que se intente realizar el montado. Si nuestra distribución es Debian, un buen lugar incluir estas ordenes es /etc/init.d/checkroot.sh justo antes de remontar en modo lectura/escritura el sistema de ficheros raíz, esto es, justo antes de la línea: "mount -n -o remount,rw /"

Ejemplo:

Se describe a continuación la configuración que yo estoy usando. Tengo un disco IDE de 6.3 Gb, uno SCSI de 4.2Gb, y otro de 2Gb.

HD 6.3Gb IDE
//bigTemp + /incoming swap2Gb(RAID) hda4

HD 4.2Gb SCSI
C: D: swap2Gb(RAID) sda4

HD 2Gb SCSI
swap 2Gb(RAID) sdb2
#######</etc/fstab>################################################
# <file system> <mount point>  <type>  <options>     <dump>  <pass>
/dev/hda1       /               ext2    defaults       0       1
/dev/hda2       /mnt/hda2       ext2    defaults       0       2
/dev/md0        /mnt/md0        ext2    defaults       0       2
proc            /proc           proc    defaults       0       2
/dev/hda3        none           swap    sw,pri=10 
/dev/sdb1        none           swap    sw,pri=10 
/dev/sda3        none           swap    sw,pri=10 
#########</etc/mdtab>####################################### 
# <meta-device> <RAID-mode> <DskPart1> <DskPart1> <DskPart1> 
/dev/md0         RAID0,8k    /dev/hda4  /dev/sda4 /dev/sdb2

En el disco de 6Gb está la partición del sistema de ficheros raíz en hda1 y luego una gran partición que se usa para descarga de Internet almacenamiento de imágenes de CD's etc. No representa tampoco mucha carga porque se usa poco. El disco de 4Gb tampoco tiene particiones que puedan estorbar gran cosa al RAID porque son particiones de msdos que apenas se usan desde Linux. El disco de 2G está casi totalmente dedicado al RAID. Se reserva un pequeño espacio en cada uno de los discos que se utilizará como swap.

Hay que procurar que todos los discos (particiones) que forman el RAID tengan más o menos el mismo tamaño pues diferencias de tamaño perjudican el rendimiento del RAID. Diferencias pequeñas no son significativas. Se aprovecha todo el espacio así que toda la información que puede ser entrelazada entre distintos discos quedará entrelazada y la restante quedará sin entrelazar.

Montar en un mismo RAID varios discos IDE es poco eficiente, pero un disco IDE junto con varios SCSI funciona bastante bien. Los discos IDE no permiten accesos concurrentes, pero sí los discos SCSI.

Para más información:


Texto original en Castellano.
Revisado por Javier Molero.


Páginas web mantenidas por Miguel Ángel Sepúlveda & Ismael Ripoll
© Antonio Castro 1998
LinuxFocus 1998