Software-RAID HOWTO Jakob OEstergaard jakob@unthought.net y Emilio Bueso bueso@vives.org v.0.97, 23 de Diciembre de 2003 Este HOWTO ilustra el uso del RAID por software en sistemas Linux. Se basa en una version especifica de la capa de RAID por software (conc- retamente, la 0.90), diseada por Ingo Molnar y otros. Hablamos de la capa standard en Linux-2.4, tambien utilizada en los nucleos 2.2 de algunos distribuidores. Ademas, esta version 0.90 que vamos a tratar aqui tambien puede dar soporte (mediante el uso de varios parches) a los viejos nucleos 2.0 y 2.2 de Linux, puesto que, a menudo, resulta "bastante mas estable" que todas las implementaciones RAID anteriores. ______________________________________________________________________ Table of Contents 1. Introduccion 1.1 Advertencia 1.2 ?Que es RAID? 1.3 Terminos 1.4 Niveles RAID 1.5 Requerimientos 2. ?Por que RAID? 2.1 Soporte de dispositivos y sistemas de archivos 2.2 Rendimiento 2.3 Swapping sobre RAID 2.4 ?Por que mdadm? 3. Dispositivos 3.1 Discos libres 3.2 Discos erroneos 4. Aspectos relativos al hardware 4.1 Configuracion IDE 4.2 Reemplazo en caliente (Hot swap) 4.2.1 Reemplazo en caliente de dispositivos IDE 4.2.2 Reemplazo en caliente de dispositivos SCSI 4.2.3 Reemplazo en caliente con SCA 5. Configuracion RAID 5.1 Configuracion general 5.2 Descargando e instalando mdadm 5.3 Modo lineal 5.4 RAID-0 5.5 RAID-1 5.6 RAID-4 5.7 RAID-5 5.8 El superbloque persistente 5.9 Tamaos de porcion 5.9.1 RAID-0 5.9.2 RAID-1 5.9.3 RAID-4 5.9.4 RAID-5 5.10 Opciones de mke2fs 6. Detectando, consultando y testando 6.1 Detectando los fallos de disco 6.2 Consultando el estado de los arrays 6.3 Simulando un fallo en disco 6.3.1 Forzando el fallo por hardware 6.3.2 Forzando el fallo por software 6.4 Simulacion de una corrupcion de datos 6.5 Monitorizando arrays RAID 7. Reconstruccion 7.1 Sobreviviendo a un error de varios discos 8. Rendimiento 8.1 RAID-0 8.2 RAID-0 con TCQ 8.3 RAID-5 8.4 RAID-10 8.5 Nuevas herramientas de benchmarking 9. Herramientas de apoyo 9.1 Conversion RAID y manipulacion de tamaos 9.2 Copias de seguridad 10. Creditos ______________________________________________________________________ 1. Introduccion Este HOWTO ilustra el uso del "nuevo estilo" de RAID que podemos encontrar en los nucleos 2.4. Y no cubre el "viejo estilo" de soporte RAID que venia con los nucleos 2.0 y 2.2 standard. El web oficial de este documento esta en http://unthought.net/Software-RAID.HOWTO/, donde podreis encontrar las versiones mas actualizadas. Este HOWTO fue originalmente escrito por Jakob OEstergaard, a raiz de un considerable numero de e-mails que cruzados entre el y gente como Ingo Molnar (uno de los desarrolladores del soporte RAID de Linux) o algunos miembros de la linux-raid mailing list. Finalmente, Emilio Bueso coescribe la version 1.0 y la traduce al castellano. Los que querais usar este soporte moderno de RAID por software con los nucleos 2.0 o 2.2, solo teneis que conseguir un parche adecuado para vuestro nucleo en http://people.redhat.com/mingo/, puesto que los nucleos standard 2.2 no poseen un soporte directo para esta nueva generacion de RAID que vamos a tratar en el presente documento. Ademas, el antiguo soporte RAID de los nucleos 2.0 y 2.2 standard es defectuoso y carece de varias funcionalidades relevantes que podeis encontrar en los soportes modernos de RAID. Una cosa mas para los que ya sabeis algo de sistemas RAID: encontrareis que aqui vamos a abordar todo cuanto cabe esperar de un HOWTO que no presupone en ningun momento que el lector ya esta familiarizado con la tecnologia que nos atae. Asi que si alguna seccion os parece trivial, simplemente pasad a la siguiente. El objetivo final de este documento es cubrir absolutamente todo lo que un administrador de sistemas necesita saber si quiere implementar una solucion RAID por software sobre Linux, empleando lo ultimo en tecnologia a tal efecto, asi que los que ya conoceis RAID a fondo, tambien encontrareis material interesante, como el soporte a herramientas como mdadm o las nuevas raidtools. 1.1. Advertencia La consabida advertencia Toda la informacion aqui presente no implica ni supone garantia alguna, asi que si alguno de vosotros pierde todos sus archivos, pierde su empleo, pierde a su novia, es atropellado por un camion de ocho ejes... no es culpa nuestra. No es culpa de los autores de este documento ni de los desarrolladores del software RAID que esteis usando. Os damos por informados de que estais usando este HOWTO por vuestra cuenta y riesgo, sin garantia alguna que os respalde. Tampoco podeis suponer que en este documento no hay error alguno (aunque nosotros los autores, hemos ido con cuidado que no equivocarnos demasiado) o que aqui vais a encontrar cobertura documental a todas vuestras demandas (aunque hayamos ido con cuidado de no dejarnos nada importante en el tintero). Es extremadamente importante que hagais un backup entero de vuestros ordenadores antes de poneros manos a la obra con esto del RAID. Y si creeis que esto lo pone en todos los HOWTO, sabed que para montar un sistema RAID por software vais a trabajar con sistemas de archivos y particiones enteras... y en ese contexto, un fallo tonto y, zas! ...acabais de hacer desaparecer el sistema al completo. 1.2. ?Que es RAID? En 1987, la Universidad de Berkeley (California), publico un articulo describiendo varios tipos de arrays de discos, acuando en el proceso el termino RAID (acronimo de Redundant Array of Inexpensive Disks). Basicamente, la idea era combinar multiples discos [duros] independientes y pequeos en un array (o matriz) de disco capaz de alcanzar un rendimiento superior al de un solo disco grande y caro... en otros terminos, se pretendia hacer trabajar varios discos modestos como un disco profesional de alto rendimiento. Adicionalmente, el array de discos aparece ante el sistema como un disco logico unico. El tiempo transcurrido entre errores (MTBF) para el array de discos es, en el modelo teorico de la Universidad de Berkeley, igual al MTBF de un disco individual dividido por el numero de discos presentes en el array. Esto se consigue alcanzando una cierta tolerancia a errores que pasa por guardar la informacion redundantemente de varios modos. En aquel documento original, tambien nacieron cinco tipos de arquitecturas RAID: desde RAID-1 hasta RAID-5 fueron definidas entonces, cada una de ellas proporcionando diferentes niveles de tolerancia a errores de disco y rendimientos. Despues de aquello, tambien se ha ido poniendo de moda el termino RAID-0 para designar los arrays de discos no redundantes. Hoy en dia, algunos de los niveles RAID originalmente definidos (concretamente, los niveles 2 y 3) son solo utilizados en sistemas muy especializados (hasta el extremo de que el RAID por software de Linux ni siquiera los soporta!). Tambien ha ido apareciendo un nuevo nivel denominado "lineal", y se ha ido haciendo frecuente esto de ver el nivel 0 combinado con el nivel 1... pero nos estamos desviando. 1.3. Terminos La palabra "RAID" aqui significa "RAID por software de Linux". Este documento no trata ningun aspecto de RAID por hardware. Cuando se describen configuraciones, es util referirse al numero de discos y sus tamaos. En todos los casos se usa la letra N para denotar el numero de discos activos en el array (sin contar los discos de reserva). La letra S es el tamao del disco mas pequeo en el array, a menos que se diga otra cosa. La letra P representa el rendimiento de un disco en el array, en MB/s. Cuando se use, supondremos que los discos son igual de rapidos, que no siempre puede ser cierto. Note que se supone que las palabras "dispositivo" y "disco" significan lo mismo. Normalmente, los dispositivos usados para construir un dispositivo RAID son particiones de discos, no necesariamente discos enteros. Pero, normalmente, combinar varias particiones de un disco no tiene sentido, por lo que las palabras dispositivo y disco simplemente significan "particiones de discos diferentes". 1.4. Niveles RAID Ahora viene una breve descripcion de los niveles RAID que soporta la capa de RAID por software de Linux. Buena parte de esto que vamos a ver son solo los fundamentos teoricos de los sistemas RAID. Y ahora es cuando os saltais esta seccion los que ya conoceis RAID. Ya volvereis luego, cuando tengais problemas, malditos. :) El soporte RAID de Linux incorpora los siguientes niveles: o Modo lineal o Dos o mas discos se combinan en un unico dispositivo fisico. Los discos se suceden marcialmente unos detras de otros de tal manera que las escrituras en el dispositivo RAID primero llenaran el disco 0, a continuacion el disco 1 y asi sucesivamente. Los discos no tienen por que ser del mismo tamao. Ya se sabe, el tamao no importa. :) o No existe redundancia alguna en este nivel. Si un disco falla perdereis todos vuestros datos con toda probabilidad. Tambien puede ser que os toque la loteria y podais recuperar algunos datos, ya que el sistema de ficheros simplemente habra perdido un gran puado de datos consecutivos. o El rendimiento de las lecturas y las escrituras no mejora en las lecturas/escrituras individuales, pero si varios usuarios usan un mismo dispositivo, tal vez tengais la suerte de que un usuario use efectivamente el primer disco y otro usuario acceda a ficheros que por casualidad residan en el segundo disco. Si esto ocurre, es de esperar una mejora significativa en los rendimientos. o RAID-0 o Tambien llamado modo "stripe" o "rayado". Es como el anterior, salvo que las lecturas y escrituras se realizan en paralelo en los dispositivos. Los dispositivos deben tener aproximadamente el mismo tamao. Puesto que todos los accesos se realizan en paralelo, los discos se llenan por igual. Si un dispositivo es mucho mayor que los otros dispositivos, el espacio extra todavia se utilizara en el dispositivo RAID durante las escrituras en el extremo superior del dispositivo RAID, aunque solo se accedera a este disco mas grande. Naturalmente, esto perjudica el rendimiento. o Como en el modo lineal, tampoco hay redundancia en este nivel. A diferencia del modo lineal, no vais a recuperar ningun dato si un disco os falla aqui. Si elimina un disco de un grupo RAID-0, el dispositivo RAID no perdera simplemente un bloque consecutivo de datos, sino que se llenara con pequeos agujeros por todo el dispositivo. Imaginad vuestro disco duro raiz convertido en un colador (e2fsck no es capaz de recuperar gran cosa de ahi, os lo aseguro) y ahora es cuando correis todos a hacer esos backups. Por fin. o El rendimiento de las lecturas y las escrituras mejora siempre, ya que las lecturas y las escrituras se realizan en paralelo sobre los dispositivos. Normalmente, esta es la razon principal para usar RAID-0. Si los buses a los discos son suficientemente rapidos, puede obtener casi N*P MB/seg. o RAID-1 o Este es el primer modo que incorpora redundancia. RAID-1 se puede usar en dos o mas discos con cero o mas discos de reserva. Este modo mantiene en un disco un duplicado exacto de la informacion en el otro(s) disco(s). Por supuesto, los discos deben ser del mismo tamao. Si un disco es mayor que otro, su dispositivo RAID sera del tamao del disco mas pequeo. o Si se eliminan (o fallan) hasta N-1 discos, todos los datos todavia permaneceran intactos. Si existen discos de reserva disponibles y el sistema (es decir, las controladoras SCSI o los chipsets IDE, etc.) sobreviven al desastre, comenzara inmediatamente la reconstruccion de un duplicado en uno de los discos de reserva, despues de la deteccion del fallo del disco. o Normalmente, el rendimiento de las lecturas aumenta hasta casi N*P, mientras que el rendimiento de las escrituras es el mismo que el de un unico dispositivo o, tal vez, incluso menos. Las lecturas se pueden hacer en paralelo pero, cuando se escribe, la CPU debe transferir N veces la cantidad de datos que normalmente transferiria (recordad, se deben enviar N copias identicas de todos los datos a los discos). Esto ultimo es un problema cuando el array RAID-1 es grande de verdad, puesto que el bus PCI puede saturarse al transportar todas esas copias redundantes de datos (apunte interesante: el colapso del bus PCI es uno de esos escasos problemas que se pueden resolver mediante el uso de soluciones RAID por hardware). o RAID-4 o Este nivel de RAID es raro de ver. Se puede usar sobre 3 o mas discos. En lugar de duplicar completamente la informacion, se guarda informacion de paridad en un unico disco y escribe datos a los otros discos de forma parecida a un RAID-0. Ya que uno de los discos se reserva para informacion de paridad, el tamao del array sera (N-1)*S, donde S es el tamao del disco mas pequeo del array. Como en un RAID-1, los discos deben ser del mismo tamao o de lo contrario tendra que aceptar que el valor de S en la formula (N-1)*S anterior sera el tamao del disco mas pequeo del array. o Si un disco falla, se puede usar la informacion de paridad para reconstruir todos los datos. Si dos discos fallan, se perderan todos los datos. o La razon por la que este nivel no se usa con mucha frecuencia es que la informacion de paridad se guarda en un unico disco. Esta informacion se debe actualizar cada vez que se escribe en uno de los otros discos. Por eso, el disco de paridad se convertira en un cuello de botella si no es mucho mas rapido que los otros discos. Sin embargo, si por pura casualidad tuviera muchos discos lentos y un disco muy rapido, este nivel de RAID podria ser muy util. o RAID-5 o Este es quizas el modo RAID mas util cuando buscamos combinar un mayor numero de discos fisicos y todavia conservar alguna redundancia. RAID-5 se puede usar sobre 3 o mas discos, con cero o mas discos de reserva. El tamao del dispositivo RAID-5 resultante sera (N-1)*S, justo como en RAID-4. La gran diferencia entre RAID-5 y RAID-4 es que la informacion de paridad se distribuye uniformemente entre los discos participantes, evitando el problema del cuello de botella del RAID-4. o Si uno de los discos falla, los datos sobreviven, gracias a la informacion de paridad. Si existen discos de reserva disponibles, la reconstruccion comenzara inmediatamente despues del fallo del dispositivo. Si dos discos fallan simultaneamente, todos los datos se perderan. RAID-5 puede sobrevivir a un fallo de disco, pero no a dos o mas. o Lo normal seria que el rendimiento general de acceso a disco mejore sensiblemente en RAID-5, pero es dificil predecir en que medida. Las velocidad en los accesos de lectura suele mejorar en la misma proporcion que tenemos con los sistemas RAID-0, mientras que las lecturas pueden llegar a aproximarse a las cifras en RAID-1 o, por el contrario, mas lentas (se requiere una lectura previa a la escritura para asi poder calcular la informacion de paridad!). En definitiva, que la eficiencia en lecturas depende determinantemente de la cantidad de memoria RAM en la maquina y del uso que se haga del array... obviamente, un servidor donde cientos de usuarios escriban constantemente datos a disco lo va a pasar mas mal que bien con RAID-5. 1.5. Requerimientos Este HOWTO asume que estais usando Linux 2.4 o superior. De todos modos, como deciamos antes, es posible usar RAID por software en nucleos 2.2.x o 2.0.x con los parches RAID y la version 0.90 de las raidtools. Tanto los parches como las raidtools deberian de estar disponibles en http://people.redhat.com/mingo/. Los que useis una distribucion reciente basada en el nucleo 2.4 o superior probablemente descubrireis que ya teneis una version de las raidtools compatible con vuestro nucleo. 2. ?Por que RAID? Los pajaros vuelan, el cielo es azul, seis por seis son treinta y seis, y los discos de ordenador dan problemas. Unas veces los discos se llenan (quedandose sin espacio libre y, por tanto, perdiendo la capacidad de almacenar informacion), y otras sencillamente dejan de funcionar (a veces, esto ultimo supone la perdida de cientos de archivos importantes). Hablando en terminos de informatica de usuario convencional... de todos los componentes que hay en vuestros ordenadores, el que mas sufre siempre es el pobre disco duro. Hablamos de un dispositivo que gira a algo asi como diez mil vueltas por minuto durante horas y horas... se trata, sin lugar a dudas de lo primero que vais a tener que reemplazar en toda la vida util del equipo, puesto que os durara bastante menos que cualquier otra pieza. Tambien se os quedara pequeo rapidamente. Y ahi no terminan los males del disco duro convencional... resulta que tambien suele ser el componente mas lento de toda la computadora, responsable habitual de esos relojes de arena con los que se os premia tan a menudo. RAID pretende resolver toda esta problematica. Y, si se hacen las cosas bien, lo consigue. RAID puede acelerar vuestro acceso a disco, puede ahorraros la perdida de datos cuando los discos fallen y puede proporcionar amplitud de espacio de almacenamiento a vuestros ordenadores aun cuando solo dispongais de discos pequeos. Aun asi, es muy importante comprender que RAID no es una alternativa a las copias de seguridad. Puede que algunas configuraciones RAID inmunicen a vuestros ordenadores de los fallos de un solo disco, pero no sirven de nada contra un simple "rm -rf /". Tampoco os cubrira las espaldas ninguna configuracion RAID si la fuente de alimentacion de vuestro ordenador se os vuelve loca y les suministra a todos esos discos duros redundantes tension suficiente como para que ardan como una tea. Los cinco a la vez. Y no nos hagais hablar de lo que le pasa a una hermosa bateria de discos duros redundantes en caso de incendio, inundacion, terremoto, embestida por camion de ocho ejes, meteorito, guerra global termonuclear o usuario. Insistimos una vez mas, RAID casi nunca hace que una buena politica de copias de seguridad sea menos necesaria. 2.1. Soporte de dispositivos y sistemas de archivos El RAID de Linux puede trabajar en la mayoria de dispositivos de bloques. No importa si usais dispositivos IDE o SCSI. Algunas personas han probado a usarlo con el Network Block Device (NBD) con mas o menos exito. Y puesto que un dispositivo RAID por software de Linux es, en si mismo, un dispositivo por bloques, podeis crear RAIDs de otros dispositivos RAID. Esto es lo que hace posible soportar RAID-10 (RAID-0 de varios dispositivos RAID-1), simplemente combinando las funcionalidades de RAID-0 y RAID-1. Tambien son posibles algunas configuraciones realmente exoticas, como las matrices de RAID-5 sobre RAID-5. A ver, esto es importante de cara a la buena comprension de los fundamentos sobre los que nos estamos moviendo... hay que disociar por capas: la capa RAID no tiene absolutamente nada que ver con la capa del sistema de archivos. Podeis meter cualquier sistema de archivos en un dispositivo RAID de la misma manera que lo hariais si trabajarais con cualquier otro dispositivo. 2.2. Rendimiento A veces se aplica RAID a modo de solucion a los problemas de rendimiento. Aunque es probable que RAID sea la solucion que esteis buscando para acelerar el acceso a disco de vuestros sistemas, RAID tampoco es un bolido. Hay muchas formas de resolver los problemas de rendimiento de un ordenador, y RAID es solo una mas. Echad, ademas, un vistazo al capitulo uno. Alli se abordaba el tema de los rendimientos de cada nivel RAID. 2.3. Swapping sobre RAID No hay motivo alguno que justifique el uso de RAID para albergar las particiones swap (memoria de intercambio) con la esperanza de asi ganar rendimiento neto: el propio nucleo ya se las ingenia solito para bascular la carga de lectura/escritura a disco a lo largo de varios dispositivos, solo teneis que darles la misma prioridad en el /etc/fstab. Un bonito ejemplo: /dev/sda2 swap swap defaults,pri=1 0 0 /dev/sdb2 swap swap defaults,pri=1 0 0 /dev/sdc2 swap swap defaults,pri=1 0 0 /dev/sdd2 swap swap defaults,pri=1 0 0 /dev/sde2 swap swap defaults,pri=1 0 0 /dev/sdf2 swap swap defaults,pri=1 0 0 /dev/sdg2 swap swap defaults,pri=1 0 0 Esta configuracion permite que el sistema haga swapping en paralelo a lo largo de nueve dispositivos SCSI. No hace falta RAID, entonces. Y, por cierto, que esto de la memoria de intercambio en paralelo ha sido una prestacion del nucleo de Linux desde hace bastante tiempo ya. Otro tema diametralmente distinto es la alta disponibilidad que querais alcanzar... cuando se produce un fallo fisico de consideracion en el disco que alberga una particion swap activa y en funcionamiento, Linux simplemente se queda colgado. Aqui es donde hacer swap sobre una particion RAID-1 (con todas las consecuencias, recordad que RAID-1 ralentiza las operaciones de escritura con respecto a una configuracion normal, sin RAID) os puede mantener el sistema en marcha. Dicho sea de paso, algunos administradores de sistemas no son partidarios de las soluciones como esa: los sistemas de mision critica (donde la tolerancia a un error de disco en el area de swapping es necesaria) pueden disearse para no necesitar de una particion swap nunca. Para eso "basta" con no quedarse sin memoria fisica jamas. Aunque ha habido cierto debate acerca de si el swapping es estable sobre dispositivos RAID, a nosotros nos gustaria zanjar eso diciendo que hacer swap sobre RAID deberia, en teoria, de ser perfectamente estable. Para salir de dudas os basta con correr tests de stress sobre un sistema ejemplo. Vamos, que podeis hacer swap sobre RAID o RAID sobre swap, como os parezca. Nosotros insistimos con lo nuestro, esos dispositivos RAID son solo dispositivos por bloques. 2.4. ?Por que mdadm? Las raidtools llevan siendo toda la vida el software standard para gestionar RAID en Linux, asi que mdadm no es una herramienta estrictamente necesaria. De todos modos, los que encontrais las raidtools enrevesadas o limitadas, encontrareis a mdadm (multiple devices administrator) extremadamente util para gobernar los sistemas RAID. Lo podeis usar como una alternativa a las clasicas raidtools, o como suplemento, para llegar con el a donde no llegan las herramientas de siempre. Hablamos de una herramienta escrita por Neil Brown, ingeniero de software en la Universidad de Nueva Gales del Sur y desarrollador del nucleo de Linux. Mdadm se encuentra en este momento en su version 1.4.0 y se muestra agradablemente estable, habiendo recibido una respuesta muy positiva por parte de la linux-raid mailing list. Es bastante probable que mdadm se convierta en un futuro no muy lejano en una herramienta de uso generalizado a la hora de gestionar RAID en Linux. Estas son las diferencias principales entre mdadm y las raidtools: o mdadm es una herramienta de diagnostico que proporciona informes detallados sobre los arrays del sistema o mdadm puede funcionar como un daemon, monitorizando dispositivos RAID y enviando alertas de seguimiento a los administradores del sistema o mdadm es un programa unico y centralizado y no una coleccion dispersa de programas independientes, con todo lo bueno y lo malo que esto conlleva o mdadm puede hacer su trabajo, gestionando todo cuanto necesitais en vuestra plataforma de RAID por software sin tener que usar forzosamente un archivo de configuracion o ...y si quereis usar un archivo de configuracion, mdadm os ayudara a mantener sus contenidos 3. Dispositivos Insistimos, los dispositivos de RAID por software en Linux son dispositivos por bloques, al igual que los discos convencionales y cualquier particion que establezcamos sobre estos. Un dispositivo RAID se construye sobre un numero determinado de otros dispositivos por bloques. Por ejemplo, un sistema RAID-1 podria levantarse usando dos discos ordinarios, dos particiones de disco o dos sistemas RAID. No hay requerimientos especiales para los dispositivos sobre los que construyais vuestros sistemas RAID, y esto os da libertad total a la hora de disear vuestra propia solucion RAID. Y puesto que, desde esta perspectiva, RAID es solo un conjunto -o agrupacion- de dispositivos, podeis dejar volar vuestro ingenio y crear autenticos conjuntos y subconjuntos de acorde con las necesidades que se os planteen. En este documento nos vamos a referir mediante el termino "dispositivo" a elementos como "discos", "particiones" o incluso "dispositivo RAID". Vamos que un "dispositivo" en este HOWTO es simplemente un "dispositivo por bloques de Linux". Podria tratarse cualquier cosa, desde un disco SCSI a un dispositivo de red por bloques. A menudo, nos referiremos a este rango de "dispositivos" como "discos", porque, no nos engaemos, eso es lo que seran en la inmensa mayoria de los casos. De hecho, casi siempre se trata de discos duros. Aun asi, los dispositivos de vuestros sistemas, pueden jugar varios papeles distintos en esto del RAID. Puede ser "discos libres", podria tratarse de "discos erroneos" o podrian ser los habituales discos funcionales y sanos, en su actividad usual dentro del array. Y ahora vamos a entrar en detalle acerca de los "discos libres" y los "discos erroneos". 3.1. Discos libres Los discos libres (tambien denominados "discos de reserva") son los que no toman parte en un conjunto RAID hasta que falla uno de los discos activos. Cuando se detecta un fallo de dispositivo, el disco erroneo se marca como tal y es apartado de modo que no se vuelva a utilizar, a continuacion el proceso de reconstruccion comienza en el primer disco libre disponible. De esta forma, los discos libres aportan una bonita seguridad extra ante los errores de disco. Esto puede llegar a resultar muy interesante en las configuraciones mas vulnerables ante los fallos de un disco, como la RAID-5, donde dos errores de disco consecutivos dan al traste con la informacion de todo el conjunto entero. Os podeis tambien, gracias a los discos libres, relajar un poco mas: esto de aportarle un disco libre de apoyo al conjunto RAID os permite dejar al sistema en funcionamiento durante algun tiempo con un disco erroneo, puesto que la redundancia la proporciona el antao disco libre que toma el relevo de manos del disco que os haya fallado, asumiendo sus funciones. Aun asi, es muy importante que tengais presente que vuestros ordenadores tal vez no sigan funcionando despues de un fallo de disco. La capa RAID de Linux deberia de ser capaz de gestionar los fallos de disco correctamente, pero tal vez el resto de componentes del sistema no lo hagan. Es posible que vuestros drivers SCSI tengan errores (quizas disearlos para resolver correctamente los miles de errores de disco posibles no haya sido algo prioritario!) a la hora de resolver los fallos fisicos de disco. Tambien es muy probable que esos chipsets IDE tan baratos que os habeis comprado :( respondan a un error de disco bloqueando todo el ordenador. Etc. Mas cosas a tener en cuenta, una vez la reconstruccion comienza, el sistema inserta un disco libre en la posicion en la que se ha producido una baja. Para que el reemplazo sea efectivo, la capa RAID se pondra a leer de los discos activos para regenerar la recien perdida redundancia. Si con el uso de los discos se han ido formando bloques erroneos (un fallo de disco habitual, chequead vuestros sistemas de archivos y lo vereis por vosotros mismos), el propio proceso de reconstruccion puede, a raiz de toda la agresiva lectura que conlleva, provocar un fallo en uno de los discos "buenos". Esto nos llevara de cabeza a un fallo RAID total. ?Ahora es cuando os volveis a plantear lo de hacer copias de seguridad con frecuencia? Nosotros os premiamos con mas de lo mismo: recordad, RAID no es un sustituto de las copias de seguridad. 3.2. Discos erroneos Cuando la capa RAID gestiona los fallos de dispositivos correctamente, los discos fallidos son etiquetados como tales y la reconstruccion empieza inmediatamente en el primer disco libre que se presente. Los discos erroneos constan (si no son manualmente retirados del array) como miembros del conjunto RAID. La capa RAID se limita a tratar a los dispositivos marcados como erroneos como parte inactiva del array. 4. Aspectos relativos al hardware En esta seccion vamos a cubrir algunos de los aspectos relativos al hardware cuando se esta aplicando una solucion de RAID por software. Los que estais interesados en ganar rendimiento, deberiais de aseguraros de que los buses de vuestros discos sean lo bastante rapidos. No es buena idea eso de tener 14 discos UW-SCSI en un solo bus si cada disco alcanza los 20 MB/s y el bus "solo" puede sostener un total de 160 MB/s. Ademas, deberiais de poner un solo dispositivo por bus IDE, puesto que la combinacion maestro/esclavo de los buses IDE tiene un rendimiento lamentable, y es que IDE es una tecnologia de disco realmente mala cuando tienes mas de un disco por bus. Lo bueno es que las placas base de hoy en dia vienen con dos buses IDE, y eso os permite montar un RAID de dos discos sin tener que comprar controladoras adicionales, que, por cierto, resulta que son muy baratas... asi que, finalmente, montar un sistema con 6-8 discos es muy facil y barato. 4.1. Configuracion IDE Es perfectamente posible (y habitual) implementar soluciones RAID sobre discos IDE. Y se puede obtener tambien un rendimiento excelente con ellos. De hecho, el precio al que van los dispositivos y controladoras IDE hace que IDE sea una tecnologia a tener en consideracion cuando se trata de montar nuevos sistemas RAID. o Estabilidad fisica: los dispositivos IDE han sido tradicionalmente componentes de menor calidad mecanica que los SCSI. Incluso hoy en dia la garantia de los discos IDE es, generalmente, de uno o dos aos, mientras tanto, es posible toparse con discos SCSI que ofrecen entre tres y cinco aos de garantia. Aunque no esta bien decir decirlo, por norma general, los discos IDE tienden a ser productos de baja calidad; basta con decir que los discos IDE de determinados fabricantes suelen fallar mas a menudo que sus homologos SCSI. Mientras tanto, otros fabricantes ya usan exactamente la misma configuracion mecanica para los SCSI y los IDE. En cualquier caso, todo esto se reduce a una sola cosa: todos los discos fallan, mas pronto o mas tarde, y hay que estar preparado para asumir eso. o Integridad de datos: abreviando, la ingenieria IDE no dispone de mecanismos para garantizar que los datos que se han enviado a traves del bus seran exactamente los mismos que terminen por escribirse en el disco. Esto es porque la implementacion de la que hablamos carece totalmente de chequeos de paridad. Con la aparicion del standard Ultra-DMA, los dispositivos IDE modernos efectuan comprobaciones de integridad en los datos que reciben, y eso hace que esquive con mayor facilidad el fantasma de la corrupcion de datos... aun asi, el bus PCI no dispone de resortes para chequear la integridad de datos, y ese es el bus que usaran tanto las controladoras IDE como las SCSI. o Rendimiento: no vamos a extendernos demasiado sobre el rendimiento IDE por ahora. Mejor lo dejamos en un breve resumen: o Los dispositivos IDE son rapidos, aunque no tanto como sus contrapartidas en el mundo SCSI o IDE consume mayores recursos en vuestras CPU que SCSI (?esto es importante?) o Usad solamente un dispositivo IDE por bus IDE, los discos esclavos derrochan recursos o Tolerancia a errores: el driver IDE de Linux generalmente sobrevive al fallo de un dispositivo. La capa RAID marcara entonces el disco como erroneo, y, si estais empleando los niveles de RAID-1 o superior, el sistema deberia de responder correctamente hasta que podais ejecutar las tareas de mantenimiento correspondientes (como, por ejemplo, cambiar el disco erroneo por otro correcto). Somos tan pesados que insistiremos hasta la saciedad: es muy importante que solo useis un disco IDE por bus IDE. No es solo porque dos discos en un mismo bus rinden muy mal, sino porque el fallo de un disco, a menudo, supone el fallo del bus entero, y eso implica que fallan todos los discos del bus. En una configuracion RAID tolerante a errores (niveles RAID 1,4 y 5) el fallo de un disco puede subsanarse, pero el fallo de dos discos en cadena motivado por un fallo general del bus IDE, arrastrara al array entero al desastre. Ademas, cuando el maestro del bus es quien falla, el disco esclavo (o la controladora) pueden quedar horriblemente confundidos, y eso tiene consecuencias aun mas devastadoras. Un bus, un disco. Esa es la regla. Sin paliativos. Hay a la venta controladoras IDE PCI baratas por ahi. A menudo, podeis encontrar tarjetas con dos o cuatro buses por unos 50 Euros. Si tenemos en cuenta que los discos IDE son mucho mas baratos que los SCSI, un array de discos IDE puede facilmente ser una solucion apta si podeis conformaros con esas cifras relativamente bajas (sobre los ocho discos o asi) en materia del numero de dispositivos que podeis conectar a un sistema convencional. IDE presenta serios problemas de cable cuando se trata de arrays grandes. Incluso si teneis suficientes bancos PCI, es poco probable que podais meter mas de ocho discos en un sistema y mantenerlo en funcionamiento correctamente sin que se produzcan problemas de corrupcion de datos debido a la longitud de los discos IDE. Para colmo de males, algunos de los nuevos discos IDE que estan saliendo a mercado ahora, vienen con restriccion de disponibilidad, de forma que solo pueden usarse un numero determinado de horas al dia. Estos discos estan diseados para su uso en entornos domesticos o de oficina (jornada laboral de ocho horas diarias), y esto os puede llevar a problemas severos (perdida de la garantia del fabricante) si los usais en un entorno de servidor, dentro de un array RAID 24/7. 4.2. Reemplazo en caliente (Hot swap) Aunque el intercambio en caliente de los dispositivos esta soportado hasta cierto punto, todavia no es algo que se pueda hacer facilmente. 4.2.1. Reemplazo en caliente de dispositivos IDE !No lo hagais! IDE no soporta en absoluto el reemplazo en caliente. Aunque podria funcionaros si compilarais vuestro driver IDE como modulo (solo posible en la serie 2.2 del nucleo) y lo volvierais a cargar despues de reemplazar el dispositivo, lo mas probable es que terminarais con una controladora IDE frita y un tiempo de inactividad mucho mayor que el que simplemente habria consumido el reemplazar el dispositivo en un sistema apagado. El principal problema, a parte de los temas electricos que pueden destruir vuestro hardware, es que se debe reexplorar el bus IDE despues de que se hayan reemplazado los discos. El driver IDE actual no puede hacer eso. Si el nuevo disco es 100% identico al antiguo (geometria, etc.) puede que funcione incluso sin volver a explorar el bus pero, que os quede bien claro que, aun asi, os la estais jugando tontamente. 4.2.2. Reemplazo en caliente de dispositivos SCSI El hardware SCSI normal tampoco es capaz de realizar un reemplazo en caliente. Sin embargo, puede que funcione. Si vuestro driver SCSI soporta la reexploracion del bus y la conexion y desconexion de dispositivos, puede ser capaz de intercambiar dispositivos en caliente. Sin embargo, en un bus SCSI normal probablemente no deberiais desenchufar dispositivos mientras el sistema este todavia encendido. Pero, insistimos, puede que funcione simplemente (y tambien puede que termineis !friendo vuestro hardware!). La capa SCSI deberia sobrevivir si un disco muere, pero no todos los drivers SCSI soportan eso. Si vuestro driver SCSI muere cuando un disco cae, el sistema se caera con el y la conexion en caliente no es que resulte muy interesante entonces. 4.2.3. Reemplazo en caliente con SCA Con SCA, es posible reemplazar dispositivos en caliente. Desafortunadamente, esto no es tan sencillo como deberia, aunque si que es posible y seguro. Veamos un ejemplo: o Volcamos la tabla de particiones del disco, si es legible: sfdisk -d /dev/sdb > partitions.sdb o Sacamos el disco que vamos a reemplazar en el array: raidhotremove /dev/md0 /dev/sdb1 o Echamos un vistazo al Host, Canal, ID y Lun del dispositivo a reemplazar, mirando en /proc/scsi/scsi o Sacamos el disco del bus: echo "scsi remove-single-device 0 0 2 0" > /proc/scsi/scsi o Comprobamos que el disco haya sido correctamente extraido, de nuevo miramos en /proc/scsi/scsi o Desconectamos el disco de la bahia SCA, e insertamos uno nuevo o Aadimos el nuevo dispositivo al bus: echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi ?Ya estais oyendo como se enciende el disco? o Reparticionamos el disco, usando para ello la particion previamente salvada: sfdisk /dev/sdb < partitions.sdb o Insertamos el disco en el array: raidhotadd /dev/md0 /dev/sdb2 Los argumentos del comando "scsi remove-single-device" son: Host, Canal, Id y Lun. Esos numeros los podeis encontrar en "/proc/scsi/scsi" El procedimiento descrito lo hemos ensayado en un sistema con discos IBM SCA y una controladora Adaptec SCSI. Si encontrais problemas o formas mejores de resolver esta cuestion, por favor, discutidlo en la linux-raid mailing list. 5. Configuracion RAID 5.1. Configuracion general Esto es lo que necesitais para cualquiera de los niveles RAID: o Un nucleo. Preferiblemente, uno de la serie 2.4. Alternativamente la version 2.0.36 o un nucleo 2.2.x reciente. No tenemos ni idea de que es lo que hay con el nuevo nucleo 2.6. o El paquete de herramientas RAID (raidtools). Tambien podeis usar mdadm en lugar de raidtools. o Calma, paciencia, buenos alimentos y cafeina. Todo esto, salvo lo ultimo, lo podeis encontrar en la ultima version de vuestra distribucion Linux favorita. Si vuestro sistema soporta RAID, deberia de existir un archivo en /proc/mdstat. Recordad, ese archivo es vuestro amigo. Si no esta ahi puede que vuestro nucleo no soporte RAID. Podeis ver los contenidos de ese archivo ejecutando cat /proc/mdstat Eso deberia 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. Todavia. Cread, en este momento, las particiones que quereis incluir en los conjuntos RAID que vayais a necesitar. 5.2. Descargando e instalando mdadm Podeis descargar el tarball mas reciente de mdadm en http://www.cse.unsw.edu.au/~neilb/source/mdadm/. Ejecutad a continuacion make install y eso bastara para compilar e instalar mdadm, su configuracion, paginas del manual y archivos de ejemplo. tar xvf ./mdadm-1.4.0.tgz cd mdadm-1.4.0.tgz make install Si usais una distribucion basada en RPM, podeis 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 estais usando Debian Woody (3.0 o superior), podeis probar a ejecu- tar apt-get install mdadm Gentoo tiene este paquete disponible en el arbol de ports. Solo teneis que emplear estas instrucciones emerge mdadm Otras distribuciones probablemente tambien tendran este paquete a tiro. Y ahora vamos con los distintos modos RAID. 5.3. Modo lineal De acuerdo, teneis dos o mas particiones, probablemente de distintos tamaos, y quereis juntarlas todas en un gran bloque unico, donde se sucederan, una detras de otra. Configuramos el /etc/raidtab para describir la configuracion que pretendemos. Un /etc/raidtab para poner dos discos en modo lineal se ve asi 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 el. Asi de claro. Los que estais mas despiertos, probablemente os esteis preguntando porque especificamos un chunk-size (tamao de porcion) aqui cuando resulta que el modo lineal solo empalma los discos en un gran array sin paralelismos... bueh, teneis toda la razon, es un poco raro. Pero mejor dejemoslo correr por ahora, declarad ahi ese chunk-size y no os volvais 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 usais mdadm, el comando es mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb6 /dev/sdc5 Y con eso habeis, tambien, creado el array. Los parametros son lo que parecen. Y la salida con la que os premiara mdadm sera como esta: mdadm: chunk size defaults to 64K mdadm: array /dev/md0 started. Echad ahora, el consabido vistazo al /proc/mdstat. Vereis que el array ya esta en marcha. Final feliz. Ahora podeis crear un sistema de archivos, como hariais en cualquier otro dispositivo, montarlo, incluirlo en el /etc/fstab y disfrutarlo. 5.4. RAID-0 En este caso, teneis dos o mas dispositivos, de aproximadamente el mismo tamao, y quereis combinar sus capacidades de almacenamiento y tambien combinar sus rendimientos accediendolos en paralelo. Preparad el fichero /etc/raidtab para describir su configuracion. 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 aqui. Un RAID-0 no tiene redundancia, por lo que cuando un disco muere, el array le acompaa al otro mundo. Una vez mas, 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 que sucede. Deberiais ver que el dispositivo ahora esta en funcionamiento. Ahora, /dev/md0 esta listo para ser formateado, montado, usado y abusado. 5.5. RAID-1 Teneis dos dispositivos de aproximadamente el mismo tamao y quereis que cada uno de los dos sea un duplicado del otro. Ademas teneis mas dispositivos que vais a querer declarar como discos libres preparados, que automaticamente formaran parte del duplicado si uno de los dispositivos activos se rompe. Configurad el fichero /etc/raidtab tal que asi: 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 teneis discos libres, podeis aadirlos al final de la especificacion 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 estais listos para comenzar la inicializacion del RAID. Se debe construir el duplicado, es decir, los contenidos (de todos modos, sin importancia ahora, ya que el dispositivo todavia esta sin formatear) de los dos dispositivos se deben sincronizar. Dad la orden mkraid /dev/md0 para comenzar la inicializacion del duplicado. Comprobad el fichero /proc/mdstat. Deberia deciros que se ha puesto en funcionamiento el dispositivo /dev/md0, que esta siendo reconstruido el duplicado y una estimacion del tiempo que falta para el final de la reconstruccion. La reconstruccion se realiza usando el ancho de banda ocioso de E/S. De esta manera, vuestro sistema todavia deberia ser capaz de responder en gran medida, aunque los LEDs de vuestros discos deben estar destelleando alegremente. El proceso de reconstruccion es transparente, por lo que podeis usar tranquilamente el dispositivo en pleno proceso de reconstruccion del duplicado. Intentad formatear el dispositivo mientras la reconstruccion se esta realizando. Funcionara. Tambien podeis montarlo y usarlo mientras la reconstruccion se este realizando. Eso si, si el disco equivocado se rompe mientras se esta realizando la reconstruccion, no hay solucion. 5.6. RAID-4 Importante: No hemos comprobado esta configuracion por nosotros mismos. La configuracion que vamos a describir aqui es solo un modelo teorico, no algo que realmente hayamos puesto en produccion. Si alguno de vosotros usa RAID-4, que nos envie unos e-mails y comparta su experiencia con nosotros. Teneis tres o mas dispositivos de aproximadamente el mismo tamao, un dispositivo es significativamente mas rapido que los otros dispositivos y por ello quereis combinarlos todos en un unico dispositivo mas grande, conservando todavia alguna informacion de redundancia. Ademas, contais varios dispositivos que quereis usar como discos de reserva. Configurad el fichero /etc/raidtab asi: 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 teneis discos de reserva, los insertais 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. Deberiais de consultar la seccion de opciones especiales de mke2fs antes de formatear el dispositivo. 5.7. RAID-5 Teneis tres o mas dispositivos de aproximadamente el mismo tamao, quereis combinarlos en un dispositivo mayor, pero conservando todavia cierto grado de redundancia para la seguridad de datos. Ademas, contais con varios dispositivos para usar como discos de reserva, que no tomaran parte en el array antes de que otro dispositivo falle. Si estais usando N dispositivos donde el tamao del mas pequeo es S, el tamao de todo el array sera (N-1)*S. El espacio "perdido" se usa para informacion de paridad (redundancia). De esta manera, si cualquier disco falla, todos los datos permaneceran intactos. Pero si dos discos fallan, todos los datos se perderan. 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 tamao de porcion de 32KB es un buen valor por defecto para muchos sistemas de ficheros de proposito general de este tamao. 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 sis- tema de ficheros ext2 con un tamao de porcion de 4KB. Podria incremen- tar tanto el tamao de porcion del array como el tamao 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 tra- bajar como locos para poder empezar con la reconstruccion de su array. Echadle, como siempre, un vistazo a /proc/mdstat para ver que esta sucediendo. Si el dispositivo se ha creado correctamente, el proceso de reconstruccion comenzara ahora. El array no sera consistente hasta que la fase de reconstruccion haya terminado. No obstante, el array es totalmente funcional (excepto, por supuesto, para la respuesta ante fallos de dispositivos) y podeis formatearlo y usarlo incluso mientras se este reconstruyendo. Consultad la seccion de opciones especiales de mke2fs antes de formatear el array. Bueno, y ahora que ya teneis esos dispositivos RAID funcionando, siempre podeis pararlo o rearrancarlo usando las ordenes raidstop /dev/md0 o raidstart /dev/md0 respectivamente. Si usais 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 rear- rancar un numero astronomico de veces hasta que todo os funcione, seguid leyendo y hareis funcionar la autodeteccion. 5.8. El superbloque persistente Antiguamente, las herramientas RAID (raidtools) leian su fichero /etc/raidtab y a continuacion inicializaban el array. Sin embargo, esto requeria 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. Ademas, la anterior aproximacion producia complicaciones al montar sistemas de ficheros sobre dispositivos RAID. estos no se podian colocar en el fichero /etc/fstab como era usual, sino que tenian que ser montados en los scripts de inicio. Los superbloques persistentes solucionan estos problemas. Cuando un array se inicializa con la opcion 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 nucleo leer la configuracion de los dispositivos RAID directamente de los discos involucrados, en lugar de leerla de algun fichero de configuracion que puede no estar disponible en todo momento. De todos modos, si no vais a usar mdadm, todavia debereis de mantener un fichero /etc/raidtab consistente, ya que podeis necesitar este fichero para una reconstruccion posterior del array. Los superbloques persistentes son obligatorios si vais a emplear la autodeteccion de dispositivos RAID durante el arranque del sistema. Esto se describe en la seccion de autodeteccion. 5.9. Tamaos de porcion El tamao de porcion (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, tendriais que escribir cuatro bits en cada disco, con lo que todos los segundos bits irian al disco 0 y los otros al disco 1. Sencillamente, el hardware no soporta eso. En su lugar, elegimos algun tamao de porcion que definimos como la masa "atomica" mas pequea de datos que puede ser escrita en los dispositivos. Una escritura de 16 KB con un tamao de porcion de 4 KB provocaria que la primera y tercera porcion de 4KB se escribieran en el primer disco y la segunda y la cuarta porcion en el segundo, en el caso de un RAID-0 de dos discos. De esta manera, para grandes escrituras, podriais observar una sobrecarga mas pequea teniendo porciones lo bastante grandes, mientras que los arrays que contuvieran principalmente ficheros pequeos se podrian beneficiar mas de un tamao de porcion mas pequeo. Los tamaos de porcion se pueden especificar para todos los niveles de RAID excepto para el modo lineal. Para un rendimiento optimo, deberiais de experimentar con el valor, asi como con el tamao de bloque del sistema de ficheros que pusiera en el array. El argumento de la opcion chunk-size en /etc/raidtab especifica el tamao de porcion en kilobytes. Por tanto, "4" significa "4 KB". 5.9.1. 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 tamao de porcion de 4 KB para escribir 16 KB a un array de 3 discos, el sistema RAID escribira 4 KB a los discos 0, 1 y 2, en paralelo, y a continuacion los 4 KB restantes al disco 0. Un tamao de porcion de 32 KB es un punto de inicio razonable para la mayoria de los arrays. Pero el valor optimo depende muchisimo del numero de discos implicados, del contenido del sistema de ficheros que coloca y de muchos otros factores. Experimentad con el para obtener el mejor rendimiento. 5.9.2. RAID-1 Para las escrituras, el tamao de porcion no afecta al array, ya que se deben escribir todos los datos a todos los discos y punto. Para las lecturas, sin embargo, el tamao de porcion indica cuantos datos leer consecutivamente de los discos participantes. Ya que todos los discos activos del array contienen la misma informacion, las lecturas se pueden hacer en paralelo al estilo de un RAID-0. 5.9.3. RAID-4 Cuando se realiza una escritura en un array RAID-4, tambien se debe actualizar la informacion de paridad en el disco de paridad. El tamao de porcion es el tamao de las porciones de paridad. Si se escribe un byte a un array RAID-4, entonces se leeran chunk-size bytes de los N-1 discos, se calculara la informacion de paridad y se escribiran chunk- size bytes al disco de paridad. El tamao de porcion 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. 5.9.4. RAID-5 En RAID-5 el tamao de porcion tiene exactamente el mismo significado que en un RAID-0. Escribir en RAID-5 es un poco mas complicado: cuando una porcion se escribe en un array RAID-5, la porcion de paridad correspondiente debe ser actualizado tambien. Actualizar una porcion de paridad requiere una de estas dos cosas: o La porcion original, la nueva, y la vieja porcion de paridad o Todas las porcion, salvo la de paridad La implementacion RAID escogera la forma mas facil de actualizar cada porcion de paridad a medida que se van sucediendo los accesos de lectura. Un tamao de porcion razonable para un RAID-5 es 128 KB pero, como siempre, podeis experimentar con este. Consultad tambien la seccion de opciones especiales de mke2fs. Esto afecta al rendimiento de un RAID-5. 5.10. Opciones de mke2fs Hay disponible una opcion especial cuando se formatean dispositivos RAID-4 y RAID-5 con mke2fs. La opcion -R stride=nn permitira a mke2fs situar mejor diferentes estructuras de datos especificas de ext2 en un dispositivo RAID de forma inteligente. Si el tamao de porcion es 32 KB significa que 32 KB de datos consecutivos residiran en un unico disco. Si queremos construir un sistema de ficheros ext2 con un tamao de porcion de 4KB, nos damos cuenta de que habra 8 porciones del sistema de ficheros en una porcion del array. Podemos pasar esta informacion 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 opcion. No estamos seguros de como la opcion stride afectara a otros niveles RAID. Si alguien tiene informacion sobre esto, por favor, que nos la envie. El tamao de bloque de ext2fs influye severamente en el rendimiento del sistema de archivos. Deberiais de usar siempre un tamao de porcion de 4KB en cualquier sistema de archivos mas grande que unos pocos cientos de megabytes... a no ser que se guardeis en el un numero muy grande de archivos minusculos. 6. Detectando, consultando y testando Esta seccion trata sobre la vida con un sistema RAID por software, veremos como podemos comunicarnos con los arrays y como podemos trastear con ellos. Es importante sealar que cuando se trata de manipular dispositivos RAID, deberiais siempre de tener presente que estais trabajando con sistemas de archivos enteros. Ante eso siempre hay que extremar las precauciones. 6.1. Detectando los fallos de disco Sin misterios. Basta con echar un vistazo rapido a los logs habituales para percatarse de que ha fallado un disco. Cuando un disco falla, /var/log/messages revelara varios errores del nucleo. Algunos ejemplos, para los masocas: kernel: scsi0 channel 0 : resetting for second half of retries. kernel: SCSI bus is being reset for host 0 channel 0. kernel: scsi0: Sending Bus Device Reset CCB #2666 to Target 0 kernel: scsi0: Bus Device Reset CCB #2666 to Target 0 Completed kernel: scsi : aborting command due to timeout : pid 2649, scsi0, channel 0, id 0, lun 0 Write (6) 18 33 11 24 00 kernel: scsi0: Aborting CCB #2669 to Target 0 kernel: SCSI host 0 channel 0 reset (pid 2644) timed out - trying harder kernel: SCSI bus is being reset for host 0 channel 0. kernel: scsi0: CCB #2669 to Target 0 Aborted kernel: scsi0: Resetting BusLogic BT-958 due to Target 0 kernel: scsi0: *** BusLogic BT-958 Initialized Successfully *** Y mas frecuentemente, kernel: sidisk I/O error: dev 08:01, sector 1590410 kernel: SCSI disk error : host 0 channel 0 id 0 lun 0 return code = 28000002 o tambien kernel: hde: read_intr: error=0x10 { SectorIdNotFound }, CHS=31563/14/35, sector=0 kernel: hde: read_intr: status=0x59 { DriveReady SeekComplete DataRequest Error } Y, como es de esperar, /proc/mdstat revelara la presencia de proble- mas, Personalities : [linear] [raid0] [raid1] [translucent] read_ahead not set md7 : active raid1 sdc9[0] sdd5[8] 32000 blocks [2/1] [U_] Luego aprenderemos a monitorizar RAID con mdadm de forma que nos envien informes de alerta sobre fallos en disco. Ahora lo que procede es aprender mas sobre el formato de /proc/mdstat. 6.2. Consultando el estado de los arrays Podeis mirar siempre lo que hay en /proc/mdstat. No duele. Aprendamos a interpretar sus contenidos. Por ejemplo. Personalities : [raid1] read_ahead 1024 sectors md5 : active raid1 sdb5[1] sda5[0] 4200896 blocks [2/2] [UU] md6 : active raid1 sdb6[1] sda6[0] 2104384 blocks [2/2] [UU] md7 : active raid1 sdb7[1] sda7[0] 2104384 blocks [2/2] [UU] md2 : active raid1 sdc7[1] sdd8[2] sde5[0] 1052160 blocks [2/2] [UU] unused devices: none Para identificar los dispositivos libres, buscad el primer valor [#/#] de una linea. El primer numero es el numero que define el numero de dispositivos para un RAID completo. Digamos que es "n". El numero de posicion [#] que viene a despues de cada uno de los dispositivos inte- grantes indica la situacion que ocupa dentro del conjunto. Los dispos- itivos con "n" o mas son los discos libres, mientras que 0,1,...,n-1 son los dispositivos que estan trabajando en el array. Si hay un dispositivo erroneo, el disco roto estara marcado con una (F) despues del [#]. El disco libre que reemplace a este disco erroneo sera el dispositivo con el numero de posicion n o superior que no este marcado como defectuoso (F). Una vez la operacion de resincronizacion se termina, los numeros de posicion de los dispositivos cambian. Ah, y el orden en que aparecen los dispositivos RAID en /proc/mdstat no importa. Por ultimo, recordad que siempre podeis usar las raidtools o mdadm para consultar con detalle los arrays: mdadm --detail /dev/mdx lsraid -a /dev/mdx Estos comandos dejan bien claro en que situacion se encuentra cada dispositivo en todo momento. 6.3. Simulando un fallo en disco Si estais planeando usar RAID para obtener tolerancia a fallos, es buena idea que comprobeis que vuestra configuracion funciona correctamente, no sea que tengais alguna sorpresa desagradable en el momento menos oportuno. El tema es, ?como se las apaa uno para simular el fallo de un disco? Pues mirad, uno no se las apaa. No se puede simular el fallo de un disco si no es dandole al pobre trasto un buen hachazo mientras rueda. Esto puede parecer de locos, pero la verdad es que no es posible saber que es exactamente lo que pasara cuando un disco duro se nos muere de la misma forma que no es posible saber que es exactamente lo que pasara cuando un coche deje de funcionar. El fallo de un chisme tan complicado como es un disco duro moderno puede deberse a miles de motivos distintos (calor, erosion mecanica, exceso en las presiones magneticas soportadas, fallo en el suministro de intensidades electricas... todo a la vez...) y adoptar miles de comportamientos distintos. Podria ser que un fallo electrico se propagara a traves de todo el bus, alcanzando a todos los dispositivos conectados a el. Y tambien podria ser que el dispositivo sencillamente informara a la controladora de un error de entrada/salida, lo cual pondria en marcha los resortes que hacen que la capa RAID gestione estas situaciones correctamente. Y eso es lo que pretendemos al usar RAID, y eso es lo que suele suceder, afortunadamente. En fin, que se han tomado medidas y realizado esfuerzos para que todo salga bien cuando un miembro de vuestros conjuntos RAID falle, pero RAID no es La Virgen de Lourdes. RAID no hace milagros y no puede resolver situaciones catastroficas. Es vuestra decision apostar por RAID o no cuando os enfrenteis a la necesidad de aportar un determinado nivel de tolerancia a errores, y debereis de asumir las consecuencias de vuestros actos por vosotros mismos. Dicho esto, vamos con lo de simular fallos. Recordad, solamente RAID 1,5 y 5 aportan tolerancia a errores. Los modos 0 y lineal no sobreviven cuando un disco se rompe. 6.3.1. Forzando el fallo por hardware Si quereis simular el fallo de un disco, podeis, sencillamente, desenchufarlo. Solo hay que apagar el equipo y desconectar los cables que alcanzan el dispositivo que querais usar como cobaya. Ni se os ocurra hacer esto mientras el sistema esta funcionando, podriais quemar varios componentes de vuestro ordenador. Solo apagad la maquina, desenchufadla, desconectad ese disco y entonces, si, arrancais de nuevo. Cuando hayais arrancado el sistema, observad los logs y echad un vistazo a /proc/mdstat para ver como le va al array. ?Ha funcionado? ?Teneis ahora un array "cojo"? Los discos erroneos deberian de aparecer marcados con un (F) mi mirais /proc/mdstat. Ademas, los usuarios de mdadm vereis al dispositivo marcado con un faulty. Repasad lo que hemos dicho aqui en la seccion de consultas de estado, hace solo unas pocas lineas. Bien, y ahora apagad el ordenador, volved a conectar el disco y arrancad de nuevo. Podreis, entonces, aadir de nuevo el disco cobaya usando el comando raidhotadd. 6.3.2. Forzando el fallo por software Aqui es donde vamos a divertirnos. Las nuevas versiones de las raidtools incorporan el comando raidsetfaulty, que nos permitira simular el fallo de un disco sin tener que desenchufar nada ni reiniciar el sistema. Hale, forzamos el fallo de un disco sin mas, raidsetfaulty /dev/md1 /dev/sdc2 y eso hace el disco /dev/sdc2 falle en el array /dev/md1. El equiva- lente a esto en mdadm es mdadm --manage --set-faulty /dev/md1 /dev/sdc2 Ahora vereis esto el los logs del sistema, kernel: raid1: Disk failure on sdc2, disabling device. y esto si teneis algun disco libre en la reserva kernel: md1: resyncing spare disk sdb7 to replace failed disk Si mirais ahora /proc/mdstat vereis como le va al array, que ahora es un array degradado. Y ahi tambien vereis si ha empezado la reconstruc- cion en algun disco libre que tengais. Otra herramienta maja de las nuevas raidtools es lsraid. Probad esto, lsraid -a /dev/md1 los que tengais mdadm, el equivalente a ese comando es esto de aqui, mdadm --detail /dev/md1 y ahora es cuando tanto los unos como los otros podeis disfrutar de la vision de vuestro sistema soportando un fallo en disco. Y ahora que hemos visto como es cuando falla un disco, vamos a arreglar las cosas y dejarlo todo como estaba. Lo primero es sacar el disco erroneo del conjunto RAID. Al fin y al cabo, en este estado no aporta nada al array. Ejecutad este comando raidhotremove /dev/md1 /dev/sdc2 Es importante no perder de vista el hecho de que raidhotremove no es capaz de sacar un disco valido de un array en marcha. Por razones obvias, solo los discos erroneos pueden arrancarse del array (!ejecu- tar raidstop o similares en el array y desmontar entonces el disposi- tivo no os ayudara!). Bien, lo que teneis ahora es un /dev/md1 en el que falta un dispositivo. Terminamos ya, devolviendo ahora a /dev/sdc2 de vuelta a casa. raidhotadd /dev/md1 /dev/sdc2 o, con mdadm, mdadm /dev/md1 -a /dev/sdc2 y podemos ver, ahora, como el hijo prodigo vuelve a casa, tal vez reincorporandose a /dev/md1 como un elemento activo del conjunto o (si su antiguo lugar ya fue ocupado por un disco de reserva en su momento y despues de ejecutar raidsetfaulty) tal vez como un disco libre. 6.4. Simulacion de una corrupcion de datos Un sistema RAID (ya sea hardware o software) asume que si una escritura en disco no devuelve un error, entonces es que ha tenido exito. Por tanto, si vuestro disco corrompe datos (escribe algo diferente a lo que le han pedido que escriba) sin devolver un error, los datos del array se veran comprometidos tambien. Es muy improbable que algo asi os ocurra, pero es posible, y la verdad es que como resultado, os quedaria un lamentable sistema de ficheros corrupto. Un sistema RAID no puede y no esta pensado para garantizar la integridad de datos de vuestro medio de almacenaje. Por tanto, tampoco tiene ningun sentido corromper a proposito los datos de un disco (usando dd, por ejemplo) para ver como resolvera el sistema RAID esa situacion. Es mas probable (!a menos que corrompais el superbloque del RAID!) que la capa RAID no descubra nunca que sus ficheros se han intervenido, vulnerando asi la integridad de datos del sistema. Al final de todo eso os quedais con que el sistema de ficheros contenido en el dispositivo RAID cuya integridad habeis violado queda corrupto. Simplemente. Asi es como se supone que funcionan las cosas. Un RAID, insistimos, no es una garantia para la integridad de datos, simplemente os permite conservar vuestros datos si un disco muere (naturalmente, con RAIDs de niveles iguales o superiores a 1). 6.5. Monitorizando arrays RAID Podeis ejecutar mdadm como demonio, solo hay que usar el modo de seguimiento (follow-monitor). Si se tercia la ocasion, eso hara que mdadm envie alertas al administrador del sistema cuando los arrays detecten errores o fallen. Ademas, el modo de seguimiento puede utilizarse para desatar planes de contingencia en caso de que un disco falle. Veamos un ejemplo basico. mdadm --monitor --mail=root@localhost --delay=1800 /dev/md2 Esto pone a un demonio mdadm a vigilar a /dev/md2. Las alertas admin- istrativas se libraran contra root@localhost. Los chequeos se suced- eran en intervalos de 1800 segundos. Tambien teneis que recordar a los parametros como --program o --alert, que se usan para especificar el programa que querais ejecutar en caso de que suceda un evento. Tambien es importante mencionar que el demonio mdadm no terminara su ejecucion mientras hayan arrays que monitorizar, asi que deberiais de ejecutarlo como un proceso de fondo... estais lanzando un demonio, no un comando del shell. Usad el ampersand final y un bonito nohup: nohup mdadm --monitor --scan --daemonise --mail=root@localhost /dev/md0 /dev/md1 & Usar mdadm para monitorizar un array RAID es simple y efectivo. Aun asi, es evidente que es una forma de monitorizar que tambien tiene sus problemas. ?Que pasa, por ejemplo, si el demonio mdadm se detiene? Para poder sacar adelante problemas como ese, es buena idea que con- sulteis soluciones de monitorizacion "reales". Hay varias soluciones (tanto libres como comerciales) disponibles que podeis usar para moni- torizar vuestros arrays de RAID por software sobre Linux. Una busqueda en FreshMeat basta para encontrar varios ejemplos. 7. Reconstruccion Si habeis leido hasta aqui ya deberiais de ser capaces de haceros una idea de como evoluciona la reconstruccion de un RAID degradado. Hagamos un breve resumen: o Apagad el sistema o Reemplazad el disco que ha fallado o Arrancad el sistema o Usad raidhotadd /dev/mdX /dev/sdX para reinsertar el disco en el array o Esperad a que la reconstruccion automatica termine Y ya esta. O, al menos, deberia. A no ser que el array se haya declarado inutilizable debido a un fallo general (fallan mas discos de los que el array puede soportar). Esto sucede, por ejemplo, si un disco arrastra en su caida a todo su bus: los otros discos colgando del mismo cable quedaran inalcanzables para toda la capa RAID y, por tanto, seran declarados erroneos sin estar averiados en absoluto. Lo que viene ahora es la explicacion que Martin Bene nos dio, y describe una hipotetica recuperacion del horroroso escenario descrito en el parrafo anterior. Para esto hay que usar la directiva failed- disk en el /etc/raidtab estrategicamente, y eso solo podreis hacerlo si usais nucleos 2.2.10 o posteriores. 7.1. Sobreviviendo a un error de varios discos Estas pueden ser las causas del empastre: o Una controladora se suicida, aislando en el proceso a dos (o mas) discos a la vez o Todos los discos que hay en un mismo bus SCSI quedan inaccesibles cuando un disco muere o Un cable deja de funcionar O sea, que os habeis quedado temporalmente sin el servicio de varios discos de golpe, y despues de que los superbloques RAID pierdan su sincronia ya no podreis reinicializar vuestro array. Pinta mal, ?eh? Esta es vuestra ultima esperanza: reescribir los superbloques RAID mediante el uso de la instruccion mkraid --force Para que esto funcione, necesitareis tener actualizado y mano vuestro /etc/raidtab - si el mencionado archivo no encaja A LA PERFECCIoN con la configuracion y el orden exacto de vuestros arrays, esto os saldra terriblemente mal, y, en lugar de recuperar nada lo mas probable es que arruineis totalmente cualquier posibilidad de recuperacion que os quede. Si observais el syslog que obteneis cuando intentais inicializar el array normalmente, vereis el contador de eventos para cada superbloque; lo mejor sera que abandoneis (aqui el uso de failed-disk) el disco con el menor numero ahi, generalmente el mas viejo. Si ejecutais mkraid sin failed-disk, la hebra de recuperacion empezara inmediatamente a reconstruir las porciones de paridad, tal vez eso no es lo que querais hacer inmediatamente. Con el uso de failed-disk podeis especificar exactamente cuales son los discos que quereis que sean activos y cuales no; y tal vez asi ir probando diferentes combinaciones para terminar por quedaros con la que mejor os vaya... y no os olvideis de montar el sistema en modo solo lectura mientras haceis esto ultimo. 8. Rendimiento Queremos ofreceros informacion util en esta seccion. Queremos mostrar datos fidedignos acerca de cual es el rendimiento de un sistema usando RAID por software sobre Linux. Y para eso necesitamos que nos ayudeis. Asi que, por favor, si implementais alguna solucion RAID radicalmente diferente a las que constan en este documento, enviadnos los datos relativos a vuestro hardware, la carga que soporta la maquina cuando ejecutais pruebas de medicion en ella, y, por supuesto, los resultados de vuestros benchmarks (usando, por favor, software valido a tal efecto). Nosotros, por nuestra parte, trataremos de publicar las muestras que nos parezcan interesantes, ilustrativas o especialmente significativas, siempre siguiendo nuestro criterio personal. Gracias, por adelantado, por vuestra ayuda. Y ahora vamos con los datos que nosotros mismos hemos obtenido en nuestras maquinas. Esta seccion contiene varias pruebas de evaluacion de prestaciones ("benchmarks") de un sistema real y en produccion en donde se ha implementado una solucion de RAID por software. Tambien hay algo de informacion general sobre benchmarking. Las mediciones las hemos tomado usando el programa bonnie y siempre con ficheros dos o mas veces mas grandes que el tamao de la RAM fisica de la maquina. Estas mediciones solo miden el ancho de banda de entrada y de salida sobre un unico gran fichero. Esto es interesante conocerlo si estais interesados en obtener buen rendimiento de E/S para grandes lecturas/escrituras. Sin embargo, tales numeros nos dicen poco sobre cual seria el rendimiento si el array se usara para un almacen temporal de noticias, un servidor web, etc. etc. Tened siempre en cuenta que los numeros de las evaluaciones son el resultado de ejecutar un programa "sintetico". Pocos programas del mundo real hacen lo que bonnie hace y, aunque es interesante mirar estos numeros de E/S, no son indicadores en ultima instancia del rendimiento de los dispositivos del mundo real. Ni lo parecen ni lo pretenden. Por ahora, solo disponemos de los resultados de una maquina. Ahi va su configuracion: o Dual Pentium Pro 150 MHz o 256 MB RAM (60 MHz EDO) o Tres IBM UltraStar 9ES 4.5 GB, SCSI U2W en una controladora Adaptec 2940U2W o Un IBM UltraStar 9ES 4.5 GB, SCSI UW en una cntroladora Adaptec 2940 UW o Kernel 2.2.7 con parches RAID Parece casi imposible sacarle mas de 30 MB/s a los buses SCSI de este sistema, usando RAID o no. Suponemos que eso es porque, como se trata de un ordenador bastante antiguo, el ancho de banda de la memoria RAM es muy pobre, y eso limita lo que puede moverse a traves de las controladoras de disco. 8.1. RAID-0 Lectura significa entrada de bloques secuencial y Escritura significa salida de bloques secuencial. El tamao de fichero fue de 1GB en todas las pruebas. Las pruebas se realizaron en modo monousuario. Se configuro el driver SCSI para que no encolara ordenes etiquetadas ("tagged command queuing", TCQ). |Tamao de porcion | Tamao de bloque | Lectura kB/s | Escritura kB/s | | | | | | |4k | 1k | 19712 | 18035 | |4k | 4k | 34048 | 27061 | |8k | 1k | 19301 | 18091 | |8k | 4k | 33920 | 27118 | |16k | 1k | 19330 | 18179 | |16k | 2k | 28161 | 23682 | |16k | 4k | 33990 | 27229 | |32k | 1k | 19251 | 18194 | |32k | 4k | 34071 | 26976 | Con esto vemos que el tamao de porcion del RAID no importa mucho. Sin embargo, el tamao de bloque del sistema de ficheros ext2 deberia ser tan grande como fuera posible, lo cual significa 4KB (es decir, el tamao de pagina) en una Arquitectura Intel de 32 bits. 8.2. RAID-0 con TCQ Esta vez, el driver SCSI se configuro para usar TCQ, con una longitud de cola de 8. Por lo demas, todo es lo mismo de antes. | | | | | |Tamao de porcion | Tamao de bloque | Lectura kB/s | Escritura kB/s | | | | | | |32k | 4k | 33617 | 27215 | No se realizaron mas pruebas. TCQ parecio incrementar ligeramente el rendimiento de las escrituras, pero la verdad es que apenas se noto la diferencia. 8.3. RAID-5 El array se configuro para funcionar en el modo RAID-5 y se hicieron pruebas similares. | | | | | |Tamao de porcion | Tamao de bloque | Lectura kB/s | Escritura kB/s | | | | | | |8k | 1k | 11090 | 6874 | |8k | 4k | 13474 | 12229 | |32k | 1k | 11442 | 8291 | |32k | 2k | 16089 | 10926 | |32k | 4k | 18724 | 12627 | En este caso, tanto el tamao de porcion como el tamao de bloque son mucho mas significativos. 8.4. RAID-10 Un RAID-10 no es mas que un array RAID-1 de dos arrays RAID-0. El tamao de porcion es tanto el tamao de las porciones del array RAID-1 como del array RAID-0. No se realizaron pruebas en las que esos tamaos de porcion fueran diferentes, aunque esa deberia ser una configuracion perfectamente valida. |Tamao de porcion | Tamao de bloque | Lectura kB/s | Escritura kB/s | | | | | | |32k | 1k | 13753 | 11580 | |32k | 4k | 23432 | 22249 | No se realizaron mas pruebas. El tamao de fichero fue de 900MB debido a que las cuatro particiones involucradas eran de 500 MB cada una, lo cual no deja espacio para un fichero de 1GB en esta configuracion (RAID-1 sobre dos arrays de 1000MB). 8.5. Nuevas herramientas de benchmarking No useis hdparm para testar el rendimiento de vuestros sistemas RAID, eso no hara evaluaciones reales de vuestros arrays. En lugar de hdparm, echad un vistazo a las herramientas que describimos aqui: IOzone y Bonnie++. IOzone es una herramienta pequea, versatil y moderna. Saca benchmarks de rendimiento de E/S sobre ficheros para operaciones como read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read y aio_write. Y corre sobre ext2, ext3, reiserfs, JFS y XFS. Podeis usar IOzone para expresar el rendimiento de E/S en funcion del numero de procesos y numero de discos del sistema de archivos, algo util cuando se trata de medir soluciones de RAID-0. Aunque la documentacion de IOzone esta disponible en PDF, PostScript, nroff y MS Word, vamos a cubrir aqui un bonito ejemplo de IOzone en accion: iozone -s 4096 Eso ejecuta unos tests usando un archivo de 4096KB. Y este es un resultado de muestra File size set to 4096 KB Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 4096 4 99028 194722 285873 298063 265560 170737 398600 436346 380952 91651 127212 288309 292633 NOTA: las funciones que hacen a IOzone util para el benchmarking de RAID son las operaciones sobre ficheros read strided. Bonnie++ parece mas orientado a hacer pruebas de rendimiento en dispositivos sueltos que en un conjunto RAID, pero puede pasarle benchmarks a mas de 2GB de datos en maquinas de 32 bits, y testar operaciones sobre archivos como creat, stat, unlink. 9. Herramientas de apoyo Aunque no lo hayamos tratado hasta ahora en este documento, han ido apareciendo a lo largo del tiempo varias herramientas utiles para los sistemas RAID por software. 9.1. Conversion RAID y manipulacion de tamaos No es facil aadir otro disco a un array existente, asi que ha aparecido una herramienta para eso, podeis encontrarla en http://unthought.net/raidreconf. Esta aplicacion os permitira convertir distintos niveles RAID entre si. Por ejemplo, podeis convertir un RAID-1 de dos discos en un array RAID-5 de cuatro discos (!). Tambien ofrece soporte a la conversion de tamaos de porcion y la insercion simple de discos. Es importante sealar que esta herramienta no es apta para su uso en produccion. Aunque parece hacer el trabajo bastante bien, se trata de un software que gestiona procesos muy largos que, de fallar, diseminaran caoticamente vuestros datos por todos los discos de forma totalmente irrecuperable. !Es absolutamente imprescindible que hagais un buen juego de copias de seguridad antes de experimentar con esta herramienta! 9.2. Copias de seguridad Recordad, somos terriblemente pesados, pero RAID no es un sustituto de las buenas copias de seguridad. Es imperativo proteger esos datos, no solo mediante un RAID, sino con una politica habitual y constante de copias de seguridad bien hechas. Un sistema excelente de backup es Amanda, software libre. 10. Creditos Nos gustaria agradecer su apoyo a las personas que han colaborado en la creacion del presente documento: o Mark Price and IBM o Michael, o Damon Hoggett o Ingo Molnar o Jim Warren o Louis Mandelstam o Allan Noah o Yasunori Taniike o Martin Bene o Bennett Todd o Kevin Rolfes o Darryl Barlow o The Linux-RAID mailing list people o Juan Piernas Canovas o ...y todos a los que hemos olvidado. !Esperamos que nos perdonen! :) Por favor, enviad correcciones, sugerencias... y lo que se os pase por la cabeza a los autores. Esa es la unica forma de que este HOWTO pueda irse desarrollando.