Mar 15 2008

Montar RAID1 en Debian ya instalado y funcionando

Posted by

Tags: , ,

Excelente Articulo de como montar un RAID 1 en un servidor Debian ya instalado y en funcionamiento, puesto que por norma se configura un RAID solo cuando no existe sistema instalado.

Lo que vamos a ver en este artículo es cómo montar un raid 1 completo de todo el sistema Debian, con éste ya instalado y funcionando. De esta forma contesto a varias personas que me han pedido este artículo tanto en los comentarios del primero como por email. Para no hacer muy pesado el artículo obviaré algunas partes que están detalladas en el artículo anterior del raid 1, por lo que si algún paso no lo comprendes, por favor lee el artículo anterior para aclarar las dudas.

Debo aclarar que este tutorial está pensado para Debian y similares por lo que en otras distribuciones no funcionará correctamente al no existir el comando update-initramfs.

Partimos de un sistema ya instalado con tres particiones distintas: /dev/sda1 para /boot, /dev/sda5 para el swap y /dev/sda6 para /.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             7.4G  509M  6.5G   8% /
tmpfs                  63M     0   63M   0% /lib/init/rw
udev                   10M   84K   10M   1% /dev
tmpfs                  63M     0   63M   0% /dev/shm
/dev/sda1             177M   11M  157M   7% /boot

 

  • Después de añadir el disco a la máquina utilizamos el truco que ya usamos en el artículo original para copiar la tabla de particiones de un disco a otro:
    shian:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sdb: 1044 cylinders, 255 heads, 63 sectors/track
    
    sfdisk: ERROR: sector 0 does not have an msdos signature
     /dev/sdb: unrecognized partition table type
    Old situation:
    No partitions found
    New situation:
    Units = sectors of 512 bytes, counting from 0
    
       Device Boot    Start       End   #sectors  Id  System
    /dev/sdb1            63    385559     385497  83  Linux
    /dev/sdb2        385560  16771859   16386300   5  Extended
    /dev/sdb3             0         -          0   0  Empty
    /dev/sdb4             0         -          0   0  Empty
    /dev/sdb5        385623   1172744     787122  82  Linux swap / Solaris
    /dev/sdb6       1172808  16771859   15599052  83  Linux
  • Editamos con fdisk las particiones de /dev/sdb y cambiamos del tipo a fd de las número 1, 5 y 6. El resultado final es:
    ...
    Command (m for help): p
    
    Disk /dev/sdb: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1          24      192748+  fd  Linux raid autodetect
    /dev/sdb2              25        1044     8193150    5  Extended
    /dev/sdb5              25          73      393561   fd  Linux raid autodetect
    /dev/sdb6              74        1044     7799526   fd  Linux raid autodetect
  • Ahora creamos los dispositivos raid para las particiones.
    shian:~# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
    mdadm: array /dev/md0 started.
    shian:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
    mdadm: array /dev/md1 started.
    shian:~# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb6
    mdadm: array /dev/md2 started.
  • Formateamos las nuevas particiones.
    shian:~# mkfs.ext2 /dev/md0
    shian:~# mkswap /dev/md1
    shian:~# mkfs.ext3 /dev/md2
  • Actualizamos el archivo mdadm.conf con los nuevos dispositivos raid.
    shian:~# cd /etc/mdadm
    shian:/etc/mdadm# cp mdadm.conf mdadm.conf.`date +%y%m%d`
    shian:/etc/mdadm# echo "DEVICE partitions" > mdadm.conf
    shian:/etc/mdadm# mdadm --detail --scan >> mdadm.conf
  • Montamos las particiones del raid.
    shian:~# mkdir /mnt/md0
    shian:~# mkdir /mnt/md2
    
    shian:~# mount /dev/md0 /mnt/md0
    shian:~# mount /dev/md2 /mnt/md2
  • Editamos el archivo /etc/fstab y cambiamos sda1, sda5 y sda6 por los nuevos dispositivos del raid (md0, md1 y md2 respectivamente).
    # /etc/fstab: static file system information.
    #
    #              
    
    proc            /proc           proc    defaults        0       0
    /dev/md2        /               ext3    defaults,errors=remount-ro 0       1
    /dev/md0        /boot           ext2    defaults        0       2
    /dev/md1        none            swap    sw              0       0
    /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
    /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
  • Editamos el archivo /boot/grub/menu.lst de configuración del grub para añadir las entradas a ambos discos duros. Duplicamos la línea que tenemos del arranque, cambiamos sda6 por md2 y cambiamos el disco duro del que arranca.
    # Línea original
    #title           Debian GNU/Linux, kernel 2.6.18-4-686
    #root            (hd0,0)
    #kernel          /vmlinuz-2.6.18-4-686 root=/dev/sda6 ro
    #initrd          /initrd.img-2.6.18-4-686
    #savedefault
    
    # Nuevas líneas
    title           Debian GNU/Linux, kernel 2.6.18-4-686 (HD1)
    root            (hd1,0)
    kernel          /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd          /initrd.img-2.6.18-4-686
    savedefault
    
    title           Debian GNU/Linux, kernel 2.6.18-4-686 (HD0)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd          /initrd.img-2.6.18-4-686
    savedefault
  • Ahora actualizamos el ramdisk para que se reflejen los cambios que hemos hecho.
    shian:~# update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-2.6.18-4-686
  • Copiamos los datos de las particiones antiguas a las nuevas del raid. La opción ‘x’ es muy importante porque sino al copiar desde / copiaríamos todo de manera recursiva.
    shian:~# cp -ax / /mnt/md2
    
    shian:~# cd /boot/
    shian:/boot# cp -ax . /mnt/md0
  • Instalamos y reconfiguramos grub en los dos discos.
    shian:~# grub
    
    grub> root (hd0,0)
     Filesystem type is ext2fs, partition type 0x83
    
    grub> 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)"...  15 sectors are embedded.
    succeeded
     Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.
    
    grub> root (hd1,0)
     Filesystem type is ext2fs, partition type 0xfd
    
    grub> setup (hd1)
     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 (hd1)"...  15 sectors are embedded.
    succeeded
     Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.
  • Y ya podemos reinicar la máquina. Hay que tenemos en cuenta que la máquina sólo arrancará del segundo disco porque el primero todavía no forma parte del raid. Si todo va bien, una vez que arranque veremos algo como esto:
    shian:~# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/md2              7.4G  509M  6.5G   8% /
    tmpfs                  63M     0   63M   0% /lib/init/rw
    udev                   10M  100K   10M   1% /dev
    tmpfs                  63M     0   63M   0% /dev/shm
    /dev/md0              183M   13M  161M   8% /boot
    
    shian:~# mount
    /dev/md2 on / type ext3 (rw,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    /dev/md0 on /boot type ext2 (rw)
  • Lo más difícil ya está hecho. Tenemos el raid funcionando en modo degradado porque sólo está disponible el disco sdb. Ahora repetimos casi el mismo proceso para el disco antiguo. Cambiamos el tipo de particiones a fd y las añadimos particiones al raid.
    shian:~# fdisk /dev/sda
    ...
    Command (m for help): p
    
    Disk /dev/sda: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1               1          24      192748+  fd  Linux raid autodetect
    /dev/sda2              25        1044     8193150    5  Extended
    /dev/sda5              25          73      393561   fd  Linux raid autodetect
    /dev/sda6              74        1044     7799526   fd  Linux raid autodetect
    ...
    
    shian:~# mdadm --add /dev/md0 /dev/sda1
    mdadm: added /dev/sda1
    shian:~# mdadm --add /dev/md1 /dev/sda5
    mdadm: added /dev/sda5
    shian:~# mdadm --add /dev/md2 /dev/sda6
    mdadm: added /dev/sda6
  • Empezará entonces la reconstrucción de los raid.
    shian:~# cat /proc/mdstat
    Personalities : [raid1] [raid6] [raid5] [raid4]
    md2 : active raid1 sda6[2] sdb6[1]
          7799424 blocks [2/1] [_U]
          [=====>...............]  recovery = 25.2% (1967936/7799424) finish=1.1min speed=81997K/sec
    
    md1 : active raid1 sda5[0] sdb5[1]
          393472 blocks [2/2] [UU]
    
    md0 : active raid1 sda1[0] sdb1[1]
          192640 blocks [2/2] [UU]
    
    unused devices: 
  • Un vez terminada la reconstrucción tendremos listo el sistema. Ahora, si queremos probar que todo funciona correctamente podemos reinicar de nuevo la máquina y comprobar que es capaz de arrancar desde cualquiera de los dos discos.

    Con este tipo de configuración estamos seguros de que aunque falle un disco nuestro servidor estará disponible y no tendremos que reinstalar ni reconfigurar nada. Sólo será necesario cambiar el disco defectuoso, reconstruir el raid y reconfigurar el grub.

     

    DERECHOS Y FUENTE: Blog de Iván López

    Filed under : Articulos | 2 Comments »

    2 respuestas a “Montar RAID1 en Debian ya instalado y funcionando”

    1. Alvaro dice:

      Hola:

      Excelente tutorial para quienes no pensaron en montar un raid desde un principio. :$

      una pregunta, porque se le da formato ext2 al MD0?

      saludos

    2. removi dice:

      Discrepo con lo que se dice al final acerca de que estamos seguros ante una falla del RAID. Para empezar ningun RAID es 100% seguro. Si es cierto que hay configuraciones mas seguras que otras pero NO infalibles. Si el RAID falla y no se encuentra una aparente solucion, hay que llevar los discos a alguna empresa especializada. Las que mejor trabajan con RAID son ONRETRIEVAL, ONDATA, ONTRACK, entre otras. Trabajan rapido, son eficientes y manejan costos en cuenta.

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *