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