Cheatsheet OpenZFS
Notions essentielles sur ZFS et commandes pour gérer les pools, jeux de données, instantanés, caches ARC/L2ARC et périphériques ZIL/SLOG.
Informations sur ZFS
ZFS (Zettabyte File System)
Système de fichiers avancé qui combine les fonctions d’un système de fichiers et d’un gestionnaire de volumes.
Il offre des fonctionnalités telles que la vérification de l’intégrité des données, le stockage efficace, les instantanés, la compression, et bien plus encore.
Je l’utilise sur Proxmox et pfSense, avec une configuration plus ou moins par défaut.
ZIL (journal d’intention ZFS)
Le ZIL enregistre les opérations d’écriture synchrones dans un journal rapide de petite taille avant qu’elles ne soient validées dans le pool ZFS principal.
Garantit que ces écritures synchrones sont enregistrées sur le disque en toute sécurité.
Permet la récupération après incident en cas de panne.
En cas de panne, le ZIL peut rejouer les transactions perdues.
ZIL SLOG (périphérique de journalisation séparé)
Le SLOG est un périphérique dédié (généralement un SSD ou NVMe rapide) qui peut être ajouté pour décharger le ZIL des disques plus lents du pool principal.
Il ne contient que le ZIL des écritures synchrones, pas toutes les écritures.
Il est vidé fréquemment et utilisé uniquement pendant la période de confirmation d’écriture ; il ne fonctionne pas comme un cache traditionnel.
Il est utile dans les environnements où de nombreuses écritures synchrones ont lieu (par exemple, bases de données et machines virtuelles).
Si vous effectuez surtout des écritures asynchrones, un SLOG peut apporter peu de bénéfices.
Il est fortement recommandé de mettre votre SLOG en miroir RAID1 pour éviter les pertes de données. Si le périphérique SLOG tombe en panne sans miroir, vous risquez de perdre des transactions d’écriture non validées.
ARC (cache à remplacement adaptatif)
L’ARC est le cache en mémoire de ZFS ; il stocke les données récemment lues afin d’améliorer les performances.
Il réside dans la DRAM du système et permet un accès à faible latence aux données fréquemment utilisées.
Il est très efficace et utilise des algorithmes pour stocker les données les plus pertinentes afin d’y accéder rapidement.
L2ARC (ARC de niveau 2)
Le L2ARC étend l’ARC. Il se trouve sur un stockage rapide, tel qu’un SSD ou un périphérique NVMe, et fournit un cache plus grand, mais légèrement plus lent que l’ARC.
Il met en cache les données moins fréquemment consultées que celles de l’ARC, ce qui réduit les lectures depuis le stockage principal du pool.
Il consomme une partie de la RAM de l’ARC pour sa gestion. En général, 1 à 2 % de la taille du L2ARC est nécessaire dans la DRAM (ARC) pour gérer les métadonnées.
Pour un L2ARC de 100 Go, il peut falloir 1 à 2 Go de RAM.
Il n’est pas forcément nécessaire pour toutes les configurations ZFS.
Périphérique spécial (classe d’allocation spéciale)
La classe d’allocation spéciale est une fonctionnalité ZFS qui permet de consacrer un périphérique rapide (généralement un SSD) aux métadonnées et aux petits fichiers, afin d’améliorer les performances.
Avantage : elle accélère l’accès aux métadonnées (informations sur la structure des fichiers) et aux petits fichiers (généralement inférieurs à 128 Ko).
Le retirer sans migration appropriée peut entraîner une perte de données.
Il n’accélérera pas nécessairement tout le pool, mais les opérations impliquant les métadonnées ou les petits fichiers seront plus rapides.
Commandes et informations
Proxmox
Lorsque le cache du disque est réglé sur « writeback », le L2ARC est contourné, ce qui provoque des pics d’E/S et de mauvaises performances des machines virtuelles. Le réglage sur « none » permet d’utiliser le L2ARC et améliore la vitesse de démarrage ainsi que les opérations des machines virtuelles.
Commandes
Pools
- Créer un pool RAID0
1
zpool create yourpoolname /dev/sdX /dev/sdY
- Créer un pool RAIDZ1
1
zpool create yourpoolname raidz1 /dev/sdX /dev/sdY /dev/sdK
- Créer un pool RAIDZ2
1
zpool create yourpoolname raidz2 /dev/sdX /dev/sdY /dev/sdK
- Créer un pool miroir avec /dev/sdX et /dev/sdY en miroir, et /dev/sdK et /dev/sdZ en miroir
1
zpool create yourpoolname mirror /dev/sdX /dev/sdY mirror /dev/sdK /dev/sdZ
- Ajouter un disque à un pool
1
zpool add yourpoolname /dev/sdX
- Agrandir un pool
1
zpool online -e yourpoolname /dev/sdX - Détruire un pool
1
zpool destroy yourpoolname
- Exporter/importer un pool
1 2
zpool export yourpoolname zpool export yourpoolname
Jeux de données
- Créer un jeu de données
1
zfs create yourpoolname/datasetname
- Définir les propriétés d’un jeu de données (par exemple, la compression)
1 2
zfs set compression=on yourpoolname/datasetname zfs set compression=lz4 yourpoolname/datasetname
- Créer un instantané nommé 12jan2014 du système de fichiers datasetname
1
zfs snapshot yourpoolname/datasetname@12jan2014
- Lister les instantanés, puis revenir à l’un d’eux
1 2
zfs list -t snapshot zfs rollback poolname/datasetname@snapshotname
Collecte d’informations
- Informations sur le pool ZFS
1 2 3
zpool status zfs get all yourpoolname zpool history - Lister les jeux de données ZFS
1
zfs list
Performances
- Afficher les statistiques d’E/S détaillées de ZFS toutes les 2 secondes
1 2
zpool iostat 2 zpool iostat -v 2
1
2
arc_summary
arcstat
- Lancer un scrub sur un pool (vérification de l’intégrité des données)
1
zpool scrub yourpoolname
L2ARC et ZIL (SLOG)
- Ajouter un périphérique ZIL (SLOG)
1
zpool add yourpoolname log /dev/sdX
- Ajouter un périphérique de cache L2ARC
1
zpool add yourpoolname cache /dev/sdX
- Retirer un périphérique de cache (L2ARC)
1
zpool remove yourpoolname cache /dev/sdX
- Configuration de l’ARC dans /etc/modprobe.d/zfs.conf
1 2 3 4
# 2 * 1024 * 1024 * 1024 = 2147483648 = 2GB options zfs zfs_arc_min=2147483648 # 4 * 1024 * 1024 * 1024 = 4294967296 = 4GB options zfs zfs_arc_max=4294967296
après modification -> update-initramfs -u -k all un redémarrage est nécessaire
- Configuration du L2ARC dans /etc/modprobe.d/zfs.conf
1 2 3 4 5 6 7
# Maximum amount of data written to L2ARC per second # 64 MB/s * 1024 * 1024 options zfs l2arc_write_max=67108864 # Extra data written to L2ARC during the initial warmup period options zfs l2arc_write_boost=134217728 # Ratio of metadata in L2ARC, placed in RAM options zfs l2arc_headroom=4
après modification -> update-initramfs -u -k all un redémarrage est nécessaire
Pour continuer
- Ajouter un lien vers un « labo ou exercice »
