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