ZFS sous Debian : très vite et très sommairement

Il s’agit juste d’une prise de notes rapides sur l’installation et l’utilisation de « ZFS » sous Debian.
Je survole très vite ce formidable système de fichiers (et de disques)…

Si je reste en surface de « ZFS » , c’est parce que j’y ai vu des limites majeures, dont les suivantes:

  • Pas de « shrink » possible.
  • Pas de « defrag » possible, alors que les perfs s’écrouleraient a l’approche des 90% de remplissage.
  • Pas d’intégration complète dans  »Debian ». (module « zfs » a compiler)
  • Pas de support des « reflinks », aka: « cp –reflinks=always …« 

Après, le reste, c’est super: le « RAID », la compression, les « snapshots » …

Mais, « Btrfs » existe déjà, avec quelques défauts aussi, mais pas ceux que j’ai listé pour « ZFS ».

Donc, bref, quoi: voici quelques notes sur « ZFS », et puis je vais voir ailleurs.

Installation sous Debian

 

∗∗∗ Prévoir un peu de temps, ça va compiler ∗∗∗

 

De mon expérience, installer d’abord le package « spl-dkms »:

# apt-get install spl-dkms

… puis, installer « zfs »:

# apt-get install zfs-dkms

Et a la fin, si tout va bien !

# modprobe zfs

Mais y a des services qui ne fonctionnent pas:


# systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● zfs-mount.service loaded failed failed Mount ZFS filesystems
● zfs-share.service loaded failed failed ZFS file system shares
● zfs-zed.service loaded failed failed ZFS Event Daemon (zed)
...

Donc, les démarrer:

# systemctl start zfs-mount
# systemctl start zfs-share
# systemctl start zfs-zed

Pour ma part, j’ai ajouté « zfs » dans les modules a charger au « boot », en ajoutant dans « /etc/modules« :


zfs

Avant de poursuivre, c’est bien de « rebooter » et de vérifier qu’on a rien a cassé.

Création d’un « pool »

Pour mes tests, je m’appuie sur « LVM » pour créer des disques.
En pratique, il paraît que c’est mieux de jouer avec des vrais disques…


# lvcreate -L 5G -n ZPOOL1 vg0

Maintenant, je créé le « pool »:


# zpool create -m none zpool1 /dev/vg0/ZPOOL1

Sans le « -m none » , « ‘ZFS » a la sale manie (oui oui) de monter le « pool » a la racine !

Création d’un « dataset »

( « dataset » peut se comprendre comme un « sous-volume » au sens « Btrfs » )

On prépare un point de montage pour ce « volume ».


# mkdir /mnt/ztest1 -m 0000

Et puis:


# zfs create zpool1/ztest1 -o mountpoint=/mnt/ztest1 -o compress=lz4 -o refquota=1G

Et hop, le « volume » apparaît au point de montage « /mnt/ztest1« .

Dans la foulée, on a ajouté la compression et un quota. (voir aussi « zfs set …« )

On peut ajouter un autre volume sans « quota »:


# mkdir /mnt/ztest2 -m 0000
# zfs create zpool1/ztest2 -o mountpoint=/mnt/ztest2 -o compress=lz4


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zpool1 181K 4,81G 19K none
zpool1/ztest1 19K 1024M 19K /mnt/ztest1
zpool1/ztest2 19K 4,81G 19K /mnt/ztest2

Pas besoin de modifier quoi que ce soit dans « /etc/fstab » :

Ces montages reviendront automatiquement au prochain redémarrage du système.

Chiffrement avec « dmcrypt »


# lvcreate -L 5G -n cryptz1 vg0

# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/vg0/cryptz1

WARNING!
========
Cette action écrasera définitivement les données sur /dev/vg0/cryptz1.

Are you sure? (Type uppercase yes): YES
Saisissez la phrase secrète : ******************************************
Vérifiez la phrase secrète : ******************************************

# cryptsetup luksOpen /dev/vg0/cryptz1 cryptz1
Saisissez la phrase secrète pour /dev/vg0/cryptz1 : ******************************************

# zpool create -m none ZPOOL_CRYPT /dev/mapper/cryptz1

# zfs list ZPOOL_CRYPT
NAME USED AVAIL REFER MOUNTPOINT
ZPOOL_CRYPT 242K 4,81G 19K none

# mkdir /mnt/crypt1 -m 0000

# zfs create ZPOOL_CRYPT/crypt1 -o mountpoint=/mnt/crypt1 -o compress=lz4 -o refquota=1G

# mkdir /mnt/crypt2 -m 0000
# zfs create ZPOOL_CRYPT/crypt2 -o mountpoint=/mnt/crypt2 -o compress=lz4

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
ZPOOL_CRYPT 181K 4,81G 19K none
ZPOOL_CRYPT/crypt1 19K 1024M 19K /mnt/crypt1
ZPOOL_CRYPT/crypt2 19K 4,81G 19K /mnt/crypt2

Ok?

Maintenant, on peut fermer ces « secrets » tout aussi simplement en faisant:


# zfs export ZPOOL_CRYPT
# cryptsetup luksClose cryptz1

« export » va exporter la conf (quelque part dans le système) et puis faire disparaître le « pool ».

Et pour remettre tout ça en place :


# cryptsetup luksOpen /dev/vg0/cryptz1 cryptz1
Saisissez la phrase secrète pour /dev/vg0/cryptz1 : ******************************************

# zpool import cryptz1

Voila: c’est revenu.

Et le reste ?

La création de « block device »


# zfs create -V 1G zpool1/zvol0

Et voila un nouveau disque dans « /dev/zpool1/zvol0 » …

snapshot

Création d’un « snapshot » …


# zfs snapshot zpool1/ztest1@snap1

# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zpool1/ztest1@snap1 0 - 21K -

« snapshot » qu’on peut monter avec « clone »:


# mkdir -m 0000 /mnt/snap1
# zfs clone zpool1/ztest1@snap1 zpool1/clone1 -o mountpoint=/mnt/snap1

Qu’on peut supprimer aussi après usage:


# zfs destroy zpool1/clone1

Et puis remettre le « dataset » original dans l’état du « snapshot ».


# zfs rollback zpool1/ztest1@snap1

Et si on n’a plus besoin du « snapshot », on le supprime aussi:


# zfs destroy zpool1/ztest1@snap1


Pour le reste, consulter la doc. 🙂