Debian RAID
En mi despacho en casa dispongo de un servidor Debian Linux que hace multitud de tareas. Desde conexión a internet con cortafuegos (iptables), servidor de ficheros (samba), backups (backuppc), gestión de la red (bind, dhcp), copias de seguridad entre servidores (rsync), descargas p2p (mldonkey) y muchas más cosas que seguro que me olvido ahora mismo.
Se trata de un simple PC, concretamente mi antiguo PC ahora que tengo mi flamante Athlon. Dispone de un disco duro de 160G pero que esta muy justo y ya lo he tenido que cambiar una vez porque petó (y perdí los datos tuve que recurrir a las copias de seguridad, que le vamos a hacer).
Por eso he optado por reinstalar el sistema con mayor capacidad y, sobre todo, fiabilidad. He comprado 3 discos duros de 300G y la idea es montarlo todo sobre RAID.
Antes de ponerme con el servidor, he pillado un PC que había por aquí y lo he utilizado para hacer pruebas (con los 3 discos intentar instalar un Debian).
Tras muchas búsquedas por internet parece que lo de poner un RAID para todas las partes del sistema, especialmente el arranque, no es fácil. Más aún ya que yo quiero RAID 5 para disponer de 600G efectivos de capacidad.
Bien, la configuración que me ha quedado finalmente es la siguiente:
Todos los discos con estas 3 particiones:
- 100M
- 500M
- resto (unos 298G)Con esto construyo tres unidades RAID:
- /dev/md0 en RAID1 con las tres particiones de 100M para /boot (100M)
- /dev/md1 en RAID5 con las tres particiones de 500M para swap (1G)
- /dev/md2 en RAID5 con las tres particiones de 298G para / (597G)Bien, la primera en la frente: pese a lo que podáis leer por ahí, el Debian Installer no lo tiene tan sencillo para instalar un sistema sobre RAID. Primero probé con el último nightly build que en este momento era la beta 2 de Etch. Lo instalaba pero no arrancaba (al parecer generaba mal el initrd). El instalador de la versión Sarge (estable) tampoco funciona, parecía que si pero al arrancar no podia montar los RAIDs. Finalmente el instalador que me ha funcionado ha sido el Etch beta 1.
¿Cual es el problema de instalar y arrancar sobre RAID?
El problema está básicamente en que habitualmente el kernel carga los módulos de RAID (md, raid1, raid5) como eso… módulos. Por tanto, ha de leerlos de disco… círculo vicioso. Hay dos soluciones posibles: compilar un kernel con soporte incluido de RAID o crear un ramdisk con los módulos para que se pueda cargar.
Otro problema es que tanto la imagen del kernel como el ramdisk estan en /boot así que … ¿como vamos a poner eso en RAID? La respuesta es que en realidad no podemos… Sin embargo, tanto LILO como GRUB tienen soporte básico para RAID1 porque en realidad un RAID1 hace que todos los discos tengan lo mismo. De ahí que /boot sea un RAID1 y no un RAID5. Y sí, RAID1 no es exclusivo de 2 discos… puedes hacerlo sobre el número de discos que quieras.
Así que lanzando el Debian Installer simplemente hemos de particionar manualmente los discos con, según mi ejemplo, las tres particiones iguales en los tres discos. Luego, generamos los 3 dispositivos md y les asignamos los sistemas de ficheros correspondientes.
Con esto ya tenemos la redundancia que queríamos. Sin embargo, el gestor de arranque (en mi caso GRUB) sólo está instalado en el MBR del primer disco. Eso hace que si falla el primer disco, no podamos arrancar el sistema. Para solucionar esto nada más sencillo que marcar los otros MBR con el grub. Simplemente al arrancar el sistema normalmente entramos en el prompt de grub (ejecutando ‘grub’ como root) y ejecutamos los siguientes comandos:
- root (hd1,0)
- setup (hd1)
- root (hd2,0)
- setup (hd2)
- quit
Lo único que nos falta es que, según las prueba de stress que he ido realizando (en plan parar discos) hay veces que el RAID parece ‘olvidar’ un disco pese a que lo volvemos a reconectar. Supongo que es un mecanismo de seguridad. El procedimiento para añadir una partición a un dispositivo es, sin embargo, muy sencillo:
Lo primero es comprobar el estado en /proc/mdstat o con la orden mdadm -QD /dev/mdX
Y para añadir las particiones que nos falten: mdadm --manage -a /dev/md2 /dev/hda3
¡Suerte con vuestros intentos!