Esta pagina se ve mejor con JavaScript habilitado

FreeBSD ZFS Vol2 ZFS properties

 ·  🎃 kr0m

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:

root@freeBSD:~ # zfs list

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=off zroot
root@freeBSD:~ # zfs set compression=gzip data

Generamos el fichero de prueba de 100Mb:

root@freeBSD:~ # dd if=/dev/zero of=/root/test_file bs=1048576 count=100

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:

root@freeBSD:~ # du -h test_file

100M    test_file

Copiamos el fichero al dataset data:

root@freeBSD:~ # cp test_file /data/

Comprobamos el tamaño del fichero en el dataset data:

root@freeBSD:~ # du -h /data/test_file

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:

root@freeBSD:~ # zfs get compression data

NAME  PROPERTY     VALUE     SOURCE  
data  compression  gzip      local

Podemos eliminar la configuración con el siguiente comando:

root@freeBSD:~ # zfs inherit -r compression data
root@freeBSD:~ # zfs get compression data

NAME  PROPERTY     VALUE     SOURCE  
data  compression  off       default

Podemos consultar todas las features con un único comando:

root@freeBSD:~ # zfs get all data

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 set user:info=1234 data
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:

root@freeBSD:~ # zfs inherit -r user:info data

Comprobamos que no exista la propiedad:

root@freeBSD:~ # zfs get user:info data

NAME  PROPERTY   VALUE      SOURCE  
data  user:info  -          -
Si te ha gustado el artículo puedes invitarme a un RedBull aquí