FreeBSD ZFS Vol2: ZFS properties


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:

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í.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 12/11/2020 05:05:32 -- Categoria: Fsys FreeBSD ZFS