Un dataset es un sistema de archivos dentro de un pool ZFS. Se comporta como un sistema de archivos independiente, aunque comparte el espacio en disco disponible entre todos los sistemas de archivos del pool. Una de las propiedades y ventajas de los sistemas de archivos ZFS (se comportan como sistemas de archivos y gestores de volúmenes al mismo tiempo). Este artículo explica cómo crear y configurar las propiedades de un nuevo dataset dentro de un pool ZFS existente en un sistema GNU/Linux.
Para tener una noción básica acerca de los componentes y funcionamiento de un sistema de archivos ZFS recomiendo leer el siguiente artículo: Introducción a ZFS en FreeBSD.
Crear y configurar un nuevo sistema de archivos (filesystem) dentro de un pool ZFS existente es bastante simple. Veamos directamente un ejemplo.
El siguiente sistema Debian cuenta con un único pool ZFS "z01":
root@debian:~# zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT z01 49,9G 6,69G 43,2G - 7% 13% 1.00x ONLINE -
Este pool actualmente contiene dos sistemas de archivos: el dataset raíz (que posee el mismo nombre que el pool) y un dataset "backups".
root@debian:~# zfs list NAME USED AVAIL REFER MOUNTPOINT z01 306K 48,3G 24K /z01 z01/backups 24K 48,3G 24K /backups
En este escenario, se necesita crear un nuevo dataset (sistema de archivos independiente dentro del mismo ) llamado "datos".
Para crear un nuevo dataset simplemente se debe utilizar el subcomando create
de la siguiente forma:
root@debian:~# zfs create z01/datos
Inmediatamente se encuentra disponible el nuevo sistema de archivos:
root@debian:~# zfs list NAME USED AVAIL REFER MOUNTPOINT z01 306K 48,3G 24K /z01 z01/backups 24K 48,3G 24K /backups z01/datos 24K 48,3G 24K /z01/datos
Se observa que se ha creado con un punto de montaje por defecto, el cual es posible cambiar, por ejemplo a /usr/local/datos
:
root@debian:~# zfs set mountpoint=/usr/local/datos z01/datos
Ahora el dataset "z01/datos" se encuentra montado en /usr/local/datos
:
root@debian:~# zfs list NAME USED AVAIL REFER MOUNTPOINT z01 320K 48,3G 24K /z01 z01/backups 24K 48,3G 24K /backups z01/datos 24K 48,3G 24K /usr/local/datos
Este nuevo sistema de archivos hereda todas las propiedades definidas en el pool. Sin embargo es posible personalizarlas a fin de optimizar el espacio y rendimiento del dataset.
Cuando se emplean sistemas de archivos ZFS comúnmente se desea habilitar la compresión nativa para optimizar el espacio. Además se suele deshabilitar el access time (registro de la última fecha de acceso/lectura para cada archivo y directorio) a fin de mejorar el rendimiento y tiempos de lectura en disco. Para ello se deben tunear las propiedades compression
y atime
respectivamente.
En este caso en particular además es recomendable desactivar la caché secundaria y sólo almacenar metadatos en la caché primaria. El artículo Optimizar un dataset ZFS para bases de datos PostgreSQL explica detalladamente el funcionamiento y configuración de ambas cachés.
Las propiedades de un dataset se alteran con el subcomando set
:
root@debian:~# zfs set atime=off z01/datos root@debian:~# zfs set compression=lz4 z01/datos root@debian:~# zfs set primarycache=metadata z01/datos root@debian:~# zfs set secondarycache=none z01/datos
Luego es posible comprobar sus valores mediante get
:
root@debian:~# zfs get all z01/datos | grep "atime\|compression\|primarycache\|secondarycache" z01/datos compression lz4 local z01/datos atime off local z01/datos primarycache metadata local z01/datos secondarycache none local z01/datos relatime off default
Para más información, consultar las siguientes páginas de manual:
man zfs
man zpool