Verificar y reconstruir el RAID Software en Linux


Introducción


Esta guía le servirá para reconstruir el RAID SW de su servidor dedicado.

Confirme que su servidor tiene RAID por software antes de utilizarla.

Procedimiento

Para gestionar el RAID por SOFTWARE, utilizaremos mdadm.


ATENCIÓN /!\

Es peligroso jugar con MDADM si no conocemos bien su funcionamiento.

Se arriesga a perder datos. Realice una copia de seguridad (BACKUP) de sus datos antes de comenzar los pasos de esta guía.



Instalación de MDADM


El conjunto de programas MDADM no está instalado en el servidor por defecto. Deberá instalarlo siguiendo estos pasos :


En release2, Gentoo:

# emerge mdadm

Calculating dependencies... done!
>>> Verifying ebuild Manifests...

>>> Emerging (1 of 1) sys-fs/mdadm-2.6.2 to /
Adjusting permissions recursively: '/usr/portage/distfiles/'
>>> Downloading 'http://mirror.ovh.net/gentoo-distfiles/distfiles/mdadm-2.6.2.tar.bz2'
--19:47:59-- http://mirror.ovh.net/gentoo-distfiles/distfiles/mdadm-2.6.2.tar.bz2
=> `/usr/portage/distfiles/mdadm-2.6.2.tar.bz2'
....




En Debian, Ubuntu :

# apt-get install mdadm

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
mdadm
Necesito descargar 237kB de archivos.
Se utilizarán 676kB de espacio de disco adicional después de esta operación.
Descargados 237kB en 1s (236kB/s)
Preconfigurando paquetes ...
Seleccionando el paquete mdadm previamente no seleccionado.

Configurando mdadm ...
Generating array device nodes... done.
Generating mdadm.conf... done.
Removing any system startup links for /etc/init.d/mdadm-raid ...
* Starting MD monitoring service mdadm --monitor [ OK ]





En release1, Redhat 7.x :

# rpm -Uvh --nodeps ftp://ftp.ovh.net/made-in-ovh/sources/mdadm-2.5.5p1-1.i386.rpm

Retrieving ftp://ftp.ovh.net/made-in-ovh/sources/mdadm-2.5.5p1-1.i386.rpm
Preparing... ########################################### [100%]
1:mdadm ########################################### [100%]




Si utiliza otra distribución, deberá instalarlo a través de los repositorios de dicha distribución.

Utilización


Una vez instalado, para consultar el modo de utilización utilice la opción --help :


# mdadm --misc --help
Usage: mdadm misc_option devices...

This usage is for performing some task on one or more devices, which
may be arrays or components, depending on the task.
The --misc option is not needed (though it is allowed) and is assumed
if the first argument in a misc option.

Options that are valid with the miscellaneous mode are:
--query -Q : Display general information about how a device relates to the md driver
--detail -D : Display details of an array
--examine -E : Examine superblock on an array component
--examine-bitmap -X: Display contents of a bitmap file
--zero-superblock : erase the MD superblock from a device.
--run -R : start a partially built array
--stop -S : deactivate array, releasing all resources
--readonly -o : mark array as readonly
--readwrite -w : mark array as readwrite
--test -t : exit status 0 if ok, 1 if degrade, 2 if dead, 4 if missing




Verificar estado del RAID


Generalmente los servidores tienen 2 particiones de RAID definidas, de sistema y de datos (/dev/md1 y /dev/md2).

Dependiendo de su configuración y su distribución puede tener una única partición (/dev/md1) o bien más particiones (/dev/md3, /dev/md4, etc...)


Para conocer los datos acerca del estado del RAID utilice la opción --misc :


# mdadm --misc --detail /dev/md1
/dev/md1:
Version : 00.90.00
Creation Time : Tue Nov 7 22:01:16 2006
Raid Level : raid1
Array Size : 3068288 (2.93 GiB 3.14 GB)
Device Size : 3068288 (2.93 GiB 3.14 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Wed Nov 8 15:42:35 2006
State : active, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 4a9a446d:af55e24b:b311aa61:8dc74ed4
Events : 0.12

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 0 0 1 removed



  • Podemos ver que existe un RAID1 de 3GB que está en modo degradado ya que falta el disco sdb1 (removed). Probablemente dicho disco ha sido reemplazado por otro nuevo.



Verificación de particiones


Para verificar si sus discos tienen particiones introduzca el comando

# fdisk -l



Todos los discos del RAID (generalmente sda y sdb) deben tener las mismas particiones.

Nota : En el caso de que su servidor acabe de sufrir un cambio de disco, el nuevo disco se entrega sin el RAID configurado y el nuevo disco no contiene ninguna partición.



Redefinir particiones en disco nuevo

En el caso que uno de los discos no tenga partición alguna, hay que copiar la tabla de particiones, del disco intacto que tiene las particiones y los datos, hacia el nuevo disco.

Deberá definir las particiones a partir de uno de los discos que siguen en línea.

Para ello puede utilizar el comando sfdisk :


# sfdisk -d /dev/disco_origen | sfdisk -f /dev/disco_destino




Ejemplos :

En el caso de un cambio de SDA (sda vacío) :

# sfdisk -d /dev/sdb | sfdisk -f /dev/sda



En el caso de un cambio de SDB (sdb vacío) :


# sfdisk -d /dev/sda | sfdisk -f /dev/sdb



Una vez terminada la creación de particiones, podemos proceder a verificar el estado del RAID y en su caso, añadirlas al RAID a través de MDADM según se indica en los pasos siguientes.

Nota : Si tiene varias particiones definidas en RAID (md1, md2, md3...) deberá verificar el estado del RAID para cada partición de RAID y lanzar una reconstrucción para cada una de ellas.




Añadir un disco en modo degradado


Si el RAID está degradado deberemos añadir el disco ausente (removed).

Hay que ir partición por partición, añadiendo el disco al disco RAID mdX correspondiente.

Añadir partición de datos

Para añadir un disco de datos al RAID, utilizamos la opción "--add".


# mdadm /dev/discoRAID --manage --add /dev/disco_ausente


Nota : Si tiene varias particiones definidas en RAID (md1, md2, md3...) deberá verificar el estado del RAID para cada partición de RAID y lanzar una reconstrucción para cada una de ellas.


Ejemplo :

Por ejemplo para añadir sdb1 y sdb2 a los RAID md1 y md2 correspondientes :


# mdadm /dev/md1 --manage --add /dev/sdb1
mdadm: hot added /dev/sdb1

# mdadm /dev/md2 --manage --add /dev/sdb2
mdadm: hot added /dev/sdb1




Añadir SWAP

Para añadir una partición de intercambio swap utilizamos el comando mkswap:


# mkswap /dev/disco_swap_ausente

# swapon -a



Por ejemplo para añadir la partición sdb3 al swap del sistema :


# mkswap /dev/sdb3

# swapon -a



Ejemplo : Reconstruir RAID1 con disco sdb nuevo


He aquí un ejemplo completo de los comandos, para añadir el disco sdb que acaba de fallar, al RAID1 ya existente. En este caso, el disco sdb ha sido sustituido.

Verificar particiones

Primero verificamos las particiones de los discos.
En nuestro ejemplo, las particiones son las siguientes :


# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005e2bb

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2550 20480000 fd Linux raid autodetect
/dev/sda3 2550 92408 720759808 fd Linux raid autodetect
/dev/sda2 92408 92536 1024000 82 Linux swap / Solaris


Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00077ac7

Device Boot Start End Blocks Id System




Como podemos ver, el disco sdb está vacío. Copiamos las particiones con el comando sfdisk.


# sfdisk -d /dev/sda | sfdisk /dev/sdb



A continuación, reconstruimos los RAID presentes con las particiones ausentes (sdb1 y sdb2) y reasignamos la swap sobre sdb3.


Reconstruimos el RAID md1

Luego añadimos el disco sdb1 en el RAID en modo degradado md1:


# mdadm /dev/md1 --manage --add /dev/sdb1
mdadm: hot added /dev/sdb1



El RAID en reconstrucción :


# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md1 : active raid1 sdb1[2] sda1[0]
3068288 blocks [2/1] [U_]
[=>...................] recovery = 5.4% (167028/3068288) finish=0.8min speed=55676K/sec
md2 : active raid1 sda2[0]
240597376 blocks [2/1] [U_]



Al cabo de algunos minutos, la reconstrucción termina :


# mdadm --misc --detail /dev/md1
/dev/md1:
Version : 00.90.00
Creation Time : Tue Nov 7 22:01:16 2006
Raid Level : raid1
Array Size : 3068288 (2.93 GiB 3.14 GB)
Device Size : 3068288 (2.93 GiB 3.14 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Wed Nov 8 16:01:02 2006
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : 4a9a446d:af55e24b:b311aa61:8dc74ed4
Events : 0.14

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1



Reconstruimos el RAID md2

Vamos a repetir el proceso con el RAID md2 :


# mdadm /dev/md2 --manage --add /dev/sdb2
mdadm: hot added /dev/sdb2


La reconstrucción en curso:


# mdadm --misc --detail /dev/md2
/dev/md2:
Version : 00.90.00
Creation Time : Tue Nov 7 22:01:16 2006
Raid Level : raid1
Array Size : 240597376 (229.45 GiB 246.37 GB)
Device Size : 240597376 (229.45 GiB 246.37 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Wed Nov 8 16:06:43 2006
State : active, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1

Rebuild Status : 0% complete

UUID : e8754328:26f28599:8b834aba:ade37773
Events : 0.10

Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 0 0 1 removed

2 8 18 2 spare /dev/sdb2

# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md1 : active raid1 sdb1[1] sda1[0]
3068288 blocks [2/2] [UU]

md2 : active raid1 sdb2[2] sda2[0]
240597376 blocks [2/1] [U_]
[>....................] recovery = 0.2% (655104/240597376) finish=73.2min speed=54592K/sec
unused devices:




Verificar el tamaño de SWAP

Por último deberá verificar el tamaño del espacio de intercambio swap.

En nuestro ejemplo las particiones sda3 y sdb3 están definidas como la partición de SWAP.


# cat /proc/swaps

Filename Type Size Used Priority
/dev/sda3 partition 522104 43984 -1



Deberá por tanto añadir el swap al disco que acaba de añadir al RAID (/dev/sdb3 en nuestro ejemplo).


# mkswap /dev/sdb3

# swapon -a



Puede verificar con el comando "free" que todo el espacio de intercambio está de nuevo activo.


# free
total used free shared buffers cached
Mem: 767740 755676 12064 0 24952 239392
-/+ buffers/cache: 491332 276408
Swap: 522104 43984 437420



Ensamblar un RAID no activo


En el caso que un RAID comporte más de 2 discos, es posible que al iniciarse se quede inactivo.

Por ejemplo si falla md3 :


# mdadm --misc --detail /dev/md3
/dev/md3: is an md device which is not active

# mdadm -R /dev/md3
mdadm: failed to run array /dev/md3: Invalid argument



En este caso, no es posible activarlo de forma automática, luego habrá que verificar manualmente las particiones que forman el RAID y ensamblarlo manualmente.


Procedimiento de ensamblado manual

Previamente debemos chequear las particiones que están bien con la opción "--examine"

Por ejemplo para la partición "sda3" :

# mdadm --examine /dev/sda3
/dev/sda3:
Magic : a92b4efc
Version : 00.90.00
UUID : 7deceb3e:ea8c5e13:b50259b0:50d96b37
Creation Time : Tue Dec 15 20:56:29 2009
Raid Level : raid5
Used Dev Size : 0
Raid Devices : 4
Total Devices : 4
Preferred Minor : 4

Update Time : Mon Sep 6 21:00:01 2010
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Checksum : af2e82c8 - correct
Events : 9



En este caso, la partición del disco sda, está correcta. Al tener un RAID5 de 4 discos/particiones, si nos han cambiado un disco, habría que iniciar la el RAID de la partición md3, sólo con 3 discos/particiones.

Repetimos la operación "--examine" con el resto de discos/particiones del RAID (sdb3, sdc3 y sdd3) del RAID para saber qué discos están correctos. Si tres de los discos/particiones están correctos, es posible ensamblar con los discos/particiones restantes (correctos) con la opción "--assemble".

En nuestro ejemplo el md3, un RAID5 de 4 discos, nos ha fallado y nos han cambiado el disco sdb. Luego por tanto, la partición /dev/sdb3 no está activa y es necesario reiniciar el RAID md3 con las 3 particiones correctas restantes (sda3, sdc3 y sdd3) con el comando :


# mdadm --assemble --force /dev/md3 /dev/sd[acd]3


Nota : Cambie el valor sd[acd]3 por las particiones correctas en su caso.



Una vez que el RAID /dev/md3 esté activo, podemos añadir el disco nuevo (sdb3) al RAID (md3) según el procedimiento anterior "Añadir un disco en modo degradado".


# mdadm /dev/md3 --manage --add /dev/sdb3
mdadm: hot added /dev/sdb3



Antes de volver a montar el disco/partición afectado, es conveniente hacer un chequeo de la partición.

# fsck /dev/md3
[....]

# mount /dev/md3



Reiniciar un RAID irrecuperable


Si el RAID que teníamos es irrecuperable (por ejemplo un RAID 0) :


# mdadm --misc --detail /dev/md4
/dev/md4: is an md device which is not active

# mdadm -R /dev/md4
mdadm: /dev/md4 assembled from 1 drive - not enough to start the array.


# mdadm --examine /dev/sda4
/dev/sda3:
Magic : a92b4efc
Version : 00.90.00
UUID : 7deceb3e:ea8c5e13:b50259b0:50d96b37
Creation Time : Tue Dec 15 20:56:29 2009
Raid Level : raid0
Used Dev Size : 0
Raid Devices : 2
Total Devices : 1
Preferred Minor : 1

Update Time : Mon Sep 6 21:00:01 2010
State : active
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Checksum : af2e82c8 - correct
Events : 9



podemos eliminar el RAID existente y volver a crear uno nuevo. Para ello utilizamos la opción "--create".

ADVERTENCIA /!\ : Esta operación hará que pierda una gran parte de los datos del disco. El RAID en modo 0 no garantiza los datos. Asegúrese de contar con una copia de seguridad de dichos datos antes de continuar.


Por ejemplo si perdemos el RAID md4 por estar en RAID 0, basta con volver a crearlo a partir de las particiones de origen (sda4 y sdb4 en nuestro ejemplo) con los comandos :


# mdadm --stop /dev/md4

# mdadm --create /dev/md4 --chunk=64 --level=raid0 --raid-devices=2 /dev/sda4 /dev/sdb4



Antes de volver a montar el disco/partición afectado, es conveniente hacer un chequeo de la partición.

# fsck /dev/md4
[....]

# mount /dev/md4




Más información
: WindowsReconstruirRaidSoft :: Verificar y reconstruir el RAID Software en Windows
: LinuxRaidSoftRaid0 :: RAID 0/1 con Raid por Software en Linux
: WindowsRaid0 :: RAID 0/1 con Raid por Software en Windows

: ReconstruirRaid :: Verificar y reconstruir el RAID Hardware 3ware
: LinuxRaid0 :: RAID 0/1 con Raid por Hardware 3ware

: ReconstruirRaidLsi :: Verificar y reconstruir el RAID Hardware LSI