Cómo usar ZFS en Linux

Gracias al proyecto ZFS On Linux podemos utilizar en sistemas GNU/Linux el sistema de ficheros ZFS de Sun Microsystems, diseñado específicamente para sistemas Solaris.

En el sitio web ZFS On Linux tenéis información sobre como instalar en cada distribución, y por paquetes, todo lo necesario para hacer funcionar ZFS. Os dejo el método de instalación para RHEL, CentOS y derivados y también para Debian. En el caso de RHEL y CentOS he tenido que cambiar algún detalle así que os lo dejo a continuación:

Instalación en RHEL, CentOS y derivados

Los paquetes de ZFS se basan y están disponibles en el repositorio EPEL y en el propio repositorio de ZFS. Debemos instalar ambos y posteriormente los paquetes necesarios junto con las sources del Kernel:

RHEL y CentOS 6:

# wget https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# wget http://archive.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm
# yum install --nogpgcheck epel-release-6-8.noarch.rpm
# yum install --nogpgcheck zfs-release.el6.noarch.rpm
# yum install kernel-devel zfs-fuse zfs-dkms

RHEL y CentOS 7:

# wget https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
# wget http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
# yum install --nogpgcheck epel-release-7-2.noarch.rpm
# yum install --nogpgcheck zfs-release.el7.noarch.rpm
# yum install kernel-devel zfs-fuse zfs-dkms

Instalación en Debian

Sustituimos DIST por la versión de Debian que estemos utilizando: squeeze, wheezy, jessie.

# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_3%7EDIST_all.deb
# dpkg -i zfsonlinux_3~DIST_all.deb

Cómo usar ZFS

A partir de aquí la gestión de ZFS es exactamente igual que en un sistema Solaris. Hace ya unos años hice unos artículos sobre gestión de ZFS en Solaris que podéis leer haciendo click en los siguientes enlaces:

Podemos probar lo más básico. Empezamos creando un nuevo zpool con un disco:

# zpool create test_zpool /dev/sdb

Verificamos que se ha creado:

# zpool list
NAME         SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
test_zpool  1.98G   182K  1.98G     0%  1.00x  ONLINE  -
# zpool status test_zpool
  pool: test_zpool
 state: ONLINE
 scrub: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	test_zpool  ONLINE       0     0     0
	  sdb       ONLINE       0     0     0

errors: No known data errors

Podemos crear un nuevo filesystem ZFS dentro del POOL llamandolo zfs01:

# zfs create test_zpool/zfs01

El filesystem se monta automáticamente:

# df -h /test_zpool/zfs01
Filesystem            Size  Used Avail Use% Mounted on
test_zpool/zfs01      2.0G   21K  2.0G   1% /test_zpool/zfs01

Establecemos la quota del filesystem:

# zfs set quota=1G test_zpool/zfs01
# df -h /test_zpool/zfs01
Filesystem            Size  Used Avail Use% Mounted on
test_zpool/zfs01      1.0G   21K  1.0G   1% /test_zpool/zfs01

En definitiva, vemos que podemos trabajar sin ningún problema con el ZFS dentro de nuestro sistema GNU/Linux. Si estáis interesados, os recomiendo revisar las FAQ del proyecto para aclarar cualquier duda en cuanto a rendimiento y parámetros de configuración avanzados. En la propia documentación avisan de que el proyecto todavía no ha sido optimizado para el rendimiento, pero sí que dan unas pautas para que sea lo más óptimo posible:

  • Distribuir los discos de los Pool en distintas controladoras
  • Crear el pool utilizando el disco completo
  • Disponer de un mínimo de 2GB de memoria RAM. Se requiere memoria adicional cuando se activa la deduplicación y compresión.
  • Establecer el parámetro «ashift=12»:
# zpool create -o ashift=12 tank mirror sda sdb

Yo únicamente lo he instalado y probado por curiosidad así que no os puedo decir su rendimiento, y sobre todo, antes de poner algo así en producción… pruebas, muchas pruebas.