Renuncia de responsabilidad:
La versión original de este artículo fue publicada por IBM
developerWorks y es propiedad de Westtech Information Services. Este
documento es una versión actualizada del artículo original y contiene
mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.
|
RAID por software en el nuevo núcleo Linux 2.4, Parte 1
1.
Instalación e introducción general
Las maravillas del RAID
El núcleo 2.4 tiene un buen número de características elegantes añadidas. Una
de ellas es que incluye una moderna implementación de RAID por software. El
RAID por software permite incrementar increíblemente el rendimiento y la
fiabilidad del disco sin necesidad de comprar controladoras o sistemas
RAID muy caros. Debido a que está implementado por software, el RAID por
software en Linux es flexible, rápido... ¡y divertido!
El concepto que se halla tras el RAID por software es simple -- permite
combinar dos o más dispositivos de bloques (normalmente particiones de disco)
en un único dispositivo RAID. Digamos que se dispone de tres particiones
vacías: hda3, hdb3, y hdc3. Usando RAID
por software, se pueden combinar estas particiones y redireccionarlas como un
único dispositivo RAID, /dev/md0. md0 puede ser
formateado para que contenga un sistema de ficheros y usado como cualquier otra
partición- Hay también diferentes formas de configurar un volumen RAID --
algunas maximizan el rendimiento, otras maximizan la disponibilidad, mientras
que otras proporcionan una mezcla de ambas.
Hay dos formas de RAID: lineal y modo RAID-0. Ninguna de ellas es una técnica
de RAID en absoluto, dado que RAID significa "estructura redundante de discos
baratos" ("redundant array of inexpensive disks" en inglés), y tanto RAID-0
como el modo lineal no proporcionan ningún tipo de redundancia de datos. De
cualquier forma, ambos modos -- especialmente RAID-0 -- son muy útiles. Después
de proporcionar un rápido vistazo a estas dos formas de "AID", guiaré en el
proceso de configuración del sistema para obtener RAID.
2.
Introducción al modo lineal
El modo lineal es uno de los métodos más simples para combinar dos o más
dispositivos de bloques en un volumen RAID -- El método de la simple
concatenación. Si se tienen tres particiones, hda3, hdb3
, y hdc3, y cada una de ellas es de aproximadamente 2GB
el resultado será un volumen lineal de 6GB. El primer tercio del volumen lineal
residirá en hda3, el último tercio en hdc3, y el que
se encuentra entre ambos en hdb3.
Para configurar un volumen lineal, se necesitan al menos dos particiones que se
quieran unir juntas. Pueden ser de diferentes tamaños, e incluso residir en el
mismo disco sin afectar negativamente al rendimiento.
Aplicaciones lineales
El modo lineal es la mejor forma de combinar dos o más particiones en el mismo
disco en un único volumen. Mientras que hacer ésto con cualquier otra técnica
de RAID daría como resultado una tremenda pérdida de rendimiento, el modo
lineal no se ve afectado por este problema dado que no escribe en las
particiones que lo constituyen en paralelo (como el resto de modos RAID hace).
Pero por esta misma razón, el modo lineal pierde rendimiento de forma escalar
comparado con RAID-0, RAID-4, RAID-5 y, hasta cierto punto, con RAID-1.
En general, el modo lineal no proporciona ningún tipo de mejora en el
rendimiento comparado con particiones normales no RAID. De hecho, si se
reparte el volumen lineal entre varios discos, es muy probable que dicho
volumen llegue a no estar disponible debido a un fallo aleatorio en el disco
duro. La probabilidad de fallo en un volumen lineal será igual a la suma de las
probabilidades de fallo de los discos físicos que la constituyen y de sus
controladoras. Si uno de los discos físicos se pierde, el volumen lineal es
generalmente irrecuperable. El modo lineal no ofrece ninguna redundancia
adicional, es como si se estuviera usando un único disco.
Pero el modo lineal es un excelente método para evitar reparticionar un único
disco. Por ejemplo, digamos que nuestra segunda unidad IDE tiene dos
particiones sin usar hdb1 y hdb3. Digamos también
que somos incapaces de reparticionar el disco duro debido a que hdb2
contiene datos críticos. Pueden entonces combinarse hdb1
y hdb3 en una sola, cohesionando ambas en un volumen lineal.
El modo lineal es también un buen método para combinar particiones de
diferentes tamaños en diferentes discos cuando únicamente se necesita una única
gran partición (y no se necesita incrementar el rendimiento). Pero para
cualquier otro trabajo, hay mejores tecnologías RAID que se pueden utilizar.
3.
Introducción al modo RAID-0
RAID-0 es otro de esos modos "RAID" que no tienen ninguna "R" (redundancia) en
absoluto. De cualquier forma, RAID-0 es inmensamente útil. Esto se debe
primordialmente a que ofrece el mayor potencial de rendimiento comparado con
cualquier otra forma de RAID.
Para configurar un volumen RAID-0 se necesitan dos o más particiones del mismo
tamaño (o casi el mismo). El código RAID-0 distribuirá las escrituras (y por
tanto las lecturas) entre todas las particiones que lo constituyen. Al hacer
paralelas las lecturas y escrituras entre todos los dispositivos que lo
constituyen, RAID-0 tiene la ventaja de multiplicar el rendimiento de entrada
y salida. Ignorando las complejidades de las controladoras y del ancho de banda
del bus, puede esperarse de un volumen RAID-0, compuesto por dos particiones en
dos discos duros idénticos separados, el doble de rendimiento que en una
partición tradicional. Si se forma un volumen RAID-0 con tres discos, el
rendimiento casi se triplicará. Este es el motivo por el que una estructura de
discos IDE puede superar ampliamente a la unidad SCSI o FC-AL más rápida del
mercado. Para acelerar el rendimiento de verdad, se pueden emplear un conjunto
de unidades SCSI o FC-AL en una estructura RAID-0. Ésta es la belleza
de RAID-0.
Para crear un volumen RAID-0, se necesitan dos o más particiones del mismo
tamaño localizadas en discos separados. La capacidad del volumen será la misma
que la capacidad combinada de las particiones que lo constituyen. Como con el
modo lineal, se pueden combinar dispositivos de bloques provenientes de fuentes
diferentes (como unidades IDE y SCSI) en un solo volumen sin problemas.
Si se está creando un volumen RAID-0 usando discos IDE, se debe intentar usar
discos y controladoras con capacidad UltraDMA para obtener la máxima
fiabilidad. Y se debe usar únicamente una unidad por canal IDE para evitar
disminuir el rendimiento -- una unidad como esclava (slave), especialmente si
también forma parte de la estructura RAID-0, ralentizará tanto las cosas que
eliminará cualquier posible beneficio en rendimiento del RAID-0. Puede resultar
necesario por tanto añadir una controladora IDE adicional para obtener todos
los canales IDE que se necesiten.
Si estamos creando un volumen RAID-0 a partir de dispositivos SCSI, debemos
tener en cuenta que el rendimiento combinada de todos los discos puede exceder
potencialmente el rendimiento máximo del bus SCSI (y potencialmente del PCI).
En dicho caso, el bus SCSI sería el factor que delimitase el rendimiento. Si,
por ejemplo, se tienen cuatro unidades que tienen un rendimiento máximo de
15Mb/s en una controladora con 40Mb/s en un bus Ultra Wide, habrá momentos en
los que las unidades saturen el bus, y el rendimiento alcanzará un máximo
cercano a los 40Mb/s. Esto puede estar bien para lo que lo estemos aplicando
(después de todo 40Mb/s no está nada mal), pero obtendríamos los mismos picos
de rendimiento de un volumen RAID-0 que usase únicamente tres unidades.
Aplicaciones RAID-0
Desde el punto de vista de la fiabilidad, RAID-0 tiene las mismas
características que el modo lineal -- cuantas más unidades se añaden a la
estructura mayor es la probabilidad de fallos en el volumen. Y, como en el modo
lineal, la pérdida de una sola unidad hará el volumen irrecuperable. Para
obtener la probabilidad de fallo de un volumen RAID-0, sencillamente se añaden
juntas todas las probabilidades de fallo de todas las unidades que lo
constituyen.
RAID-0 es ideal para aplicaciones que necesiten del máximo rendimiento de
entrada y salida, dado que es el modo RAID con mayor rendimiento que existe.
Pero hay que recordar que RAID-0 únicamente se debe usar si nos podemos
permitir un riesgo algo mayor de fallos en el volumen.
Si se está formando una granja de computadoras o un cluster web. RAID-0 es una
excelente solución para incrementar el rendimiento I/O de los discos. Dado que
en este caso ya se dispondrá de algún nivel de redundancia (muchas máquinas
de recambio), nuestros recursos seguirían estando disponibles en el raro caso
de que una máquina con un disco duro que ha fallado necesite ser inhabilitada
para reemplazar la unidad y recargarla.
4.
Configurando el RAID por software en Linux 2.4
Hay dos pasos a dar para obtener soporte RAID por software en nuestro sistema
2.4. El primero es que el soporte RAID debe estar habilitado en el núcleo. Lo
cual conlleva recompilar e instalar un nuevo núcleo a menos que ya se disponga
de un núcleo con soporte RAID integrado.
Entonces necesitamos compilar e instalar el paquete raidtools. Raidtools son
las herramientas a nivel de usuario que nos permiten inicializar, empezar,
parar y controlar nuestros volúmenes RAID. Una vez se hayan dado estos dos
pasos, seremos capaces de crear nuestros propios volúmenes RAID, crear sistemas
de ficheros en los volúmenes, montarlos, etc.
Problemas con el núcleo
Estoy empleando el núcleo 2.4.0-test10 en estos artículos. Recomiendo que se
use la versión más moderna del núcleo que se pueda obtener, que debería ser
como mínimo la 2.4.0-test10 o posterior (pero no la 2.4.0-test11, que tenía
serios problemas de corrupción del sistema de ficheros). Se puede encontrar un
núcleo reciente en kernel.org, y una
guía mostrando cómo recompilar e instalar un nuevo núcleo desde código fuente
en gentoo.org (ver la sección Recursos más adelante
en este artículo).
Configuración del núcleo
Recomiendo que se configure el núcleo para que el soporte de RAID por software
esté integrado en el mismo, en lugar de añadirlo como módulos. Cuando se teclea
make menuconfig o make xconfig, se encontrarán las opciones para
RAID en la sección "Multi-device support (RAID and LVM)". También recomiendo
habilitar todo lo relacionado con RAID aquí, incluyendo "Boot support" (soporte
para inicializarlo al arranque) y "Auto Detect support" (soporte para la
auto-detección). Esto permitirá al núcleo iniciar automáticamente nuestro
volumen RAID en el momento del arranque, así como crear un sistema de ficheros
raíz RAID si se desea. He aquí una muestra de make menuconfig. Las dos
últimas opciones no son necesarias (soporte LVM), aunque yo las he integrado en
el núcleo de todos modos:
Ilustración 4.1: Configuración del núcleo para RAID |
 |
Una vez que el núcleo se ha configurado adecuadamente, se instala y se
reinicia. Ahora obtengamos la última versión de raidtools.
Instalación de raidtools
Antes de que podamos instalar raidtools necesitamos hacer una pequeña búsqueda
para encontrar la última versión. Se puede encontrar el programa raditools
generalmente en kernel.org. Ahora
bajemos el archivo "raidtools-0.90" más reciente (¡no "raid0145"!). En este
momento es "raidtools-19990824-0.90.tar.gz".
Si nos gusta vivir al límite (y si estamos usando un núcleo 2.4.0-test,
entonces nos gusta), se puede desear echar un vistazo a RedHat (ver Recursos) y obtener la última versión de raidtools que
podamos encontrar. En este momento es
"raidtools-dangerous-0.90-20000116.tar.gz".
Listado de Código 4.1: Instalar raidtools |
# cd raidtools-0.90
# ./configure
# make
# make install
|
Listado de Código 4.2: Examinar el RAID |
# cat /proc/mdstat
|
Configuración de las particiones
Bien, este es el momento para preparar algunas particiones en el disco, de las
cuales necesitaremos al menos dos. Si se está usando RAID-0, hay que asegurarse
de que están en discos separados y de que son del mismo tamaño aproximadamente.
Todo ello sin considerar necesario decir que los datos de ambas particiones se
destruirán.
Otra nota importante -- cuando creemos las particiones, debemos darle el tipo
FD. Ésto permitirá al núcleo Linux reconocerlas como particiones RAID
Linux, con lo que serán auto-detectadas e iniciadas en cada arranque. Si no se
marcan las particiones RAID de este modo, entonces se necesitará ejecutar
raidstart --all cada vez que arranquemos antes de que se puedan montar
los volúmenes RAID. Lo cual puede ser muy molesto, por lo que lo mejor es
marcarlas con el tipo de partición adecuado.
Configuración de /etc/raidtab
La sintaxis de raidtab es bastante fácil de imaginar: cada bloque de directivas
comienza con una entrada raiddev especificando el volumen que será
creado. Cuando se instalaron las raidtools, el Makefile creó desde
/dev/md0 hasta md15 por nosotros, por lo que están
disponibles para usarlas.
Después, nr-raid-disks debería especificar el número de discos en
nuestra estructura. Entonces ajustamos el persistent-superblock a 1
, indicando a las herramientas raid que cuando se crea este volumen, se
debe escribir un superbloque especial a cada dispositivo que lo constituya,
describiendo la configuración de la estructura RAID. El núcleo Linux usa esta
información para auto-detectar e iniciar las estructuras RAID al arrancar, por
lo que debemos asegurarnos de que cada volumen RAID que creamos está
configurado para hacerlo.
chunk-size especifica el tamaño de los fragmentos usados para RAID-0 en
kilobytes. En este ejemplo, nuestro volumen RAID-0 escribirá en las particiones
que lo constituyen en bloques de 32K; esto es, los primeros 32K del volumen
RAID se localizan en hde1, los segundos 32K se localizan en
hdg1, etc. También especificamos un tamaño de fragmento para nuestro
volumen lineal /dev/md1 -- pero en este caso se trata de una
entrada sin uso que no significa nada.
Finalmente, especificamos los dispositivos que forman parte del volumen.
Primero especificamos el dispositivo actual de bloques con una línea
device, e inmediatamente la seguimos con una entrada raid-disk
que especifica su posición en la estructura, comenzando desde cero.
Una vez hemos creado nuestro archivo /etc/raidtab, estamos listos
para iniciar nuestra estructura de una vez.
mkraid y la creación del sistema de ficheros
OK. Hemos creado nuestras particiones, el archivo raidtab está configurado --
ahora es el momento de inicializar nuestra primera partición usando el comando
mkraid:
Listado de Código 4.3: Inicializar la partición |
# mkraid /dev/md0
|
Después de completar este comando, se inicializará /dev/md0 y
empezará la estructura md0. Si se teclea cat /proc/mdstat, debería verse
algo como esto:
Listado de Código 4.4: cat /proc/mdstat |
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid0 hdg1[1] hde1[0]
90069632 blocks 32k chunks
unused devices: <none>
|
¡Bien!, nuestro dispositivo RAID está configurado y funcionando. Todo lo que
necesitamos hacer ahora es crear un sistema de ficheros en el mismo. Para hacer
esto usaremos el comando mke2fs o el comando mkreiserfs (¡RAID-0
y ReiserFS es una gran combinación!):
Listado de Código 4.5: Un dispositivo RAID ext2 |
# mke2fs /dev/md0
|
or
Listado de Código 4.6: Un dispositivo RAID ReiserFS |
# mkreiserfs /dev/md0
|
Ahora nuestro nuevo sistema de ficheros puede ser montado:
Listado de Código 4.7: Montar el dispositivo RAID |
# mkdir /mnt/raid
# mount /dev/md0 /mnt/raid
|
Se puede añadir una entrada /dev/md0 en fstab. Sería similar a
ésta:
Listado de Código 4.8: Editar fstab |
/dev/md0 /mnt/raid reiserfs defaults 0 0
|
Si ajustamos el tipo de partición adecuadamente como FD, nuestro volumen
RAID se auto-iniciará en el momento de arrancar. Ahora todo lo que queda por
hacer es usar y disfrutar nuestro nuevo volumen RAID. Sin olvidar consultar mi
segundo artículo acerca del RAID por software, en el que echaremos un vistazo a
algunos aspectos más avanzados de funcionalidad RAID y a RAID-1.
Recursos
|