« Wacom, /dev/event y XMás granizo en Bilbao »

Linux RAID root

Bueno, hoy he terminado el último paso relacionado con particiones que tenía pensado para los discos duros: migrar root a un RAID 1 de tres discos diferentes.
¡A ver cuál se atreve a fallar ahora! ...o sea, esperemos que ninguno (esperemos).

distribución de particiones con RAIDs

Por el camino me he dado cuenta de que -mira tú qué cosas- el kernel no encuentra el initrd del raid si no tiene compilados los drivers de raid. Obvio, ya lo sé, pero me ha costado mover /boot a otra partición y recrear initrd :oops:

Al menos el resultado parece alentador: más de 50MB/sec en lectura por dd, que no está nada mal. Podría estar mejor, como los 90MB/sec de fin de disco del RAID 0 para swap... pero aún así, nada mal.

inicio discofin disco
RAM317.46MB/secN/A
raid 151.24MB/sec40.56MB/sec
raid 0N/A93.89MB/sec
hdb50.12MB/sec29.11MB/sec
sda64.30MB/sec43.19MB/sec
sdb43.56MB/sec37.87MB/sec

Los pasos a seguir, en el post ampliado.

Follow up:

ADVERTENCIA: esto borrará IRREMEDIABLEMENTE cualquier dato que pudiese haber en las particiones donde se crea el RAID.

Hágase bajo la responsabilidad de cada uno.

Los pasos básicamente son los siguientes:

  1. Decidir qué particiones van a formar parte del RAID - recomendable que sean la primera de cada disco para que vaya más rápido... y que no sean la partición de arranque actual (luego se pueden copiar los datos si hace falta).
  2. Crear el RAID con mdadm. Por ejemplo: mdadm -C /dev/md0 -n 3 -l 1 /dev/hdb1 /dev/sda1 /dev/sdb1
  3. Puede hacer falta cargar el módulo raid1, por ejemplo: modprobe raid1.
  4. Comprobamos que el el dispositivo de RAID esté operativo:

    # cat /proc/mdstat
    md0 : active raid1 hdb1[0] sdb1[2] sda1[1]
          9775424 blocks [3/3] [UUU]

  5. Si, como era mi caso, se va a usar el mismo root que antes, copiamos con dd la partición a pelo (teniendo en cuenta tamaños, claro). Por ejemplo: dd if=/dev/hda7 of=/dev/md0
  6. Ahora, toca editar /etc/fstab para poner /dev/md0 como unidad raíz, quedando algo como:

    /dev/md0 / ext3 defaults 1 1

  7. Lo siguiente es recrear el initrd, que tendrá un nombre como /boot/initrd-2.6.16-1mdk.img o parecido. En todo caso, será el definido en /etc/lilo.conf o en la configuración de grub, por ejemplo en /boot/grub/menu.lst.
    Para recrear initrd existe la utilidad llamada mkinitrd, que se encarga de autodetectar los módulos que hacen falta. Sin embargo, no es omnisciente. En este caso he tenido que ponerle a mano los módulos de SATA (una SiI3112 integrada en placa), una cosa como:

    mkinitrd -f --initrdfs=cramfs initrd-2.6.16-1mdk_r.img 2.6.16-1mdk --preload=scsi_mod --preload=libata --preload=sata_sil --preload=sd_mod

    De paso, nótese que el nuevo initrd lo creo con otro nombre, para poder arrancar tanto el viejo como el nuevo.
  8. Para asegurarnos de que todo está bien, podemos montar el initrd en un directorio temporal, por ejemplo con: mount -o loop initrd-2.6.16-3mdk_r.img _ y comprobar que en el linuxrc figuran unas líneas parecidas a estas:

    mkdir /dev/.udevdb
    mkdevices /dev
    echo Activating md devices mknod /dev/md0 b 9 0 mknod /dev/md/0 b 9 0 raidautorun /dev/md0
    echo Creating root device
    mkrootdev /dev/root
  9. Ahora, toca modificar /etc/lilo.conf para arrancar con el nuevo initrd, desde el dispositivo de RAID, con algo parecido a:

    image=/boot/vmlinuz-2.6.16-1mdk
            label="2.6.16-1_r"
            root=/dev/md0
            initrd=/boot/initrd-2.6.16-1mdk_r.img
            append="nodevfs splash=silent inotify=on panic=30"
            vga=788
            restricted

    Ejecutamos lilo y no debería dar error.
  10. Con fdisk -o la herramienta de gestión de particiones preferida- cambiamos el tipo de partición a las particiones que van a formar el RAID a fd - Linux raid autodetect. El resultado deseado es una cosa como:

    Disposit. Inicio Comienzo Fin Bloques Id Sistema
    /dev/hdb1 1 1217 9775521 fd Linux raid autodetect
    /dev/sda1 1 1217 9775521 fd Linux raid autodetect
    /dev/sdb1 1 1217 9775521 fd Linux raid autodetect
  11. Ahora, al arrancar, elegimos la opción "2.6.16-1_r" y durante el arranque debería decir algo como:

    md: raid1 personality registered for level 1
    md: md0 stopped.
    md: bind<sda1>
    md: bind<sdb1>
    md: bind<hdb1>
    raid1: raid set md0 active with 3 out of 3 mirrors

    Antes de eso, es posible que salgan mensajes de md: Autodetecting RAID arrays. con un resultado fallido si no están compilados los módulos necesarios dentro del kernel. Se pueden ignorar perfectmente siempre que al final aparezca lo de "md0 active with 3 out of 3" (o los que sean en cada caso).

    Recordemos también que estos mensajes se pueden ver después del arranque con dmesg | less.

  12. Una vez dentro, comprobamos que todo funciona correctamente... y ya está, a disfrutar :)

La única complicación futura aparecerá al actualizar el kernel, que posiblemente haya que volver a crear el initrd correspondiente si hay que agregarle módulos a mano. Un inconveniente menor a cambio de la seguridad del RAID.

De paso, al hacerlo, he descubierto que tenía en /lib basura vieja, en versiones no compatibles. Por ejemplo las tls de 2.3.6, incompatibles con el ld-linux.so de 2.4.0. Menuda gracia, arrancar y ver cómo init salta con un precioso error de "no se puede cargar librería" seguido de un "reboot en 30 segundos" (cortesía de la opción de kernel "panic=30"). Por lo visto al reinstalar los RPMs de rpm -qf /etc/init.d/* para que el prcsys no se liase loop-errors (ya sé, parece que ha quedado algo mezclado el init.d con tanto cpio pacá y pallá), algún script ejecutó ldconfig, y la armó. Menos mal que tenía copia de todo y pude pasar un ld.so.cache que funcionaba para poder arrancar y descubrir al culpable, pero ya le vale. Supongo que es el precio de usar Cooker... habrá que montar un script que revise la basurilla que va quedando fuera del control de rpm, para evitar estas cosas.

Trackback address for this post

This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)

No feedback yet

Deja un comentario


Your email address will not be revealed on this site.

Your URL will be displayed.
(Line breaks become <br />)
(Name, email & website)
(Allow users to contact you through a message form (your email will not be revealed.)

¿Cuántos LOMOS hay en la foto?

(si fallas, puedes volver a intentarlo... al menos por ahora)

Jaroslaw Filiochowski
jar<QUIT@ESTO>fil@gmail.com
(e-mail, jabber, gtalk)
Desde: Bilbao, España

Enero 2009
Lun Mar Mié Jue Vie Sáb Dom
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Ordenar por:

Yo NO veo TV

Yo NO veo TV
00 horas de TV a la semana
image

powered by

powered by b2evolution free blog software

+

Gentoo
Gentoo


photos powered by

Foto de una cámara de fotos difital Nikon Coolpix 7600
Nikon Coolpix 7600

+

Foto de un móvil Nokia 3650 con logo personalizado
Nokia 3650

Por cortesía de NokiaGame 2002


Creative Commons License
Esta obra está bajo una licencia Creative Commons salvo donde se especifique explícitamente otra licencia.


IBSN: 3-3718-9164-1