Después de casi dos años de desarrollo lanzamiento , implementación del sistema de archivos ZFS, diseñado como un módulo para el núcleo de Linux. El módulo ha sido probado con núcleos de Linux desde 2.6.32 hasta 5.1. Los paquetes de instalación estarán disponibles en breve para las principales distribuciones de Linux, incluyendo Debian, Ubuntu, Fedora, RHEL/CentOS. El módulo ZFS en Linux ya está incluido en las distribuciones de Debian, Ubuntu, Gentoo, Sabayon Linux y ALT Linux.
Como parte de ZFS en Linux, se ha preparado la implementación de los componentes de ZFS, relacionados tanto con el funcionamiento del sistema de archivos como con las operaciones del administrador de volúmenes. En particular, se han implementado componentes como: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) y ZPL (ZFS POSIX Layer). Además, el proyecto permite el uso de ZFS como backend para el sistema de archivos en clúster Lustre. Los desarrollos del proyecto se basan en el código original de ZFS, importado del proyecto OpenSolaris y ampliado con mejoras y correcciones de la comunidad Illumos. El proyecto se desarrolla con la participación de empleados del Laboratorio Nacional de Lawrence Livermore bajo contrato con el Departamento de Energía de EE. UU.
El código se distribuye bajo la licencia libre CDDL, que es incompatible con GPLv2, lo que impide la integración de ZFS en Linux en la rama principal del núcleo de Linux, ya que mezclar código bajo las licencias GPLv2 y CDDL no es permisible. Para sortear esta incompatibilidad de licencias, se decidió distribuir el producto en su totalidad bajo la licencia CDDL como un módulo descargable por separado, que se entrega por separado del núcleo. La estabilidad de la base de código de ZFS en Linux se evalúa como comparable a otros sistemas de archivos para Linux.
Principales cambios:
- Se ha añadido soporte integrado para el cifrado de datos almacenados a nivel de sistema de archivos y particiones. Por defecto, se utiliza el algoritmo aes-256-ccm para el cifrado. Se ha propuesto el comando 'zfs load-key' para cargar las claves de cifrado;
- Se ha implementado la capacidad de transferir datos cifrados al ejecutar los comandos 'zfs send' y 'zfs receive'. Al especificar la opción '-w', los datos ya cifrados en el pool se transfieren a otro pool tal como están, sin una descifrado intermedio. En esta transferencia, los datos permanecen protegidos por la clave del lado del remitente, lo que permite usar este modo para la copia de seguridad en sistemas no confiables (en caso de compromiso del receptor, sin la clave el atacante no podrá acceder a los datos);
- Se ha añadido soporte para eliminar discos primarios del pool de almacenamiento, ya sea de forma individual o como parte de un espejo. La eliminación se realiza con el comando «zpool remove». Durante el proceso de eliminación, los datos del disco excluido se copian a los discos primarios restantes en el pool;
- Se ha añadido el comando «zpool checkpoint» para guardar el estado actual del pool con la posibilidad de revertir cambios posteriores al momento guardado (se crea un snapshot de todo el pool). Esta capacidad puede ser útil durante la realización de trabajos administrativos complicados y potencialmente peligrosos que normalmente conllevan cambios irreversibles (por ejemplo, la activación de nuevas funcionalidades de ZFS o el borrado de datos);
- Se ha añadido el comando «zpool trim», que permite notificar a los discos utilizados en el pool sobre sectores que ya no están en uso. La aplicación de la operación TRIM permite aumentar la eficiencia de los discos SSD y prevenir la degradación de su rendimiento. Para habilitar un proceso de fondo continuo para la transmisión de comandos TRIM, se ha propuesto una nueva propiedad «autotrim»;
- Se ha añadido el comando «zpool initialize» para inicializar todo el espacio de disco no asignado, lo que permite asegurar su disponibilidad inmediata sin disminuir el rendimiento en el primer acceso (por ejemplo, al colocar almacenes virtualizados, como VMware VMDK);
- Se ha añadido soporte para contabilidad y cuotas a nivel de proyecto, complementando las cuotas previamente disponibles a nivel de usuario y grupo. En esencia, los proyectos son un espacio separado de objetos relacionado con un identificador único (project ID). La vinculación se determina a través de la operación ‘chattr -p’ o mediante la herencia de atributos. Para gestionar proyectos, se presentan los comandos «zfs project» y «zfs projectspace», que permiten gestionar la creación de proyectos y establecer límites de espacio en disco para ellos;
- Se ha añadido la posibilidad de crear scripts en Lua para automatizar diversas tareas con ZFS. Los scripts se ejecutan en entornos aislados especiales mediante el comando «zpool program»;
- Se ha implementado una nueva biblioteca , que proporciona una API estable para la administración de ZFS desde aplicaciones en Python. La biblioteca es un wrapper sobre libzfs_core y ofrece un conjunto de funciones idéntico, pero utiliza tipos más adecuados para Python;
- Se ha garantizado la compatibilidad de las utilidades arcstat, arcsummary y dbufstat con Python 3. Las utilidades arcstat.py, arc_summary.py y dbufstat.py han sido renombradas a versiones sin la extensión ".py";
- Se ha añadido soporte para la interfaz de núcleo de Linux Direct IO (O_DIRECT), que permite acceder a los datos sin buffering y eludir la caché;
- Se han presentado optimizaciones de rendimiento:
- Se ha acelerado el funcionamiento de los comandos "scrub" y "resilver" al dividirlos en dos fases (se ha asignado una fase separada para escanear los metadatos y determinar la ubicación de los bloques de datos en el disco, lo que permite realizar una verificación posterior utilizando lecturas secuenciales de los datos);
- Se ha añadido soporte para clases de asignación de datos (Allocation classes),
que permiten incluir SSDs relativamente pequeños en el pool y utilizarlos para almacenar solo ciertos tipos de bloques utilizados con frecuencia, como metadatos, datos DDT y bloques pequeños de archivos; - Se ha aumentado el rendimiento de los comandos de administración, como
"zfs list" y "zfs get", mediante la cache de metadatos necesarios para su funcionamiento; - Se ha añadido soporte para la paralelización de operaciones de asignación de bloques mediante el lanzamiento de procesos "allocator" separados para cada grupo de metaslab. En sistemas convencionales se observa un incremento de rendimiento de entre el 5-10%, pero en sistemas grandes (8 SSD de 128 GB, 24 núcleos NUMA, 256 GB de RAM) el aumento en las operaciones de asignación de bloques puede alcanzar el 25%;
- Se ha añadido la posibilidad de ejecutar el comando "resilver" de manera diferida (recostrucción de la distribución de datos teniendo en cuenta los cambios en la configuración de los dispositivos) — si al iniciar una nueva operación aún no ha finalizado la anterior, el nuevo procesador comenzará su ejecución solo después de que termine el anterior;
- Se han realizado optimizaciones en el registro ZIL (ZFS Intent Log), que permiten crear y procesar bloques mientras hay bloques que aún están siendo procesados por el almacenamiento;
- Se ha reducido el tiempo de registro de particiones (zvol) en el sistema. Cuando el pool contiene un gran número de particiones, estas ahora se hacen disponibles inmediatamente después de ejecutar "zpool import";
- Se ha añadido soporte para la aceleración de hardware en el cálculo de hashes SHA256 y en las operaciones de cifrado AES-GSM utilizando chips que soportan la tecnología Intel QAT (Quick Assist Technology). Se ha añadido soporte para las herramientas de aceleración de hardware del chipset Intel C62x y del CPU Atom C3000.
Fuente: opennet.ru
