Introducción
En linux existe un programa para hacer raid por software. Este se llama mdadm. En esta guia explicaré como hacer un raid 1 con dos particiones del mismo tamaño.
Detectar un raid ya construido
Puede ser que hayamos creado un raid anteriormente en otro SO y queramos montarlo en el nuestro. Para ello podemos decirle al programa que los gestiona, que escanée las particiones para descubrir los raid que hay en ella.
Para ello tendremos que ejecutar los siguientes comandos:
>> sudo apt-get install mdadm
>> sudo mdadm --assemble --scan
Hacer un raid
Lo primero será tener instalado mdadm, que es el programa que hará el raid por software. Instalamos el programa mdadm con la siguiente orden:
>> sudo apt-get install mdadm
Por ejemplo, tenemos una partición con datos (/dev/sda5) y queremos hacer un raid 1 con otra partición que tenemos sin datos (/dev/sdb1). Lo primero será desmontar las dos particiones:
>> sudo umount /dev/sda5
>> sudo umount /dev/sdb1
Comprobamos que las dos particiones tienen el mismo tamaño:
>>sudo fdisk -l
...
/dev/sda5 5227 35741 245111706 83 Linux
...
/dev/sdb1 1 30515 245111706 83 Linux
...
Ahora vamos a crear el raid con la partición que no tiene los datos originales (acordaros que si creáis varios raid, tendréis que poner un nombre a cada uno: /dev/md0, /dev/md1, ...):
>> sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mdadm: /dev/sda5 appears to contain an ext2fs file system
size=245111704K mtime=Sun Jun 21 13:01:34 2009
Continue creating array? y
mdadm: array /dev/md0 started.
Ahora formateamos la partición del raid. Por ejemplo, para crear un sistema de ficheros de linux lo haremos con la siguiente orden (podemos formatearlo con lo que queramos: ntfs, fat32, ext4, ...):
>> sudo mkfs -t ext4 /dev/md0
Ya tenemos el raid creado con la partición sin datos. Ahora vamos a pasar los datos, de la partición que los contiene, al raid. Para hacerlo, primero tendremos que montar las particiones:
>> sudo mount /dev/sda5 /media/datos
>> sudo mount /dev/md0 /media/raid
Ahora copiaremos todos los datos de /media/datos a /media/raid (no hay que copiar las carpetas del sistema de archivos como lost+found).
Una vez hemos llegado aquí, ya tendremos el raid creado con los datos dentro, pero solo con 1 disco. Ahora añadiremos al raid la partición que tenía los datos (/dev/sda5) para que se reconstruya con los datos del raid:
>> sudo mdadm --manage /dev/md0 --add /dev/sda5
mdadm: added /dev/sdb1
Se empecará a copiar la información de la partición primaria en la que hemos añadido ahora. Para ver como va el proceso podremos ejecutar el siguiente comando para ver el % que lleva:
>> cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sda5[0]
245111616 blocks [2/1] [U_]
[>....................] recovery = 0.3% (857600/245111616) finish=66.4min speed=61257K/sec
O tambien podemos ver el proceso de reconstrucción con este otro comando:
>> sudo mdadm --detail /dev/md0
/dev/md0:
...
Update Time : Sun Jun 21 15:38:24 2009
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Rebuild Status : 13% complete
...
Number Major Minor RaidDevice State
0 8 5 0 active sync /dev/sda5
2 8 17 1 spare rebuilding /dev/sdb1
Esperaremos hasta que desaparezca esta línea. Una vez acabado este proceso, iremos al fichero /etc/mdadm/mdadm.conf y añadiremos la línea en la que indicamos las particiones queu forman el raid, quedando el fichero de la siguiente forma:
...
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions
# 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 Thu, 21 May 2009 21:47:53 +0200
# by mkconf $Id$
ARRAY /dev/md0 devices=/dev/sda5,/dev/sdb1
Una vez que ya tenemos creado dispositivo raid, vamos a ponerla en el /etc/fstab para que el ordenador la monte cada vez qeu se encienda. Lo primero que tenemos que saber es el UUID de nuestra particion raid. Para ello tendremos que ejecutar la siguiente orden (por ejemplo pasa saber el UUID del dispositivo md0):
>> sudo vol_id -u /dev/md0
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
(* En versiones ams nuevas de ubuntu podemos usar >> sudo blkid)
Una vez tenemos el UUID vamos a editar el fichero /etc/fstab, comentaremos las líneas en las que aparezcan los dispositivos que forman parte del raid (en nuestro caso /dev/sdb1 y /dev/sda5) si es que estan en el fichero (igual aparecen por su UUID, podeis saber cual es con la orden sudo vol_id -u /dev/XXX) y añadiremos la línea del nuevo dispositivo:
# /dev/sda5
#UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /media/SIN_RAID1 ext3 relatime 0 2
# /dev/sdb1
#UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /media/SIN_RAID2 ext3 relatime 0 2
# /dev/md0
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /media/CON_RAID ext3 relatime 0 2
Quitar un raid
Lo primero que tendremos que saber es que particiones forman el raid. Por ejemplo, si queremos desacer el raid /dev/md1, tendremos que ejecutar el siguiente comando para saber las particiones que lo forman:
>> sudo mdadm --detail /dev/md1
/dev/md1:
...
Number Major Minor RaidDevice State
0 8 6 0 active sync /dev/sda6
1 8 34 1 active sync /dev/sdc2
Como podemos ver, el raid esta formado por las particiones /dev/sda6 y /dev/sdc2. Una vez sabemos esto pararemos el raid y lo desmontamos con las siguientes ordenes:
>> mdadm --stop /dev/md1
>> sudo umount /dev/md1
Ahora limpiaremos las dos particiones de la configuración del raid con las siguientes ordenes:
>> mdadm --zero-superblock /dev/sda6
>> mdadm --zero-superblock /dev/sdc2
Y por último tendremos que ir al fichero /etc/mdadm/mdadm.conf y tendremos que quitar la línea correspondiente a el raid, en nuestro caso la siguiente:
ARRAY /dev/md1 devices=/dev/sda6,/dev/sdc2
Con esto ya habremos quitado el raid /dev/md1.
Comprobar el estado de un raid
Si lo que queremos es comprobar el estado de un raid, tendremos que ejecutar el siguiente comando. Por ejemplo para comprobar el estado del rad /dev/md0:
>> sudo mdadm --detail /dev/md0
/dev/md1:
Version : 00.90
Creation Time : Thu Jul 2 22:46:31 2009
Raid Level : raid1
Array Size : 271610816 (259.03 GiB 278.13 GB)
Used Dev Size : 271610816 (259.03 GiB 278.13 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Fri Jul 3 00:07:06 2009
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : 8fe624fd:cef7961e:ce24d2e1:c686696d (local to host pcpedro)
Events : 0.14
Number Major Minor RaidDevice State
0 8 6 0 active sync /dev/sda6
1 8 34 1 active sync /dev/sdc2
Problemas
Unexpected inconsistency
Al encender el ordenador, cuando esta cargando ubuntu se para el proceso y saca el siguiente mensaje:
Log of fsck -C3 -R -A -a
Sat Sep 19 13:01:06 2009
fsck 1.41.4 (27-Jan-2009)
D: The filesystem size (according to the superblock) is 61277926 blocks
The physical size of the device is 61277904 blocks
Either the superblock or the partition table is likely to be corrupt!
D: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
fsck died with exit status 4
Sat Sep 19 13:01:07 2009
----------------
Se queda parado en la consola y tengo que poner exit para que siga la carga de ubuntu.
Solución
Este problema me apareció cuando metí al raid un sistema de ficheros ya creado para no tener qeu mover los datos que contenía. Y para solucionarlo, tuve que seguir estos pasos:
- Quitar el raid (según indico en este artículo).
- Volverlo ha hacer mediendo al raid una partición vacía.
- Formatear el raid.
- Copiar los datos en el raid.
- Y por último meter la otra particion por el raid.
Has no superblock
A veces, cuando intentas activar un raid, puede aparecer el siguiente error:
>> sudo mdadm -A /dev/md1
mdadm: /dev/sdd2 has no superblock - assembly aborted
Miramos primero que raids tenemos activados:
>> cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1 : inactive sda7[1](S)
271610816 blocks
md_d1 : inactive sdd3[0](S)
271610816 blocks
unused devices: <none>
Solución
Como podemos ver, hay un dispositivo que se ha creado con una de las particiones del raid md1, por eso no deja activarlo. Para solucionarlo tendremos que parar los dos raid (el que no nos funciona y el desconocido) y luego activaremos y montaremos el nuestro:
>> sudo mdadm --stop /dev/md_d1
mdadm: stopped /dev/md_d1
>> sudo mdadm --stop /dev/md1
mdadm: stopped /dev/md1
>> sudo mdadm -A /dev/md1
mdadm: /dev/md1 has been started with 2 drives.
>> sudo mount /dev/md1