miércoles, 21 de mayo de 2014

Configurar RAID 1 a nivel software sobre CentOS.

Dos discos duros los cuales tendrán la siguiente disposición. RAID 1 que nos permitirá mantener los datos mas críticos en dos particiones en espejo, en el caso de fallar uno de los discos no perderíamos datos.

Instalación de paquetes#

Los paquetes necesarios para implementar un RAID en conjunción con un LVM serán los siguientes:
  • mdadm
Para instalarlos teclee en una terminal de BASH lo siguiente:
[BASH]# yum install mdadm 

Instalación y configuración del RAID#

El principal requisito para implementar un RAID sera disponer de dos discos duros de la misma capacidad. Estos discos duros deberán tener asignadas las siguientes particiones: El disco duro numero 1 contendrá dos particiones
  • sda1 sera para la /
  • sda2 sera para la SWAP
El disco duro numero 2 deberá contener igualmente dos particiones
  • sdb1 del mismo tamaño que sda1
  • sdb2 del mismo tamaño que sda2


Estas particiones pueden ser creadas con la ayuda de fdisk. Una vez creadas las particiones solo restara asignar el identificador correspondiente a particiones tipo RAID, para hacerlo haga lo siguiente: Abra una terminal y teclee:
[BASH]# fdisk /dev/[h|s] d [a|b|c]
Donde :
 h 
La letra 'h' hace referencia a un disco duro PATA. Eje: hd
 s 
La letra 's' hace referencia a un disco duro SATA. Eje: sd
 a 
La letra 'a' hace referencia al primer disco duro del equipo
 b 
La letra 'b' hace referencia al segundo disco duro del equipo
 c 
La letra 'c' hace referencia al tercer disco duro del equipo
En nuestro caso, contamos con un solo disco duro PATA en el equipo, por lo que ejecutaremos fdisk de la siguiente manera:
[BASH]# fdisk /dev/hdb
Una vez que la aplicación esta iniciada, se nos presenta el siguiente mensaje:
Command (m for help): 
Si usted presiona la tecla 'm' se imprimirá el menú con las herramientas propias del comando fdisk. Estas herramientas son:
 a 
Conmuta el indicador de iniciable
 b 
Modifica la etiqueta de disco bsd
 c 
Conmuta el indicador de compatibilidad con DOS
 d 
Suprime una partición
 l 
Lista los tipos de particiones conocidos
 m 
Imprime este menú
 n 
Añade una nueva partición
 o 
Crea una nueva tabla de particiones DOS vacía
 p 
Imprime la tabla de particiones
 q 
Sale sin guardar los cambios
 s 
Crea una nueva etiqueta de disco Sun
 t 
Cambia el identificador de sistema de una partición
 u 
Cambia las unidades de visualización/entrada
 v 
Verifica la tabla de particiones
 w 
Escribe la tabla en el disco y sale
 x 
Funciones adicionales (sólo para usuarios avanzados)
Como podemos notar, con la opción "m" podemos imprimir nuevamente este menú. Seleccione del menú, la opción “Cambiar el identificador de sistema de una partición”, para ello teclee la letra 't' , esto nos mostrara la distribución actual de nuestras particiones en nuestro disco duro.
Fdisk, nos preguntara a que partición queremos cambiar el ID, estas particiones serán:
  • sdb1
  • sdb2
Como no conocemos el código hexadecimal para las particiones RAID lanzamos la ayuda para poder visualizar todos los códigos hexadecimales disponibles, para ello teclee la letra 'L' y localiza el código hexadecimal para las particiones RAID. El código hexadecimal para las particiones RAID es el siguiente:
 
fd Linux raid auto
 
Una vez localizado el código hexadecimal, solo restara teclearlo. Para guardar los cambios al disco teclee la letra 'w' El siguiente paso sera asignar y crear el RAID. En una terminal de BASH teclee lo siguiente:
 
[BASH]# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1

 [BASH]# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2 }}}

En donde:
create /dev/md0Sera el nombre del RAID que estamos creando
level=1Le indicamos que tipo de RAID estamos creando, en este caso RAID1
raid-disks=2El numero de dispositivos que forman el RAID
/dev/sda [] /dev/sdb[]La lista de dispositivos que forma parte del RAID

Estos RAID los crearemos en modo degradado, de momento solo añadiremos al RAID los discos que hemos formateado, por lo que las entradas que corresponden al disco /dev/sda las dejamos en missing El siguiente paso sera darles formato a las particiones RAID, para ello teclee lo siguiente (Recuerde que esta acción debe hacerse en nivel de ejecución 1).
 
[BASH]# mkfs.ext3 /dev/md0


[BASH]# mkswap /dev/md1}}}

Una vez hecho esto tenemos que modificar el fichero
/etc/mdadm.conf 

para ello ejecutaremos
[BASH]# mdadm --examine --scan

Que nos devuelve información de nuestro RAID. De dicha información se deberá agregar las siguientes lineas al final del fichero mdadm.conf 
 
ARRAY /dev/md0 level=raid1 num-devices=2 UUI...
ARRAY /dev/md1 level=raid1 num-devices=2 UUI...}}}

Montaje del RAID#

La siguiente acción sera crear los puntos de montaje en donde serán alojadas nuestras particiones RAID. Para ello crearemos dos carpetas dentro de la ruta /mnt como se muestra a continuación.
 
[BASH]# mkdir /mnt/md0
[BASH]# mkdir /mnt/md1}}}

Y luego de crearlas monte sobre ellas las particiones RAID creadas anteriormente
 
[BASH]# mount /dev/md0 /mnt/md0
[BASH]# mount /dev/md0 /mnt/md1}}}

 Ahora modificaremos el archivo
 /etc/fstab 
para que nos monte las particiones RAID como RAIZ y SWAP , para ello deberá sustituir las siguientes lineas:
 
/dev/sda1     /     ext3     defaults,errors=remount-ro     0     1
/dev/sda2 none swap sw 0 0}}}

 Por estas:
 
/dev/md0     /     ext3     defaults,errors=remount-ro     0     1
/dev/md1 none swap sw 0 0}}} 

También se debe modificar el fichero
/etc/mtab 
 
hacemos lo mismo, sustituimos dentro del fichero /dev/sda1 por /dev/md0

Modificando el boteo de Linux#

Ahora editaremos el menú del grub para que arranque el sistema operativo desde la partición RAID que hemos creado, para ello abra el fichero:

/boot/grub/menu.lst

Y duplica las lineas que hacen referencia a la partición en donde se encuentra los ficheros de boteo de linux, en nuestro caso debe ser algo similar a esto:
title      Centos 5.3, kernel 2.6.24-17-generic
root (hd0,0) kernel /boot/vmlinuz-2.6.24-17-generic root=/dev/sda1 ro quiet splash initrd /boot/initrd.img-2.6.24-17-generic quiet}}}

Y modificamos el primero para que apunte a /dev/md0 en el disco (hd1,0). El segundo lo dejamos apuntando a nuestra partición raíz actual por si no arranca correctamente desde /dev/md0. Al final nuestro fichero deberá quedar de la siguiente manera:

title      Centos 5.3, kernel 2.6.24-17-generic
root (hd1,0) kernel /boot/vmlinuz-2.6.24-17-generic root=/dev/md0 ro quiet splash initrd /boot/initrd.img-2.6.24-17-generic quiet title Centos 5.3, kernel 2.6.24-17-generic root (hd0,0) kernel /boot/vmlinuz-2.6.24-17-generic root=/dev/sda1 ro quiet splash initrd /boot/initrd.img-2.6.24-17-generic quiet}}} 


A continuación actualizaremos el ramdisk Ramdisk es una porción de memoria ram la cual se utiliza como si fuera un disco duro. Los discos RAM tienen tamaños establecidos que son como una partición de disco. Los tiempos de acceso para un disco RAM son mucho mas rápidos que en un disco físico Sin embargo, cualquier información guardad en un ram disk se pierde cuando el sistema se apaga o reinicia. Pero son un buen lugar para almacenamiento temporal de datos. Desde la versión 2.4 del kernel de linux se puede encontrar soporte para ramdisks, por lo cual se puede encontrar en cualquier distro moderna de linux Para hacer la actualización teclearemos lo siguiente en consola:
 
[BASH]# update-initramfs -u

Ya solo faltaría copiar todos los datos de / a la nueva partición desde la que va a arrancar ahora, para hacerlo teclee lo siguiente:
 
[BASH]# cp -dpRx / /mnt/md0
Donde:

dpPreserva los los atributos de los ficheros (enlaces simbólicos,permisos, modos de lectura)
RCopia recursivamente el contenido de las carpetas
xLe indica que debe adaptarse al sistema de ficheros nuevo

Ademas de todos los pasos antes descritos debemos activar el grub en los dos discos duros, para ello teclee lo siguiente en una terminal de BASH:
 
[BASH]# grub
grub> root (hd1,0) grub> setup (hd1) grub> root (hd0,0) grub> setup (hd0) exit}}}

Los siguiente sera reiniciar el equipo el cual ya tiene que arrancar desde el RAID que como recordara se encuentra funcionando en modo degradado ya que solo dispone de un disco duro. Lo podemos verificar con el siguiente comando
 
[BASH]# df -h
 
Recuerde la partición /dev/md0 debe estar montada en /.

Ahora que hemos conseguido arrancar el sistema desde el segundo disco duro es hora de preparar las particiones del primer disco para añadirlo al RAID, para hacerlo se tiene que modificar el identificador de estas particiones que al igual que lo hicimos con /dev/sdb1 y /dev/sdb2, se deberá hacer con /dev/sda1 y /dev/sda2.

 Luego de haber hecho el paso anterior añadiremos las particiones del disco duro 1 al RAID.
[BASH]# mdadm --add /dev/md0 /dev/sda1
[BASH]# mdadm --add /dev/md1 /dev/sda2}}} 

Si compruebas ahora el fichero /proc/mdstat veras que se esta sincronizando el RAID, hay que esperar hasta que finalice:
 
[BASH]# more /proc/mdstat
------------------------------------------------------------------------ Personalities : [raid1] md2 : active raid1 sda1[2] sdb1[1] 8702093 blocks [2/1] [_U] [=====>...............] recovery = 37.3% (3245881/8702093) finish=2.4min speed=67433K/sec md1 : active raid1 sda2[0] sdb2[1] 197920 blocks [2/2] [UU]}}}

Al finalizar el proceso nos debería arrojar un resultado como este:
Personalities : [raid1]
md2 : active raid1 sda1[0] sdb1[1] 8702093 blocks [2/2] [UU] md1 : active raid1 sda2[0] sdb2[1] 197920 blocks [2/2] [UU]}}}

 Lo cual nos quiere decir que ya lo tenemos correctamente sincronizando Volveremos a modificar el fichero
 /etc/mdadm.conf
 
al cual tendremos que eliminar las lineas que habíamos añadido anteriormente y sustituirlas por las que nos devuelve ahora la ejecución del siguiente comando:
 
[BASH]# mdadm --examine --scan

En particular las siguientes lineas:
...
ARRAY /dev/md0 level=raid1 num-devices=2 UUI... ARRAY /dev/md1 level=raid1 num-devices=2 UUI...}}}
Debemos modificar de nuevo el grub para que la entrada que apunta todavía a /dev/sda1 apunte a /dev/md0 en el disco (hd0,0).

Para hacerlo abra el fichero /boot/grub/menu.lst
y cambie esta linea

kernel    /boot/vmlinuz-2.6.24-17-generic root=/dev/sda1 ro quiet splash

por esta otra:
 
kernel    /boot/vmlinuz-2.6.24-17-generic root=/dev/md0 ro quiet splash

al final deberá lucir de la siguiente manera
title      Centos 5.3, kernel 2.6.24-17-generic
root (hd1,0) kernel /boot/vmlinuz-2.6.24-17-generic root=/dev/md0 ro quiet splash initrd /boot/initrd.img-2.6.24-17-generic quiet title Centos 5.3, kernel 2.6.24-17-generic root (hd0,0) kernel /boot/vmlinuz-2.6.24-17-generic root=/dev/md0 ro quiet splash initrd /boot/initrd.img-2.6.24-17-generic quiet}}}

Con esto el sistema arrancara por defecto desde el disco hd1 y en el caso de que este disco falle deberemos indicarle manualmente que arranque desde la otra partición.

Para que el sistema arranque automáticamente desde el segundo disco si falla el primero debemos añadir fallback justo debajo de default en el fichero /boot/grub/menu.lst

...
default 0 fallback 1 ...}}}

 O sea, que arranque por defecto de la entrada 0 (la primera del listado) y en caso de error que arranque de la entrada 1 (la segunda del listado).

 Finalmente volvemos a actualizar el ramdisk
 
[BASH]# update-initramfs -u
 
Y por ultimo reiniciamos el equipo


Comprobación final del RAID#

Ahora el sistema debe ser capaz de arrancar desde cualquiera de los dos discos aunque falle uno de ellos, puedes hacer pruebas desconectando uno de los discos para ver si todo sigue funcionando correctamente.

Si no quieres abrir el equipo puedes simular un fallo de discos de la siguiente manera:
 
[BASH]# mdadm --manage /dev/md0 --fail /dev/sdb1
[BASH]# mdadm --manage /dev/md0 --remove /dev/sdb1}}}

 Reinicias y ahora el equipo deberá arrancar con el RAID en modo degradado.