Administración de volumenes
La gestión del espacio de almacenamiento en un sistema informático es compleja, aún en el caso de que antes de instalar el SO se planifique adecuadamente el uso de discos y particiones, nos podemos encontrar con que se agota el espacio de almacenamiento en una partición o disco mientras en otro nos sobra espacio.
Con la gestión básica de discos, particiones y sistemas de ficheros es posible solucionar el problema, aunque es una tarea delicada y tal vez no sea posible hacerlo sin dejar de prestar servicio mientras se llevan a cabo los cambios. Obtener otras ventajas como tolerancia a fallos hardware y/o un mayor rendimiento al balancear la carga I/O entre distintos dispositivos, no es posible si no se utiliza un administrador de volumenes. Un administrador de volumenes permite agrupar dispositivos físicos (como discos o particiones) para obtener un volumen virtual que a ojos del SO será un dispositivo simple.
Algunas posibilidades para la gestión de volumenes son:
Tipo | Comentario |
---|---|
RAID | Permite unir varios dispositivos físicos en un volumen lógico. Sus usos habituales son: lograr tolerancia a fallos y/o mejorar el rendimiento. Está disponible en soluciones hardware o software para multitud de SOs. |
LVM | Administrador de volumenes lógicos. Permite crear dinámicamente volumenes lógicos compuestos por diferentes dispositivos físicos, estos volumenes lógicos pueden variar su tamaño mientras están en uso. Disponible en varios SOs, entre ellos GNU/Linux |
EVMS | Proporciona un mecanismo unificado para gestionar todas las opciones de almacenamiento en GNU/Linux |
VVM | Veritas Volume Manager, solución privativa de Veritas disponible para varios SOs (entre ellos Windows) |
ZFS | El sistema de ficheros ZFS incorpora la administración de volúmenes |
Btrfs | El sistema de ficheros Btrfs incorpora la administración de volúmenes |
RAID
El acrónimo RAID significa conjunto de discos redundantes independientes/baratos (Redundant array of independent/inexpensive disks). La idea que hay detrás de RAID es sencilla, se pueden utilizar varios discos físicos para:
- Guardar la información de forma redundante en ellos, lo que puede proporcionar tolerancia a fallos y/o un mejor rendimiento según la forma en la que se realice
- Obtener un volumen lógico con la capacidad de varios discos físicos independientes
El soporte RAID se puede obtener por software, siendo en este caso el SO el que gestiona los dispositivos físicos. O bien mediante hardware, de manera que una controladora se encarga de controlar varios discos para presentar al sistema informático un volumen RAID. Para las opciones de intercambio de discos en caliente es necesario soporte hardware.
Cuando se utiliza RAID se pueden configurar los discos de diferentes modos. A estas configuraciones se las llama niveles RAID.
A continuación se enumeran las configuraciones más utilizadas:
RAID 0: Conjunto de discos divididos sin tolerancia a fallos (No redundante)
Se construye un volumen que tiene por capacidad la suma de capacidades de los discos utilizados (con un disco de 40GB y otro de 20GB el volumen RAID 0 tendrá una capacidad de 60GB). Los datos se dividen en bloques, y los bloques se guardan de forma alternada entre los diferentes discos físicos.
Ventajas:
- Al repartir los accesos a disco entre varias unidades que trabajan en paralelo se incrementa el ancho de banda de entrada/salida
- Se obtiene un volumen con la suma de la capacidad de todos los discos que intervienen
Inconvenientes:
- No proporciona tolerancia a fallos. Si se pierde un disco se pierde todo el volumen RAID0
RAID 1: Espejo (mirror)
Como mínimo deben utilizarse dos discos para obtener un volumen RAID 1. La información se graba por duplicado en cada uno de los discos, de manera que el volumen RAID 1 tendrá por capacidad la capacidad de uno solo de los discos utilizados. Cuando se realizan lecturas se pueden realizar de forma alternativa entre los diferentes discos para mejorar la velocidad, no hay mejora en el caso de las escrituras. Si un disco falla, cualquiera de los otros discos del volumen guardan toda la información y el volumen RAID puede seguir funcionando en modo degradado (ha perdido un disco).
Ventajas:
- Tolerancia a fallos
- Cada uno de los discos del RAID 1 es una replica bloque a bloque de los otros discos, puede utilizarse como un disco simple en un sistema que no soporte RAID.
- Incremento de la velocidad de lectura
Inconvenientes:
- Utilizar varios discos sólo permite obtener un volumen con la capacidad de uno de ellos
- Alta carga
RAID 4: Unidad de paridad dedicada (Paridad de intervalo de bloque)
Si se utilizan N discos los bloques de datos se guardan en N-1 discos, pues se utiliza un disco para guardar la paridad de los bloques. Si fallase uno de los discos de bloques, con los discos restantes y el disco de paridad es suficiente para reconstruir la información perdida. Si se pierde el disco de paridad, se puede volver a reconstruir a partir de los bloques de datos.
Ventajas:
- Tolerancia a fallos
- Si se utilizan N discos, se obtiene un volumen con la capacidad de N-1 discos
Desventajas:
- El disco de paridad puede ser un cuello de botella
RAID 5: Discos de datos independientes con bloques de paridad distribuidos (Bloques de Intervalo de Paridad Distribuida)
Igual que en RAID 4 la información se divide en bloques y se calcula su paridad, pero en este caso todos los discos guardan bloques de datos y bloques de paridad, intercalados de tal manera que cuando un disco duro falla se pierden bloques de datos que tienen la paridad en otro disco, o bloques de paridad de datos que están en otro disco. Al aumentar el número de discos, se reparte la carga entre todos ellos.
Como mínimo se necesitan tres discos para montar un RAID 5
Ventajas:
- Gran velocidad de lectura
Inconvenientes:
- Mayor complejidad en la controladora
- Mayor complejidad (comparado con RAID 1) en la reconstrucción de un disco tras un error
RAID 6: Discos de datos independientes con doble paridad
Es similar al nivel RAID 5 pero en este caso se calculan dos paridades, de modo que se tolera la avería en dos dispositivos antes de perder informaicón. Se necesita un mínimo de 3 unidades físicas, pero es necesario utilizar 4, o más, para superar la eficiencia en espacio de RAID 1. Se utiliza RAID 6 en lugar de RAID 5 cuando el tiempo de reconstrucción del RAID es tan grande que hace probable otra avería durante la reconstrucción tras un disco fallido.
Combinaciones de niveles RAID
Se pueden utilizar volumenes RAID, como si fuesen discos simples, para construir otros volumenes RAID.
Las combinaciones más frecuentes son:
- RAID 10, RAID 1 + 0
- Se crean multiples espejos RAID 1 y se utilizan en la construcción de un RAID 0
- RAID 0 + 1
- Se crean dos volumenes RAID 0 y sobre ellos se construye un espejo RAID 1
LVM Logical Volume Manager
LVM es un gestor de volumenes lógicos para el núcleo Linux inspirado en VVM.
Inicialmente LVM no incluía funciones RAID, por lo que en caso de necesitar tolerancia a fallos normalmente se utilizaba encima de volumenes RAID. Pero en la actualidad LVM incorpora soporte RAID para los niveles 1, 4, 5, 6 y 10.
Otra de las incorporaciones recientes de LVM es el modo thin-provisioning, en el que no se reserva espacio físico de almacenamiento hasta que no se realiza la escritura de datos.
Algunas de las características de LVM son:
- Redimensionado de volumenes lógicos
- Redimensionado de grupos de volumenes
- Instantáneas de sólo lectura con LVM1, o lectura/escritura con LVM2
- RAID 0 de volumenes lógicos
En la terminología de LVM se utilizan los siguientes conceptos:
- Volumenes físicos (PV):
- Son discos duros, particiones o cualquier otro dispositivo como un volumen RAID
- Volumenes lógicos (LV):
- Es el equivalente a una partición en un sistema tradicional. Se vé como un dispositivo de bloques que puede contener un sistema de archivos
- Grupos de volumenes (VG):
- Una colección de volumenes lógicos y volumenes físicos
Cuando se redimensionan volumenes lógicos (LV) es necesario redimensionar también el sistema de archivos que contienen. Si no se quiere perder información es muy importante no tener un un volumen lógico menor que el sistema de archivos que contiene.
- Al extender el volumen lógico:
- Primero se extiende el volumen lógico y luego el sistema de archivos contenido
- Al reducir el volumen lógico:
- Primero se reduce el sistema de archivos y luego el volumen lógico
Sobre los sistemas de archivos, debe tenerse en cuenta que:
- EXT3/EXT4
- Puede extenderse o reducirse, pero mientras se realiza la operación el sistema de archivos no debe estar montado
- ReiserFS
- Puede extenderse o reducirse (por el inicio o el final) y el sistema de archivos puede estar montado o desmontado
- XFS y JFS
- Sólo es posible extender estos sistemas de archivos, y sólo es posible hacerlo si el sistema de archivos está montado. Además hay que referirse al sistema de archivos por su punto de montaje, en lugar de hacerlo por el nombre del dispositivo
EVMS Enterprise Volume Manager System
EVMS proporciona un mecanismo unificado para gestionar cualquier opción de almacenamiento en GNU/Linux. Durante un tiempo compitió en Linux junto a LVM por ser el gestor de volúmenes principal, finalmente ganó la competición LVM2.
Se utiliza una arquitectura modular para dar soporte a:
- Cualquier disco local (o cualquier cosa que parezca un dispositivo de bloques)
- Particiones de disco tipo DOS
- Particiones de disco tipo GPT (normalmente utilizadas en IA-64)
- Particiones de disco S/390(CDL/LDL)
- Particiones de disco BSD
- Particiones de disco Macintosh
- Dispositivos Linux MD/Software-RAID
- Grupos de volumenes y volumenes lógicos Linux LVM (versiones 1 and 2)
Sobre todos estos dispositivos se soporta: EXT2/EXT3, ReiserFS, JFS, XFS, Swap, OCFS2, NTFS y FAT.
Cuando se utiliza EVMS se utiliza el mismo conjunto de aplicaciones para realizar las diferentes operaciones independientemente del tipo de dispositivo y sistema de archivos que se utilice. Además, EVMS cuenta con tres interfícies de acceso:
- Intefaz gráfica (GUI) basada en GTK
- Intefaz basada en texto (Ncurses)
- Intefaz para la línea de comandos (CLI)
Sistema de archivos ZFS
ZFS es un sistema de archivos de nueva generación, que haciendo uso de la técnica copy on write, integra funciones del controlador RAID, el gestor de volumenes y el sistema de ficheros. Para ofrecer una solución de alamacenamiento que permite gestionar dispositivos con integridad, rendimiento, flexibilidad y facilidad.
Inicialmente lo desarrolló Sun para su SO Solaris. El núcleo, y otras partes del sistema operativo Solaris se liberaron en el proyecto OpenSolaris. De modo que era posible utilizar ZFS con OpenSolaris o bien con Nexenta OS, la primera distribución GNU/Solaris. Sin embargo triste ha sido el final de OpenSolaris, pues tras la adquisición de Sun por parte de Oracle se cerró el proyecto, aunque algunos de sus forks (illumos y OpenIndiana) continúan en desarrollo.
En cualquier caso en la actualidad existe el proyecto OpenZFS, bajo el que se desarrolla la versión libre de ZFS que está disponible en diferentes sistemas operativos: los derivados de OpenSolaris, FreeBSD o GNU/Linux.
ZFS no es un sistema de archivos tradicional, pues:
- Tiene capacidad para gestionar una ingente capacidad de almacenamiento (está pensado para que en la práctica nunca se pueda construir un sistema de almacenamiento tan grande que ZFS no lo pueda controlar).
- Incorpora la administración de volumenes en el propio sistema de ficheros combinando discos en un pool.
- Incorpora soporte para conseguir tolerancia a fallos con configuraciones similares a RAID (pero sin write hole). Además todos los bloques del sistema de ficheros están protegidos por una suma de verificación, evitando que cualquier corrupción de datos pase inadvertida.
- Permite crear instantáneas (de lectura o modificables), y estas instantáneas no penalizan el acceso a los datos.
- Crear un sistema de archivos es una operación ligera, más parecida a crear un directorio en un sistema de archivos tradicional que a crear un sistema de ficheros.
- Gran rendimiento. Tiene su propio sistema de cache de primer y segundo nivel. Permitiendo configuraciones en las que hay discos con distintas características (unos grandes y lentos, otros pequeños pero muy rápidos).
- Compatibilidad. Desde el punto de vista del SO, un fichero en ZFS es igual que cualquier otro fichero POSIX, además es posible mover los sistemas de ficheros entre máquinas con diferente endianness, por ejemplo entre máquinas Sparc y x86.
Las patentes de software y las licencias utilizadas han sido un obstáculo para el uso de ZFS en Linux. En primer lugar las licencias CDDL y GPLv2 son incompatibles y no es posible que un mismo software satisfaga ambas. Por otro lado, el camino hacia una reimplementación de ZFS puede estar bloqueado legalmente por las patentes de software. Aunque desde la versión de Ubuntu 16.04 LTS está disponible la versión de ZFS on Linux en los repositorios oficiales.
Aún así, existen dos vías para utilizar ZFS con Linux:
- ZFS on FUSE
- Existe una implementación incompleta de ZFS en el espacio del usuario utilizando FUSE. Si bien de esta manera se puede obviar la incompatibilidad de licencias es difícil conseguir un rendimiento próximo al nativo.
- Native ZFS on Linux
- El laboratorio Laurence Livermore National Laboratory ha recibido el encargo de reimplementar ZFS de manera nativa en Linux. En la página web del proyecto se ofrecen paquetes para las principales distribuciones de GNU/Linux.
La respuesta del mundo Linux: Btrfs
Btrfs es un sistema de archivos de nueva generación para GNU/Linux con funciones que permiten escalar el almacenamiento a configuraciones de gran capacidad. Su desarrollo todavía no se ha completado pero está integrado en el núcleo desde la versión 2.6.29 y actualmente es utilizable incluso como sistema de archivos raíz.
Del mismo modo que lo hace ZFS; Btrfs hace un uso extensivo de copy-on-write, permite snapshots de solo lectura o modificables, incluye soporte nativo para sistemas de archivos multidispositivo y soporta subvolumenes. Además protege la información (datos y metadatos) mediante checksums, soporta compresión, optimizaciones para discos SSD, empaquetado eficiente de ficheros pequeños y un largo etcétera de funciones que sigue creciendo durante su desarrollo.
Para hacerse una idea de sus características y cómo utilizarlo recomiendo leer: Ejemplos de uso de Btrfs.
Más información
- RAID por software con GNU/Linux
- mdadm: Una nueva herramienta para la gestión de RAID mediante software en Linux
- Ejemplos de uso de LVM
- Wikipedia: LVM
- LVM-HOWTO
- RAID Logical Volumes
- Creating Thinly-Provisioned Logical Volumes
- Red Hat Enterprise Linux 6: Gestión del administrador de volumen lógico
- EVMS
- EVMS: User Guide
- Wikipedia: ZFS
- Aaron Toponce's ZFS on Linux User Guide
- ZFS on Linux
- FreeBSD: The Z File System (ZFS)
- Oracle: Guía de administración de Oracle Solaris ZFS
- Wikipedia: VVM
- Main Page - btrfs Wiki
- Ejemplos de uso de Btrfs