Para el que no lo sepa, un RAID en informática no es una carrera de aventuras sino un disco duro lógico creado a partir de la union de dos o más discos duros físicos con objeto (por lo general aunque no siempre) de proporcionar tolerancia a fallos. Las siglas vienen de Redundant Array of Inexpensive Disks y hace referencia a que, en su día, constituían una alternativa para proporcionar un almacenamiento seguro usando discos baratos en lugar de unos mucho más caros (por lo general SCSI). Ahí está la wikipedia para quién quiera aprender un poquito más 😉
El método más seguro de usar esta tecnología es mediante hardware dedicado. Eso que quede claro. Pero cuando no queremos o no podemos gastarnos el dinero que esto requiere tenemos la alternativa de implementarlo mediante software. En Linux tenemos para ello mdadm, una herramienta en línea de comando muy sencilla de usar si entendemos los conceptos básicos de lo que estamos haciendo.
La instalación en una Debian es así de sencilla:
apt-get install mdadm
El script de configuración posterior a la instalación sólo nos planteará dos cuestiones. Leelas atentamente (como siempre… 😉 ). En la primera se nos pregunta si el sistema de ficheros raíz de nuestro Linux estará en un RAID con objeto de iniciarlo antes de la secuencia de arranque. En este ejemplo le diremos que no puesto que sólo usaremos RAID para los discos de datos, así que responderemos con none como se nos indica en el mensaje siguiente:
En la segunda pregunta se nos interroga acerca de si queremos que los discos RAID que vamos a crear se inicialicen de forma automática durante cada inicio de la máquina o si preferimos hacerlo nosotros manualmente. Contestaremos que queremos que lo haga de forma automática.
Una vez instalado mdadm ya podemos crear nuestro RAID. En el ejemplo que vamos a ver crearemos un RAID5 con tres discos de 500GB. El comando lsblk es muy cómodo para ver que asignación de nombres le ha hecho nuestro sistema a estos dispositivos:
El comando básico para crear un RAID es este:
mdadm --create dispositivo-md --level=x --raid-devices=z dispositivos-sd
O en formato abreviado:
mdadm --create dispositivo-md -l x -n z dispositivos-sd
Donde x es el nivel de RAID (admite los básicos 0, 1, 4, 5, 6, 10 y alguno más) y z el número de discos que formarán el array. El dispositivo-md será el nombre de dispositivo que recibirá el nuevo disco lógico (y que debería de estar en el directorio /dev y, por convención, llamarse md seguido de un número, por ejemplo /dev/md0) y los dispositivos-sd serían los discos físicos que forman el array separados por espacios (por ejemplo /dev/sdb /dev/sdc). Podemos añadir también la opción --
verbose para obtener información más detallada del proceso de creación y los posibles fallos. Veamos un par de ejemplos:
Para crear un RAID0 con los tres discos indicados:
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
Para crear un mirror (RAID1) con los discos indicados:
mdadm --create /dev/md0 -l 1 -n 2 /dev/sdb /dev/sdc
La creación admite, aparte de estas, otras opciones avanzadas que puedes consultar en el manual que se ha instalado con él (man mdadm). Y vamos ya a seguir con nuestro ejemplo. Para crear el RAID5 que necesitamos ejecutamos lo siguiente:
mdadm --create --verbose /dev/md0 --level=5 -n 3 /dev/sdb /dev/sdc /dev/sdd
Si todo ha salido bien se nos mostrarán algunos mensajes informativos y el comando finalizará indicando que el disco md0 ha sido inicializado y arrancado. Podemos comprobar el estado de nuevo con lsblk o con more /proc/mdstat
Para poder utilizar nuestro disco debemos aún formatearlo y montarlo en nuestro sistema de ficheros. Vamos a formatearlo como ext4 y a montarlo en un directorio que se llame datos dentro del subdirectorio /mnt:
mke2fs -t ext4 /dev/md0 mkdir /mnt/datos mount /dev/md0 /mnt/datos
Si usamos ahora, por ejemplo, el comando df (df -k /mnt/datos) para ver el espacio de la partición y el porcentaje de uso veremos que, efectivamente, disponemos de cerca de 1TB correspondiente al tamaño del RAID5 con tres discos de 500GB que hemos montado.
Nos falta aún algo más. Durante la instalación le hemos dicho a mdadm que inicie de forma automática todos los arrays, pero eso no significa que los monte en el sistema de ficheros. Si queremos que lo haga automáticamente en cada arranque y en el mismo directorio donde lo acabamos de hacer de forma manual, tendremos que añadir una línea como la siguiente al fichero /etc/fstab:
/dev/md0 /mnt/datos ext4 defaults 0 1
Vamos a echarle ahora un vistazo a diversos comandos de gestión y monitorización. Si queremos detener el volumen usamos el argumento --stop
. No olvides desmontarlo antes para evitar que haya pérdida de datos:
umount /dev/md0 mdadm --stop /dev/md0
Luego, para volver a arrancarlo de forma manual:
mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd
Y si habíamos incluido la línea que indicamos antes en el fichero fstab para volver a montar el disco en nuestro sistema de ficheros basta con hacer esto:
mount /dev/m0 /mnt/datos
Para ver información de todos los arrays que tenemos en funcionamiento en la máquina usamos el argumento --detail
:
mdadm --detail --verbose --scan
Sólo tenemos uno, claro. Para ver información en detalle del mismo:
mdadm --detail --verbose /dev/md0
O también podemos usar el argumento --examine
para ver información y el estado de cualquier a de los discos que forman nuestro array:
Vamos a simular ahora la rotura de uno de los discos. Para ello apagamos la máquina bruscamente y desconectamos uno de los tres discos del RAID. Podemos hacer fácilmente esta prueba tanto en una máquina real (¡que no esté en producción!) como en una virtual. Tras arrancar de nuevo nuestro RAID habrá perdido la tolerancia a fallos. No obstante, si hemos creado o copiado datos en el directorio /mnt/datos veremos que estos siguen siendo perfectamente accesibles.
Para recuperar la tolerancia a fallos debemos de añadir un disco nuevo. Lo hacemos y una vez arrancada de nuevo la máquina ejecutamos lo siguiente para añadir el disco /dev/sdc a nuestro RAID en sustitución del que hemos simulado que se ha roto:
mdadm /dev/md0 --add /dev/sdc
El RAID se reconstruirá sólo de forma automática pero dependiendo del tamaño y del volumen de datos podrá tardar más o menos tiempo. Observa de vez en cuando la salida de more /proc/mdstat para estar al tanto.
Si lo que queremos es añadir al RAID un nuevo disco para que sea usado como hot spare basta con sumarlo a un RAID ya creado y funcional con el mismo comando que usamos antes para añadir un disco a un RAID estropeado:
mdadm /dev/md0 --add /dev/sde
Si lo que queremos es añadir el disco para agrandar el tamaño del RAID y no para que sea usado como hot spare tendríamos que usar los siguientes comandos:
mdadm /dev/md0 --add /dev/sde mdadm --grow /dev/md0 ??raid-devices=4
En el fichero /proc/mdstat podemos ver el proceso como siempre:
Lo que no nos va a resolvernos mdadm es hacer que la partición que habíamos creado en el disco y sobre la que estábamos trabajando crezca. Eso es tarea nuestra:
umount /dev/md0 e2fsck -f /dev/md0 resize2fs /dev/md0 mount /dev/md0 /mnt/datos
Y el resultado:
Si lo que queremos es eliminar uno de los discos del RAID (para reemplazarlo por otro, por ejemplo) tenemos antes que marcarlo como fail. Luego lo eliminamos:
mdadm /dev/md0 --fail /dev/sdd mdadm /dev/md0 --remove /dev/sdd
Y si quisiéramos eliminar el RAID usamos este comando:
mdadm --remove /dev/md0
mdadm tiene también un argumento llamado --monitor
que le permite generar alertas cuando ocurre alguna incidencia en el RAID. Por defecto en una Debian el monitor se arranca como un daemon que graba las incidencias en el fichero de logs de la máquina (/var/log/syslog) de esta forma:
mdadm --monitor --pid-file /run/mdadm/monitor.pid --daemonise --scan --syslog
Si, además, quisiéramos que nos enviara dichas incidencias a nuestra cuenta de correo deberíamos de añadir la opción --mail
:
mdadm --monitor --pid-file /run/mdadm/monitor.pid --daemonise --scan --syslog --mail josemaria@uponday.net
Hola, muy buen aporte. Lo aprovecho para consultar si tubiera que hacerlo por hard que placa recomiendas que sea compatible con Debian. Gracias
Rodrigo: siempre que he montado RAID en un servidor «de verdad» con Debian lo he hecho con servidores DELL Poweredge. Están muy buen de precio, dan altas prestaciones y todo el hardware es 100% compatible con Debian. Las tarjetas PERC para RAID por hardware también.
Muy buena tu explicacion. Pero la pregunta es ¿como recupero un raid0 , cuando se daña el primer disco (principal espejado sda) , o sea el que tiene el sector de booteo?¿o puede bootear el espejo?
Antonio: el RAID0 no es un espejo. Lo que hace es hacerte creer que en lugar de dos discos tienes sólo uno cuyo tamaño es la suma de ambos. El problema es que este esquema no tiene redundancia y por tanto no puede recuperarse de ninguna forma.
1. Que pasa si necesito formatear el primer disco donde está /, como recupero luego el arreglo?
2. Como hacer un esperjo entre dos disco para instalar el SO, por software?
Hola.
Muy util su explicación.
Arriba mundo linux.
Una buena forma de ser libres …
Hola buenas noches me podrías de decir como montar un raid 2,3,30,50 y 100
gracias por tu atencion.
Hola, que tal… no se si llegarás a ver esto pero he seguido tu guía para crear un raid5 en debian y me ha sido de mucha ayuda ya que lo he conseguido. El problema que tengo es que no tengo permisos de escritura sobre /dev/md0… lo monto desde el fstab como indicas pero luego sólo tengo permisos de lectura. Te agradecería me explicaras que debería hacer.
Y otra pregunta, para los avisos por mail habría que configurar un servidor de correo o funcionaría sin más?
Un saludo y muchas gracias
Willy: Por supuesto que me lo leo ¿Tan poco paso por aquí últimamente? 😉
A ver, te contesto: es normal que una vez montado no tengas permisos. O, mejor, que nadie salvo el usuario root los tenga. Para que un usuario común tenga permisos de escritura debes de dárselos usando el comando chmod y/o el comando chown pero no a /dev/md0 sino al directorio donde montas el volumen (/mnt/datos en el ejemplo)
Y dos: cualquier Linux recién instalado puede enviar correos sin problemas sin necesidad de hacer ninguna configuración adicional siempre y cuando tenga una conexión a internet y pueda resolver nombres a través de un servidor DNS.
Muchas gracias Jose María, ahora si.
Excelente tutorial!!!
Un saludo
Genial la explicación.
Gracias por compartir conocimientos con la comunidad.
Gracias.