Tabla de Contenidos

ZFS

Depósito de almacenamiento

ZFS introduce el concepto depósito/pool de almacenamiento. Históricamente los sistemas de archivo se han construido sobre un dispositivo físico, a partir del advenimiento del Administrador de volúmenes lógicos se pudieron construír sistemas de archivos sobre varios dispositivos físicos, los volúmenes lógicos consisten en la construcción de volúmenes virtuales a partir de la adición de discos físicos, en estos volúmenes virtuales se construyen sistemas de archivos.

Los volúmenes virtuales no ofrecen redundancia en la escritura de datos, esto significa que la falla de un disco físico deja a todo el sistema de archivos inaccesible1).

El Zettabyte File System(ZFS) es una combinación de un sistema de archivos con un RAID2) por software, ZFS introduce el concepto de dispositivo virtual (vdev) donde la superfice de almacenamiento de un conjunto de discos físicos se adiciona con alguna técnica RAID; estos dispositivos virtuales a su vez, se agrupan en un depósito de almacenamiento a partir del cual pueden construirse sistemas de archivos o áreas de almacenamiento arbitrario.

Referencia

¿Que es zfs?

Instalación de ZFS

La compatibilidad de los módulos del kernel en actualizaciones del kernel de linux, puede llevarse a cabo mediante 2 mecanismos DKMS(Dynamic Kernel Module Support) y KABI(Kernel Application Binary Interface), estos mecanismos son esenciales para el manejo de los módulos cuando ocurren actualizaciones del kernel.

DKMS

El propósito de este mecanismo es simplificar el mantenimiento de los módulos del kernel, cuando ocurren actualizaciones del kernel mediante la compilación e instalación automática de los módulos requeridos, este mecanismo requiere la instalación del ambiente de de desarrollo y el los fuentes del nuevo kernel.

KABI

Esta es una interfaz proporcionada por el kernel de linux que permite a los módulos mantener una compatibilidad binaria en las actualizaciones del kernel, esto implica que el módulo se construye considerando la interfaz KABI del kernel y esto evita la recompilación de los módulos.

Procedimiento

  1. Instalación de los repositorios requeridos
    1. dnf install epel-release -y
  2. Instalación del paquete
  3. Instalación del paquete KABI
    1. dnf config-manager –disable zfs
    2. dnf config-manager –enable zfs-kmod
    3. dnf install zfs -y
    4. modprobe zfs
    5. echo “zfs” | sudo tee /etc/modules-load.d/zfs.conf

Referencia

Instalación ZFS

Terminología de ZFS

Checksum

Hash de 256 bits contenido en un bloque del sistema de archivos.

Clone

Sistema de archivos cuyo contenido inicial es idéntico al contenido de una instantanea (snapshot).

Dataset

Nombre genérico para los siguientes componentes de ZFS: clones, sistemas de archivos, instantáneas y volúmenes.
Cada dataset es identificado de manera única en el espacio de nombres de ZFS con el formato siguiente:

pool/path[@snapshot] 

pool: Identifica el depósito de almacenamiento que contiene el dataset.
path: Es elnombre que identifica al dataset.
snapshot: Es un componente adicional que identifica la instantanea de un dataset.

file system

Un tipo de dataset que tiene las mismas propiedades que cualquier sistema de archivos.

mirror

 Un dispositivo virtual que almacena copias idénticas en 2 o mas discos de la información. Si alguno de los 
 discos falla la información se recupera se otro disco miembro del mirror. 

pool

 Agrupamiento lógico de dispositivos que describe el layout y las caracteristicas del almacenamiento, el espacio 
 en disco para los datasets se obtiene de los pools.

RAID-Z

 Un dispositivo que almacena datos y paridad en varios discos. 

resilvering

 En configuraciones donde el pool de almacenamiento cuenta con dispositivos virtuales con redundancia y alguno de 
 los discos físicos falla y es reemplazado por otro disco, el proceso de traspaso de la información al nuevo
 disco recibe el nombre de resilvering.

snapshot

 Una copia de solo lectura de un sistema de archivos o volúmen en un instante de tiempo.

virtual device

 Un dispositivo lógico que forma parte de un depósito de almacenamiento (pool), puede ser un disco físico, 
 un archivo o una colección de discos.

volumen

 Un tipo de de dataset que representa un dispositivo de bloque, por ejemplo en un volúmen lógico es posible crear 
 un área de swap.

Referencia

ZFS terminology

Creación de un depósito de almacenamiento (pool)

Durante la creación de un pool o en el agregado de nuevos discos lógicos a un pool existente es necesario utilizar controladores de disco físicos etiquetados para identificar de manera única los componentes físicos de un disco lógico.

Ejemplo:

zpool create -o ashift=12 casuniVol mirror /dev/disk/by-id/scsi-SHP_EH000900JWCPH_WAG07RG6-part1 /dev/disk/by-id/scsi-SHP_EH000900JWCPH_WAG07ZRT-part1

zpool add casuniVol mirror /dev/disk/by-id/scsi-SHPE_MM1000JFJTH_W473FN5T-part1 /dev/disk/by-id/scsi-SHPE_MM1000JFJTH_W473FNEN-part1 -f

El comando zpool list permite verificar el espacio utilizado de un depósito de almacenamiento:

NAME    SIZE   ALLOC   FREE   CKPOINT   EXPANDSZ   FRAG   CAP   DEDUP   HEALTH   ALTROOT

casuniVol  1.72T  587G   1.15T        -             -       1%      33%    1.00x     ONLINE

En los comandos zpool create y add la opción ashift permite designar el tamaño de bloque que el dispositivo virtual va a utilizar en lecturas y escrituras, esta opción es un atributo del dispositivo virtual no del pool de de almacenamiento, es recomendable que el tamaño de bloque corresponda al tamaño de bloque de los discos físicos que lo componen. En el ejemplo anterior el nombre casuniVol es utilizado para identificar el nuevo pool de almacenamiento, mirror3) implica la escritura en al menos 2 dispositivos físicos.

Se puede revisar el estatus de un pool recien creado mediante el comando: zpool status, asimismo si se chequean los sistemas de archivo accesibles mediante el comando df -h aparece el nombre del pool como un punto de montaje del sistema de archivos.

Traslado de un depósito de almacenamiento (pool)

Los pools de ZFS pueden moverse entre máquinas con versiones identicas o superiores del sistema operativo, para esta operación es necesario exportar los pools para dejen de estar disponibles en el servidor actual, para incluirlos en nuevo servidor se hace la operación de importación. Las metádatos de un pool de ZFS, los almacena en el arreglo de discos que lo constituye, esto asegura la recuperación del pool en circunstancias donde se degrada o esta inaccesible el sistema operativo, restaurando el sistema operativo, el módulo de ZFS y las herramientas de manipulación del pool, el arreglo se localiza y queda disponible mediante los comandos:

Verificación de los pools en arreglos: zpool import
Obteniendo el nombre del pool: zpool import boalPool

Propiedades ZFS

Las objetos de ZFS contienen propiedades que regulan su comportamiento, hay 2 tipos de propiedades las nativas de ZFS y las definidades por el usuario, las propiedades nativas llevan un conjunto de estadísticas o controlan el comportamiento de ZFS, las estadísticas son de solo lectura, las propiedades modificables cambian el comportamiento de los objetos ZFS.

La mayor parte de las propiedades nativas son heredables, una propiedad heredable es aquella que se fija en un objeto padre y automáticamente se propaga a su descendencia.

El comando zfs list es utilizado para verificar el status de los sistemas de archivo y sus descendientes, por defecto muestra las propiedades used, refer, mountpoint:

NAME           USED    AVAIL    REFER    MOUNTPOINT

boalVol            2.07T      6.85T       96K      /boalVol
boalVol/prod    1.92T      6.85T      1.92T      /boalVol/prod
boalVol/test      155G      6.85T      155G      /boalVol/test

Propiedades de zfs list

USED: Esta propiedad de lectura, contiene la cantidad de espacio consumido por el dataset y sus descendientes.
REFER: Esta propiedad de lectura, contiene la cantidad de datos disponible por el dataset puede ser compartido o no con otros datasets del pool.
MOUNTPOINT: Es una propiedad modificable que contiene el string donde el sistema de archivos va a ser montando, el string es heredado por los descendientes.

Sistemas de archivo

Los sistemas de archivo zfs pueden ser creados y destruidos dinámicamente, la creación no requiere que se asigne espacio o formateo de espacio disponible, los sistemas de archivo de zfs son sencillos y constituyen el punto central de administración, normalmente se crean muchos de ellos.

Para crear un sistema de archivos: zfs create casuniVol/prod

Para destruir un sistema de archivos: zfs destroy casuniVol/prod 4)5)

Para renombrar un sistema de archivos: zfs rename casuniVol/prod casuniVol/prod-antiguo

Montaje de sistemas de archivo

Los sistemas de archivo zfs son montados por defecto cuando son creados, los puntos de montaje utilizados corresponden a la ruta de directorios que definen al sistema de archivos, el punto de montaje inicial tiene el nombre del depósito de almacenamiento (pool) utilizado en el comando de creación, sin embargo este punto de montaje puede modificarse en el momento de creación del depósito modificando la propiedad mountpoint.

La propiedad mountpointes heredable, eso significa que los sistemas de archivo que se encuentren en la jerarquia del sistema de archivos presentaran los cambios del punto de montaje que se hizo en el sistema de archivos ancestro.

zpool create -o mountpoint=tickets casuniVol mirror dev1 dev2

Sí se cambia el valor de la propiedad mountpoint a un valor diferente a legacy o none zfs automaticamente monta el sistema de archivo en la ruta indicada por mountpoint.

zfs set mountpoint=/mnt casuniVol/test zfs get mountpoint casuniVol/test

NAME     PROPERTY     VALUE     SOURCE

casuniVol/test     mountpoint     /mnt     local

Compartir sistemas de archivo

Entre las propiedades de los sistemas de archivos se cuentan aquellas que permiten compartir estos sistemas de archivos a través de los protocolos de red mas comunes: NFS. Protocolo utilizado en todos los sistemas operativos derivados de UNIX. SMB. Protocolo usado para compartir archivos en las redes de Windows.

NFS

Para habilitar compartir archivos entre maquinas UNIX es necesario instalar el software de servidor de NFS y modificar la propiedad sharenfs del sistema de archivos ZFS, los valores que acepta esta propiedad son: on|off|opciones

zfs set sharenfs=on casuniVol/test
zfs set sharenfs=ro casuniVol/prod
zfs set sharenfs='rw=@192.168.0.222,no_root_squash,@192.168.0.214,root_squash' casuniVol/prod/pub

El valor on en la propiedad sharenfs aplica a las opciones por defecto “permisos de lectura y escritura para todos”, el valor off significa que la compartición no es manejada por ZFS y puede compartirse mediante el archivo /etc/exports, las otros valores soportados corresponden a los strings para redes o servidores autorizados.

Referencia: sharenfs property

SMB

ZFS no implementa el protocolo CIFS, requiere SAMBA para compartir archivos con windows, esto significa que colocar el valor on en la propiedad sharesmb es equivalente agregar una carpeta a smb.conf, esto es de poca utilidad es mejor editar directamente el archivo /etc/smb.conf y agregar la carpeta compartida.

Referencia: sharesmb property

Snaphots

Un snapshot es una copia de solo lectura de un sistema de archivos o de un volúmen, los snapshots pueden generarse en cualquier momento y no consumen en su creación, espacio adicional del pool, por supuesto cuando el dataset es modificado el snapshot consume espacio ya que hac referencia al estado de la información antes de la modificación.

Los snapshots:

La creación de un snapshot requiere una sintaxis particular: dataset@stringCaracteres
zfs snapshot casuniVol/prod@25-01-2024

Los snapshots vigentes para un dataset pueden listarse mediante:
zfs list -t snapshot casuniVol/prod

NAME                          USED     AVAIL     REFER    MOUNTPOINT
casuniVol/prod@20-12-2023   928M    -    163G   -
casuniVol/prod@25-01-2024    109M    -    163G   -

Respaldos

Los respaldos pueden hacerse mediante tar a partir de snapshots6), a continución un ejemplo:

zfs snapshot casuniVol/prod@25-03-2024
cd /casuniVol/prod/.zfs/snapshot
tar cvfz /opt/respaldos/respSnapshots/25-03-2024.tgz 25-03-24

Referencia: Respaldo con tar de snapshots

1)
Es posible tener redundancia en un volúmen lógico mediante algun sistema RAID por software o hardware
2)
Redundant Array of Independent Disk trabaja escribiendo los datos en varios dispositivos físicos, apareciendo en el sistema operativo como una sola operación de I/O
3)
Designa el nivel de redundancia del disco virtual, ver en la sección de terminología mirror y raidz
4)
Este comando no pregunta confirmación, es necesario usarlo con cuidado
5)
Un sistema de archivos no puede ser destruido si esta siendo usado o tiene descendientes
6)
Estos datasets generan un directorio con elnombre del snapshot en un directorio oculto del filesystem