ZFS es un sistema de archivos local y un gestor de volúmenes lógicos creado por Sun Microsystems Inc. para dirigir y controlar la colocación, el almacenamiento y la recuperación de datos en sistemas informáticos de clase empresarial.
El sistema de archivos y el gestor de volúmenes ZFS se caracterizan por la integridad de los datos, la alta escalabilidad y las funciones de almacenamiento incorporadas, tales como:
- Replicación – el proceso de hacer una réplica (una copia) de algo.
- Deduplicación: proceso que elimina las copias redundantes de datos y reduce la carga de almacenamiento.
- Compresión: reducción del número de bits necesarios para representar los datos.
- Snapshots – conjunto de marcadores de referencia para los datos en un momento determinado.
- Clones – una copia idéntica de algo.
- Protección de datos – el proceso de salvaguardar la información importante de la corrupción y/o la pérdida.
Historia de ZFS
Los ingenieros de Sun comenzaron a desarrollar ZFS en 2001 para el sistema operativo (SO) Solaris, basado en Unix, de la compañía. En 2005, Sun publicó el código fuente de ZFS bajo una licencia de desarrollo y distribución común (CDDL) como parte del sistema operativo de código abierto OpenSolaris. Una comunidad de desarrolladores, entre los que se encontraban representantes de Sun y otros proveedores, trabajó en la mejora del código fuente abierto y portó ZFS a otros sistemas operativos, como FreeBSD, Linux y Mac OS X.
El proyecto de código abierto OpenSolaris, que incluía ZFS, finalizó después de que Oracle Corp. adquiriera Sun en 2010 y registrara el término ZFS. Los ingenieros de Oracle siguen mejorando y añadiendo características a ZFS en Solaris. Oracle utiliza su código ZFS propietario como base para Oracle Solaris, el dispositivo de almacenamiento Oracle ZFS y otras tecnologías de Oracle.
Una comunidad de desarrollo inició un nuevo proyecto de código abierto, llamado OpenZFS, basado en el código fuente de ZFS en la versión final de OpenSolaris. La comunidad abierta trabaja en nuevas características, mejoras y correcciones de errores en el código de OpenZFS. Entre los sistemas operativos que soportan OpenZFS se encuentran Apple OS X, FreeBSD, illumos (que se basa en OpenSolaris) y variantes de Linux como Debian, Gentoo y Ubuntu. OpenZFS funciona en todas las distribuciones de Linux, pero sólo algunos proveedores comerciales lo ofrecen como parte de sus distribuciones. Las empresas con productos comerciales construidos sobre OpenZFS incluyen Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS y Spectra Logic.
ZFS y OpenZFS tienden a atraer a las empresas que necesitan gestionar grandes cantidades de datos y garantizar la integridad de los mismos. Entre los usuarios se encuentran instituciones científicas, laboratorios nacionales, agencias gubernamentales, empresas financieras, de telecomunicaciones y compañías de medios de comunicación y entretenimiento.
ZFS inicialmente significaba Zettabyte File System, pero la palabra zettabyte ya no tiene ningún significado en el contexto del sistema de archivos. Como sistema de archivos de 128 bits, ZFS tiene el potencial de escalar hasta 256 cuatrillones de zettabytes.
Cómo funciona ZFS
ZFS está diseñado para ejecutarse en un único servidor, potencialmente con cientos o miles de unidades de almacenamiento conectadas. ZFS agrupa el almacenamiento disponible y gestiona todos los discos como una sola entidad. Un usuario puede añadir más unidades de almacenamiento al pool si el sistema de archivos necesita capacidad adicional. ZFS es altamente escalable y soporta un gran tamaño máximo de archivo.
ZFS almacena al menos dos copias de metadatos cada vez que se escriben datos en el disco. Los metadatos incluyen información como los sectores del disco donde se almacenan los datos, el tamaño de los bloques de datos y una suma de comprobación de los dígitos binarios de un dato. Cuando un usuario solicita acceso a un archivo, un algoritmo de suma de comprobación realiza un cálculo para verificar que los datos recuperados coinciden con los bits originales escritos en el disco. Si la suma de comprobación detecta una incoherencia, señala los datos erróneos. En los sistemas con un grupo de almacenamiento en espejo o la versión ZFS de RAID, ZFS puede recuperar la copia correcta de la otra unidad y reparar la copia de datos dañada.
ZFS se conoce comúnmente como un sistema de archivos de copia en escritura, aunque Oracle lo describe como redirección en escritura. Cuando ZFS escribe datos en el disco, no sobrescribe los datos existentes. ZFS escribe un nuevo bloque en un lugar diferente del disco y actualiza los metadatos para que apunten al bloque recién escrito, al tiempo que conserva las versiones anteriores de los datos.
Un verdadero sistema de archivos de copia en escritura haría una réplica exacta de un bloque de datos en una ubicación separada antes de sobrescribir el bloque original. Antes de sobrescribir los datos, el sistema tendría que leer el valor anterior del bloque. Un sistema de archivos de copia en escritura requiere tres operaciones de E/S -lectura, modificación y escritura- para cada escritura de datos. En cambio, un sistema de redirección en escritura sólo requiere una operación de E/S, lo que facilita una mayor eficiencia y un mayor rendimiento.
ZFS es una opción popular para los sistemas de almacenamiento conectados a la red, que ejecutan NFS sobre el sistema de archivos, así como en entornos de servidores virtuales. Otro escenario de despliegue común es la estratificación de un sistema de archivos en clúster, como el Sistema General de Archivos Paralelos (GPFS) o Lustre, sobre ZFS para permitir el escalado a nodos de servidor adicionales. Los usuarios de OpenStack pueden desplegar ZFS como sistema de archivos subyacente para el almacenamiento de bloques Cinder y el almacenamiento de objetos Swift.
Características principales de ZFS
Snapshots y clones: ZFS y OpenZFS pueden realizar copias puntuales del sistema de archivos con gran eficacia y rapidez porque el sistema conserva todas las copias de los datos. Las instantáneas son copias inmutables del sistema de archivos, mientras que los clones pueden ser modificados. Las instantáneas y los clones están integrados en los entornos de arranque con ZFS en Solaris, lo que permite a los usuarios retroceder a una instantánea si algo va mal cuando parchean o actualizan el sistema. Otro beneficio potencial de ZFS es como técnica de recuperación contra el ransomware.
RAID-Z: RAID-Z permite almacenar los mismos datos en varias ubicaciones para aumentar la tolerancia a fallos y mejorar el rendimiento. El sistema reconstruye los datos de la unidad perdida utilizando la información almacenada en las otras unidades del sistema. Al igual que el RAID 5, el RAID-Z distribuye la información de paridad en cada unidad para permitir que el sistema de almacenamiento funcione incluso si falla una unidad. Sin embargo, con RAID-Z, los datos rayados son un bloque completo, cuyo tamaño es variable. Aunque el RAID-Z suele compararse con el RAID 5, realiza algunas operaciones de forma diferente para resolver ciertos problemas que se plantean desde hace tiempo con el RAID tradicional. Uno de los problemas que aborda RAID-Z es el conocido como efecto de agujero de escritura, en el que un sistema no puede determinar qué datos o bloques de paridad se han escrito en el disco debido a un fallo de alimentación o a una interrupción catastrófica del sistema. Los vendedores de sistemas que utilizan RAID tradicional suelen resolver el problema mediante el uso de una fuente de alimentación ininterrumpida o hardware dedicado.
RAID-Z2 admite la pérdida de dos unidades de almacenamiento, de forma similar a RAID 6, y RAID-Z3 puede tolerar la pérdida de tres dispositivos de almacenamiento. Los usuarios tienen la opción de organizar las unidades en grupos, como en el RAID convencional. Por ejemplo, un sistema con dos grupos de seis unidades configurado como RAID-Z3 podría tolerar la pérdida de tres unidades en cada grupo.
Compresión: La compresión de datos en línea es una característica integrada en ZFS y OpenZFS para reducir el número de bits necesarios para almacenar datos. ZFS y OpenZFS soportan cada uno un número de algoritmos de compresión. Los usuarios tienen la opción de activar o desactivar la compresión en línea.
Deduplicación: La deduplicación de datos en línea es una característica integrada en ZFS y OpenZFS que permite la eficiencia del almacenamiento mediante la eliminación de datos redundantes. ZFS y OpenZFS encuentran los datos duplicados mirando la suma de comprobación de un bloque, que puede variar en tamaño. Los usuarios pueden activar o desactivar la deduplicación en línea.
ZFS envía/recibe: ZFS y OpenZFS permiten enviar una instantánea del sistema de archivos a un nodo servidor diferente, lo que permite a un usuario replicar los datos a un sistema separado para fines como la copia de seguridad o la migración de datos al almacenamiento en la nube.
Seguridad: ZFS y OpenZFS admiten permisos delegados y listas de control de acceso de grano más fino para gestionar quién puede realizar tareas administrativas. Los usuarios tienen la opción de configurar ZFS como de sólo lectura, para que no se puedan modificar los datos. Oracle admite el cifrado en ZFS en Solaris.
Ventajas y limitaciones de ZFS
ZFS integra el sistema de archivos y el gestor de volúmenes para que los usuarios no tengan que obtener y aprender herramientas y conjuntos de comandos separados. ZFS ofrece un rico conjunto de características y servicios de datos sin coste alguno, ya que está integrado en el sistema operativo Oracle. El código abierto OpenZFS está disponible de forma gratuita. El sistema de archivos puede ampliarse añadiendo unidades al pool de almacenamiento. Los sistemas de archivos tradicionales requieren que se cambie el tamaño de la partición del disco para aumentar la capacidad, y los usuarios suelen necesitar productos de gestión de volúmenes para ayudarles.
ZFS está limitado a ejecutarse en un solo servidor, en contraste con los sistemas de archivos distribuidos o paralelos, como GPFS y Lustre, que pueden ampliarse a múltiples servidores.
El rico conjunto de características que ofrece ZFS puede hacer que el software sea complicado de usar y gestionar. Características como los algoritmos de suma de comprobación de ZFS integrados pueden requerir potencia de procesamiento adicional y afectar al rendimiento.
En la comunidad de Linux, hay varias opiniones sobre las licencias con respecto a la redistribución del código ZFS y los módulos binarios del núcleo. Por ejemplo, Red Hat considera problemático distribuir código protegido bajo una CDDL con código protegido bajo una licencia pública general (GPL). Por el contrario, Canonical, que distribuye Ubuntu, determinó que cumple con los términos de las licencias CDDL y GPL.
ZFS vs. OpenZFS
El ZFS de Oracle y el OpenZFS de código abierto derivan del mismo código fuente ZFS. Por vías separadas, Oracle y la comunidad de código abierto han añadido extensiones y realizado importantes mejoras de rendimiento a ZFS y OpenZFS, respectivamente. Las actualizaciones de Oracle ZFS son propietarias y sólo están disponibles en las tecnologías de Oracle. Las actualizaciones del código abierto de OpenZFS son de libre acceso.
La lista de mejoras que Oracle ha realizado en ZFS desde 2010 incluye:
- cifrado;
- soporte para la persistencia de los datos comprimidos a través de los reinicios del sistema operativo en la caché de reemplazo adaptable L2 (ARC);
- etiquetas de la Interfaz de Firmware Extensible de arranque que proporcionan soporte para discos físicos y volúmenes de discos virtuales de más de 2 TB de tamaño;
- cuotas de usuario y de grupo por defecto; y
- monitoreo del pool/sistema de archivos.
La lista de actualizaciones que la comunidad de código abierto ha realizado en OpenZFS incluye:
- algoritmos de compresión adicionales;
- envío/recepción resumible, que permite que una operación de envío/recepción ZFS de larga duración se reinicie desde el punto de una interrupción del sistema;
- envío/recepción comprimida, que permite al sistema enviar datos comprimidos de un pool ZFS a otro sin tener que descomprimir/recomprimir los datos al pasar del nodo de envío al de destino;
- compressed ARC, que permite a ZFS mantener los datos comprimidos en la memoria, permitiendo un mayor conjunto de datos de trabajo en la caché; y
- aumento del tamaño máximo de los bloques de 128 KB a 16 MB para mejorar el rendimiento al trabajar con archivos grandes y acelerar la reconstrucción de los datos al recuperarse de un fallo de la unidad.