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. 🙂