En el artículo del
Raid 1 en linux veíamos cómo montar un raid 1 con Debian para tener fiablidad en nuestros datos y en el caso de que fallase un disco no perderlos. De esta forma aseguramos nuestros datos, pero en caso de fallo del disco de sistema irremediablemente tendríamos que instalar de nuevo todo.
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.