====== 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.
* **Dependencia a instalar**: mdadm.
* ** Sistema operativo**: Linux Mint Debian (Linux XXX 3.11-2-amd64 #1 SMP Debian 3.11.8-1 (2013-11-13) x86_64 GNU/Linux).
* ** Uso de LVM **: No.
* ** Reproducirlo en una VM**: Sí.
* **Esquema de particiones del sistema instalado**: sda1 (swap) y sda2 (/)
* **Disco RAID**: sdb
**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:
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:
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