SDB:Fundamentos de dispositivos de almacenamiento
Artículos recomendados | Artículos relacionados | ||
Introducción
Los dispositivos de almacenamiento son aquéllos en los que almacenamos información de manera permanente.
El dispositivo más común actualmente es el disco duro, aunque los discos flash van sustituyéndolo poco a poco. No obstante, pese a sus diferencias técnicas, desde el punto de vista del usuario de un Sistema Operativo son indistinguibles. Otros dispositivos habituales son las tarjetas de memoria (SD, microSD) que suelen acompañar a las modernas cámaras digitales, tanto de vídeo como de fotografía; también son omnipresentes los llamados pendrives (traducido a veces como llave o memoria USB).
Estos dispositivos pueden ser considerados discos, y algunas documentaciones y referencias lo hacen. Cuando se usa en singular, disco suele referirse al disco duro. Por otro lado, lo aplicable a un disco duro es de aplicación a cualquier otro disco, tanto tarjetas como pendrives.
Un tipo de disco cada vez más en desuso es el disquete: muchos computadores y prácticamente todos los portátiles (por no hablar de netbooks o tabletas) no se molestan en proveer siquiera un dispositivo para usarlos.
Los CD, DVD y similares, pese a su evidente forma de disco, no se manejan de la misma forma. En realidad, se usan de forma más parecida a otros dispositivos, como por ejemplo las cintas magnéticas.
Este documento se refiere al primer tipo de dispositivos de almacenamiento: los discos. |
Dicho todo esto, desde el punto de vista del usuario, un dispositivo es tanto un CD, como un disco duro o cualquier partición de este último.
Particionado de discos
Los sistemas Unix siempre han tenido la posibilidad de montar un subsistema de almacenamiento de varias particiones. Estas particiones pueden estar repartidas en varios dispositivos físicos, o pueden ser varias particiones en un mismo dispositivo físico. Cada disco debe tener al menos una partición, pero a menudo hay más. Nos limitaremos aquí a el particionado tal y como se hace en los discos duros en un entorno de un PC.
Particiones MS-DOS
Al principio, cuando los discos tenían muy poco espacio, se tenía la idea de que cuatro particiones serían suficientes para todo el uso posible que se le fuera a dar al disco duro (con el tiempo se ha evolucionado y aquella idea ha quedado obsoleta, pudiendo necesitar más de esas 4 particiones posibles). Los datos sobre el particionado están escritos en la tabla de particiones. Se encuentra en un lugar especial en el disco y el BIOS accede a ella para consultarla.
Cuando se hizo muy evidente que cuatro particiones no iban a ser suficientes, se encontró e implementó una solución compatible con las versiones anteriores: hacer una de las cuatro particiones, una partición especial, que puede contener varias particiones. Las BIOS más reciente (en la actualidad todas las BIOS) conocen este nuevo tipo de particiones y pueden utilizarlas. Así pues, tenemos tres tipos de particiones:
- Particiones primarias: estas son las antiguas 4 particiones primigenias, puede haber hasta 4 (numeradas con los números 1, 2, 3, 4).
- Partición extendida: (de hecho también es una partición primaria), sólo puede haber una, tiene normalmente el número más alto después de la creada como partición primaria (3 ó 4) y debe contener todo el espacio restante del disco (de lo contrario el espacio queda desperdiciado).
- Particiones secundarias: que se crean dentro de la partición extendida, su numeración es siempre 5 o superior (el máximo es discutible, pero suele ser suficiente para la mayoría de la gente).
Algunas personas están desconcertadas por la existencia de la partición extendida, que no parece ser de ninguna utilidad y ocupa una gran cantidad de espacio en disco y que el espacio parece que también pertenecen a otras particiones útil. La partición extendida actúa como un contenedor para las particiones secundarias, y el espacio que se muestra corresponde tanto a la partición extendida como a las particiones secundarias que contiene.
Veamos un ejemplo de un disco con particiones de los tres tipos:
Geecko_root:/ # fdisk -l Disk /dev/sda: 200.0 GB, 200049647616 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x1c841c84 Device Boot Start End Blocks Id System /dev/sda1 1 574 4604008+ c W95 FAT32 (LBA) Partition 1 does not end on cylinder boundary. /dev/sda2 * 575 8967 67416772+ 7 HPFS/NTFS /dev/sda3 8968 24321 123331005 f W95 Ext'd (LBA) /dev/sda5 8968 9229 2104483+ 82 Linux swap / Solaris /dev/sda6 9230 11840 20972826 83 Linux /dev/sda7 11841 24321 100253601 83 Linux Geecko_root:/ #
- Partición 1: es una partición de restauración creada por el fabricante.
- Partición 2: contiene un sistema Windows XP (El sistema la llama como unidad
C:
). - Partición 3: Es la partición extendida y ocupa hasta el final del disco dura. Y contiene estas tres particiones.
- Partición 5: es la partición swap de openSUSE.
- Partición 6: es la partición root de openSUSE.
- Partición 7: es la partición /home de openSUSE.
La tabla de particiones de tipo MS-DOS consiste en un pequeño archivo con capacidad para cuatro entradas (de ahí el límite de 4 particiones primarias o 3 primarias más una extendida) situado en el MBR, tras el código del cargador de arranque.
Particiones GUID (GPT)
La tabla de particiones GUID (GPT) es parte del estándar Extensible Firmware Interface (EFI), el cual reemplaza la BIOS que aún se sigue usando en la mayor parte de computadores personales. GPT sustituye al MBR que usa la BIOS.
GPT no necesita el esquema Partición Extendida + Particiones lógicas, ya que no está limitada a las cuatro entradas del esquema MS-DOS.
openSUSE puede usar tablas de particiones GPT. Sin embargo, hay varias limitaciones:
- GRUB no arranca particiones en tablas GPT. Si hay menos de cuatro entradas, pude usarse una suerte de modo compatible, pero en este caso no podría acceder a cualquiera que estuviese más allá de la cuarta partición.
- Algunas instalaciones de Windows en algunos equipos portátiles usan dicho modo compatible. Lamentablemente, al iniciar la instalación YaST interpreta dicha tabla de particiones como si fuese una tabla de particiones MS-DOS. Hay formas de solventar esto, pero ninguna trivial.
Slices
Los slices son similares a las particiones lógicas. Una partición principal o primaria puede ser dividida en varias particiones.
Los slices se enumeran con letras (a, b, c...) en sus respectivas particiones. Esto es importante si se desea crear una entrada para FreeBSD en nuestro cargador GRUB, por ejemplo. Sin embargo, Linux maneja los slices de forma similar a las particiones lógicas.
bash# fdisk /dev/hda Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 27 54400+ 83 Linux native /dev/hda2 28 28 55 56448 83 Linux native /dev/hda3 56 56 403 701568 83 Linux native /dev/hda4 404 404 621 439488 a5 BSD/386 Command (m for help): b Reading disklabel of /dev/hda4 at sector 1624897. BSD disklabel command (m for help): p 8 partitions: # size offset fstype [fsize bsize cpg] a: 64512 1624896 4.2BSD 0 0 0 # (Cyl. 404 - 419) b: 104832 1689408 swap # (Cyl. 420 - 445) c: 878976 1624896 unused 0 0 # (Cyl. 404 - 621) e: 64512 1794240 4.2BSD 0 0 0 # (Cyl. 446 - 461) f: 645120 1858752 4.2BSD 0 0 0 # (Cyl. 462 - 621) BSD disklabel command (m for help): q bash#
Las letras `a'...`f' de la primera columna son las mismas etiquetas como se muestra en el ejemplo para una porción FreeBSD. Hay tres particiones especiales en BSD. La letra `a' designa la partición raíz, `b' designa la partición swap, mientras que `c' designa la porción entera. En el ejemplo, como se ve los slices están creados en la partición 4.
Etiqueta Linux Etiqueta FreeBSD Punto de montaje FreeBSD /dev/hda5 /dev/wd0s4a / /dev/hda6 /dev/wd0s4b swap /dev/hda7 /dev/wd0s4e /var /dev/hda8 /dev/wd0s4f /usr
Ejecutar dmesg en este ejemplo (en Linux) visualiza lo siguiente, a condición de que el soporte para el sistema de ficheros UFS esté instalado:
Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
Nomenclatura
Nombrado de dispositivos y particiones bajo Linux
En la sección anterior puede verse como se enumeran en Linux los dispositivos y particiones.
Cuando el sistema Linux arranca, escanea el hardware y cuando encuentra los discos y particiones les da un nombre. Estos nombres se utilizan para ser encontrados como archivos de dispositivos especiales dentro del directorio /dev/ (que viene de devices o dispositivo). Los discos tienen nombres como hda, hdb, hdc, ... para dispositivos IDE; o sda, sdb, sdc, ... Para dispositivos SCSI. Y las particiones de hda serán hda1, hda2, ... y las sda serán sda1, sda2, ... respectivamente, donde el número es el número de partición.
¿Cuáles son los archivos de dispositivos especiales? Un tipo especial de archivos que están asociados con el hardware. La entrada/salida (abreviado E/S) mediante el hardware se hace leyendo o escribiendo en este archivo. Así se dice repetidamente y puede que lo hayas escuchado, que en Unix/linux todo es un archivo. Hay dos tipos de estos archivos: archivo especial de dispositivo de caracteres y archivo especial de dispositivo de bloques. Para los discos hacemos E/S de bloques. Por supuesto, esto es demasiado largo para pronunciar por lo que la mayoría la gente habla de los archivos de dispositivos. Normalmente se crean en el directorio /dev/ (hoy en día de forma dinámica por parte de udev). Veamos cómo se ve dentro de directorio /dev/:
Geecko_root:/dev # ls -l sda* brw-rw---- 1 root disk 8, 0 ene 30 11:29 sda brw-rw---- 1 root disk 8, 1 ene 30 11:29 sda1 brw-rw---- 1 root disk 8, 2 ene 30 11:29 sda2 brw-rw---- 1 root disk 8, 5 ene 30 11:29 sda5 brw-rw---- 1 root disk 8, 6 ene 30 11:29 sda6
La mayoría de las cosas que ve le serán familiares. La b indica un archivo de dispositivo especial de bloques. A los usuarios normales no se les permite leer/escribir directamente desde/hacia el disco, de lo contrario toda seguridad sería inútil. El número 8 es el número que el kernel utiliza internamente para el controlador que trabaja con estos dispositivos y el 0 - 3 sirve para distinguirlos entre sí dentro de ese controlador.
Hasta hace poco estos /dev/sdb2, etc se utilizaron para montar las particiones y cuando se escribía el comando mount (muestra lo que está montado), verá cuales utiliza.
Geecko_root:/ # mount | grep /dev/sd /dev/sdb6 on / type reiserfs (rw,relatime,acl,user_xattr) /dev/sdb7 on /home type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered) /dev/sdb2 on /windows/C type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) Geecko_root:/ #
Esto se basa en el hecho de que en cada arranque del sistema se encuentra en los discos en la misma secuencia. Si esto no se produjese, sda y sdb podrían estar cambiadas y las particiones mal montadas (¡y provocar un lío enorme al usuario!) Esto puede ocurrir no sólo en el arranque, si no también cuando se conecta un disco a un sistema en funcionamiento al que se le dará el nombre 'siguiente' al último montado (por ejemplo, sdc). Así, por ejemplo, al conectar un disco o memoria USB externa a un sistema, no se garantiza obtener el mismo punto de montaje en todo momento, lo cual es inconveniente.
Para eliminar esta confusión, sería necesario que haya un identificador único para el disco. Y lo hay. Más aún, mira en: /dev/disk/. Existen varios directorios dentro de esa ruta, tal y como vemos en este ejemplo y como puedes ver en tu sistema:
Geecko_root:/ # ls -l /dev/disk total 0 drwxr-xr-x 2 root root 860 ene 30 11:29 by-id drwxr-xr-x 2 root root 120 ene 30 12:29 by-label drwxr-xr-x 2 root root 320 ene 30 11:29 by-path drwxr-xr-x 2 root root 200 ene 30 12:29 by-uuid Geecko_root:/ #
Puedes mirar dentro de esos directorios. Cada uno de ellos tiene algunas o todas las particiones, identificadas de una manera diferente. Y cada uno de estos archivos no es un archivo especial de dispositivo, sino un enlace a un archivo especial de dispositivos que hemos visto anteriormente. Cuando se mira en /etc/fstab:
Geecko_root:/ # cat /etc/fstab /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part5 swap swap defaults 0 0 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part6 / reiserfs acl,user_xattr 1 1 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part7 /home ext4 acl,user_xattr 1 2 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part2 /windows/C ntfs-3g users,gid=users,fmask=133,dmask=022,locale=es_ES.UTF-8 0 0 ...
Verás que openSUSE utiliza hoy en día los nombres de /dev/disk/by-id/ para ver que las particiones se montan de forma correcta:
Geecko_root:/ # ls -l /dev/disk/by-id ... lrwxrwxrwx 1 root root 9 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X -> ../../sdb lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part2 -> ../../sdb2 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part5 -> ../../sdb5 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part6 -> ../../sdb6 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part7 -> ../../sdb7 ...
Nombrado de dispositivos y particiones bajo GRUB
GRUB tiene su propio esquema de numeración y lo más importante es saber que GRUB inicia todos los discos y particiones contándolos ¡empezando desde 0 y no desde 1!
El orden en el que se enumeran los discos se define en la BIOS y puede establecerse allí. Sin embargo, GRUB permite que el usuario modifique este orden (llamado mapeo de discos) en tiempo real y de forma transparente para el Sistema Operativo que use dicho servicio de la BIOS.
Etiqueta Linux Etiqueta GRUB /dev/sda hd0 /dev/sda1 hd0,0 /dev/sda6 hd0,5 /dev/sdb hd1 /dev/hdb3 hd1,2
Desde el punto de vista de GRUB, un pendrive es visto como otro disco. Recuerda que GRUB utiliza la BIOS para manejar los dispositivos.
Volúmenes
El uso de volúmenes permite hacer abstracción de la división física de los dispositivos locales.
- De la división física, porque un volumen puede crearse con una o varias particiones de uno o varios discos.
- Locales, porque un volumen es una forma de utilizar dispositivos conectados directamente al computador, no un sistema distribuido por una red.
El uso de volúmenes proporciona varias ventajas y no se libra de unos cuantos inconvenientes. openSUSE permite usar volúmenes e incluso una de las opciones para el particionado automático en la instalación permite indicar que se use cree un volumen. Otras distribuciones, como Red Hat Enterprise Linux (RHEL) o Fedora (el proyecto libre auspiciado por Red Hat) usan ese sistema por defecto.
Entre las ventajas:
- Permitir adaptarse a los cambios en los requerimientos de espacio con mayor simplicidad. Puede añadirse más espacio al volumen si lo hay en el disco, o redistribuir el espacio sobrante de un volumen lógico para otro. El espacio a reasignar, naturalmente, no tiene porqué ser contiguo.
- Los volúmenes permiten hacer copias de seguridad en tiempo real: el sistema provee espacio para la copia, de forma que mientras los datos son copiados en el medio de respaldo, los datos que van cambiando en el disco a respaldar se copian en el espacio extra. Así se asegura la integridad de los datos respaldados. Si la copia ser realiza a una hora (digamos a las 18:00) la copia de respaldo contendrá los datos que había a esa hora, sin preocuparse de los datos que cambien en el tiempo que tarde en realizarse de dicha copia. El sistema también se encarga de que, una vez finalizado el respaldo, los datos nuevos se actualicen.
- Simplifica el cifrado al permitir cifrar todo el volumen en una sola operación.
Entre las desventajas:
- GRUB no permite arrancar desde un volumen lógico. En caso de querer usar volúmenes en el sistema, el arranque ha de ubicarse en una partición normal (principal o lógica).
Volúmenes físicos
Un volumen físico (o pv de sus siglas en inglés phisical volumen) se compone de un partición o incluso de un dispositivo completo. Para que un dispositivo pueda ser utilizado como volumen físico, debe de ser de tipo 8e.
bash# fdisk -l /dev/sda Disk /dev/sda: 320.1 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e19d7 Device Boot Start End Blocks Id System /dev/sda1 * 2048 419618815 209808384 f W95 Ext'd (LBA) /dev/sda2 419618816 444194815 12288000 83 Linux /dev/sda5 4096 401407 198656 83 Linux /dev/sda6 403456 252059647 125828096 8e Linux LVM
/dev/sda6 es una partición utilizada para contener un volumen físico, mientras que /dev/sda5 contiene el arranque del sistema. En este esquema, pensado para contener varios sistemas operativos de los cuales algunos harán uso también de sus propios volúmenes, se ha optado por combinar volúmenes con una partición extendida; de todas formas, uno de los usos de los volúmenes es precisamente evitar la necesidad de tal partición sin la penalización del límite de 4 particiones.
bash# pvdisplay --- Physical volume --- PV Name /dev/sda6 VG Name openSUSE PV Size 120,00 GiB / not usable 3,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 30719 Free PE 2559 Allocated PE 28160 PV UUID 94QhS4-uL5Y-aQbc-3GXd-Nld9-M1CM-Xna6fV
Los volúmenes usan su propia unidad de asignación Extents. Physical Extents son pequeñas porciones de datos con un tamaño dado (por defecto, 4 MiB).
Grupos de volúmenes
Son grupos de almacenamiento compuestos de uno o varios volúmenes físicos a los que se da un nombre común.
bash# vgdisplay --- Volume group --- VG Name openSUSE System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 12 VG Access read/write VG Status resizable MAX LV 0 Cur LV 8 Open LV 8 Max PV 0 Cur PV 1 Act PV 1 VG Size 120,00 GiB PE Size 4,00 MiB Total PE 30719 Alloc PE / Size 28160 / 110,00 GiB Free PE / Size 2559 / 10,00 GiB VG UUID S4IaNt-rQKf-jTUE-Dp7S-3jqr-aizZ-IXJKE0
Volúmenes lógicos
Más arriba se ha dicho que un extent es una porción de datos usado por el volumen. Logical Extents son las porciones de datos que manejan los volúmenes lógicos: un volumen lógico no es más que un conjunto definido (y con un nombre) de Extents lógicos.
bash# lvdisplay --- Logical volume --- LV Name /dev/openSUSE/memVirtual VG Name openSUSE LV UUID PPhJ9U-LlNa-wsAD-vgOT-tTgy-PUKp-b1gsrM LV Write Access read/write LV Status available # open 2 LV Size 2,00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Name /dev/openSUSE/raiz VG Name openSUSE LV UUID evORyB-Vs3k-lotl-yTp0-z3vU-kDcX-7qR65n LV Write Access read/write LV Status available # open 2 LV Size 2,00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Logical volume --- LV Name /dev/openSUSE/usuarios VG Name openSUSE LV UUID PWXXbT-3wpY-RBFq-73l0-5dZC-to5H-JmjNJz LV Write Access read/write LV Status available # open 1 LV Size 50,00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Name /dev/openSUSE/aplicaciones VG Name openSUSE LV UUID 43wVso-Cg2K-K64M-6djL-QsvP-xT5Q-ZkDoze LV Write Access read/write LV Status available # open 1 LV Size 25,00 GiB Current LE 6400 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3 --- Logical volume --- LV Name /dev/openSUSE/opcional VG Name openSUSE LV UUID dfRhTq-09Am-f4u2-zEIa-75ga-Vsjf-gJxkg5 LV Write Access read/write LV Status available # open 1 LV Size 7,00 GiB Current LE 1792 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4 --- Logical volume --- LV Name /dev/openSUSE/servicios VG Name openSUSE LV UUID mBQCLA-5z6z-VwFU-2VBw-Q4hN-XbF6-9mXp5K LV Write Access read/write LV Status available # open 1 LV Size 15,00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:5 --- Logical volume --- LV Name /dev/openSUSE/servidores VG Name openSUSE LV UUID 7EO8YU-EyOJ-9wA0-Z9oz-SEeo-poTw-bOduzO LV Write Access read/write LV Status available # open 2 LV Size 7,00 GiB Current LE 1792 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:6 --- Logical volume --- LV Name /dev/openSUSE/temporal VG Name openSUSE LV UUID DRNDxz-dQ8N-TesM-2d4S-2J4V-O4oV-bSlrrj LV Write Access read/write LV Status available # open 1 LV Size 2,00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:7
Cada Extent lógico se corresponde con al menos un Extent físico, como era de esperar. Sin embargo, ello quiere decir también que cada Extent lógico puede configurarse para que se asocie (mapee) a varios Extents físicos. Esto permite, por ejemplo, usar redundancia de forma que cada dato del volumen lógico se guarde en dos dispositivos diferentes.
RAID
El acrónimo RAID (conjunto redundante de discos independientes, Redundant Array of Inexpensive Disks -fíjate en el cambio de baratos a independientes") se refiere a un sistema de almacenamiento que usa múltiples 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 RAID suelen usarse en servidores y normalmente (aunque no es necesario) se implementan con unidades de disco de la misma capacidad. Debido al decremento en el precio de los discos duros y la mayor disponibilidad de las opciones RAID incluidas en los chipsets de las placas base, los RAID 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.