Descripción

Este procedimiento detalla los pasos necesarios para el cambio de un disco fallado, en un servidor linux, que tiene los discos configurados en RAID 1 por software.
Nota Preliminar

En este ejemplo cuento con dos discos duros, /dev/sda y /dev/sdb. Ambos tienen las mismas particiones, y están configuradas cada una de ellas con la homónima del otro disco, para formar un volumen md, ejemplo:
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
Event: 16
md0 : active raid1 sdb1[1] sda1[0](F)
128384 blocks [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)
2618496 blocks [2/1] [_U]

md2 : active raid1 sdb3[1] sda3[0](F)
2096384 blocks [2/1] [_U]

md3 : active raid1 sdb5[1] sda5[0](F)
2096384 blocks [2/1] [_U]

md4 : active raid1 sdb6[1] sda6[0](F)
1052160 blocks [2/1] [_U]

md7 : active raid1 sdb7[1] sda7[0](F)
9004288 blocks [2/1] [_U]

md5 : active raid1 sdb8[1] sda8[0](F)
24458816 blocks [2/1] [_U]

md6 : active raid1 sdb9[1] sda9[0]
36692352 blocks [2/1] [UU]

unused devices:

Como se puede ver, todas las particiones de /dev/sda excepto la sda9 están marcadas como falladas (F).
Procedimiento
Para quitar el disco malo

Marcamos las particiones que no estén en Failed como tales. Por cada partición no failed hacer:
# mdadm --manage /dev/md6 --fail /dev/sda9

Verificamos que ahora si, todas las particiones del disco malo aparecen en failed:
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
Event: 16
md0 : active raid1 sdb1[1] sda1[0](F)
128384 blocks [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[0](F)
2618496 blocks [2/1] [_U]

md2 : active raid1 sdb3[1] sda3[0](F)
2096384 blocks [2/1] [_U]

md3 : active raid1 sdb5[1] sda5[0](F)
2096384 blocks [2/1] [_U]

md4 : active raid1 sdb6[1] sda6[0](F)
1052160 blocks [2/1] [_U]

md7 : active raid1 sdb7[1] sda7[0](F)
9004288 blocks [2/1] [_U]

md5 : active raid1 sdb8[1] sda8[0](F)
24458816 blocks [2/1] [_U]

md6 : active raid1 sdb9[1] sda9[0](F)
36692352 blocks [2/1] [_U]

unused devices:

Ahora debemos quitar cada una de las particiones del disco fallado de su md correspondiente. Por lo que por cada partición se ejecuta el siguiente comando (cambiando md? y sd?? por lo que corresponda)
mdadm --manage /dev/md0 --remove /dev/sda1

Vemos que todas las particiones han desaparecido de su dispositivo correspondiente:
cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
Event: 24
md0 : active raid1 sdb1[1]
128384 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
2618496 blocks [2/1] [_U]

md2 : active raid1 sdb3[1]
2096384 blocks [2/1] [_U]

md3 : active raid1 sdb5[1]
2096384 blocks [2/1] [_U]

md4 : active raid1 sdb6[1]
1052160 blocks [2/1] [_U]

md7 : active raid1 sdb7[1]
9004288 blocks [2/1] [_U]

md5 : active raid1 sdb8[1]
24458816 blocks [2/1] [_U]

md6 : active raid1 sdb9[1]
36692352 blocks [2/1] [_U]

unused devices:

Ahora cambiamos físicamente el disco en caliente. Verificamos que el disco que ponemos sea exactamente igual que el que quitamos:
# fdisk -l

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sda doesn't contain a valid partition table

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1        16    128488+  fd  Linux raid autodetect
/dev/sdb2            17       342   2618595   fd  Linux raid autodetect
/dev/sdb3           343       603   2096482+  fd  Linux raid autodetect
/dev/sdb4           604      9729  73304595    5  Extended
/dev/sdb5           604       864   2096451   fd  Linux raid autodetect
/dev/sdb6           865       995   1052226   fd  Linux raid autodetect
/dev/sdb7           996      2116   9004401   fd  Linux raid autodetect
/dev/sdb8          2117      5161  24458931   fd  Linux raid autodetect
/dev/sdb9          5162      9729  36692428+  fd  Linux raid autodetect

....

Como se vé, la geometría de ambos discos coincide. Con lo que podemos copiar la tabla de particiones de un disco al otro:
# sfdisk -d /dev/sdb | sfdisk /dev/sda

Si los discos no fueran iguales, hay que particionar a mano con fdisk, procurando que el nuevo disco tenga igual o mayor cantidad de bloques en todas y cada una de las particiones.

Verificamos que las particiones coinciden:
# fdisk -l

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        16    128488+  fd  Linux raid autodetect
/dev/sda2            17       342   2618595   fd  Linux raid autodetect
/dev/sda3           343       603   2096482+  fd  Linux raid autodetect
/dev/sda4           604      9729  73304595    5  Extended
/dev/sda5           604       864   2096451   fd  Linux raid autodetect
/dev/sda6           865       995   1052226   fd  Linux raid autodetect
/dev/sda7           996      2116   9004401   fd  Linux raid autodetect
/dev/sda8          2117      5161  24458931   fd  Linux raid autodetect
/dev/sda9          5162      9729  36692428+  fd  Linux raid autodetect

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1        16    128488+  fd  Linux raid autodetect
/dev/sdb2            17       342   2618595   fd  Linux raid autodetect
/dev/sdb3           343       603   2096482+  fd  Linux raid autodetect
/dev/sdb4           604      9729  73304595    5  Extended
/dev/sdb5           604       864   2096451   fd  Linux raid autodetect
/dev/sdb6           865       995   1052226   fd  Linux raid autodetect
/dev/sdb7           996      2116   9004401   fd  Linux raid autodetect
/dev/sdb8          2117      5161  24458931   fd  Linux raid autodetect
/dev/sdb9          5162      9729  36692428+  fd  Linux raid autodetect

....

Ahora agregamos cada partición al dispositivo correspondiente. Ejecutamos el comando siguiente (cambiando md? y sd?? por lo que corresponda):
mdadm --manage /dev/md0 --add /dev/sda1

Mientras se está restaurando el mirror podemos ver el avance de la sincronización de la siguiente forma:
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
Event: 35
md0 : active raid1 sda1[0] sdb1[1]
128384 blocks [2/2] [UU]

md1 : active raid1 sda2[2] sdb2[1]
2618496 blocks [2/1] [_U]
[==>..................]  recovery = 11.7% (308352/2618496) finish=7.3min speed=5265K/sec
md2 : active raid1 sda3[2] sdb3[1]
2096384 blocks [2/1] [_U]

md3 : active raid1 sda5[2] sdb5[1]
2096384 blocks [2/1] [_U]

md4 : active raid1 sda6[2] sdb6[1]
1052160 blocks [2/1] [_U]

md7 : active raid1 sda7[2] sdb7[1]
9004288 blocks [2/1] [_U]

md5 : active raid1 sda8[2] sdb8[1]
24458816 blocks [2/1] [_U]

md6 : active raid1 sda9[2] sdb9[1]
36692352 blocks [2/1] [_U]

unused devices:

Como se vé se está recuperando el md1, y está al 11,7% de copia.
Una vez terminado el proceso de sincronización se ve que el estado de los dispositivos vuelve a la normalidad:
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
Event: 43
md0 : active raid1 sda1[0] sdb1[1]
128384 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
2618496 blocks [2/2] [UU]

md2 : active raid1 sda3[0] sdb3[1]
2096384 blocks [2/2] [UU]

md3 : active raid1 sda5[0] sdb5[1]
2096384 blocks [2/2] [UU]

md4 : active raid1 sda6[0] sdb6[1]
1052160 blocks [2/2] [UU]

md7 : active raid1 sda7[2] sdb7[1]
9004288 blocks [2/2] [UU]

md5 : active raid1 sda8[2] sdb8[1]
24458816 blocks [2/2] [UU]

md6 : active raid1 sda9[2] sdb9[1]
36692352 blocks [2/2] [UU]

unused devices:
   
© Copyright © 2014 Web de Guillermo Adrián Molina. All Rights Reserved.