mdadm
El comando mdadm incluye múltiples opciones para gestionar y monitorizar nuestros dispositivos virtuales RAID. Posee siete modos principales de funcionamiento: create, assemble, monitor, build, grow, manage y misc. Su sintaxis genérica es la siguiente:
mdadm [modo] nombre-dispositivo-raid [opciones] lista-dispositivos-de-disco-o-particiones
sdfasdfasd
-D, --detail:
Esta opción la hemos visto anteriormente y nos da información sobre el volumen RAID especificado.
# mdadm --detail /dev/md/raid0
/dev/md/raid0:
Version : 1.2
Creation Time : Tue Nov 25 11:52:13 2014
Raid Level : raid0
Array Size : 16776192 (16.00 GiB 17.18 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Nov 25 11:52:13 2014
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Name : debian:raid0 (local to host debian)
UUID : 81b238cb:ad54e3a1:69904eee:5a561cc5
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
-s, --scan:
Esta opción acompaña siempre a otra y hace que mdadm busque la información que le falta en /proc/mdstat o en /etc/mdadm/mdadm.conf. Acompañando a la opción anterior, mdadm nos muestra información de todos los sistemas RAID implementados y en el orden en el que se crearon. El formato de la salida es el de las líneas ARRAY del fichero mdadm.conf, las cuales definen los volúmenes RAID.
# mdadm --detail --scan
ARRAY /dev/md/raid0 metadata=1.2 name=debian:raid0 UUID=81b238cb:ad54e3a1:69904eee:5a561cc5
La anterior instrucción puede ejecutarse con --verbose (-v):
# mdadm -Dsv
ARRAY /dev/md/raid0 level=raid0 num-devices=2 metadata=1.2 name=debian:raid0 UUID=81b238cb:ad54e3a1:69904eee:5a561cc5
devices=/dev/sdb,/dev/sdc
-E, --examine:
Con esta opción obtenemos información de los discos o particiones que constituyen el volumen RAID.
# mdadm -E /dev/sdb
/dev/sdb:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 81b238cb:ad54e3a1:69904eee:5a561cc5
Name : debian:raid0 (local to host debian)
Creation Time : Tue Nov 25 11:52:13 2014
Raid Level : raid0
Raid Devices : 2
Avail Dev Size : 16777200 (8.00 GiB 8.59 GB)
Data Offset : 16 sectors
Super Offset : 8 sectors
State : clean
Device UUID : c290b106:328774c0:e9f91625:8fae4341
Update Time : Tue Nov 25 11:52:13 2014
Checksum : ad1dfdca - correct
Events : 0
Chunk Size : 512K
Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing)
-Q, --query:
Esta opción puede usarse junto con un dispositivo para ver si este es un volumen RAID o pertenece a un RAID.
En el siguiente ejemplo se cuestiona sobre un volumen RAID, un dispositivo que pertenece a un RAID y otro que no pertenece.
# mdadm --query /dev/md/raid0
/dev/md/raid0: 15.100GiB raid0 2 devices, 0 spares. Use mdadm --detail for more detail.
# mdadm --query /dev/sdb
/dev/sdb: is not an md array
/dev/sdb: device 0 in 2 device unknown raid0 array. Use mdadm --examine for more detail.
# mdadm --query /dev/sda
/dev/sda: is not an md array
/dev/sda: device 0 in 0 device unknown raid0 array. Use mdadm --examine for more detail.
-S, --stop:
Con esta opción se desactiva el volumen RAID especificado y se liberan los recursos del sistema que estuviera ocupando. Es fundamental, desmontar previamente el RAID para no perder información.
# umount /dev/md/raid0
# mdadm --stop /dev/md/raid0
mdadm: stopped /dev/md/raid0
Con --scan (-s) detendría todos los RAID que estuvieran funcionando.
# mdadm -Ss
mdadm: stopped /dev/md127
--zero-superblock:
Con esta opción se sobreescribe con ceros el superbloque del dispositivo del RAID especificado. El superbloque, de un disco o partición que pertenece a un RAID, almacena información útil para manipularlo. Al dejarlo inutilizado, el sistema RAID ya no puede reconocerlo, como sucedería con un disco al que se le destruye su MBR.
Para eliminar un RAID completamente y liberar los discos para que puedan ser utilizados para otros fines, los pasos a seguir son los siguientes:
- Desmontar el RAID.
- Detener el RAID.
- Machacar el superbloque de los dispositivos que constituyen el RAID.
La eliminación del RAID1 que anteriormente se creó como ejemplo, se realizaría de la siguiente manera:
# umount /var/www
# mdadm --stop /dev/md/raid1
mdadm: stopped /dev/md/raid1
# mdadm --zero-superblock /dev/sdb /dev/sdc /dev/sdd
-A, --assemble:
Esta opción se utiliza para arrancar de forma manual un RAID ya creado que se encuentra detenido (--stop, -S). Hay varias formas de usarla, una de ellas es acompañándola de --scan (-s) para que mdadm busque todos los RAID creados y los arranque:
# mdadm --assemble --scan
mdadm: /dev/md/raid0 has been started with 2 drives.
# mount /dev/md/raid0
Después de arrancar el RAID, no debemos olvidar montarlo para que pueda ser utilizado. En el ejemplo anterior, se supone que existe una línea de montaje de /dev/md/raid0 en /etc/fstab y, por eso podemos utilizar la orden mount de forma abreviada, pues el resto de parámetros que faltan los lee de dicha línea.
También podemos especificar el fichero /dev/mdX y los discos o particiones que lo componen:
# mdadm -A /dev/md127 /dev/sdb /dev/sdc
mdadm: /dev/md127 has been started with 2 drives.
Esta forma tiene el inconveniente de que no crea el enlace simbólico con un nombre más amigable, que en nuestros ejemplos está siendo /dev/md/raid0; en este caso sólo podremos manejar el volumen RAID con /dev/md127, y es probable que en /etc/fstab no lo hayamos utilizado.
Por último, podemos hacer uso del nombre amigable que utilizamos en la creación del volumen RAID, pero para ello, en el fichero mdadm.conf debe estar el RAID definido a través de una línea ARRAY:
# mdadm -A /dev/md/raid0
mdadm: /dev/md/raid0 has been started with 2 drives.
Esto último es gracias a la siguiente línea de mdadm.conf :
ARRAY /dev/md/raid0 metadata=1.2 name=debian:raid0 UUID=81b238cb:ad54e3a1:69904eee:5a561cc5
línea generada con:
# mdadm -Ds
ARRAY /dev/md/raid0 metadata=1.2 name=debian:raid0 UUID=81b238cb:ad54e3a1:69904eee:5a561cc5
Por otro lado, son muy importantes también las opciones que nos permiten modificar el sistema RAID, por ejemplo, para cambiar el número de discos que lo forman, para marcar un disco como fallido, etc. Veámoslas a continuación:
-f, --fail:
Con esta opción marcaremos un dispositivo que haya fallado, lo cual se debe hacer previamente a su eliminación. También puede usarse para simular el fallo de un dispositivo.
Vamos a simular que el dispositivo /dev/sdb del RAID1 de nuestro ejemplo ha fallado:
En primer lugar marcamos como fallido el dispositivo.
# mdadm /dev/md/raid1 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md/raid1
Comprobamos el estado del RAID:
# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sdd[2] sdc[1] sdb[0](F)
8384448 blocks super 1.2 [2/1] [_U]
[====>................] recovery = 21.1% (1777216/8384448) finish=0.6min speed=177721K/sec
unused devices: <none>
Y observamos que /dev/sdd ha dejado de ser un disco reserva y ha pasado a estar activo, que /dev/sdb está marcado como fallido (F), que hay un solo disco funcionando de los dos que componen el RAID (2/1) (_U), y que el disco reserva se está construyendo. Pasado un tiempo volvemos a comprobar el estado:
# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sdd[2] sdc[1] sdb[0](F)
8384448 blocks super 1.2 [2/2] [UU]
unused devices: <none>
y el RAID está reconstruido, esta vez con /dev/sdd y /dev/sdc.
-r, --remove:
Con esta opción sacamos del sistema RAID un dispositivo marcado previamente como fallido. Para el caso anterior:
# mdadm /dev/md/raid1 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md/raid1
# mdadm /dev/md/raid1 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md/raid1
# mdadm --zero-superblock /dev/sdb
Se ha eliminado el superbloque porque queríamos utilizar el disco para otra cosa, ya que el disco no ha fallado realmente, sino que simplemente lo queríamos sacar del RAID.
A los discos reserva no es necesario marcarlos con fail para eliminarlos del RAID.
-a, --add:
Con esta opción se puede añadir un nuevo disco al sistema RAID como reserva (spare), por ejemplo, para añadir el disco que eliminamos anteriormente (/dev/sdb) al RAID1 de nuestro ejemplo, ejecutamos lo siguiente:
# mdadm /dev/md/raid1 --add /dev/sdb
mdadm: added /dev/sdb
y comprobamos el estado para ver que está como reserva:
# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sdb[3](S) sdd[2] sdc[1]
8384448 blocks super 1.2 [2/2] [UU]
unused devices: <none>
-G, --grow:
Este modo de funcionamiento permite añadir nuevos discos a los RAID Lineal, 0, 1, 4, 5 y 6, y así aumentar su tamaño. Para que un disco reserva se convierta en un disco activo, lo que debemos hacer es actualizar el número de dispositivos del RAID. En el caso del RAID 1 de nuestro ejemplo, ejecutaríamos:
mdadm --grow /dev/md/raid1 --raid-devices=3
Tras esto, el RAID se reconstruirá.
En el caso de que el RAID sea Lineal o de nivel 0, los cuales no pueden utilizar discos reserva, para añadir un nuevo disco se debe usar la opción --add (-a) junto con --grow:
mdadm --grow /dev/md/raid0 --raid-devices=3 --add /dev/sdd
En el caso de que los discos se vayan sustituyendo paulatinamente por otros más grandes en los RAID 1, 4, 5 y 6, nos encontraremos con una situación final en la que todos los discos activos actuales serán más grandes que los originales, y el espacio extra no se estará utilizando. Tendremos por tanto que aumentar el tamaño del RAID para que se utilice. Para ello usamos --grow con la opción -s (--size=), y esta última con el valor max para que utilice todos los discos con el mayor tamaño posible, quedando todos iguales.
# mdadm --grow /dev/md/raid1 --size=max
mdadm: component size of /dev/md/raid1 has been set to 12578816K
Licencia: licencia de software libre GPL