Se podría decir que las properties de ZFS son las opciones que nos permite configurar el sistema de ficheros, entre estas opciones podemos encontrar por ejemplo la compresión de datos, deduplicación, duplicado de ficheros o compartir ficheros por NFS/SAMBA. En este artículo probaremos la compresión de datos mediante un sencillo ejemplo.
Antes de continuar con el artículo es aconsejable que revisemos este anterior para que todos los conceptos queden claros.
Consultamos los datasets del sistema:
NAME USED AVAIL REFER MOUNTPOINT
data 528K 831M 192K /data
zroot 1.07G 4.26G 192K /zroot
Por defecto FreeBSD habilita la compresión en el dataset zroot, para hacer la prueba la deshabilitamos en zroot y la habilitamos en data:
root@freeBSD:~ # zfs set compression=gzip data
Generamos el fichero de prueba de 100Mb:
100+0 records in
100+0 records out
104857600 bytes transferred in 0.772029 secs (135820774 bytes/sec)
Comprobamos el tamaño del fichero en el dataset zroot:
100M test_file
Copiamos el fichero al dataset data:
Comprobamos el tamaño del fichero en el dataset data:
512B /data/test_file
Como se puede observar la diferencia de tamaño es abrumadora debido a que el contenido del fichero no son mas que zeros por lo tanto es un patrón altamente comprimible.
NOTA: Hay que tener en cuenta que las properties son acumulativas, es decir si habilitamos la compresión en /data cualquier dataset bajo /data heredará la compresión.
Podemos consultar el valor de la feature con el siguiente comando:
NAME PROPERTY VALUE SOURCE
data compression gzip local
Podemos eliminar la configuración con el siguiente comando:
root@freeBSD:~ # zfs get compression data
NAME PROPERTY VALUE SOURCE
data compression off default
Podemos consultar todas las features con un único comando:
NAME PROPERTY VALUE SOURCE
data type filesystem -
data creation Wed Nov 11 18:46 2020 -
data used 840K -
data available 831M -
data referenced 192K -
data compressratio 1.00x -
data mounted yes -
data quota none default
data reservation none default
data recordsize 128K default
data mountpoint /data default
data sharenfs off default
data checksum on default
data compression gzip local
data atime on default
data devices on default
data exec on default
data setuid on default
data readonly off default
data jailed off default
data snapdir hidden default
data aclmode discard default
data aclinherit restricted default
data createtxg 1 -
data canmount on default
data xattr off temporary
data copies 1 default
data version 5 -
data utf8only off -
data normalization none -
data casesensitivity sensitive -
data vscan off default
data nbmand off default
data sharesmb off default
data refquota none default
data refreservation none default
data guid 81431519837003581 -
data primarycache all default
data secondarycache all default
data usedbysnapshots 0 -
data usedbydataset 192K -
data usedbychildren 648K -
data usedbyrefreservation 0 -
data logbias latency default
data objsetid 51 -
data dedup off default
data mlslabel -
data sync standard default
data dnodesize legacy default
data refcompressratio 1.00x -
data written 192K -
data logicalused 170K -
data logicalreferenced 63K -
data volmode default default
data filesystem_limit none default
data snapshot_limit none default
data filesystem_count none default
data snapshot_count none default
data redundant_metadata all default
data special_small_blocks 0 default
Las propiedades pueden ser user-defined, esta información se inserta dentro del propio dataset y suele utilizarse para indicar información importante sobre el contenido de este, las propiedades user-defined se distinguen por tener : en el namespace, veamos un ejemplo.
root@freeBSD:~ # zfs get user:info data
NAME PROPERTY VALUE SOURCE
data user:info 1234 local
Para eliminar la propiedad user-defined actuaremos de igual manera que con una propiedad normal:
Comprobamos que no exista la propiedad:
NAME PROPERTY VALUE SOURCE
data user:info - -