Crear un RAID 1 en Linux (Ubuntu)

Con mdadm se puede crear un RAID 1 y poner dos discos "clonados". Si falla uno seguirá el otro, sin cortes de funcionamiento.

La herramienta mdadm (algo así como Multi Device Administrator) permite crear RAID de varios niveles (organizaciones de los datos entre los discos) y es la que utilizo en este artículo.

El RAID de nivel 1 (o RAID 1) consiste duplicar la información en dos discos duros. Ambos discos duros tienen exactamente el mismo contenido, de forma que si uno deja de funcionar, el otro sigue funcionando sin que ningún usuario note nada. En cuanto se reemplace el disco erróneo, ambos discos volverán a sincronizarse (guardar los mismos datos) y el sistema volverá a estar duplicado. Salvo que se estropeen los dos discos duros a la vez, el sistema no dejará de funcionar.

En el ejemplo he utilizado dos discos duros de 80GB (aproximadamente) para crear el RAID. Los discos son /dev/sda y /dev/sdb. El RAID resultante se llama /dev/md0. El sistema operativo es Ubuntu y lo tengo instalado en un disco de 40GB (/dev/sdc) que no influye en este artículo. Todos los discos duros son muy antiguos puesto que son para hacer pruebas.

Otros artículos relacionados

En mi web hay varios artículos relacionados con RAID:

Preparación del sistema

Tengo un artículo que explica cómo identificar discos duros en Linux.

Primero es necesario conocer los nombres de los discos duros. Personalmente suelo hacer un listado del directorio /dev/disk/by-id para mostrarme los discos duros y ver un pequeño nombre descriptivo de cada uno, lo cual me permite identificarlos.

root@wasge-raid:~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root  9 abr  5 16:48 ata-Maxtor_6L080L0_L25CTR1G -> ../../sda
lrwxrwxrwx 1 root root 10 abr  5 16:48 ata-Maxtor_6L080L0_L25CTR1G-part1 -> ../../sda1
lrwxrwxrwx 1 root root  9 abr  5 16:48 ata-ST340014A_5JVJX771 -> ../../sdc
lrwxrwxrwx 1 root root 10 abr  5 16:48 ata-ST340014A_5JVJX771-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 abr  5 16:48 ata-ST340014A_5JVJX771-part2 -> ../../sdc2
lrwxrwxrwx 1 root root 10 abr  5 16:48 ata-ST340014A_5JVJX771-part5 -> ../../sdc5
lrwxrwxrwx 1 root root  9 abr  5 16:48 ata-ST380011A_4JV0DD60 -> ../../sdb
lrwxrwxrwx 1 root root 10 abr  5 16:48 ata-ST380011A_4JV0DD60-part1 -> ../../sdb1

De ésta información se deduce que tengo tres discos duros con sus particiones:

  • /dev/sda es un Maxtor 6L080L0
    • /dev/sda1 es la primera partición.
  • /dev/sdb es un Seagate ST380011A
    • /dev/sdb1 es la primera partición.
  • /dev/sdc es un Seagate ST340014A
    • /dev/sdc1 Es la primera partición
    • /dev/sdc2 Es la segunda partición
    • /dev/sdc5 Es la tercera partición.

En mi caso, /dev/sda y /dev/sdb son dos discos duros (Maxtor y Seagate) de aproximadamente 80GB. Al no ser exactamente del mismo tamaño, el RAID 1 se creará de tamaño ligeramente inferior al disco más pequeño. /dev/sdc es un disco de 40GB utilizado para el sistema operativo.

Yo he utilizado la herramienta gparted (gráfica, sin comandos) para eliminar todas las particiones existentes en los dos discos duros usados en el RAID (/dev/sda y /dev/sdb) y crear una sola partición primaria en cada uno. Las particiones creadas son /dev/sda1 y /dev/sdb1.

Después hay que instalar (si no está instalada) la herramienta mdadm para gestionar el RAID.

apt-get install mdadm

Crear el RAID 1 con mdadm

Estos comandos deberían funcionar en la mayoría de distribuciones linux, tanto para crear un RAID 1 en Ubuntu Server como crear un RAID 1 en Raspbian, puesto que se usa mdadm, el cual está disponible en casi todas.

Una vez preparado el sistema se crea el RAID. Aquí explico el comando utilizado:

  • mdadm (Herramienta para gestionar el RAID)
    • --create (Crear un RAID)
    • --verbose (Mostrar texto para indicar el proceso)
    • /dev/md0 (El nombre del nuevo RAID, tradicionalmente se utiliza md0)
    • --level=1 (Nivel del RAID, en este caso nivel 1)
    • --raid-devices=2 (Cuántos dispositivos se utilizan, en este caso dos discos duros)
    • /dev/sda1 (Nombre de la primera partición del primer disco duro)
    • /dev/sdb1 (Nombre de la primera partición del segundo disco duro)

Se ejecuta el comando y empieza el proceso. Es bastante rápido, prácticamente instantáneo, pero una vez creado el sistema tardará bastantes minutos en sincronizar ambos discos por primera vez.

root@wasge-raid:~# mdadm --create --verbose  /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
    size=80041984K  mtime=Thu Jan  1 01:00:00 1970
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sdb1 appears to contain an ext2fs file system
    size=78148608K  mtime=Thu Jan  1 01:00:00 1970
mdadm: size set to 78082944K
mdadm: largest drive (/dev/sda1) exceeds size (78082944K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Una vez hecho esto, el sistema empezará a sincronizar los dos discos duros. Ahora mismo empieza el proceso de sincronización entre ambos discos.

Ver estado del RAID 1

Para ver los detalles del RAID se utiliza el comando mdadm --detail y se especifica el RAID que se quiere consultar.

root@wasge-raid:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Apr  4 22:29:10 2015
     Raid Level : raid1
     Array Size : 78082944 (74.47 GiB 79.96 GB)
  Used Dev Size : 78082944 (74.47 GiB 79.96 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Jan  1 01:18:09 2002
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : wasge-raid:0  (local to host wasge-raid)
           UUID : eaacaecd:db26f692:11bc71b2:a879bb4c
         Events : 54

    Number   Major   Minor   RaidDevice State
       2       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

En la parte inferior aparecen listados los dos discos duros como "active sync", es decir, activos y sincronizados. Durante el proceso de sincronización aparecen datos diferentes.

Las fechas y horas del ejemplo no son coherentes debido a errores del ordenador en el que lo probé.

También se puede obtener información del RAID con otro comando, el cual genera información más detallada cuando se están sincronizando los discos. El comando es cat /proc/mdstat. Una vez sincronizados los discos debería generar alfo similar a esto:

root@wasge-raid:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[2]
      78082944 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

Configuración permanente de mdadm

Aparentemente, si se deja así, al reiniciar el servidor el RAID pasará a llamarse /dev/md127. Para evitarlo hay que guardar los datos del RAID en un archivo de configuración de mdadm.

Para ello se necesita el UUID del RAID, el cual se muestra con el comando mdadm --detail /dev/md0 o mdadm --detail/dev/md127. En mi caso es eaacaecd:db26f692:11bc71b2:a879bb4c.

Hay que editar el archivo de configuración de mdadm. El archivo es /etc/mdadm/mdadm.conf y contiene algo así.

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Sat, 04 Apr 2015 22:14:21 +0200
# by mkconf $Id$

Debajo de la línea "definitions of existing MD arrays" no hay nada. Y ahí está el problema. Hay que especificar cuál es el RAID para que el sistema siga maneniendo el nombre que se le ha asignado (en este caso /dev/md0). El contenido de la línea en éste ejemplo es:

# definitions of existing MD arrays
ARRAY /dev/md0 UUID=eaacaecd:db26f692:11bc71b2:a879bb4c

Desde ese momento, al reiniciar el sistema operativo, el RAID se seguirá llamando /dev/md0

Formatear el nuevo RAID

El RAID ya está creado, ahora hay que formatearlo para poder empezar a utilizarlo. En el ejemplo he utilizado el sistema de archivos EXT 4.

mkfs.ext4 /dev/md0

Ahora ya está el RAID creado y formateado, pero estaría bien poder hacer algo con él, así que habrá que montarlo.

Montar el nuevo RAID

Para montarlo se puede utilizar un comando temporal, que durará hasta la próxima vez que se reinicie el sistema o hasta que se desmonte. El comando para montarlo es mount y el comando para desmontarlo es umount.

mount /dev/md0 /mnt/minuevoraid

En caso de que no haya habido problemas, la carmeta /mnt/minuevoraid contiene 80GB de espacio y es como cualquier otra carpeta del sistema, perfectamente funcional y sin ningún tipo de restricción.

Una vez probado, para dejarlo permanentemente en cuanto arranque el sistema operativo se puede añadir el "punto de montaje" en fstab. Para ello hay que editar el archivo /etc/fstab y añadir la línea:

/dev/md0 /mnt/minuevoraid ext4 defaults

Y fin. Después de esto todo debería funcionar a la perfección. Si no es así, por favor, ponte en contacto conmigo e intentaré ayudarte a resolver cualquier duda.

Fecha de creación: 4/4/2015 23:19:55 | Última modificación: 26/11/2020 18:40:21 | Hora del servidor: 28/3/2024 12:22:57