systemadmin.es > Storage > Añadir o quitar discos en fallo de un RAID por software

Añadir o quitar discos en fallo de un RAID por software

Ayer Esteban preguntaba como monitorizar un RAID por software y cuales eran las operaciones a realizar cuando fallaba un disco:

Suponiendo el siguiente RAID de ejemplo que he creado con ficheros:

# losetup /dev/loop2 g1
# losetup /dev/loop3 g2
# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/loop2 /dev/loop3 
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? 
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

Podemos monitorizar los cambios en el /proc/mdstat o de la salida del mdadm –query –detail. Con todos los disco activos tendremos:

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 loop3[1] loop2[0]
      1048564 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Tue Feb 15 19:06:14 2011
     Raid Level : raid1
     Array Size : 1048564 (1024.16 MiB 1073.73 MB)
  Used Dev Size : 1048564 (1024.16 MiB 1073.73 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Feb 15 19:07:29 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : croscat.systemadmin.es:1  (local to host croscat.systemadmin.es)
           UUID : 86e1135f:abfc9565:a789be2d:67cec3cb
         Events : 32

    Number   Major   Minor   RaidDevice State
       0       7        2        0      active sync   /dev/loop2
       1       7        3        1      active sync   /dev/loop3

En el caso que se produzca un fallo en el disco producirá el mismo efecto que si usamos la opción –fail de mdad:

# mdadm --fail /dev/md1 /dev/loop3 
mdadm: set /dev/loop3 faulty in /dev/md1

Cambiando el resultado del mdadm –query –detail de esta forma:

# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Tue Feb 15 19:06:14 2011
     Raid Level : raid1
     Array Size : 1048564 (1024.16 MiB 1073.73 MB)
  Used Dev Size : 1048564 (1024.16 MiB 1073.73 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Feb 15 19:10:48 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : croscat.systemadmin.es:1  (local to host croscat.systemadmin.es)
           UUID : 86e1135f:abfc9565:a789be2d:67cec3cb
         Events : 34

    Number   Major   Minor   RaidDevice State
       0       7        2        0      active sync   /dev/loop2
       1       0        0        1      removed

       1       7        3        -      faulty spare   /dev/loop3

En el /proc/mdstat nos encontraremos con una F al lado del disco en fallo:

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 loop3[1](F) loop2[0]
      1048564 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>

Para substituirlo primero deberemos eliminarlo del RAID:

# mdadm --remove /dev/md1 /dev/loop3 
mdadm: hot removed /dev/loop3 from /dev/md1

Mediante el estado del mdadm –query –detail, podemos ver como se encuentra “degraded“, ya que se un RAID1 de un solo disco:

# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Tue Feb 15 19:06:14 2011
     Raid Level : raid1
     Array Size : 1048564 (1024.16 MiB 1073.73 MB)
  Used Dev Size : 1048564 (1024.16 MiB 1073.73 MB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Tue Feb 15 19:11:17 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : croscat.systemadmin.es:1  (local to host croscat.systemadmin.es)
           UUID : 86e1135f:abfc9565:a789be2d:67cec3cb
         Events : 38

    Number   Major   Minor   RaidDevice State
       0       7        2        0      active sync   /dev/loop2
       1       0        0        1      removed

Mientras que en el /proc/mdstat podemos darnos cuenta no nos indica ningún disco en fallo, porque realment no lo hay. El RAID sigue degradado porque nos indica que solo dispone de un disco de los 2 que deberían existir: Nos esta marcando [2/1] [U_] en lugar de [2/2] [UU] que marcaría si es RAID tuviera todos los discos online:

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 loop2[0]
      1048564 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>

Para volver a reconstruir el RAID deberemos añadir un disco nuevo mediante –add:

# mdadm --add /dev/md1 /dev/loop3 
mdadm: re-added /dev/loop3

A continuación podremos ver el progreso también mediante el /proc/mdstat igual que lo vemos mientras estamos creando el RAID:

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 loop3[1] loop2[0]
      1048564 blocks super 1.2 [2/2] [UU]
      [===>.................]  resync = 17.4% (182912/1048564) finish=0.8min speed=16628K/sec
      
unused devices: <none>

One comment to “Añadir o quitar discos en fallo de un RAID por software”

  1. Muy bien explicado gracias por el articulo

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>