Lanzamiento de ZFS en Linux 0.8.0, implementaciones de ZFS para el kernel de Linux

Después de casi dos años de desarrollo presentado relizar ZFS en Linux 0.8.0, una implementación del sistema de archivos ZFS empaquetado como un módulo para el kernel de Linux. El módulo ha sido probado con kernels de Linux de 2.6.32 a 5.1. Próximamente paquetes de instalación listos estará preparado para las principales distribuciones de Linux, incluidas Debian, Ubuntu, Fedora, RHEL/CentOS. El módulo ZFS en Linux ya está incluido en las distribuciones Debian, Ubuntu, Gentoo, Sabayon Linux y ALT Linux.

Como parte de ZFS en Linux, se ha preparado una implementación de los componentes de ZFS relacionados tanto con la operación del sistema de archivos como con el funcionamiento del administrador de volúmenes. En particular, se implementan los siguientes componentes: SPA (Asignador de grupo de almacenamiento), DMU (Unidad de gestión de datos), ZVOL (Volumen emulado de ZFS) y ZPL (Capa POSIX de ZFS). Además, el proyecto brinda la capacidad de usar ZFS como back-end para el sistema de archivos de clúster de Lustre. El trabajo del proyecto se basa en el código ZFS original importado del proyecto OpenSolaris y mejorado con mejoras y correcciones de la comunidad de Illumos. El proyecto se está desarrollando con la participación de empleados del Laboratorio Nacional de Livermore bajo un contrato con el Departamento de Energía de los Estados Unidos.

El código se distribuye bajo una licencia CDDL gratuita, que es incompatible con GPLv2, lo que no permite integrar ZFS en Linux en la rama principal del kernel de Linux, ya que no se permite mezclar código bajo licencias GPLv2 y CDDL. Para eludir esta incompatibilidad de licencia, se decidió distribuir todo el producto bajo la licencia CDDL como un módulo que se puede cargar por separado, que se suministra por separado del núcleo. La estabilidad del código base de ZFS en Linux se considera comparable a la de otros sistemas de archivos para Linux.

Cambios importantes:

  • Se agregó soporte incorporado para el cifrado de datos almacenados a nivel del sistema de archivos y particiones. El algoritmo de cifrado predeterminado es aes-256-ccm. Se ha propuesto el comando "zfs load-key" para cargar claves de cifrado;
  • Se implementó 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 grupo se transfieren a otro grupo tal cual, sin descifrado intermedio. Con dicha copia, los datos permanecen protegidos por la clave del remitente, lo que permite usar este modo para realizar copias de seguridad en sistemas no confiables (si el destinatario está comprometido, el atacante no podrá acceder a los datos sin la clave);
  • Se agregó compatibilidad para eliminar unidades primarias de un grupo de almacenamiento, conectadas individualmente y como parte de un espejo. La eliminación se realiza con el comando "zpool remove". El proceso de eliminación copia los datos de la unidad excluida a las unidades primarias restantes en el grupo;
  • Se agregó el comando "punto de control de zpool" para guardar el estado actual del grupo con la capacidad de revertir más cambios al momento guardado (se crea una instantánea de todo el grupo). Esta función puede ser útil en el proceso de realizar tareas administrativas complejas potencialmente peligrosas, que en condiciones normales conducen a cambios irreversibles (por ejemplo, activar banderas para una nueva funcionalidad de ZFS o borrar datos);
  • Se agregó el comando "zpool trim" para informar a las unidades utilizadas en el grupo sobre los sectores que ya no están en uso. El uso de la operación TRIM permite aumentar la eficiencia de los SSD y evitar la degradación de su rendimiento. Se ha propuesto una nueva propiedad "autotrim" para habilitar el proceso de fondo continuo de transmisión de comandos TRIM;
  • Se agregó el comando "zpool initialize" para inicializar todo el espacio en disco no asignado, lo que permite que esté listo para usar al instante, sin degradación del rendimiento en el primer acceso (por ejemplo, cuando se alojan almacenamientos virtualizados como VMware VMDK);
  • Se agregó soporte para cuotas de contabilidad y de nivel de proyecto, además de las cuotas de nivel de usuario y de grupo previamente disponibles. En esencia, los proyectos son un espacio separado de objetos asociados con un identificador separado (ID del proyecto). El enlace se define mediante la operación 'chattr -p' o mediante la herencia de atributos. Para la gestión de proyectos, se presentan los comandos “zfs project” y “zfs projectspace”, que le permiten gestionar la creación de proyectos y establecer límites de espacio en disco para ellos;
  • Se agregó la capacidad de crear secuencias de comandos Lua para automatizar varios trabajos con ZFS. Los scripts se ejecutan en entornos aislados especiales utilizando el comando "programa zpool";
  • Nueva biblioteca implementada pyzfs, que proporciona una API estable para administrar ZFS desde aplicaciones de Python. La biblioteca es un contenedor alrededor de libzfs_core y proporciona un conjunto idéntico de funciones, pero usa tipos de Python más cercanos;
  • Las utilidades arcstat, arcsummary y dbufstat se han hecho compatibles con Python 3. Las utilidades arcstat.py, arc_summary.py y dbufstat.py se han renombrado a versiones sin la extensión ".py";
  • Se agregó soporte para la interfaz del kernel Linux Direct IO (O_DIRECT), que permite acceder a los datos sin almacenar en búfer y sin pasar por el caché;
  • Optimizaciones de rendimiento introducidas:
    • El trabajo de los comandos "scrub" y "resilver" se ha acelerado debido a la división en dos fases (se ha asignado una fase separada para escanear metadatos y determinar la ubicación de bloques con datos en el disco, lo que permite una verificación adicional utilizando datos secuenciales lectura);
    • Se agregó soporte para clases de asignación,
      permitir que los SSD relativamente pequeños se agrupen y se usen para almacenar solo ciertos tipos de bloques de uso común, como metadatos, datos DDT y bloques de archivos pequeños;

    • Rendimiento mejorado de los comandos de administración como
      "zfs list" y "zfs get", almacenando en caché los metadatos necesarios para su funcionamiento;

    • Se agregó soporte para la paralelización de las operaciones de asignación de bloques mediante la ejecución de procesos de asignación separados para cada grupo de metaslab. En los sistemas convencionales, hay un aumento de rendimiento del 5-10%, pero en los grandes (8 SSD de 128 GB, NUMA de 24 núcleos, 256 GB de RAM), el aumento en las operaciones de asignación de bloques puede llegar al 25%;
    • Se agregó la posibilidad de retrasar la ejecución del comando "resilver" (reconstruir la distribución de datos teniendo en cuenta los cambios en la configuración de las unidades): si el anterior aún no se ha completado al iniciar una nueva operación, entonces el nuevo controlador comenzará a ejecutarse solo después el anterior ha terminado;
    • Se agregaron optimizaciones al ZIL (ZFS Intent Log) para permitir la creación y el procesamiento de bloques en presencia de bloques que aún están siendo procesados ​​por el almacenamiento;
    • Reducción del tiempo de registro de particiones (zvol) en el sistema. Cuando un grupo contiene una gran cantidad de particiones, ahora están disponibles inmediatamente después de realizar la "importación de zpool";
    • Se agregó soporte para el cálculo acelerado por hardware de hash SHA256 y operaciones de encriptación AES-GSM utilizando chips Intel QAT (tecnología de asistencia rápida). Se agregó soporte para la aceleración de hardware del chipset Intel C62x y la CPU Atom C3000.

Fuente: opennet.ru

Añadir un comentario