La Ruta del SysAdmin - RAID
¿Ya vemos Sistemas Raid ?
Si estáis siguiendo la Ruta del SysAdmin, en el artículo Estructura de Directorios, vimos la jerarquía del sistema de ficheros y hablamos sobre que eran las particiones de los discos duros y como cada una de ellas se montaba sobre un directorio que siempre cuelga del directorio /
raíz.
Antes de continuar y llegar a explicar el proceso de instalación y particionado real de discos, debemos conocer como podemos agrupar discos para dar grupos de bloques a nuestro sistema operativo y tener mayor seguridad y flexibilidad en un servidor.
RAID
El termino RAID significa "Array Redundante de Discos Independientes" (en inglés: "Redundant Array of Independent Disk").
Lo que se busca con este sistema es evitar que se pierdan datos en caso de que falle un disco duro.
La idea es simple: almacenar los datos en varios discos físicos en vez de en uno sólo.
Dependiendo de la "redundancia" que se configure, aun en el caso del fallo de varios discos se podrían reconstruir los datos sin pérdidas, desde los restantes.
En Linux se puede disponer de discos en RAID:
- Por hardware: mediante una tarjeta dedicada
- Por software: mediante el paquete
mdamd
Niveles RAID
Dependiendo de la disposición y cantidad de redundancia que proveen los grupos de discos se suele hablar de Niveles Raid.
En general a mayor nivel Raid, más a prueba de fallos será el sistema, pero disminuye el espacio disponible para almacenar datos.
Raid Lineal
No es un Raid propiamente, esta configuración no provee redundancia. El kernel simplemente agrupa varios discos de un extremo al otro y lo entrega como un único disco virtual (dispositivo de bloque).
No se suele usar ya que el fallo de uno afecta a todo el grupo. Se comenta para conocimiento de su existencia.
Raid 0
Esta configuración no aporta redundancia, es similar al anterior, pero en este caso los discos no están agrupados unos detrás de otros, sino que están divididos en stripes ("tiras"), y los bloques de los dispositivos se almacenan en tiras de discos físicos alternados.
Un ejemplo de 2 discos en Raid-0 los bloques de datos pares se guardarían en el primer disco y los impares en el segundo disco.
Esta configuración da mucha velocidad en escritura y lectura (al realizarse en paralelo a ambos discos), pero como podrás ver el fallo de uno de ellos sería catastrófico.
Raid 1
Este nivel se conoce como "Mirroring" o en espejo. Se trata de una configuración muy simple y a veces es la más utilizada.
Basicamente es disponer de dos discos físicos del mimo tamaño, se unen como un volúmen lógico del tamaño de uno de ellos, en las escrituras se duplican de forma idéntica los datos en ambos discos y no supone perdida de rendimiento.
En los procesos de lectura se gana velocidad debido a que se puede leer en paralelo la mitad de los datos en cada disco.
Si falla un disco los datos están disponibles en el otro.
Raid 4
Tipo de raid que no se suele utilizar. Se usan N discos para almacenar los datos y un disco extra para guardar la información de redundancia.
Si falla alguno de los N discos se puede reconstruir con los otros N que quedan junto con el de "paridad".
Si falla el disco de paridad, se reconstruye con los N discos.
Ventaja en rendimiento de lectura, pero el disco de paridad sufre desgaste por continuas escrituras en cada transacción de datos, lo que reduce su tiempo de vida.
Raid 5
Es la mejora a raid-4, ya que se reparten los datos de paridad entre todos los discos, todos almacenan datos + información de paridad.
Raid 6
Se le considera una extensión a raid-5. Cada serie de N bloques de datos posee 2 bloques de redundancia.
Los procesos de escritura son más lentos debido a que por cada bloque de datos escritos hay que escribir dos bloque de redundancia.
Raid 1+0
No es un raid en el sentido estricto. Es la combinacion de dos agrupaciones raid.
Si disponemos de N+2 discos, se configuran pares de discos en modo espejo (raid 1) N volúmenes y luego se agrupan estos volúmenes en uno solo (raid 0) o usar LVM para ello.
Raid-1 por Software con mdamd
Supongamos que disponemos de 3 discos en nuestro equipo y queremos configurar Raid para preservar datos muy importantes.
Vamos a configurar raid-1 para que 2 de los discos funcionen en modo espejo y en caso de que falle uno no se pierdan los datos:
disco 1: /dev/sda (Sistema y otras particiones)
disco 2: /dev/sdb (1er disco para raid-1)
disco 3: /dev/sdc (2º disco para raid-1)
Necesitamos tener instalado el paquete mdadm
para poder usar el raid por software:
sudo apt update
sudo apt install -y mdadm
Los discos 2 y 3 (/dev/sdb
y /dev/sdc
) se formatearán, si no están vacíos debermos salvar los datos que haya en ellos.
# Creacion de Raid-1
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
Nota: Se pueden crear raid por software incluso sobre particiones:
# Raid por software usando particion sde1 y sdf2 (de igual tamaño)
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sde1 /dev/sdf2
Una vez finalizada la creación del raid, podemos comprobar que es correcta:
# Revisamos nuestro nuevo raid-1 (/dev/md0)
mdadm --query /dev/md0
/dev/md0: 860GiB raid 1 2 devices, 0 sparec. Use mdadm --detail for more detail.
# Detalles del raid /dev/md0
mdadm --detail /dev/md0
...
Formateo del raid
Al igual que cualquier otro dispositivo, puedes formatearlo con el sistema de archivos que desees, por ejemplo para formatear en Ext4
, ejecutaríamos el siguiente comando:
# Formatear sistema raid-1 /dev/md0
mkfs.ext4 /dev/md0
Que sucede cuando falla nuestro raid-1
Podemos simular el comportamiento ante un fallo mediante el parámetro --fail
, por ejempo vamos a "fallar" el disco /dev/sdc
:
mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
...
State: active, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
El contenido del volumen se puede seguir leyendo, pero no se asegura la seguridad de los datos, si fallese /dev/sdb
se perderían todos los datos.
Reemplazamos el disco con fallos por uno nuevo /dev/sdd
y lo incluimos en el grupo raid-1 y revisamos los detalles del raid:
mdadm /dev/md0 --add /dev/sdd
# Revisamos los "detalles"
mdadm --detail /dev/md0
...
Raid Devices : 2
Total Devices : 3
...
Active Devices : 1
Working Devices : 2
Failed Devices : 1
Spare Devices : 1
...
Rebuild Status : 68% complete
En cuando se añade un nuevo disco al grupo raid, se inicia automáticamente la reconstrucción. Mientras no se "elimine" el disco marcado con fallo el sistema considera que el raid está degradado.
En cuanto veas mediante --detail
que ha finalizado la reconstrucción, puedes eliminar el disco con errores:
mdadm /dev/md0 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
Configuración de mdadm
La información que usa el sistema para determinar los dispositivos del grupo raid se almacena en el fichero /etc/mdadm/mdadm.conf
Deberías realizar una copia externa de los valores de este fichero para en caso de cualquier error del sistema o reinstalación poder dejar el raid en su estado normal.
Los datos más importantes son las líneas que comienzan por ARRAY /dev/md
pues contiene el UUID
del dispositivo que conforma el raid.
Puedes generar desde consola estas líneas mediante el comando:
mdadm --misc --detail -brief /dev/md0
Puedes enviarte incluso por email el resultado del comando para tenerlo a buen recaudo.
Raid-0 por software
Quizas tengas 3 discos pequeños y quieras usarlos para, entre todos, disponer de suficiente almacenamiento por ejempo para unos Logs de tu equipo.
mdadm te permite unir varios discos para que se vean como uno solo, por ejemplo los uniremos en un dispositivo que llamaremos /dev/md2
# discos /dev/sde + /dev/sdf + /dev/sdg
mdadm --create /dev/md2 --level=0 --raid-devices=3 /dev/sde /dev/sdf /dev/sdg
# Formateamos /dev/md2
mkfs.ext4 /dev/md2
Cuidado que el fallo de uno sólo de ellos hace que pierdas todos los datos que grabes en el dispositivo /dev/md2
Raid por Hardware
Dependiendo del fabricante, para la configuración y gestión del Raid dispondrás de diferentes aplicaciones de línea de comandos para su uso.
Algunos de las herramientas más comunes para la gestión del raid mediante línea de comando son:
hpacucli
: Para el raid hardware del fabricante HParcconf
yhrconf
: Para el raid hardware del fabricante Adaptec