Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Gestión de RAID por software en GNU/Linux

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“.
 

Category: GNU/Linux, Prompt