28 gen. 2008

RAID com mdadm

Visto el post del otro día Crear RAID en Linux he decido hurgar mas en el tema. El hecho de usar RAIDs es un seguro para no perder tus datos en la muerte súbita de un disco duro.

Esta vez he creado el RAID desde la instalación de GNU/Linux Debian.

Partimos de una maquina con dos discos duros IDE de 250 Gb vacíos.

Arrancamos con el CD de instalación y seguimos los pasos de toda la vida. Al momento de crear los discos, seleccionamos configuración manual y creamos las particiones deseadas, pero con la única diferencia que en lugar de definir ext3 como sistema de ficheros usamos "Physical volume for RAID".

Una vez creadas las particiones en ambos discos volvemos al menú principal de la creación de particiones (ahí dónde tenemos las particiones de cada disco), en total tendremos 4 particiones para cada disco (hda1, hda2, hda3, hda4, hdb1, hdb2, hdb3 y hdb4), las particiones hda2 y hdb2 las dejaremos como swap, y no las usaremos en RAID, al haber siempre datos aleatorios no nos interesará guardar su contenido en caso de desastre.

Ahora faltará decirle a mdadm, el programa que administra los RAID en linux cuál partición tiene que estar en RAID con la otra; para esto en el menú principal, arriba del todo tenemos "Configure Software RAID". Ahí nos preguntará si queremos crear un RAID y con qué discos:

* Create MD device
* Multidisk device type = RAID 1
* Number of active devices for the RAID1 array = 2
* Number of spare devices for the RAID1 array = 0
Y por último deberemos decirle qué disco es RAID con qué otro.

Haremos lo mismo para todos y cada uno de los discos los cuales queremos crear el RAID, en mi caso he creado 3 particiones en RAID (recuerdo que la swap la he dejado sin RAID).

Si se desea se puede usar LVM, para poder redimensionar las particiones en caliente, pero no recomiendo su uso si no se es un experto.

Una vez finalizada la configuración seguimos con la instalación como si hubiésemos creado unos discos sin RAID ni tonterías.

Reiniciamos y entramos en nuestro nuevo sistema :)

Debido a mis ansias sólo arrancar me he puesto a comprobar los discos a ver si estaban en RAID y estaba todo funcionando, así que he podido observar que linux no ha esperado a que terminase la configuración de los RAID para arrancar y poner el sistema en funcionamiento :)

Recuerdo algunos de los comandos básicos que nos permiten ver el estado de nuestro(s) RAID(s):
fangor:~# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:07 2008
Raid Level : raid1
Array Size : 1951744 (1906.32 MiB 1998.59 MB)
Device Size : 1951744 (1906.32 MiB 1998.59 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Jan 28 14:02:38 2008
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : 129233ae:2e226f53:5f7c0a81:25b9b8ae
Events : 0.2

Number Major Minor RaidDevice State
0 3 1 0 active sync /dev/hda1
1 3 65 1 active sync /dev/hdb1
fangor:~# mdadm --detail /dev/md1
/dev/md1:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:26 2008
Raid Level : raid1
Array Size : 15526720 (14.81 GiB 15.90 GB)
Device Size : 15526720 (14.81 GiB 15.90 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Mon Jan 28 14:15:03 2008
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : d5b5b2f6:2c981b4b:bd45bf60:2f29d012
Events : 0.2

Number Major Minor RaidDevice State
0 3 3 0 active sync /dev/hda3
1 3 67 1 active sync /dev/hdb3
fangor:~# mdadm --detail /dev/md2
/dev/md2:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:40 2008
Raid Level : raid1
Array Size : 136857664 (130.52 GiB 140.14 GB)
Device Size : 136857664 (130.52 GiB 140.14 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Mon Jan 28 14:02:37 2008
State : active, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Rebuild Status : 64% complete

UUID : 1542b840:72ebbf6f:e000c37c:a3047728
Events : 0.7

Number Major Minor RaidDevice State
0 3 4 0 active sync /dev/hda4
1 3 68 1 active sync /dev/hdb4
Fijémonos en el último detalle, el de md2, en State pone "active, resyncing" y en Rebuild Status 64% complete.

Si vamos a

# watch cat /proc/mdstat

podremos ver el estado de los RAID, si se están sincronizando nos mostrarán una barra de progreso, si los RAID son correctos nos mostrarán lo siguiente:
Every 2,0s: cat /proc/mdstat Mon Jan 28 17:20:23 2008

Personalities : [raid1]
md2 : active raid1 hda4[0] hdb4[1]
136857664 blocks [2/2] [UU]

md1 : active raid1 hda3[0] hdb3[1]
15526720 blocks [2/2] [UU]

md0 : active raid1 hda1[0] hdb1[1]
1951744 blocks [2/2] [UU]

unused devices:
Hasta aquí la creación del RAID, respeto la anotación que hice en el último post el cual no se podían crear RAIDs de particiones activas/montadas es cierto, pero no os asusteís, es posible arreglar los RAID degradados sin necesidad de quitar el servidor de producción.

En un entorno controlado hemos arrancado el hdb de la maquina y la hemos boteado, con esto hemos simulado una muerte súbita del disco 2.

El sistema ha arrancado sin ningún problema, pero al mostrar la información de los RAIDs nos ha dicho que no sabia nada del disco 2. Si usábamos el watch cat /proc/mdstat nos indicaba que había un RAID de 2 discos pero solo funcionaba uno, y que el RAID estaba active, degraded.

Every 2,0s: cat /proc/mdstat Tue Jan 29 08:49:46 2008

Personalities : [raid1]
md2 : active raid1 hda4[0]
136857664 blocks [2/1] [U_]

md1 : active raid1 hda3[0]
15526720 blocks [2/1] [U_]

md0 : active raid1 hda1[0]
1951744 blocks [2/1] [U_]

unused devices:


fangor:~# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:07 2008
Raid Level : raid1
Array Size : 1951744 (1906.32 MiB 1998.59 MB)
Device Size : 1951744 (1906.32 MiB 1998.59 MB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Jan 29 08:27:31 2008
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 129233ae:2e226f53:5f7c0a81:25b9b8ae
Events : 0.30

Number Major Minor RaidDevice State
0 3 1 0 active sync /dev/hda1
1 0 0 1 removed
fangor:~# mdadm --detail /dev/md1
/dev/md1:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:26 2008
Raid Level : raid1
Array Size : 15526720 (14.81 GiB 15.90 GB)
Device Size : 15526720 (14.81 GiB 15.90 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Tue Jan 29 08:52:14 2008
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : d5b5b2f6:2c981b4b:bd45bf60:2f29d012
Events : 0.252

Number Major Minor RaidDevice State
0 3 3 0 active sync /dev/hda3
1 0 0 1 removed
fangor:~# mdadm --detail /dev/md2
/dev/md2:
Version : 00.90.03
Creation Time : Mon Jan 28 13:27:40 2008
Raid Level : raid1
Array Size : 136857664 (130.52 GiB 140.14 GB)
Device Size : 136857664 (130.52 GiB 140.14 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Tue Jan 29 08:52:14 2008
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 1542b840:72ebbf6f:e000c37c:a3047728
Events : 0.566

Number Major Minor RaidDevice State
0 3 4 0 active sync /dev/hda4
1 0 0 1 removed



Para volver a su sitio el RAID hemos tenido que decirle a mdadm cuál era la nueva partición a la que se referia el RAID perdido, así que con 3 simples líneas hemos restablecido el RAID
fangor# mdadm /dev/md0 -a /dev/hdb1
fangor# mdadm /dev/md1 -a /dev/hdb3
fangor# mdadm /dev/md2 -a /dev/hdb4
Luego miramos a "watch cat /proc/mdstat" y vemos que está trabajando para volver a sincronizar los discos.

Every 2,0s: cat /proc/mdstat Tue Jan 29 08:55:45 2008

Personalities : [raid1]
md2 : active raid1 hdb4[2] hda4[0]
136857664 blocks [2/1] [U_]
resync=DELAYED

md1 : active raid1 hdb3[2] hda3[0]
15526720 blocks [2/1] [U_]
resync=DELAYED

md0 : active raid1 hdb1[1] hda1[0]
1951744 blocks [2/1] [U_]
[=========>...........] recovery = 49.4% (966592/1951744) finish=0.4min s
peed=40274K/sec

unused devices:



Este paso no ha borrado ninguna información del disco :)

Hasta aquí la prueba de sacar el disco esclavo, el hdb, pero qué pasa si sacamos el hda? pues la cosa se complica, primero de todo tenemos que tener en cuenta como están configurados nuestros discos, un disco como esclavo puede que no arranque si no tiene un master, si la partición /boot no está marcada como particion de arranque puede que no arranque... todo esto se está provando...

Ahora mismo me encuentro que es imposible montar las particiones con mount, porqué si usamos

# mount -t /dev/hdb1 /mnt/hdb1
nos devuelve el siguiente error:

mount: unknown filesystem type 'mdraid'

Con un livecd, el systemrescue CD, nuestro CD para recuperar ordenadores por excelencia cuando ubuntu no rula, ejecutamos el siguiente comando:

# mdadm -E -s
con esto miramos a ver si nuestro RAID aún está ahí y efectivamente está pero no se puede acceder aún a los datos

sysresccd ~ # mdadm -E -s
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=129233ae:2e226f53:5f7c0a81:25b9b8ae
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d5b5b2f6:2c981b4b:bd45bf60:2f29d012
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1542b840:72ebbf6f:e000c37c:a3047728

(-E examine, -s scan)

Finalmente, ¿qué es lo que está pasando? pues muy simple, en hda tenemos el master boot record (MBR), por dónde inicia nuestro ordenador, una vez cargado el MBR se inicia grub, pero ¿porqué cuando iniciamos con el hdb solo no arranca grub? pues porqué no tenemos MBR en hdb, y tendremos que escribirlo si queremos iniciar hdb de la misma forma que hemos iniciado hda.

# grub-install /dev/hda (en el caso que sólo tengamos el hdb conectado)

Pero recomiendo instalar el MBR antes de que los discos se mueran, así el restaurar el RAID simplemente será crear un disco con las particiones adecuadas y el tipo de archivos md.

fangor:~# grub-install /dev/hdb1
Searching for GRUB installation directory ... found: /boot/grub
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/hda
(hd1) /dev/hdb


Es posible crear un RAID con un disco que ya está en activo y no está montado como un RAID: RAID 1 en un sistema ya instalado

Para eliminar un RAID deberemos pararlo y borrarlo con el siguiente comando:

# mdadm --manage --stop /dev/md1

veremos que el raid ha desaparecido del fichero de configuración /etc/mdadm/mdadm.conf

3 comentaris:

Blackhold ha dit...

http://www.debian-administration.org/articles/572

http://dev.jerryweb.org/raid/

festuc ha dit...

Yo te recomiendo si usas un raid 1 como raíz uses lilo.
El lilo me parece que solo accede a disco en modo lectura, y grub con lectura/escritura.
Según mi experiencia si el /boot esta en un raid 1 grub es incapaz de arrancar el sistema, en cambio lilo no me daba ningún error.
Es más una vez montado el sistema puedes modificar /etc/lilo.conf y pasar de /dev/hda a /dev/hdb (por ejemplo) y al correr lilo te marcara hdb :)
Asi si se te muere hda no hay problema :)
Eso si, cada vez que actualices el kernel vas a tener que ejecutar lilo dos veces (una para hda y otra para hdb) Si quieres que se vea reflejado en el menú lilo los kernels antiguos.

Hosting Chile ha dit...

Excelente articulo.
Saludos

Publica un comentari a l'entrada