====== 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