RAID En informática, el acrónimo RAID (del inglés Redundant Array of Independent Disks, originalmente Redundant Array Inexpensive Disks), traducido como «conjunto redundante de discos independientes», hace referencia a un sistema de almacenamiento de datos que usa múltiples unidades de almacenamiento de datos (discos duros o SSD) entre los que se distribuyen o replican los datos. Dependiendo de su configuración (a la que suele llamarse «nivel»), los beneficios de un RAID respecto a un único disco son uno o varios de los siguientes: mayor integridad, mayor tolerancia a fallos, mayor throughput (rendimiento) y mayor capacidad. En sus implementaciones originales, su ventaja clave era la habilidad de combinar varios dispositivos de bajo coste y tecnología más antigua en un conjunto que ofrecía mayor capacidad, fiabilidad, velocidad o una combinación de éstas que un solo dispositivo de última generación y coste más alto. En el nivel más simple, un RAID combina varios discos duros en una sola unidad lógica. Así, en lugar de ver varios discos duros diferentes, el sistema operativo ve uno solo. Los RAIDs suelen usarse en servidores y normalmente (aunque no es necesario) se implementan con unidades de disco de la misma capacidad. Debido al descenso en el precio de los discos duros y la mayor disponibilidad de las opciones RAID incluidas en los chipsets de las placas base, los RAIDs se encuentran también como opción en las computadoras personales más avanzadas. Esto es especialmente frecuente en las computadoras dedicadas a tareas intensivas y que requiera asegurar la integridad de los datos en caso de fallo del sistema. Esta característica no está obviamente disponible en los sistemas RAID por software, que suelen presentar por tanto el problema de reconstruir el conjunto de discos cuando el sistema es reiniciado tras un fallo para asegurar la integridad de los datos. Por el contrario, los sistemas basados en software son mucho más flexibles (permitiendo, por ejemplo, construir RAID de particiones en lugar de discos completos y agrupar en un mismo RAID discos conectados en varias controladoras) y los basados en hardware añaden un punto de fallo más al sistema (la controladora RAID). Todas las implementaciones pueden soportar el uso de uno o más discos de reserva (hot spare), unidades preinstaladas que pueden usarse inmediatamente (y casi siempre automáticamente) tras el fallo de un disco del RAID. Esto reduce el tiempo del período de reparación al acortar el tiempo de reconstrucción del RAID. Los niveles RAID más comúnmente usados son: RAID 0: Conjunto dividido RAID 1: Conjunto en espejo RAID 5: Conjunto dividido con paridad distribuida This is what you need for any of the RAID levels: A kernel with the appropriate md support either as modules or built-in. The mdadm tool The first two items are included as standard in most GNU/Linux distributions today. mdadm is now the standard software RAID management tool for Linux; using raidtools is deprecated (and the code does not appear to have been worked on since Jan 2003) and although it will still work for basic use, bugs have been reported where raidtools does not handle new features correctly. The main differences between mdadm and raidtools are: mdadm can diagnose, monitor and gather detailed information about your arrays mdadm is a single centralized program and not a collection of disperse programs, so there's a common syntax for every RAID management command mdadm can perform almost all of its functions without having a configuration file and does not use one by default Also, if a configuration file is needed, mdadm will help with management of its contents If your system has RAID support, you should have a file called /proc/mdstat. Remember it, that file is your friend. If you do not have that file, maybe your kernel does not have RAID support. Condicionales: --create: crear --verbose: para revisar que todo se hizo correctamente --level: especifica el raid --raid-devices: especifica cuantos dispositivos participaran en el raid --metadata: especifica el numero de superblock a utilizar --auto: especifica si se podrá particionar el raid --spare-devices: en caso de tener discos de repuesto aquí se especifica --fail: especificar cuando un disco se daña mdadm /dev/md0 --fail /dev/sda --add: agregar un disco al raid mdadm /dev/md0 --add /dev/sda --grow si cambiamos el raid a discos más grandes para que suba el storage ejecutamos esta condicional --size: especifica tamaño mdadm --grow /dev/md0 --size=max Arrays can be built on top of entire disks or on partitions. Un dispositivo RAID sólo se puede particionar si se ha creado con una opción - auto dado a la herramienta mdadm. Esta opción no está bien documentada, pero aquí es un ejemplo de trabajo que se traduciría en un dispositivo divisible hecho de dos discos sda y sdb: La emisión de este comando se traducirá en un dispositivo / dev/md_d0 que se pueden particionar con fdisk o parted. Las particiones estarán disponibles como / dev/md_d0p1, /dev/md_d0p2. Ahora si bien podemos ver entre las opciones que he puesto el (--metadata=1.2) en caso de que el bootloader vaya a estar dentro del raid, suponiendo que instalaremos dentro del raid, tendremos un problema debido a que LILO no soporta la version 1 de metadata para ello debemos especificarle la 0.90, otros bootloader como GRUB no presentan este inconveniente. En caso de que se dañase un disco donde reside el grub, al momento de incorporar uno nuevo debemos ejecutar el comando: grub-install (disco) Algunas limitantes a la hora de implementar metadata 0.90 son: La versión 0.90 superblock limita el número de dispositivos de componentes dentro de una matriz a 28, y limita cada componente dispositivo a un tamaño máximo de 2 TB en el kernel de la versión <3,1 y 4 TB de la versión del kernel> = 3.1. La versión 1 superblock es capaz de soportar las matrices con los dispositivos 384 + componentes, y soporta arrays con longitudes de sector de 64 bits. RAID 0 (Data Striping) Un RAID 0 (también llamado conjunto dividido, volumen dividido, volumen seccionado) distribuye los datos equitativamente entre dos o más discos sin información de paridad que proporcione redundancia. Es importante señalar que el RAID 0 no era uno de los niveles RAID originales y que no es redundante. El RAID 0 se usa normalmente para incrementar el rendimiento, aunque también puede utilizarse como forma de crear un pequeño número de grandes discos virtuales a partir de un gran número de pequeños discos físicos. Un RAID 0 puede ser creado con discos de diferentes tamaños, pero el espacio de almacenamiento añadido al conjunto estará limitado por el tamaño del disco más pequeño (por ejemplo, si un disco de 300GB se divide con uno de 100 GB, el tamaño del conjunto resultante será sólo de 200 GB, ya que cada disco aporta 100GB). Una buena implementación de un RAID 0 dividirá las operaciones de lectura y escritura en bloques de igual tamaño, por lo que distribuirá la información equitativamente entre los dos discos. También es posible crear un RAID 0 con más de dos discos, si bien, la fiabilidad del conjunto será igual a la fiabilidad media de cada disco entre el número de discos del conjunto; es decir, la fiabilidad total —medida como MTTF o MTBF— es (aproximadamente) inversamente proporcional al número de discos del conjunto (pues para que el conjunto falle es suficiente con que lo haga cualquiera de sus discos). Configuración: RAID-0 has no redundancy, so when a disk dies, the array goes with it. Having run mdadm you have initialised the superblocks and started the raid device. Have a look in /proc/mdstat to see what's going on. You should see that your device is now running./dev/md0 is now ready to be formatted, mounted, used and abused. RAID 1 (Mirroring) Un RAID 1 crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos. Esto resulta útil cuando el rendimiento en lectura es más importante que la capacidad. Un conjunto RAID 1 sólo puede ser tan grande como el más pequeño de sus discos. Un RAID 1 clásico consiste en dos discos en espejo, lo que incrementa exponencialmente la fiabilidad respecto a un solo disco; es decir, la probabilidad de fallo del conjunto es igual al producto de las probabilidades de fallo de cada uno de los discos (pues para que el conjunto falle es necesario que lo hagan todos sus discos). Adicionalmente, dado que todos los datos están en dos o más discos, con hardware habitualmente independiente, el rendimiento de lectura se incrementa aproximadamente como múltiplo lineal del número del copias; es decir, un RAID 1 puede estar leyendo simultáneamente dos datos diferentes en dos discos diferentes, por lo que su rendimiento se duplica. Al escribir, el conjunto se comporta como un único disco, dado que los datos deben ser escritos en todos los discos del RAID 1. Por tanto, el rendimiento no mejora. Configuración: RAID 5 Un RAID 5 (también llamado distribuido con paridad) es una división de datos a nivel de bloques distribuyendo la información de paridad entre todos los discos miembros del conjunto. El RAID 5 ha logrado popularidad gracias a su bajo coste de redundancia. Generalmente, el RAID 5 se implementa con soporte hardware para el cálculo de la paridad. RAID 5 necesitará un mínimo de 3 discos para ser implementado. En el gráfico de ejemplo anterior, una petición de lectura del bloque «A1» sería servida por el disco 0. Una petición de lectura simultánea del bloque «B1» tendría que esperar, pero una petición de lectura de «B2» podría atenderse concurrentemente ya que sería servida por el disco 1. Cada vez que un bloque de datos se escribe en un RAID 5, se genera un bloque de paridad dentro de la misma división (stripe). Un bloque se compone a menudo de muchos sectores consecutivos de disco. Una serie de bloques (un bloque de cada uno de los discos del conjunto) recibe el nombre colectivo de división (stripe). Si otro bloque, o alguna porción de un bloque, es escrita en esa misma división, el bloque de paridad (o una parte del mismo) es recalculada y vuelta a escribir. El disco utilizado por el bloque de paridad está escalonado de una división a la siguiente, de ahí el término «bloques de paridad distribuidos». Las escrituras en un RAID 5 son costosas en términos de operaciones de disco y tráfico entre los discos y la controladora. Los bloques de paridad no se leen en las operaciones de lectura de datos, ya que esto sería una sobrecarga innecesaria y disminuiría el rendimiento. Sin embargo, los bloques de paridad se leen cuando la lectura de un sector de datos provoca un error de CRC. En este caso, el sector en la misma posición relativa dentro de cada uno de los bloques de datos restantes en la división y dentro del bloque de paridad en la división se utilizan para reconstruir el sector erróneo. El error CRC se oculta así al resto del sistema. De la misma forma, si falla un disco del conjunto, los bloques de paridad de los restantes discos son combinados matemáticamente con los bloques de datos de los restantes discos para reconstruir los datos del disco que ha fallado «al vuelo». El fallo de un segundo disco provoca la pérdida completa de los datos. Configuración: Ahora, para ver como se reconstruye el raid 5 ejecutamos cat a /proc/mdstat, también lo podemos combinar con watch -n1 para verlo cada 1 segundo. Una vez que se configura un raid guardaremos la configuración en /etc/mdadm.conf Para ello utilizamos re direccionamiento. Para detener un RAID corriendo ejecutamos: Y para volverlo a encender simplemente reiniciamos la maquina, aunque esta opción es un poco extrema por eso solo ejecutamos uno de los siguientes comandos: Si antes habíamos creado con esto: pues solo ejecutamos esto: O este: Y pensaran, oye pero este es mucho mas fácil pero en caso de que tengan varios RAID parados, este los subirá a todos, como en la foto mas arriba. LVM LVM es el acrónimo de Logical volume managent, que en computación hace referencia a una forma de asignar espacio de forma más flexible que las formas tradicionales como el particionado. En particular un volume manager puede concatenar, dividir o combinar particiones (¡incluso de discos distintos!) en otras virtuales más grandes que los administradores pueden redimensionar o mover, potencialmente sin ni siquiera interrumpir su uso. También permite la administración de volúmenes definidos por grupos de usuarios, otorgándole al administrador del sistema lidiar con grupos de volúmenes con nombres más sensibles como “desarrollo” o “sistema” en vez de nombres de discos físicos que poco nos dicen como “sda” y “sdb”. Un LVM se descompone en tres partes: Volúmenes físicos (PV): Son las particiones del disco duro con sistema de archivos LVM. (raid's) Volúmenes lógicos (LV): es el equivalente a una partición en un sistema tradicional. El LV es visible como un dispositivo estándar de bloques, por lo que puede contener un sistema de archivos (por ejemplo /home) Grupos de volúmenes (VG): es la parte superior de la LVM. Es la "caja" en la que tenemos nuestros volúmenes lógicos (LV) y nuestros volúmenes físicos (PV). Se puede ver como una unidad administrativa en la que se engloban nuestros recursos. Hay que hacer notar que mientras un PV no se añada al VG, no podemos comenzar a usarlo. Tips: La partición /boot no debiera incluirse en el LV porque no todos los bootloaders saben utilizarlas, de forma que podríamos quedar con un sistema que no sea arrancable. Borrar tabla de particiones: dd if=/dev/zero of=/dev/(disco) bs=1k count=1 A continuación vamos a hacer las configuraciones: Creación de Physical Volume, comando: pvcreate Entre más opciones que hay podemos chequearlo con pvdisplay: Creación de un Volume Group, comando: vgcreate El volume group se puede hacer de 1 disco o más. Entre más opciones que hay podemos chequear con vgdisplay: Creacion de un Logical Volume, comando: lvcreate -L: especifica el tamaño del volumen -l 100%FREE: especifica todo el espacio restante -n: el nombre del volumen Entre más opciones que hay podemos chequearlo con lvdisplay: