mdadm: Una nueva herramienta para la gestión de RAID mediante software en Linux
por Derek Vadala, autor de Managing RAID on Linux.
12/05/2002
raidtools ha sido el paquete de gestión de RAID por software estandard en Linux desde la inclusión del driver RAID por software. Con los años, raidtools ha demostrado un uso pesado, principalmente porque depende de un fichero de configuración (/etc/raidtab) que es difícil de mantener, y parcialmente por sus limitadas características. En agosto de 2001, Neil Brown, un ingeniero de software en la Unviersity of New South Wales y un desarrollador del kernel, lanzó una alternativa. Su paquete mdadm (multiple devices admin) proporciona una forma simple y robusta de gestión de arrays software. mdadm vá por la versión 1.0.1 y ha demostrado ser muy estable durante su primer año de desarrollo. En la lista de correo Linux-raid ha recibido una cálida acogida y muy probablemente consiga una mayor difusión en el futuro1. Este artículo asume que usted tiene cierta familiaridad con el RAID por software en Linux y que ha tenido cierto contacto con el paquete raidtools.
Instalación2
Descargue la versión más reciente del tarball mdadm, ejecute make install para compilarlo e instalar mdadm con su documentación. Además del binario se instalan algunas páginas de manual y ficheros de ejemplo.
# tar xvf ./mdadm-1.0.1.tgz
# cd mdadm-1.0.1.tgz
# make install
De forma alternativa usted puede descargar e instalar el ifchero del paquete que se encuentra bajo el directorio RPM en la misma URL (http://www.cse.unsw.edu.au/~neilb/source/mdadm/).
# rpm -ihv mdadm-1.0.1-1.i386.rpm
mdadm tiene cinco modos de funcionamiento. Los primeros dos modos, Create y Assemble, se utilizan para configurar y activar arrays. Manage se utiliza para manipular dispositivos en un array activo. Follow o Monitor permite a los administradores configurar la notificación de eventos y acciones para los arrays. El modo Build se utiliza cuando se trabaja con arrays heredados que utilizan una versión antigua del driver md. No cubriré el modo build en este artículo. Las opciones restantes se utilizan para varias tareas domésticas y no están asociadas a un modo de operación específico, aunque la documentación de mdadm llama a estas opciones el modo Misc.
Creando un Array
El modo Create (mdadm --create) se utiliza para crear un nuevo array. En este ejemplo utilizaré mdadm para crear un RAID-0 en /dev/md0 construido con /dev/sdb1 y /dev/sdc1:
# mdadm --create --verbose /dev/md0 --level=0
--raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.
La opción --level especifica el tipo de RAID a crear, de la misma manera que lo hace la opción raid-level de raidtools. Es posible indicar 0, 1, 4 y 5 para RAID-0, RAID-1, RAID-4 y RAID-5. También es posible utilizar el modo lineal (--level=linear). La opción --raid-devices funciona de la misma manera que la opción nr-raid-disks cuando se utiliza /etc/raidtab y raidtools.
En general, los comandos mdadm tienen el siguiente formato:
mdadm [mode] <raiddevice> [options] <component disks>
Cada opción de mdadm también cuenta con una forma corta que es menos descriptiva pero más breve de teclear. Por ejemplo, el siguiente comando utiliza la forma corta de cada opción pero es identico al ejemplo que he mostrado antes.
# mdadm -Cv /dev/md0 -l0 -n2 -c128 /dev/sdb1 /dev/sdc1
-C selecciona el modo Create, he incluido la opción -v para activar la salida verbosa. -l y -n especifican el nivel RAID y el número de discos. Los usuarios de raidtools y /etc/raidtab pueden comprobar los fácil que es crear arrays utilizando mdadm. Usted puede cambiar el tamaño del pedazo (chunk size) por defecto (64KB) utilizando la opción --chunk o -c. En el ejemplo anterior he fijado el chunk size a 128KB. mdadm también soporta la expansión del shell, de modo que no tiene que teclear el nombre de dispositivo para cada componente si se está creando un gran array.
En este ejemplo crearé un RAID-5 con cinco discos y un tamaño de chunk de 128KB:
# mdadm -Cv /dev/md0 -l5 -n5 -c128 /dev/sd{a,b,c,d,e}1
mdadm: layout defaults to left-symmetric
mdadm: array /dev/md0 started.
El ejemplo crea el array /dev/md0 utilizando las particiones de disco SCSI /dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1 y /dev/sde1. Observe que también he fijado el tamaño del chunk a 128KB utilizando la opción -c128. Cuando se crea un RAID-5, mdadm selecciona de forma automática el algoritmo de paridad left-symmetric, que es la mejor opción.
Utilice el comando --stop o -S para detener un array en marcha:
# mdadm -S /dev/md0
/etc/mdadm.conf
/etc/mdadm.conf es el principal fichero de configuración de mdadm. A diferencia de /etc/raidtab, mdadm no depende de /etc/mdadm.conf para crear o gestionar arrays. En su lugar, mdadm.conf es simplemente una manera adicional de seguir la pista a los dispositivos RAID software. Utilizar un fichero de configuración con mdadm es útil pero no necesario. Tener uno significa que usted puede gestionar los arrays de forma ágil sin invertir tiempo en descubrir qué propiedades tienen y dónde están los discos. Por ejemplo, si un array no está en marcha y no existe el fichero mdadm.conf describiéndolo, entonces el administrador del sistema debe invertir tiempo en examinar cada disco para determinar sus propiedades y miembros.
A diferencia del fichero de configuración para raidtools, mdadm.conf es conciso y símplemente lista los discos y arrays. El fichero de configuración puede contener dos tipos de líneas, cada una comenzando con la palabra reservada DEVICE o ARRAY. Los espacios en blanco separan las palabras reservadas de la información de configuración. Las líneas que comienzan con DEVICE especifican una lista de dispositivos que son candidatos a formar parte del array. La líneas que comienzan con ARRAY especifican dispositivos array además de información de identificación. Esta información puede incluir listas de uno o más UUIDs, números menores de dispositivos md, o una lista de dispositivos miembro.
Un fichero de configuración mdadm.conf sencillo puede parecerse a:
DEVICE /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md1 devices=/dev/sdc1,/dev/sdd1
En general, es mejor crear el fichero /etc/mdadm.conf después de haber creado un array y actualizar el fichero cuando se crean nuevos arrays. Sin un fichero /etc/mdadm.conf se necesita especificar información más detallada sobre un array en el comando para activarlo. Esto significa que se tendrá que recordar que dispositivos pertenecen a cada array, y esto puede convertirse fácilmente en un embrollo en sistemas con muchos discos. mdadm incluso proporciona una manera fácil de generar las líneas ARRAY. La salida es una sola línea continua, pero aquí está troceada para encajar en la página:
# mdadm --detail --scan
ARRAY /dev/md0 level=raid0 num-devices=2 \
UUID=410a299e:4cdd535e:169d3df4:48b7144a
Si hubiera múltipes arrays ejecutándose en el sistema, entonces mdadm generaría una linea array para cada uno. Así que, una vez que haya construido sus arrays, puede redirigir la salida de mdadm --detail --scan a /etc/mdadm.conf. Sólo tiene que asegurarse de crear manualmente una entrada DEVICE. Utilizando el ejemplo anterior podemos tener un /etc/mdadm.conf con el siguiente aspecto:
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid0 num-devices=2 \
UUID=410a299e:4cdd535e:169d3df4:48b7144a
Iniciando un array
El modo Assemble se utiliza para iniciar un array que ya existe. Si usted ha creado el fichero /etc/mdadm.conf, entoces puede comenzar el array listado allí con el siguiente comando:
# mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 2 drives.
La opción -A se refiere al modo Assemble, también puede utilizar --assemble. La opción -s o --scan indican a mdadm que mire en /etc/mdadm.conf para informarse sobre los arrays y los dispositivos. Si usted quiere iniciar todos los arrays listados en /etc/mdadm.conf, no especifique un dispositivo md en la línea de comandos.
Si usted no creó el fichero /etc/mdadm.conf, necesitará especificar información adicional en la línea de comandos para poder iniciar un array. Por ejemplo, este comando intenta iniciar /dev/md0 utilizando los dispositivos listados en la línea de comandos:
# mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
Como utilizar mdadm -A de este modo supone que usted conoce cómo están organizados los arrays, puede que no sea útil en sistemas que tienen arrays que fueron creados por otra persona. De manera que usted puede querer examinar algunos dispositivos para hacerse una idea de cómo están organizados los arrays. La opción de examinar (-E o --examine) permite imprimir el superbloque md (si está presente) de un dispositivo de bloques que puede formar parte de un array.
# mdadm -E /dev/sdc1
/dev/sdc1:
Magic : a92b4efc
Version : 00.90.00
UUID : 84788b68:1bb79088:9a73ebcc:2ab430da
Creation Time : Mon Sep 23 16:02:33 2002
Raid Level : raid0
Device Size : 17920384 (17.09 GiB 18.40 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Update Time : Mon Sep 23 16:14:52 2002
State : clean, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Checksum : 8ab5e437 - correct
Events : 0.10
Chunk Size : 128K
Number Major Minor RaidDevice State
this 1 8 33 1 active sync /dev/sdc1
0 0 8 17 0 active sync /dev/sdb1
1 1 8 33 1 active sync /dev/sdc1
2 2 8 49 2 active sync /dev/sdd1
3 3 8 65 3 active sync /dev/sde1
La opción de examinar muestra información útil sobre los discos que componen el array. En este caso podemos decir que /dev/sdc1 pertenece a un RAID-0 formado por cuatro discos miembro. Lo que quiero resaltar de forma específica es la línea de salida que contiene el UUID. Un UUID es un número de 128 bits que se supone razonablemente único tanto en el sistema local como en el resto. Se genera de forma aleatoria utilizando hardware y marcas temporales como parte de su semilla. Los UUIDs se tutilizan en varios programas para etiquetar de forma única los dispositivos. Puede obtener más información leyendo las páginas de manual de uuidgen y libuuid.
Cuando se crea un array, el driver md genera un UUID para el array y lo guarda en el superbloque md. Puede utilizar el UUID como criterio para la construcción de arrays. En el próximo ejemplo activaré el array al que pertenece /dev/sdc1 utilizando su UUID.
# mdadm -Av /dev/md0 --uuid=84788b68:1bb79088:9a73ebcc:2ab430da /dev/sd*
Este comando escanea cada disco SCSI (/dev/sd*) para ver si es miembro del array con UUID 84788b68:1bb79088:9a73ebcc:2ab430da
y entonces inicia el array, suponiendo que se encuentre cada uno de los dispositivos que lo componen. mdadm producirá un montón de salida cada vez que intente escanear un dispositivo que no existe. Puede ignorar tales advertencias con seguridad.
Gestionando arrays
Utilizando el modo Manage puede añadir y eliminar discos de un array en funcionamiento. Esto es necesario para eliminar los discos que han fallado, añadir discos de repuesto, o añadir los discos de reemplazo. El modo Manage también se puede utilizar para marcar un disco como averiado. El modo Manage replica las funciones de los programas raidsetfaulty, raidhotremove y raidhotadd de raidtools.
Por ejemplo, para añadir un disco a un array activo, replicando el comando raidhotadd:
# mdadm /dev/md0 --add /dev/sdc1
O para eliminar /dev/sdc1 de /dev/md0 intente:
# mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
Observe que primero he marcado /dev/sdc1 como averiado y después lo hemos eliminado. Es equivalente a utilizar los comandos raidsetfaulty y raidhotremove de las raidtools. Es posible combinar las opciones de añadir, marcar como averiado y eleminar en una sola línea de comandos siempre que tenga sentido en términos de gestión del array. Por ejemplo, debe marcar un disco como averiado antes de eliminarlo.
Monitorizando arrays
El modo Follow, o Monitor, proporciona algunas de las mejores características de mdadm. Utilizando el modo Follow/Monitor puede utilizar mdadm como un demonio y configurarlo para enviar alertas por correo a los administradores cuando en los arrays se producen errores o fallos. También puede utilizar el modo Follow para ejecutar comandos arbitrarios cuando un disco se averie. Por ejemplo, puede querer intentar eliminar el disco y reinstarlo en un intento de corregir un fallo no-fatal sin intervención del usuario.
El siguiente comando monitorizará /dev/md0 (consultando su estado cada 300 segundos) en busca de eventos críticos. Cuando ocurre un error faltal, mdadm enviará un correo al sysadmin. Puede ajustar el intérvalo de consulta y la dirección de correo de acuerdo a sus necesidades.
# mdadm --monitor --mail=sysadmin --delay=300 /dev/md0
Cuando se utiliza el modo monitor, mdadm no termina, así que tal vez quiera envolverlo con un nohup y un &.
# nohup mdadm --monitor --mail=sysadmin --delay=300 /dev/md0 &
El modo Follow/Monitor también permite que los arrays compartan discos de repuesto, una caracteristica que ha faltado en el software RAID de Linux desde el principio. Esto significa que usted sólo tiene que proporcionar un disco de repuesto para cada grupo de arrays o para todos los asrrays. También significa que el administrador del sistema no tiene que intervenir de forma manual para mover los discos de repuesto cuando se produce un fallo en un array. Cuando se detecta una avería en un disco de un array sin un disco de repuesto, mdadm quitará un disco de repuesto disponible en otro array y lo insertará en el array con el disco averiado. Para facilitar este proceso, cada línea ARRAY de /etc/mdadm.conf necesita tener un grupo de repuesto definido.
DEVICE /dev/sd*
ARRAY /dev/md0 level=raid1 num-devices=3 spare-group=database \
UUID=410a299e:4cdd535e:169d3df4:48b7144a
ARRAY /dev/md1 level=raid1 num-device=2 spare-group=database \
UUID=59b6e564:739d4d28:ae0aa308:71147fe7
En este ejemplo, tanto /dev/md0 como /dev/md1 son parte del grupo de repuesto database. Suponiendo que /dev/md0 es un RAID-1 de dos discos con un solo disco de repuesto. Si mdadm está funcionando en modo monitor (como he mostrado antes), y un disco de /dev/md1 falla, mdadm quitará el disco de repuesto de /dev/md0 y lo insertará en /dev/md1.
mdadm tiene muchas otras opciones que no he descrito aquí. Recomiendo de forma encarecida la lectura de su página de manual para más detalles. Recuerde, no es necesario cambiar a mdadm. Las raidtools todavía mantienen su desarrollo y son el fruto de muchos años de desarrollo. Pero encuentro que mdadm es un buen reemplazo. Tiene muchas caracteristicas y es intuitivo, no pierde nada al probar alternativas.
Notas:
- NT: En el momento de realizar esta traducción (octubre de 2007), Mandriva 2008 incluye la versión de mdadm xxx.
- NT: La mayoría de las distribuciones cuentan con un paquete mdadm en su repositorio, así que la instalación se reduce a utilizar el gestor de paquetes adecuado.