Reemplazo de discos en RAID con mdadm

Hace unos días hice mi segundo reemplazo completo de discos de un array MD y quería compartir aquí los pasos que he utilizado (con éxito :D) en ambos casos.

Los dos escenarios fueron similares: dos discos iguales, con iguales particiones y RAID-1 que deben ser reemplazados por otros dos discos iguales pero de mayor tamaño, por lo que el procedimiento fue el mismo en ambos casos.

Para simplificar la guía decidí usar discos con sólo tres particiones: una para/, una para/vary otra paraswap(que no está en RAID). El esquema entonces queda definido de la siguiente manera:

sda (grub)               RAID's 1                sdb (grub)
+------------------+     +-----------------+     +------------------+
| /dev/sda1        |-----| /dev/md0 (/)    |-----| /dev/sdb1        |
+------------------+     +-----------------+     +------------------+
| /dev/sda2        |-----| /dev/md1 (/var) |-----| /dev/sdb2        |
+------------------+     +-----------------+     +------------------+
| /dev/sda3 (swap) |                             | /dev/sdb3 (swap) |
+------------------+                             +------------------+

Los discos que se usarán para reemplazo sonsdcysdd.

NOTA: En la guía sólo se muestra el reemplazo completo de sda por sdc ya que el procedimiento para reemplazar sdb por sdd es el mismo.

1. Particionado de disco

La manera sencilla de copiar la tabla de particiones de una unidad a otra es:

papua:~# sfdisk -d /dev/sda | sfdisk /dev/sdc

Esto copia completamente el esquema del disco origen (sda) al disco destino (sdc). Si el destino es mayor simplemente quedará espacio libre (sin asignar) al final del disco.

2. Reemplazo de particiones en arrays

TIP: Es útil tener visible, en otra terminal y durante todo el proceso, la salida de/proc/mdstatpara visualizar en todo momento el estado del array y poder ver el sincronizado de los discos:

papua:~# watch -t cat /proc/mdstat


Ahora sí, empecemos por el RAID sobre el que está montado/vary quitemossda2:

papua:~# mdadm /dev/md1 --fail /dev/sda2
mdadm: set /dev/sda2 faulty in /dev/md1

papua:~# mdadm /dev/md1 --remove /dev/sda2
mdadm: hot removed /dev/sda2

La salida de/proc/mdstatdebería mostrar conU_el array degradado:

papua:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb2[0]
      14651200 blocks [2/1] [U_]

md0 : active raid1 sdb1[0] sda1[1]
      29294400 blocks [2/2] [UU]

Ahora agreguemossdc2:

papua:~# mdadm /dev/md1 --add /dev/sdc2
mdadm: added /dev/sdc2

Esperamos a que la sincronización termine (nuevamente ver la salida de /proc/mdstat) y hacemos lo mismo para/: repetimos completo el punto 2 cambiando sda2 por sda1 y sdc2 por sdc1.

4. Instalación de GRUB

Instalaremos grub en el MBR desdcpara que el sistema pueda bootear con cualquiera de los discos del array. Agregamos una entrada para el nuevo disco en el archivo/boot/grub/device.map:

echo '(hd2)     /dev/sdc' >> /boot/grub/device.map

Luego procedemos a la instalación:

papua:~# grub --device-map=/boot/grub/device.map
grub> root (hd2,0)
root (hd2,0)
 Filesystem type is reiserfs, partition type 0xfd
grub> setup (hd2)
setup (hd2)
...
grub> quit

5. Reemplazo de swap

Seteamos la partición:

papua:~# mkswap /dev/sdc3
Setting up swapspace version 1, size = 10001936 kB
no label, UUID=b00c3665-151b-4a16-ba57-e0c032f14520

Desmontamos la swap desda3y la montamos ensdc3:

papua:~# swapoff /dev/sda3
papua:~# swapon /dev/sdc3

También es necesario modificar/etc/fstabpara que la swap sea correctamente montada al reiniciar el equipo:

UUID=b00c3665-151b-4a16-ba57-e0c032f14520  none  swap  sw   0    0

Recordar que elUUIDdebe ser el que nos devuelva la salida demkswap, aunque también puede averiguarse mediante

ls -l /dev/disk/by-uuid/ | grep sdc3

6. Fin

Eso es todo. Para remover el otro disco repetimos los pasos del 1 al 5 reemplazando sda por sdb, sdc por sdd y hd2 por hd3.

Tags:

Leave a Reply