HLab

Julien Hautefeuille

Mémo : ZFS et Ubuntu

ZFS sur Linux Ubuntu

Installation du dépôt

apt-get install python-software-properties
apt-add-repository --yes ppa:zfs-native/stable

Installation de ZFS

apt-get update
apt-get install ubuntu-zfs

Injection du module

modprobe zfs

Vérification

lsmod | grep zfs
dmesg | grep ZFS

État des lieux des disques disponibles

lsblk

Dans notre cas :

sdc      8:32   0 111,8G  0 disk
sdd      8:48   0 111,8G  0 disk
sde      8:64   0 111,8G  0 disk

Création d’un zpool

Nous créons un zpool dédié à du Raid Z.

zpool create -f datastore raidz /dev/sdc /dev/sdd /dev/sde

L’option -f permet de se passer de la création de partition.

On vérifie que le zpool a été créé :

zpool status datastore

Ce qui nous donne :

pool: datastore
state: ONLINE
scan: none requested
config:

NAME        STATE     READ WRITE CKSUM
datastore   ONLINE       0     0     0
raidz1-0    ONLINE       0     0     0
sdc         ONLINE       0     0     0
sdd         ONLINE       0     0     0
sde         ONLINE       0     0     0

errors: No known data errors

Création d’un dataset ZFS

A partir de maintenant, nous diposons d’un zpool contenant 3 disques dont un est chargé du contrôle de parité.

On va maintenant créer des volumes utilisables avec des options facultatives telles que la compression, le chiffrement ou la déduplication.

De multiples datasets ou points de montage peuvent être créés sur un volume simple. Généralement, on ne spécifie pas la taille de ceux-ci. Le stockage fournit par le zpool va être disponible à n’importe quel dataset. On peut néanmoins ajouter des quotas pour gérer la taille des datasets.

Dans notre exemple, nous allons créer les 3 volumes suivants :

  • photo,
  • video,
  • document.

Ils seront montés respectivement sur les points suivants :

  • /mnt/photo,
  • /mnt/video,
  • /mnt/document.

Procédons :

zfs create -o mountpoint=/mnt/photo datastore/photo
zfs create -o mountpoint=/mnt/video datastore/video
zfs create -o mountpoint=/mnt/document datastore/document

Vérification :

zfs list

Ce qui nous donne :

julien@dunkerque:~ᛤ sudo zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
datastore            194K   215G  24,0K  /datastore
datastore/document  24,0K   215G  24,0K  /mnt/document
datastore/photo     24,0K   215G  24,0K  /mnt/photo
datastore/video     24,0K   215G  24,0K  /mnt/video

Ajout de la compression d’un dataset

Nous souhaitons ajouter la compression sur le dataset document.

On vérifie si la compression n’est pas déjà activée :

zfs get compression datastore/document

Ce qui nous donne :

NAME                PROPERTY     VALUE     SOURCE
datastore/document  compression  off       default

On va donc appliquer la compression :

zfs set compression=on datastore/document

Par défaut, ZFS utilise gzip-6 mais c’est un paramètre configurable.

Par exemple :

zfs set compression=gzip-9 datastore/document
zfs set compression=lzjb datastore/document

On supprime la compression sur un volume avec la commande suivante :

zfs set compression=off datastore/document

Ajout du chiffrement sur un dataset

A l’heure actuelle, sous Linux, on ne peut pas chiffrer un dataset existant, nous devons en créer un nouveau.

zfs create -o encryption=on mountpoint=/mnt/secret datastore/secret

Une phrase de mot de passe vous sera demandée.

On vérifie l’application du chiffrement :

zfs get encryption datastore/secret

Ce qui nous donne :

NAME                 PROPERTY    VALUE        SOURCE
datastore/document   encryption  on           local

Ajout de quota

Comme pour la compression, on positionne l’option sur un dataset :

zfs set quota=200G datastore/photo

Réaliser un snapshot

Procédons :

zfs snapshot datastore/document@snapshot1

On vérifie :

zfs list -rt snapshot datastore/document

Ce qui nous donne :

NAME                           USED  AVAIL  REFER  MOUNTPOINT
datastore/document@snapshot1      0      -  27,6G  -

Et on peut remonter un snapshot :

mkdir /tmp/document@snapshot1
mount -t zfs datastore/document@snapshot1 /tmp/document@snapshot1

On peut également réaliser un roolback :

umount /tmp/document@snapshot1
zfs roolback datastore/document@snapshot1

Configuration pour Linux

# /etc/modprobe.d/zfs.conf
#
# yes you really DO have to specify zfs_arc_max IN BYTES ONLY!
# 16GB=17179869184, 8GB=8589934592, 4GB=4294967296, 2GB=2147483648, 1GB=1073741824, 500MB=536870912, 250MB=268435456
#
options zfs zfs_arc_max=4294967296

Références

(http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/1/)[http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/1/]