Commandes NFS.
Un rapide résumé des commandes NFS qui me sont utiles.
Création basique d’un pool ZFS
ici "disk0" "disk1" "diskn" doivent être remplacés par les dev correspondants.
/!\ il est fortement déconseillé d'utiliser /dev/sd<n> car ces numéros de dev ont tendance à changer.
j'utilise /dev/disk/by-id mais on peut utiliser /dev/disk/by-uid ou autre chose.
single disk stripe pool (Raid 0)
zpool create tank disk0
stripe (par défault, similaire au RAID0, pas de redondance ni de parité)
zpool create tank disk0 disk1 (Raid 0)
Miroir (similaire au RAID1, ≥ 2 disques, 1:1 redondance)
zpool create tank mirror disk0 disk1
raidz (similaire au RAID5, ≥ 3 disques, 1 disque de parité)
zpool create tank raidz disk0 disk1 disk2
raidz2 (similaire au RAID6, ≥ 4 disques, 2 disques de parité)
zpool create tank raidz2 disk0 disk1 disk2 disk3
raidz3 (sans équivalence ≥ 5 disques, 3 disques de parité)
zpool create tank raidz3 disk0 disk1 disk2 disk3 disk4
Création avancée d’un pool ZFS
1 groupe de 2 raidz (avec 2 disques de parité au total)
zpool create tank \
raidz disk0 disk1 disk2 \
raidz disk3 disk4 disk5
Création d'un pool hybride
zpool create mypool raidz disk1 disk2 disk3 log ssd1 cache ssd2 spare disk4 disk5
crée un raid hybride composé de 4 vdevs
Afficher le détail d'un pool
zpool status <pool> (-v)
Chaque périphérique peut se trouver dans l'un des états suivants :
ONLINE
Le périphérique ou le périphérique virtuel fonctionne normalement. Même si certaines erreurs transitoires peuvent encore survenir, le périphérique fonctionne correctement.
DEGRADED
Le périphérique virtuel a connu un panne. Toutefois, il continue de fonctionner. Cet état est le plus commun lorsqu'un miroir ou un périphérique RAID-Z a perdu un ou plusieurs périphériques le constituant. La tolérance de pannes du pool peut être compromise dans la mesure où une défaillance ultérieure d'un autre périphérique peut être impossible à résoudre.
FAULTED
Le périphérique ou le périphérique virtuel est totalement inaccessible. Cet état indique en règle générale une défaillance totale du périphérique, de telle façon que ZFS est incapable d'y envoyer des données ou d'en recevoir de lui. Si un périphérique virtuel de niveau supérieur se trouve dans cet état, le pool est totalement inaccessible.
OFFLINE
Le périphérique a été mis hors ligne explicitement par l'administrateur.
UNAVAIL
L'ouverture du périphérique ou du périphérique virtuel est impossible. Dans certains cas, les pools avec des périphériques en état UNAVAIL s'affichent en mode DEGRADED. Si un périphérique de niveau supérieur est en état UNAVAIL, aucun élément du pool n'est accessible.
REMOVED
Le périphérique a été retiré alors que le système était en cours d'exécution. La détection du retrait d'un périphérique dépend du matériel et n'est pas pris en charge sur toutes les plate-formes.
statistiques d'E/S d'un pool
zpool iostat <pool> n
n : répète toute les n secondes
Options avancées pool et volume ZFS
Désactiver la déduplication :
zfs set dedup=off tank
Activer la compression :
zfs set compression=lz4 tank
Désactiver l’access-time et la synchronisation immédiate (meilleures performances) :
zfs set atime=off tank
zfs set sync=disabled tank
Stocker les attributs étendus dans les inodes afin d’obtenir plus d’IO :
zfs set dnodesize=auto tank
zfs set xattr=sa tank
Ajouter un cache (L2ARC)
ZFS peut utiliser des SSD comme cache de second niveau (L2ARC) après la RAM (ARC) afin d’améliorer les performances globales. Les disques de cache étant lus et écrits très fréquemment, il faut privilégier des dispositifs SSD plus durables (SLC/MLC plutôt que TLC/QLC), voir NVMe. Voir Les systèmes de cache.
zpool add tank cache nvme-0-scsi6
Ajout de log (SLOG/ZIL)
ZFS peut utiliser la NVRAM/Optane/SSD comme périphérique SLOG, c’est un cache en écriture, mais attention : Les disques SLOG utilisés pour accélérer ces écritures doivent être configuré en mode miroir. Voir Les systèmes de cache.
Voir aussi https://www.servethehome.com/what-is-the-zfs-zil-slog-and-what-makes-a-good-one/
zpool add tank log mirror nvme-0-scsi7 nvme-0-scsi8
Ajout d’un disque de spare
zpool add tank spare scsi-0-scsi9
Datasets
Création d’un dataset
zfs create pool_name/dataset_name
Suppression d’un dataset
On utilise "zfs destroy".
Maintenance
Scrubs
Un scrub permet de lire l’entièreté des données contenues dans le pool afin de vérifier si celles-ci sont toujours consistantes et de réparer les erreurs si il y en a. La commande zpool scrub doit donc être lancée périodiquement via un cron. Une fréquence d’une fois par semaine pendant les heures creuses est suffisante.
Lancer un scrub (vérification complète)
zpool scrub tank
Arrêter un scrub
zpool scrub -s tank
remplacer un périphérique défectueux
Vous pouvez aisément remplacer un périphérique défectueux par un disque de remplacement (spare) grâce à la commande:
zpool replace old_dev new_dev
Les périphériques peuvent être mis « offline » (pour pouvoir travailler dessus sans que ZFS ne se mêle de ce que vous faites) ou « online » grâce aux commandes:
zpool online vdev1
zpool offline vdev1
Étendre un pool
Un pool peut être étendu grâce à la commande
zpool add pool_name vdev
Propriétés
Les propriétés peuvent être affichées en exécutant la commande:
zpool get all pool_name
et modifiées avec
zpool set autoreplace=on dataset_name
Parmi les propriétés d’un pool, les plus importantes sont failmode, autoreplace et listsnapshots.
Le failmode décrit la façon dont ZFS va réagir si quelque chose se passe mal: WAIT pour attendre que le problème se répare, CONTINUE pour continuer malgré le problème, PANIC pour stopper le système.
Récupération de zpools détruits
Si on a supprimé par erreur un zpool avec "zpool destroy", tout espoir n'est pas perdu. Il faut utiliser
zpool import [-D]
# zpool list
no pools available
# zpool status zp_raid5
cannot open 'zp_raid5': no such pool
# zpool import
no pools available to import
# zpool import -D
pool: zp_raid5
id: 8634237456648565539
state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
config:
zp_raid5 ONLINE
raidz1-0 ONLINE
c0t2d0s0 ONLINE
c0t2d0s1 ONLINE
c0t2d0s2 ONLINE
c0t2d0s3 ONLINE
spares
c0t2d0s4
# zpool import -D zp_raid5
# zpool list
NAME SIZE ALLOC FREE CAP HEALTH ALTROOT
zp_raid5 19.9G 198K 19.9G 0% ONLINE -
Chiffrement
zfs create -o encryption=aes-256-gcm - o keyformat=passphrase -o compression=lz4 -o dedup=off <pool>/<dataset>
- encryption peut être aes 128 | 192 | 256 et déclinaisons comme 'ccm'
- compression, dedup pour exemple
- keyformat peut avoir le format :
passphrase : interactif ou passé via un fichier texte
fichier , dans ce cas utiliser -o keylocation = file:///<clé>
Pour monter les pools/datasets chiffrés il faut au préalable fournir les clés, sauf dans le cas d'une passphrase, la tentative de montage déclenchera une interaction.
Sinon sudo zfs load-key -L file:///<clé>
puis sudo zfs mount -a ou sudo zfs mount <pool/sataset>
démontage via zfs unmount, puis décharger les clés par sudo zfs unload-key <pool/dataset>
Citations et liens :
https://www.lambot.info/zfs-en-details/
https://ubuntu.com/tutorials/using-zfs-snapshots-clones#2-using-snapshots
https://linuxhint.com/share-zfs-volumes-via-iscsi/
http://www.unixmaniax.fr/wiki/index.php?title=ZFS
https://resinfo-gt.pages.in2p3.fr/zfs/doc/usage/index.html
https://arstechnica.com/gadgets/2021/06/a-quick-start-guide-to-openzfs-native-encryption/
https://docs.oracle.com/cd/E19253-01/820-2315/gaynp/index.html
