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.
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.
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.
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.
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.
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.
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
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
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.
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
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
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.
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
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
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 -
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