RAID por software en Debian 7 con mdadm

hard disk 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:

Instalación de mdadm en Debian Linux
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.

Instalación de mdadm en Debian Linux
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:

Comprobando la asignación de nombres de dispositivos a nuestros discos duros con lsblk
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
Comprobando el estado de un RAID5 recién creado con mdadm

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

Información de los RAID en una máquina con mdadm

Sólo tenemos uno, claro. Para ver información en detalle del mismo:

mdadm --detail --verbose /dev/md0

Información en detalle de un RAID con mdadm

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:
Información en detalle de uno de los discos de un RAID con mdadm

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.

OJO: Si el RAID no estaba aún totalmente inicializado (hemos usado discos muy grandes y no ha pasado suficiente tiempo desde su creación o desde la última vez que se recuperó de un fallo) el volumen no arrancará correctamente. Es por tanto muy importante no comenzar a usarlo hasta que no se ha inicializado completamente y extremar las precauciones después del fallo de algún disco hasta que volvemos a recuperar la tolerancia a fallos. Si miramos el pantallazo de aquí arriba en el que aparece la salida de ejecutar more /proc/mdstat vemos que allí aparece una barra de progreso donde se indica el estado de creación o reconstrucción del RAID. Mientras que esa barra no llegue al 100% y desaparezca mejor que no tengas ningún problema 😉

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.

OJO: Después de perder un disco los nombres de los dispositivos pueden haber ??bailado?. Es muy importante que comprobemos antes (con lsblk, por ejemplo) cuales son los que siguen formando parte del array y cual el nuevo que queremos añadir.

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:
Haciendo crecer nuestro RAID añadiendo un nuevo disco

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:
Extendiendo la partición de un RAID al que hemos añadido un nuevo disco

NOTA: Como se puede observar, durante este último proceso de crecimiento del RAID hemos trabajado con cuatro discos (tres originalmente) de 1GB cada uno en lugar de los de 500GB que hemos usado en el resto del tutorial. Quería que se apreciara el cambio de tamaño del volumen y la resincronización de discos tan grandes habría supuesto tener que esperar muchas horas para poder visualizar el proceso completo.

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

En bici por Madrid (y II): la nueva M-10

Hace casi exactamente siete años que, después de traerme mi bici a Madrid, escribí estas tristes líneas. La entrada se ha convertido en una de las 5 más vistas del blog con una media de cerca de 1.000 visitantes distintos mensuales. Esto demuestra dos cosas: que Google es bastante más malo de lo que nos pensamos y que en Madrid existe un gran interés ciudadano por poder usar la bici en el día a día.

En estos siete años las cosas han cambiado poco. Madrid sigue siendo una ciudad incómoda para usar la bicicleta como medio de transporte. El tráfico es demasiado agresivo y no existe cultura de bici ni apoyo institucional para que las cosas cambien. Aún así, algo (aunque poco) hemos avanzado. Por ejemplo, el propio ayuntamiento tiene un servicio GIS basado en Google Maps donde podemos ver los carriles bici que existen en la ciudad: en verde el anillo ciclista, en rojo los demás.

GIS Municipal con información de carriles bici en Madrid

Como se aprecia claramente, el anillo ciclista (ya casi totalmente construido) vale como circuito deportivo pero, salvo casualidades, no para servir de vía de desplazamiento al trabajo. El resto de carriles bici son francamente escasos y no están bien estructurados. La normativa de la red de Metro tampoco ayuda a planificar un desplazamiento mixto: salvo que tengas una plegable, los días laborables sólo puedes acceder al metro con tu bici entre las 10 y las 12.30 y a partir de las 21.00 hasta cierre del servicio. O sea, olvídate de ir al trabajo. Además, la práctica totalidad de los carriles bicis se ha construido robando espacio al peatón y no al tráfico rodado cosa que, según muchos estudios, es contraproducente e incluso aumenta el riesgo de accidentes.

En los próximos meses tenemos un par de elementos que pueden hacer cambiar un poco este panorama: el ayuntamiento de Madrid ha decidido, por fin, cumplir un par de promesas electorales que ya nadie esperaba: la llamada M-10 (un anillo ciclista alrededor del centro de la ciudad) y un servicio municipal de alquiler de bicis al estilo del que existe desde hace años en Sevilla y otras ciudades.

La M-10 será un anillo que circunvalará el centro de Madrid y que se construirá reservando un carril de la calzada para uso preferente de los ciclistas. Los automóviles podrán circular también por este carril pero siempre a una velocidad inferior a 30 kmh. La construcción comenzará inmediatamente y está previsto que concluya antes de finalizar el año puesto que la inversión es mínima y apenas consistirá en la señalización horizontal y vertical necesaria. Durante el año que viene está prevista la construcción de otros 60 kms de carriles bicis en el centro de Madrid para complementar esta medida.

Plano del proyecto de la M10 en Madrid

Además, MyBici, el servicio municipal de alquiler de bicis de Madrid debería de empezar a funcionar el 1 de mayo de 2014 y contará inicialmente con más de 1.500 bicicletas repartidas entre 120 aparcamientos, todos ellos en en el centro de Madrid. El servicio será muy similar al que ya existe con gran éxito en muchas capitales europeas y españolas salvo en un punto muy polémico: además del coste anual de abono de 25? habrá que pagar desde el primer minuto de utilización. El coste de la primera media hora será de 0,5? mientras que en la mayoría de las ciudades estos primeros 30 minutos son gratuitos.

Veremos, pues, como evoluciona todo esto. Y si quieres seguir informado de estos temas con mucho más rigor y asiduidad que en este blog o ponerte en contacto con el “universo ciclista” de Madrid te recomiendo las siguientes fuentes:

ACTUALIZACI?N: Se me olvidó incluir el calendario ciclista de Madrid que mantienen actualizado gracias a sus lectores desde las páginas de enbicipormadrid.es

Bacalao con salsa de pimientos

Bacalao con salsa de pimientosicono distintivo de los textos de recetas de cocina De vuelta a los fogones. Anotad, que esta es sencillita:

  • 4 lomos de bacalao ya desalado.
  • 2 pimientos rojos y uno verde.
  • 2 cebollas.
  • 8 dientes de ajo.
  • una rebanada de pan frito
  • Perejil
  • 250 grs. de tomate frito
  • Un par de hojas de laurel.
  • Medio vaso de vino blanco
  • Pimienta negra molida y aceite de oliva.

Espolvoreamos ligeramente el bacalao con pimienta negra y lo reservamos. Picamos la cebolla, los ajos y los pimientos y lo sofreímos todo. Cuando está bien pochado (pero cuidando que no se queme en absoluto) lo trituramos con una picadora junto con la rebanada de pan frito, lo mezclamos bien con el tomate y añadimos medio vaso de vino blanco y otro medio de agua. Lo devolvemos a la cacerola, añadimos las hojas de laurel y, esperamos a que empiece a hervir. Colocamos los lomitos de bacalao, espolvoreamos generosamente con perejil fresco bien picado y lo dejamos cocer, cubierto y a fuego lento, durante unos 15 minutos por cada lado.

Mi intención original era hacer bacalao a la vizcaína pero parece ser otra de esas recetas con miles de variantes y una lucha encarnizada por defender la verdad única. Y no, ya no me meto en más de esas que estoy mayor… 😉