INSTALACION DE RAID
Lo preferible es generar el RAID al realizar la instalación del sistema utilizando sus asistentes.
Podemos añadir RAID a una instalación ya funcional, para ello configuraremos RAID 1 (espejo o mirror) siguiendo la estupenda guía de philcore. Indico a continuación los pasos dados. Por tanto lo que sigue es básicamente una traducción resumida.
Tenemos en /dev/sda nuestro sistema básico instalado y queremos utilizar /dev/sdb como disco espejo.
Instalamos las herramientas de RAID:
# aptitude install mdadm
Desmontamos todas las particiones excepto “/” y swap.
Utilizamos fdisk para cambiar los tipos de las particiones a “fd” (raid autodetect). No hay que cambiar la partición swap.
Veremos un error al escribir la nueva tabla por estar el sistema en uso, pero no pasa nada.
Verificamos
# fdisk -l /dev/sda
Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 3647 29294496 fd Linux raid autodetect /dev/sda2 3648 7294 29294527+ fd Linux raid autodetect /dev/sda3 7295 7622 2634660 82 Linux swap / Solaris /dev/sda4 7623 19457 95064637+ 5 Extended /dev/sda5 7623 12292 37511743+ fd Linux raid autodetect /dev/sda6 12293 19457 57552831 fd Linux raid autodetect
Usamos sfdisk para copiar la tabla de particiones en /dev/sdb:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
Creamos los volúmenes RAID indicando que se componen de dos dispositivos. El primero está perdido (no queremos aún que utilice las particiones donde hemos instalado) y el segundo está en /dev/sdb:
# mdadm –create /dev/md0 –level 1 –raid-devices=2 missing /dev/sdb1
# mdadm –create /dev/md1 –level 1 –raid-devices=2 missing /dev/sdb2
# mdadm –create /dev/md2 –level 1 –raid-devices=2 missing /dev/sdb4
# mdadm –create /dev/md3 –level 1 –raid-devices=2 missing /dev/sdb5
Creamos sistemas de fichero en los volúmenes RAID:
# mkfs.ext3 /dev/md0
# mkfs.ext3 /dev/md1
# mkfs.ext3 /dev/md2
# mkfs.ext3 /dev/md3
Montamos el volumen que contendrá el sistema y copiamos la raiz:
# mount /dev/md0 /mnt
# cp -dpRx / /mnt
Montamos y copiamos el resto de volúmenes:
# mount /dev/md1 /mnt/copia
# cp -dpRx /copia /mnt/copia
# mount /dev/md2 /mnt/home
# cp -dpRx /home/personal /mnt/home/personal
# mount /dev/md3 /mnt/home/trabajo
# cp -dpRx /home/trabajo /mnt/home/trabajo
Editamos /etc/fstab:
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 /dev/md0 / ext3 defaults,errors=remount-ro 0 1 /dev/md1 /copia ext3 defaults 0 2 /dev/md2 /home/personal ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2 /dev/md3 /home/trabajo ext3 nodev,nosuid,noexec,usrquota,grpquota 0 2 /dev/sda3 none swap sw,pri=1 0 0 /dev/sdb3 none swap sw,pri=1 0 0
Como se ve hemos preparado md2 y md3 para utilizar cuotas y se han configurado por seguridad para que en esos sistemas de ficheros no se utilicen dispositivos (nodev), ficheros con setuid (nosuid) ni ficheros ejecutables (noexec).
Editamos /boot/grub/menu.lst. Opcionalmente podemos activar framebuffer:
(...) title Debian GNU/Linux, kernel 2.6.18-3-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sda1,/dev/sdb1 ro vga=791 initrd /boot/initrd.img-2.6.18-3-686 savedefault title Debian GNU/Linux, kernel 2.6.18-3-686 (RAID recovery disc-A) root (hd0,0) kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sda1 ro single initrd /boot/initrd.img-2.6.18-3-686 savedefault title Debian GNU/Linux, kernel 2.6.18-3-686 (RAID recovery disc-B) root (hd1,0) kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/md0 md=0,/dev/sdb1 ro single initrd /boot/initrd.img-2.6.18-3-686 savedefault (...)
Copiamos los ficheros editados al disco espejo:
# cp -dp /etc/fstab /mnt/etc/fstab
# cp -dp /boot/grub/menu.lst /mnt/boot/grub
Instalamos grub en el segundo disco, para que podamos arrancar si falla el primero:
# grub-install /dev/sda
# grub
grub> device (hd0) /dev/sdb grub> root (hd0,0) grub> setup (hd0) grub> quit
Y por fin reiniciamos el sistema para utilizar ya los volúmenes RAID y verificar que todo va bien.
# shutdown -r now
El sistema debería rearrancar correctamente. Algunas verificaciones que podemos hacer:
# mount
# df
# mdadm -QD /dev/md0
# mdadm -QD /dev/md1
# mdadm -QD /dev/md2
# mdadm -QD /dev/md3
# cat /proc/mdstat
Añadimos las particiones de /dev/sda (que no estamos usando) a los volúmenes RAID:
# mdadm –add /dev/md0 /dev/sda1
# mdadm –add /dev/md1 /dev/sda2
…
Cada vez que añadimos una partición a un volumen RAID debe sincronizarla. Si se intenta añadir una partición antes de que termine de sincronizar la anterior el sistema nos dará un aviso y encolará la tarea.
No reiniciar hasta que las particiones esten sincronizadas.
Podemos verlo en /proc/mdstat. Cuando indica [UU] es que está correcto.
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md2 : active raid1 sda5[0] sdb5[1] 37511616 blocks [2/2] [UU] md3 : active raid1 sda6[0] sdb6[1] 57552704 blocks [2/2] [UU] md0 : active raid1 sda1[0] sdb1[1] 29294400 blocks [2/2] [UU] md1 : active raid1 sda2[0] sdb2[1] 29294400 blocks [2/2] [UU] unused devices: <none>
VERIFICACIONES
# mount
# df
# mdadm -QD /dev/md0
# mdadm -QD /dev/md1
# mdadm -QD /dev/md2
# mdadm -QD /dev/md3
# cat /proc/mdstat
ELIMINAR VOLÚMENES Y PARTICIONES
Si se desea quitar una partición de un volumen:
# mdadm –fail /dev/md2 /dev/sda4
# mdadm –remove /dev/md2 /dev/sda4
No se pueden quitar todas las particiones de un volumen. Si lo que se desea es eliminar el volumen:
# mdadm –stop /dev/md2
Nada de esto afecta al estado de las partiones en sí mismas.
ERROR DE MDADM AL ACTUALIZAR EL KERNEL
Al actualizar automáticamente el kernel del sistema, por ejemplo con un aptitude dist-upgrade, nos genera un nuevo fichero “/boot/grub/menu.lst” que no está preparado para el RAID, con lo que el sistema no arranca.
Para prevenir el error, tras actualizar el kernel y antes de reiniciar hay que modificar “/boot/grub/menu.lst” para dejarlo como se muestra más arriba.
Si reiniciamos y no detecta los discos duros porque no hemos modificado “/boot/grub/menu.lst“, podemos modificarlo en el arranque desde el propio GRUB. Para ello cuando nos muestra las opciones de arranque seleccionamos la que nos interesa y pulsamos ‘e’ (editar), así dispondremos de un editor sencillo para modificar los parámetros del arranque.
Nos desplazamos con las flechas del cursor a la linea “kernel” y volvemos a pulsar ‘e’ para editarla.
Cambiamos root=/dev/sda1 por root=/dev/md0 md=0,/dev/sda1,/dev/sdb1 y pulsamos ‘b’ (boot) para arrancar.
Una vez arrancado el sistema modificamos “/boot/grub/menu.lst“.