En esta ocasión vamos a ver como regenerar un RAID por software en Linux.
Se ha detectado un error de tipo SMART mediante:
Diagnostico smarctl:
[root@simba ~]# smartctl -H /dev/sda
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-2.6.32-279.el6.x86_64] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 001 001 051 Pre-fail Always FAILING_NOW 330223
Tenemos el HD sda en pre-fail y con un mensaje bastante alarmante, tenemos que eliminarlo del Raid para sustituirlo.
Podemos ver el estado del RAID:
root@simba ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
511988 blocks super 1.0 [2/2] [UU]
md3 : active raid1 sdb5[1] sda5[0]
1924327292 blocks super 1.1 [2/2] [UU]
bitmap: 1/15 pages [4KB], 65536KB chunk
md2 : active raid1 sdb3[1] sda3[0]
8190968 blocks super 1.1 [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
20478908 blocks super 1.1 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
Todo está bien si aparece UU, si solo vemos una es que hay algún fallo o está degradado. En este caso el RAID todavía está bien, pero el HD está en pre-fail, no es incompatible.
Antes de continuar vamos a verificar que grub está instalado en los 2 HD:
grub
grub> find /grub/stage1
(hd0,0)
(hd1,0)
Está en sda y sdb. Ok podemos continuar porque uno de los pasos es reiniciar el equipo y si no tuviésemos instalado grub en los 2 HDs, podría ser que nos encontrasemos con que la máquina no arranca (que siempre es una sorpresa desagradable).
El disco se está usando por md0, md1, md2 y md3. Marcamos como fallo para que el rendimiento no se degrade:
mdadm --manage /dev/md0 --fail /dev/sda1
mdadm --manage /dev/md1 --fail /dev/sda2
mdadm --manage /dev/md2 --fail /dev/sda3
mdadm --manage /dev/md3 --fail /dev/sda5
Ahora tenemos los discos marcados como fallo:
[root@simba ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0](F)
511988 blocks super 1.0 [2/1] [_U]
md3 : active raid1 sdb5[1] sda5[0](F)
1924327292 blocks super 1.1 [2/1] [_U]
bitmap: 1/15 pages [4KB], 65536KB chunk
md2 : active raid1 sdb3[1] sda3[0](F)
8190968 blocks super 1.1 [2/1] [_U]
md1 : active raid1 sdb2[1] sda2[0](F)
20478908 blocks super 1.1 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>
Eliminamos el HD del RAID de forma definitiva:
mdadm --manage /dev/md0 --remove /dev/sda1
mdadm --manage /dev/md1 --remove /dev/sda2
mdadm --manage /dev/md2 --remove /dev/sda3
mdadm --manage /dev/md3 --remove /dev/sda5
Ahora ya hemos excluido sda de los RAIDs:
[root@simba ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
511988 blocks super 1.0 [2/1] [_U]
md3 : active raid1 sdb5[1]
1924327292 blocks super 1.1 [2/1] [_U]
bitmap: 4/15 pages [16KB], 65536KB chunk
md2 : active raid1 sdb3[1]
8190968 blocks super 1.1 [2/1] [_U]
md1 : active raid1 sdb2[1]
20478908 blocks super 1.1 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>
Paramos la máquina, sustituimos el disco sda y arrancamos.
Ahora tenemos sdb con datos y sda totalmente vacío, copiamos la tabla de particiones de sdb a sda (mucho cuidado con no equivocarse) con:
[root@simba ~]# sfdisk -d /dev/sdb | sfdisk -f /dev/sda
Comprobando que nadie esté utilizando este disco en este momento...
Atención: la partición extendida no empieza en un límite de cilindro.
DOS y Linux interpretarán el contenido de forma diferente.
Correcto
Disco /dev/sda: 243201 cilindros, 255 cabezas, 63 sectores/pista
/dev/sda: tipo de tabla de particiones no reconocido
Situación anterior:
No se ha encontrado ninguna partición
Situación nueva:
Unidades = sectores de 512 bytes, contando desde 0
Disp. Inicio Principio Fin Nº sect. Id Sistema
/dev/sda1 * 2048 1026047 1024000 fd Linux raid autodetect
/dev/sda2 1026048 41986047 40960000 fd Linux raid autodetect
/dev/sda3 41986048 58370047 16384000 fd Linux raid autodetect
/dev/sda4 58370048 3907029167 3848659120 5 Extendida
/dev/sda5 58372096 3907028991 3848656896 fd Linux raid autodetect
Atención: la partición 1 no termina en un límite de cilindro
La nueva tabla de particiones se ha escrito correctamente
Volviendo a leer la tabla de particiones...
Si ha creado o modificado una partición DOS, como /dev/foo7, utilice dd(1)
para poner a cero los 512 primeros bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(Véase fdisk(8).)
Añadimos los volúmenes:
mdadm --manage /dev/md0 --add /dev/sda1
mdadm --manage /dev/md1 --add /dev/sda2
mdadm --manage /dev/md2 --add /dev/sda3
mdadm --manage /dev/md3 --add /dev/sda5
Ahora se podría ver el estado de la reconstrucción:
[root@simba ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[2] sdb1[1]
511988 blocks super 1.0 [2/2] [UU]
md3 : active raid1 sda5[2] sdb5[1]
1924327292 blocks super 1.1 [2/1] [_U]
resync=DELAYED
bitmap: 7/15 pages [28KB], 65536KB chunk
md2 : active raid1 sda3[2] sdb3[1]
8190968 blocks super 1.1 [2/1] [_U]
resync=DELAYED
md1 : active raid1 sda2[2] sdb2[1]
20478908 blocks super 1.1 [2/1] [_U]
[=>...................] recovery = 5.8% (1198848/20478908) finish=4.0min speed=79923K/sec
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>
Una vez hayan terminado las réplicas podemos verificar que grub está instalado en los 2 HDs de nuevo.
grub
grub> find /grub/stage1
(hd0,0)
(hd1,0)
En este caso ya estaba replicado pero se puede volver a configurar si es necesario, por si las moscas (en (hd0,0) sda1):
[root@simba ~]# grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> find /grub/stage1
find /grub/stage1
(hd0,0)
(hd1,0)
grub> device (hd0) /dev/sda
device (hd0) /dev/sda
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub> quit
quit
Y listos, espero os sirva de ayuda.