Post

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.

Cheatsheet OpenZFS

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.

schéma

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­@12­jan2014
    
  • 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
    
- Afficher les statistiques d’utilisation de l’ARC sur les pools ZFS
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 »
Cet article est sous licence CC BY 4.0 par l'auteur.