Instalación de un sistema RAID1 teniendo un disco duro con GNU/Linux previamente instalado. Se explica como mediante la instalación de otro disco duro de igual o mayor capacidad en el sistema, se puede montar un sistema RAID1, teniendo el sistema operativo espejado en dos discos duros. Esto supone una tolerancia a fallos y mejora de velocidad en operaciones de lectura.
El sistema sobre el que se realizo es Linux Mint Debian (LMDE 201403) pero puede ser perfectamente aplicable a otras distribuciones GNU/Linux. También se intenta dar solución a algunos problemas que podemos encontrar a la hora de trabajar con grub + RAID por software. Se recomienda realizar este tipo de cosas siempre con instalaciones frescas, de esta forma los discos tardarán menos en sincronizarse y si algun problema sucediera no se perderían ficheros importantes.
Clonar particiones de sda en sdb.
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Tipo de sistema de ficheros como RAID con el código “FD” en cfdisk para las dos particiones.
cfdisk /dev/sdb
Creamos los dispositivos RAID.
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1 mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
Comprobar que las últimas lineas de mdadm.conf pertenecen a los dispositivos RAID.
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
ARRAY /dev/md0 UUID=1ba28fdd:b4062f8f:dc62e4bb:c2d74ba9 ARRAY /dev/md1 UUID=6a685d44:a2d698cf:dc62e4bb:c2d74ba9
Damos formatos a las particiones de sdb, recordemos que md0 pertenece a swap y md1 a la partición raíz.
mkfs.ext4 /dev/md1 mkswap /dev/md0
Listamos UUID de todos los discos / particiones.
blkid /dev/sda1: UUID="f4d656e5-13ae-4562-b2e7-851a746ebec1" TYPE="swap" /dev/sda2: UUID="b9a27691-e45e-402f-ba41-4ebc2358d066" TYPE="ext4" /dev/sdb1: UUID="1ba28fdd-b406-2f8f-dc62-e4bbc2d74ba9" TYPE="linux_raid_member" /dev/sdb2: UUID="6a685d44-a2d6-98cf-dc62-e4bbc2d74ba9" TYPE="linux_raid_member" /dev/md0: UUID="4ac01ea7-b172-4161-8311-2c54d7923d70" TYPE="swap" /dev/md1: UUID="342e4215-9edf-416a-a59d-d15031f7107d" TYPE="ext4"
Dado el supuesto anterior, agregamos /dev/md1 a la configuración /boot/grub/grub.cfg.
### BEGIN /etc/grub.d/10_linux ### menuentry 'RAID' --class linuxmint --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_msdos insmod ext2 insmod raid insmod mdraid09 insmod mdraid1x set root='(hd1,msdos2)' search --no-floppy --fs-uuid --set=root 342e4215-9edf-416a-a59d-d15031f7107d echo 'Loading Linux 3.11-2-amd64 ...' linux /boot/vmlinuz-3.11-2-amd64 root=UUID=342e4215-9edf-416a-a59d-d15031f7107d ro quiet splash echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.11-2-amd64 }
NOTA: Atención a los módulos cargados con insmod.
insmod raid insmod mdraid09 insmod mdraid1x
Editamos el fichero /etc/default/grub.
GRUB_PRELOAD_MODULES="part_gpt raid mdraid mdraid09 mdraid1x"
Creamos la imagen ram.
update-initramfs -u -k all
Copiamos los ficheros de la partición raíz de sda a sdb (md1).
mkdir /mnt/md1 mount /dev/md1 /mnt/md1/ cp -dpRx / /mnt/md1
Se debe editar el fichero /etc/fstab de sdb con el UUID de md0 y md1 (/mnt/md1/etc/fstab).
# UNCONFIGURED FSTAB FOR BASE SYSTEM proc /proc proc defaults 0 0 # /dev/sda1 UUID=4ac01ea7-b172-4161-8311-2c54d7923d70 swap swap sw 0 0 # /dev/sda2 UUID=342e4215-9edf-416a-a59d-d15031f7107d / ext4 rw,errors=remount-ro 0 1
Instalamos el cargador de arranque grub en ambos discos.
grub-install /dev/sda grub-install /dev/sdb
Cuidado con especificar los módulos en el comando “grub-install”, podemos dejar el grub sin posibilidad de arranque. No se recomienda utilizar “–modules=“raid mdraid09 mdraid1x”, por lo menos en Linux Mint.
Reiniciamos y arrancamos por la opción RAID descrita anteriormente. Una vez dentro comprobamos que estamos utilizando md1 (en nuestro caso) utilizando el comando df, nos debe indicar que la partición raíz pertenece a /etc/md1. Si todo está bien solo queda sincronizar los dos discos y actualizar el grub.
mdadm /dev/md0 -a /dev/sda1 mdadm /dev/md1 -a /dev/sda2
Si queremos visualizar el progreso de la sincronización.
watch cat /proc/mdstat
Reiniciamos y volvemos a arrancar por RAID, comprobamos ahora las UUID, las cuales habrán cambiado.
/dev/sda1: UUID="4ac01ea7-b172-4161-8311-2c54d7923d70" TYPE="swap" /dev/sda2: UUID="342e4215-9edf-416a-a59d-d15031f7107d" TYPE="ext4" /dev/sdb1: UUID="1ba28fdd-b406-2f8f-dc62-e4bbc2d74ba9" TYPE="linux_raid_member" /dev/sdb2: UUID="6a685d44-a2d6-98cf-dc62-e4bbc2d74ba9" TYPE="linux_raid_member" /dev/md0: UUID="4ac01ea7-b172-4161-8311-2c54d7923d70" TYPE="swap" /dev/md1: UUID="342e4215-9edf-416a-a59d-d15031f7107d" TYPE="ext4"
Comprobar que está todo sincronizando y funcionando.
cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[0] sdb2[1] 9228224 blocks [2/2] [UU] md0 : active (auto-read-only) raid1 sda1[0] sdb1[1] 2103424 blocks [2/2] [UU] unused devices: <none>
mdadm -D /dev/md* mdadm: /dev/md does not appear to be an md device /dev/md0: Version : 0.90 Creation Time : Sun Oct 5 10:50:55 2014 Raid Level : raid1 Array Size : 2103424 (2.01 GiB 2.15 GB) Used Dev Size : 2103424 (2.01 GiB 2.15 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Oct 5 11:07:30 2014 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 1ba28fdd:b4062f8f:dc62e4bb:c2d74ba9 (local to host busimint) Events : 0.24 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 /dev/md1: Version : 0.90 Creation Time : Sun Oct 5 10:51:05 2014 Raid Level : raid1 Array Size : 9228224 (8.80 GiB 9.45 GB) Used Dev Size : 9228224 (8.80 GiB 9.45 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Sun Oct 5 11:10:45 2014 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 6a685d44:a2d698cf:dc62e4bb:c2d74ba9 (local to host busimint) Events : 0.314 Number Major Minor RaidDevice State 0 8 2 0 active sync /dev/sda2 1 8 18 1 active sync /dev/sdb2
Ejecutamos los siguientes comandos.
grub-mkdevicemap update-grub Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.11-2-amd64 Found initrd image: /boot/initrd.img-3.11-2-amd64 No volume groups found done update-initramfs -u -k all Generating /boot/initrd.img-3.11-2-amd64 grub-install /dev/sda Installation finished. No error reported. grub-install /dev/sdb Installation finished. No error reported.
Ya se podría reiniciar y empezar a usar el sistema RAID, los discos se encuentran espejados y en el caso de que uno se desconecte o esté defectuoso seguiremos los datos resguardados y el sistema arrancará sin problema. Si un disco fallara, lo recomendable es, poner el que funciona como maestro (sda), el nuevo disco como sdb y realizar los mismos pasos que anteriormente se hicieron para montar el sistema RAID.
Montar particiones RAID desde otro sistema (LiveCD).
cat /proc/mdstat mdadm --assemble --run /dev/md1 /dev/sdb2 # mount /dev/md1 /mnt/disco
error. no such device: b9a27691-e45e-402f-ba41-4ebc2358d066 Entering rescue mode... grub rescue
Solución para poder arrancar desde el disco RAID sdb.
# Ejemplo basado en nuestra configuración. Arrancar sdb2 - md1, al ser el único disco en grub sería hd0. set prefix=(hd0,2)/boot/grub set root=(hd0,2) insmod normal normal
Hecho esto debería arrancar el GRUB desde el disco RAID.
Reponer un sistema Raid que está en modo degradado (degraded).
cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sdb2[1] 9228224 blocks [2/1] [_U] md0 : active (auto-read-only) raid1 sda1[0] sdb1[1] 2103424 blocks [2/2] [UU] unused devices: <none>
mdadm -D /dev/md* mdadm: /dev/md does not appear to be an md device /dev/md0: Version : 0.90 Creation Time : Sun Oct 5 10:50:55 2014 Raid Level : raid1 Array Size : 2103424 (2.01 GiB 2.15 GB) Used Dev Size : 2103424 (2.01 GiB 2.15 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sun Oct 5 11:10:55 2014 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 1ba28fdd:b4062f8f:dc62e4bb:c2d74ba9 (local to host busimint) Events : 0.24 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 /dev/md1: Version : 0.90 Creation Time : Sun Oct 5 10:51:05 2014 Raid Level : raid1 Array Size : 9228224 (8.80 GiB 9.45 GB) Used Dev Size : 9228224 (8.80 GiB 9.45 GB) Raid Devices : 2 Total Devices : 1 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Sun Oct 5 13:23:50 2014 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 UUID : 6a685d44:a2d698cf:dc62e4bb:c2d74ba9 (local to host busimint) Events : 0.394 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 18 1 active sync /dev/sdb2
Como se puede ver, sda2 no está sincronizado, /dev/md1 está en modo degradado.
Volver a sincronizar los discos, en este caso sda.
mdadm --manage /dev/md1 -a /dev/sda2
Una vez terminado estará todo sincronizando pudiendo a hacer el uso normal del sistema.
En nuestro supuesto anterior, sda ha desaparecido y solo tenemos sdb (actualmente nombrado sda ya que el original sda fue desconectado). Estos son los comandos para eliminar la configuración RAID.
mdadm --stop /dev/md0 mdadm --stop /dev/md1 mdadm --remove /dev/md0 mdadm --remove /dev/md1 mdadm --zero-superblock /dev/sda1 /dev/sda2
Es factible que al intentar parar el RAID este no nos lo permita por estar en uso.
mdadm: Cannot get exclusive access to /dev/md1:Perhaps a running process, mounted filesystem or active volume group? mdadm: /dev/sda1 is busy - skipping
Solución: Utililizar un LiveCD, instalar mdadm y ejecutar los comandos comentados anteriormente para desactivar el raid.
Si el cargador de arranque sigue sin funcionar o después de eliminar el RAID con el LiveCD grub no arranca, se puede hacer lo siguiente.
Recuperar GRUB.
# Ejemplo basado en nuestra configuración. set prefix=(hd0,2)/boot/grub set root=(hd0,2) insmod normal normal dime
Una vez arrancado el sistema, actualizar el grub con la nueva configuración.
update-grub grub-install /de/sda reboot