Tag Archives: raid5

Aumentar el espacio de RAID cambiando los discos

Estabamos a punto de quedarnos sin espacio en uno de los servidores de copias de seguridad, debiamos actuar en consecuencia, pero teníamos un problema. No había más puertos SATA para pinchar discos, teníamos pinchados 4 discos de 1TB para formar el array, la solución que inventamos fue cambiar los discos por discos de 2TB. Pero sólo había dinero para dos discos, luego mantendríamos 2 discos de 1TB y le añadiríamos dos discos más de 2TB. Veamos como se hace.

La solución consiste en eliminar 1 disco y añadir otro para sustituir los discos y añadir luego las dos particiones nuevas para aumentar el espacio.

Para el ejemplo disponemos de particiones de 10MB en una Debian 5.0.3. Partimos de la siguiente configuración:

/dev/md0:
        Version : 00.90
  Creation Time : Sat Jan 15 21:28:39 2011
     Raid Level : raid5
     Array Size : 29952 (29.25 MiB 30.67 MB)
  Used Dev Size : 9984 (9.75 MiB 10.22 MB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan 15 21:28:39 2011
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : dfbcb5a6:fd376e03:9efbd2b1:7507133b
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0      22        1        0      active sync   /dev/hda
       1      22        2        1      active sync   /dev/hdb
       2      22        3        2      active sync   /dev/hdc
       4      22        4        3      active sync   /dev/hdd

A continuación marcamos como fallido y elimininamos hdc así:

# mdadm --fail /dev/md0 /dev/hdc
# mdadm --remove /dev/md0 /dev/hdc

Abrimos la máquina y cambiamos el disco, creamos un par de particiones de 1TB cada una del tipo fd (Linux Raid Autodetect). Cuando tengamos esto, añadimos la primera partición al raid.

# mdadm --add /dev/md0 /dev/sda1

Y vemos como se reconstruye el Raid que dependiendo del caso puede tardar varias horas.

Una vez el raid se ha reconstruido, eliminamos otro disco, hdd como hemos hecho anteriormente, apagamos para sacar el disco y añadir el nuevo disco que será el que amplie el tamaño.

Cuando ya hemos cambiado los discos y añadido las particiones de uno de ellos al Raid estamos como al principio pero disponemos de otro disco, el cual particionamos como el anterior así:

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

Ahora añadimos las nuevas particiones al array

# mdadm --add /dev/md0 /dev/sdb1
# mdadm --add /dev/md0 /dev/sdb2

Estos discos se añaden como Spare (reserva) para decirle que los use hacemos lo siguiente:

# mdadm --grow /dev/md0 --raid-devices=6

Y tras la operación de crecimiento veremos esto

/dev/md0:
        Version : 00.90
  Creation Time : Sat Jan 15 20:51:15 2011
     Raid Level : raid5
     Array Size : 49920 (48.76 MiB 51.12 MB)
  Used Dev Size : 9984 (9.75 MiB 10.22 MB)
   Raid Devices : 6
  Total Devices : 6
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan 15 20:59:48 2011
          State : clean
 Active Devices : 6
Working Devices : 6
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : caf96b94:b704eba2:86b20519:591dba3f
         Events : 0.54

    Number   Major   Minor   RaidDevice State
       0      22        1        0      active sync   /dev/hda
       1      22        2        1      active sync   /dev/hdb
       2      22       66        2      active sync   /dev/sda1
       3      22       65        3      active sync   /dev/sda2
       4      22       68        4      active sync   /dev/sdb1
       5      22       67        5      active sync   /dev/sdb2

Como vemos en la salida del comando hemos crecido en 20MB (en el servidor autentico eran 1.5TB más), ahora toca decirselo al sistema de ficheros, para esto pasamos primero un test a la integridad y luego ampliamos el tamaño.

fsck.ext3 /dev/md0
resize2fs /dev/md0

Es un proceso lento (muy lento) dependiendo del tamaño. Hay que tener cuidado, cuando se sobrepasan los 2TB las tablas de particiones no pueden ser MSDOS.

Recuperar Disco de Raid5

Como ya hemos montado un sistema con Debian Lenny, Raid5 y LVM2 vamos a ver ahora cómo tenemos que proceder si uno de los discos duros falla. Para los ejemplos he construido con VirtualBox un sistema basado en el del ejemplo del post anterior, pero con discos de 10MB, es válido para los propositos de este post, si los discos son más grande lo único que afecta es que las acciones de formateo y reconstrucción serán más largos. Dicho esto vamos al lío.

Dejamos la entrada con esta configuración de Raid:

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active (auto-read-only) raid5 sda[0] sdb[3] sdc[2] sdd[1]
30528 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
unused devices:

La cadena de Us mayúsculas indica el estado del Raid, todas las Us implica todos los discos. Vamos a suponer que falla sdd. En ese caso veríamos algo así:

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active (auto-read-only) raid5 sda[0] sdb[3] sdc[2] sdd[1]
30528 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUU_]
unused devices:

Mostrando que falta un disco. Para reemplazarlo, seguimos estos pasos

  1. Parar el raid
  2. # mdadm --stop /dev/md0
  3. Marcar el disco que ha fallado
  4. # mdadm --manage /dev/md0 --fail /dev/sdd
  5. Eliminar el disco del raid.
  6. # mdadm --manage /dev/md0 --remove /dev/sdd
  7. Apagar el equipo y reemplazar el disco
  8. Agregar el disco al raid
  9. # mdadm --manage /dev/md0 --add /dev/sdd
  10. Listo.

Ahora podemos ir mirando /proc/mdstat para ver el progreso de la reconstrucción que tardará más o menos en función del tamaño. Podemos usar uno de los comandos aparecidos en este Blog, así:

# watch cat /proc/mdstat

Cuando halla finalizado, podemos montar el dispositivo, recordamos que estaba bajo LVM pero este no se ha enterado de nada.

Se Equivocó

Hoy realizaba una nueva instalación de un servidor con una Debian Lenny, instalación desde DVD. Esta máquina hará las veces de Servidor de Directorio para la LAN. Tiene su miga. Partiendo de la base que si un Linux falla, es culpa del administrador (o sea, yo), voy a contar lo que pasó.

En esta instalación el punto más importante estaba en el particionado del disco, el plan era tener la / en raid1 y luego una DAS de 8 Teras en raid5 con LVM2 para /home. Bien, el proceso de instalación avanzó sin problemas hasta la edición del particionado del disco. Físicamente tenemos dos discos sata de 500 GB y el dispositivo /dev/sdc que es la DAS en acceso en bruto, el dispositivo se monta a través de /dev/mapper/datos.

Entonces cuando llegué a este punto de la instalación, el programa me presentó todas estas cosas, tomé sda y creé una partición primaria al final del disco de 490GB, nació sda1, hice lo mismo con sdb, y también nació sdb1, puse los 10GB sobrantes de sda para /boot, ya sda2 y los 10GB de sdb para swap, sdb2. Elegí entonces sda1 y sdb1 y los seleccioné para formar el raid1, nació md0. Posteriormente, le dije que el volumen lógico lo montara en /home. Hasta aquí todo bien.

La instalación prosiguió y al momento de reiniciar e iniciar la nueva instalación… error!! fsck me comenta que la partición /dev/sda2 no tiene una tabla de particiones válida.

CLARO QUE NO es una partición swap, pero es que ahora sda2 no es swap, por alguna razón al reiniciar, el que era /dev/sdc, o sea, el DAS físico había cambiado a /dev/sda! y las líneas en /etc/fstab ya no valían. No todas, al menos. Una vez corregido el inconveniente, reinicié y ya no intentaba checar trozos de disco sin partición.

Aun no entiendo por qué cambió el orden de los dispositivos, cae un mito sobre el poder de Linux, no me esperaba algo de este calibre. Otra cosa que he visto es que también nombra a las particiones en el orden en la que aparecen, no en el orden en el que están físicamente en el disco.

Solucionado el problema, pude irme a casa satisfecho, mañana empezaré la instalación y configuración del nuevo servidor. Pero yo no tuve la culpa!