Table of Contents

Software RAID a partir de un disco con un sistema GNU/Linux + GRUB2 instalado (RAID 1)

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

Solución a errores / problemas con discos Raid

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.

Eliminar / Quitar el RAID

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