ZFS (Zettabyte File System) es un nuevo filesystem desarrollado por Sun Microsystems.

ZFS destaca por su gran capacidad, integración de los conceptos de sistema de ficheros y administrador de volúmenes en un solo producto, nueva estructura sobre el disco, sistemas de archivos ligeros, y una administración de espacios de almacenamiento sencilla.

Principales características

  • Administración sencilla por comandos o web (nos olvidamos del format, newfs, mount, etc).
  • Copy-on-write: ZFS no sobreescribe los nuevos datos directamente,crea los datos en un nuevo bloque y posteriormente cambia los punteros de datos y realiza la escritura definitiva. Con este método siempre está garantizada la integridad de los datos y no es necesario el uso de utilidades como fsck.
  • Snapshots: podemos sacar una foto de forma rápida de todo un sistema de ficheros. Podemos instalar un paquete en el sistema y si este no cumple nuestras expectativas podemos realizar un rollback para volver al estado anterior.
  • Compresión: podemos definir un sistema de ficheros donde toda la información esté comprimida.
  • Mirror y RAIDZ: se pueden definir de forma sencilla un mirroring entre discos y RAID-Z.


Con ZFS toda la administración se resume a 2 comandos: zfs y zpool.

Pools

ZFS trabaja con un pool que está formado por todos los dispositivos físicos. Las características del pool son:

  • El pool está formado por dispositivos de almacenamiento de igual o diferentes capacidades.
  • El pool puede crecer y encoger añadiendo o quitando discos.
  • Los sitemas de ficheros ZFS comparten el pool y se pueden definir cuotas y reservar espacio para un solo sistema de ficheros.

Crear un Pool

A continuación vamos a crear un pool llamado "babilonia" de 4GB comprendido por los discos "c1d0" y "c1d1" ambos con un tamaño de 2GB

zpool create -f data_pool c1d0

Destruir un Pool

zpool destroy data_pool

Crear un Pool con RAID1 (mirror)

zpool create -f data_pool mirror c1t1d0s3 c1t2d0s3

Crear un Pool con RAIDZ

ZFS implemente un esquema de redundancia parecido al RAID 5 que se denomina RAID Z. Esta configuración evita el "agujero de escritura" del RAID 5 y la necesidad de la secuencia de leer/modificar/escribir para operaciones de escrituras pequeñas efectuando sólo escrituras de divisiones (stripes) completas, espejando los bloques pequeños en lugar de protegerlos con el cálculo de paridad, lo que resulta posible gracias a que el sistema de ficheros conoce la escritura de almacenamiento subyacente y puede gestionar el espacio adicional cuando lo necesita. 

zpool create -f data_pool raidz c1t1d0s3 c1t2d0s3 c1t3d0s3

Añadir un disco a un Pool

zpool attach -f rpool c1t0d0s0 c1t1d0s0

Quitar un disco de un Pool

zpool detach rpool c1t0d0s0 

Verificar el Pool

zpool list
NAME        SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
data_pool  82.5G  6.51G  76.0G     7%  ONLINE  -
logs_pool  14.9G   247K  14.9G     0%  ONLINE  -
rpool      32.5G  8.51G  24.0G    26%  ONLINE  -
zpool status
pool: data_pool
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Wed Mar 11 17:56:13 2009
config:

NAME STATE READ WRITE CKSUM
data_pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c1t0d0s3 ONLINE 0 0 0
c1t1d0s3 ONLINE 0 0 0
c1t2d0s3 ONLINE 0 0 0
c1t3d0s3 ONLINE 0 0 0

errors: No known data errors

pool: rpool
state: ONLINE
scrub: scrub completed after 0h3m with 0 errors on Wed Mar 11 17:22:19 2009
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t0d0s0 ONLINE 0 0 0
c1t1d0s0 ONLINE 0 0 0

errors: No known data errors

Scrubbing un Pool

El scrubbing comprueba todos los checksums del sistema de ficheros para ver si éste está limpio.

zpool scrub rpool

Crear sistemas de ficheros ZFS

Vamos a crear 2 sistemas de ficheros: uno para instalar aplicaciones y otro para datos.

zfs create babilonia/aplicaciones
zfs create babilonia/datos

Verificar los sistemas de ficheros

zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 138K 3,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 3,81G 24,5K /babilonia/aplicaciones
#babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos

La salida nos muestra los nuevos sistemas de ficheros. Todos los sitemas de ficheros comparten el mismo espacio (3.81GB) que es el tamaño del pool.

Los sistemas de ficheros creados con ZFS se montan automáticamente y de forma persistente. No hace falta hacer un mount y/o editar el fichero "/etc/vfstab".

Propiedades de un ZFS

Los sitemas de ficheros ZFS tienen propiedades que pueden ser activadas o desactivadas. Esto lo realizamos mediante el comando "zfs" utilizando las opciones "set" para establecer o "get" para leer. A continuación se mostrarán algunos ejemplos.

Definir el punto de montaje

Para cambiar el punto de motaje de un filesystem ZFS ejecutamos:

zfs set mountpoint=/mnt tank/home

Creación de cuotas y reserva de espacio

Vamos a establecer una quota de 1GB para el sistema de ficheros "babilona/aplicaciones":

zfs set quota=1GB babilonia/aplicaciones

Una quota limita el espacio de un sistema de ficheros pero no garantiza dicho espacio. Reservaremos 1GB para el sistema de ficheros "babilonia/datos":

zfs set reservation=1GB babilonia/datos

El sistema de ficheros "babilonia/datos" tiene reservados 1GB del pool. Si el resto de ficheros llena el pool no peligra nuestro espacio reservado. Verificamos los resultados:

zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 1,00G 2,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos

Sistema de ficheros comprimido

ZFS nos permite tener un sistema de ficheros con información comprimida. Lo activamos ejecutando:

zfs set compression=on babilonia/datos

Para obtener datos del ratio de compresión del sistema de ficheros ejecutamos:

zfs get compressratio babilonia/datos
NAME PROPERTY VALUE SOURCE
babilonia/datos compressratio 1.00x -

Sistema de ficheros de solo lectura

Para establecer un sistema de ficheros como solo lectura modificamos el siguiente parámetro:

zfs set readonly=on babilonia/datos

Renombrar un sistema de ficheros ZFS

Para cambiar el nombre de un sistema de ficheros ZFS ejecutamos:

zfs rename babilonia/aplicaciones datapool/apps

Ver las propiedades de un ZFS

Para ver los valores de las propiedades de un ZFS ejecutamos zfs con la opción get.

zfs get all babilonia/aplicaciones

NAME PROPERTY VALUE SOURCE
babilonia/aplicaciones type filesystem -
babilonia/aplicaciones creation Fri Jan 26 19:11 2007 -
babilonia/aplicaciones used 24,5K -
babilonia/aplicaciones available 1024M -
babilonia/aplicaciones referenced 24,5K -
babilonia/aplicaciones compressratio 1.00x -
babilonia/aplicaciones mounted yes -
babilonia/aplicaciones quota 1G local
babilonia/aplicaciones reservation none default
babilonia/aplicaciones recordsize 128K default
babilonia/aplicaciones mountpoint /babilonia/aplicaciones default
babilonia/aplicaciones sharenfs off default
babilonia/aplicaciones checksum on default
babilonia/aplicaciones compression off default
babilonia/aplicaciones atime on default
babilonia/aplicaciones devices on default
babilonia/aplicaciones exec on default
babilonia/aplicaciones setuid on default
babilonia/aplicaciones readonly off default
babilonia/aplicaciones zoned off default
babilonia/aplicaciones snapdir hidden default
babilonia/aplicaciones aclmode groupmask default
babilonia/aplicaciones aclinherit secure default