miércoles, 10 de noviembre de 2010

Solución al Problema con RAID 1 en CentOS





Si te encuentras en este blog es por que seguramente has tenido el mismo problema que hace algún tiempo tuve con el software RAID en CentOS y por lo que he investigado este problema no solo se presenta en CentOS si no en general con todas las distribuciones que manejan el software RAID.



Descripción del problema:
Al presentarse un fallo en el disco del sistema "hda" el disco que trabaja como espejo (por lo regular "hdb" y en mi caso particular "hdc") debería poderse conectar como disco principal y arrancar el sistema sin problema alguno, sin embargo, al hacer esto nos aparece una hermosa leyenda "GRUB" en pantalla lo cual nos indica que no hay un GRUB instalando en el disco por lo que este no puede ser booteable. Entonces ¿Qué puedo hacer en caso de que mi disco principal tenga una falla física o lógica y este sea irrecuperable? Si se supone que tengo un disco como espejo de mi sistema, esto no debería afectarme ¿No creen?



Está de más preguntarnos el por que no lo han solucionado, etc. Mejor busquemos una buena solución.



Tomaré en cuenta que ya tienes tu RAID 1 configurado, ensamblando y trabajando, realizaremos los cambios necesarios para que el disco espejo pueda bootear sin problema alguno y posteriormente supondremos una falla en nuestro disco Primario-Maestro (hd0,0).



Supongamos que tu arreglo está de la siguiente manera:



RAID ---> DiscoSistema ---> DiscoEspejo

md0 ---> hda1 ---> hdb1

md1 ---> hda2 ---> hdb2

md3 ---> hda3 ---> hdb3


Comenzamos por dar una checada a nuestro arreglo de discos para ver que tal esta funcionando y verificar que no haya ningún fallo.

cat /proc/mdstat

mdadm --detail /dev/md0 <--- Si queremos detalles específicos de cada RAID


Una vez hecho esto, entramos a grub y escribimos lo siguiente:


grub

device (hd1,0) /dev/hdb

root (hd1)

setup (hd1)

quit

Con esto hemos logrado que nuestro disco espejo sea booteable. Sólo nos falta agregar unas lineas en nuestro menu de inicio del grub.


Ponemos lo siguiente:


cd /boot/grub/

vi menu.lst <--- editamos el archivo, puedes usar nano, gedit (si usas gnome), cat, vi me gusta

Dentro del archivo verás el siguiente contenido:

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You do not have a /boot partition. This means that

# all kernel and initrd paths are relative to /, eg.

# root (hd0,0)

# kernel /boot/vmlinuz-version ro root=/dev/md0

# initrd /boot/initrd-version.img

#boot=/dev/md0

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.18-194.el5)

root (hd0,0)

kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md0 rhgb quiet

initrd /boot/initrd-2.6.18-194.el5.img

"menu.lst" 26L, 886C


Despues de la variable default=0 agregamos:


fallback=1


Luego necesitamos definir el perfil de inicio para el disco espejo, de esta manera podremos iniciar desde este sin problema alguno, para eso copiamos las lineas:


title CentOS (2.6.18-194.el5)

root (hd0,0)

kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md0 rhgb quiet

initrd /boot/initrd-2.6.18-194.el5.img


Las pegamos antes de donde dice "menu.lst" (una linea arriba obviamente) y modificamos de tal forma que nos quede algo así:


title CentOS-hdb1 <--- aquí le pueden poner el nombre que gusten, puse ese por comodidad

root (hd1,0) <--- definimos que hay una configuracion de inicio en el hd secundario-maestro

kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md0 rhgb quiet <--- esto se queda igual

initrd /boot/initrd-2.6.18-194.el5.img


Ahora ambos discos son booteables, por lo que tenemos la ventaja de que si se nos truena uno, iniciamos desde el otro, sin embargo, para simular un fallo podemos desconectar cualquiera de los dos y no deberá haber problemas para iniciar.


Ahora bien supongamos que el disco primario maestro tiene una falla y se debe cambiar inmediatamente; entonces deberemos hacer lo siguiente:


Nuestro disco secundario-maestro lo movemos a ser el primario-maestro, es decir, (hd1,0) lo movemos para que sea ahora (hd0,0) y nuestro sistema montará el disco espejo como hda.

Conectamos el nuevo disco como secundario-maestro (hd1,0) y nuestro sistema al ser un disco nuevo lo montará como hdc o hdX(letra siguiente desocupada) dependiendo del caso. Una vez teniendo nuestro nuevo disco y suponiendo que al arrancar CentOS no hiciera toda la configuración y trabajo de añadirlo en el RAID, formatearlo y montar el RAID automáticamente, los pasos del proceso manual serían los siguientes:


mdadm /dev/md0 -a /dev/hdc1

mdadm /dev/md1 -a /dev/hdc2

mdadm /dev/md2 -a /dev(hdc3


Ahora ensamblamos el arreglo:


mdadm -A -s


Checamos que todo este funcionando correcto:


cat /proc/mdstat

mdadm --detail /md0

mdadm --detail /md1

mdadm --detail /md2


Todos nuestros raid estan activos, ahora lo unico que tenemos que hacer es instalar GRUB en nuestro disco hdc:


grub

device (hd1,0) /dev/hdc

root (hd1,0)

setup (hd1)

quit


No es necesario que modifiquemos nada más en el grub debido a que ya está definida la entrada para bootear desde nuestro dispositivo (hd1,0)


Eso es todo, espero que este aporte sea de gran ayuda para todos, en especial a los alumnos de Ing. en Telecomunicaciones de la Universidad Cristóbal Colón.


Referencias:

Documentación Fedora En realidad solo recuerdo que fue ahí donde leí el problema descrito con detalles técnicos.

RAID 1 Problem Aquí encontrarán información sobre este problema

RAID 1 Fedora Guía de RAID Fedora

No hay comentarios:

Publicar un comentario