Zfs maintenance

Commandes de base

Liste et informations usr les pools

Pour lister les pools:

zpool list

Si on veut voir le niveau de fragmentation, et le % de capacité des différents miroirs dans le pool, c'est la même commande avec un argument de plus:

zpool list -v

État d'un pool

# zpool status

Statistiques de io

# zpool iostat -v 

Utilisation de l'espace disque par utilisateur ou groupe

Montrer la consommation d'espace disque par utilisateur / par groupe. Équivalent au Quota sur le système de fichier ext4

Par groupe,

Par utilisateur,

Opérations

Préparation d'un disque

  1. Supprimer complètement la table de partition du disque, on ne veut pas se retrouver avec des veilles affaires.
    • # Note: this does the work without user confirmation, be careful!
      # The example is captitalized so copy/pasting from the wiki should not accidentally an unintended target.
      $ sgdisk -Z /dev/sdM    
      Creating new GPT entries.                                                                           
      GPT data structures destroyed! You may now partition the disk using fdisk or
      other utilities.
  2. Créer des nouveaux entrées GPT:
    • # Note: this does the work without user confirmation, be careful!
      # The example is captitalized so copy/pasting from the wiki should not accidentally an unintended target.
      $ sgdisk -o /dev/sdM
      Creating new GPT entries.
      The operation has completed successfully.
  3. Formater le disque au complet avec de la crypto
    • # cryptsetup --verbose --cipher aes-xts-plain64 --hash sha512 --key-size 512 --verify-passphrase luksFormat /dev/sdM
      
      WARNING!
      ========
      Cette action écrasera définitivement les données sur /dev/sdn.
      
      Are you sure? (Type uppercase yes): YES
      Saisissez la phrase secrète : 
      Vérifiez la phrase secrète : 
      Opération réussie.
  4. Trouver le UUID du disque qui vient d'être formaté.
    • # lsblk --fs | grep sdn
      sdn                 crypto_LUKS                       8d9129d8-3ffd-40bf-9cb4-f951d6d132e6   
  5. Trouver le numéro de série et la grosseur du disque en MB
    • # hdparm -I /dev/sdn  | grep -E "Serial Number|MBytes"
              Serial Number:      Z1F1TDBB
              device size with M = 1024*1024:     2861588 MBytes
              device size with M = 1000*1000:     3000592 MBytes (3000 GB)
  6. Ajouter l'entré suivante au fichier /etc/crypttab en utilisant le numéro de série, la grosseur du disque en TB et le UUID. (Ici, je fais juste une mini convention pour identifier le disque... parce qu'il faut mettre quelques choses d'unique au disque.)
    • ...
      # /dev/sdn
      Z1F1TDBB-3TB_crypt UUID=8d9129d8-3ffd-40bf-9cb4-f951d6d132e6 none luks
  7. Tester avec la commande :
    • # cryptdisks_start Z1F1TDBB-3TB_crypt
      Unlocking the disk /dev/disk/by-uuid/8d9129d8-3ffd-40bf-9cb4-f951d6d132e6 (Z1F1TDBB-3TB_crypt)
      Enter passphrase:  ************************************
      Z1F1TDBB-3TB_crypt (started)...done.

Ajouter un miroir (2 disques) à un pool

Sur Alexandrie, on ne veut pas ajouter de miroir... parce que on a 5, et on ne peut pas retirer un miroir d'un pool une fois qu'il est créé. Si on veut augmenter le stockage, on change 2 disques dans un miroir pour des disques plus gros.

On veut normalement faire l'opération sur 2 disques pour les ajouter comme un miroir.

Voici un exemple pour ajouter un pool existant 2 disques en miroir qui ont de la crypto.

# zpool add BACKUP mirror /dev/mapper/S1X040HY-2TB_crypt /dev/mapper/WD-WMC1P0201515-2TB_crypt

Ajouter un disque à un mirror

Quand zpool attach est roulé, si le device existant est dans un mirror, le nouveau device sera ajouté au mirroir et va être resilvered pour contenir les mêmes données que les autres disques dans le mirroir

  1. Identifier le disque existente à quel s'attacher:

    # zpool status
    ...
              mirror-4              ONLINE       0     0     0
                K4JYW41B-4TB_crypt  ONLINE       0     0     0
                K7GAA15L-4TB_crypt  ONLINE       0     0     0
  2. Ajouter le nouveau device:

    # zpool attach BACKUP K7GAA15L-4TB_crypt /dev/mapper/K7G9GZVB-4TB_crypt
  3. Verifier que c'est bien ajouté:

    # zpool status
    ...
              mirror-4              ONLINE       0     0     0
                K4JYW41B-4TB_crypt  ONLINE       0     0     0
                K7GAA15L-4TB_crypt  ONLINE       0     0     0
                K7G9GZVB-4TB_crypt  ONLINE       0     0    83  (resilvering)

Ajouter un disque disque en tant que caching pour le pool

Un truc qui peut être pratique avec ZFS c'est d'avoir des gros disques de stockage sur des "rotating rust" plus lent, mais d'avoir des disques SSD pour un caching rapide des données.

Pour ajouter un disque comme cache pour un pool, assurez-vous avant tout d'avoir partitionné et créé la crypto pour le disque. Ensuite:

# zpool add BACKUP cache /dev/disk/by-id/S5G7NS0R801522T-part2

On peut ensuite voir le nouveau device en fonction:

# zpool status BACKUP
...
          mirror-4                 ONLINE       0     0     0
            K4JYW41B-4TB_crypt     ONLINE       0     0     0
            K7GAA15L-4TB_crypt     ONLINE       0     0     0
            K7G9GZVB-4TB_crypt     ONLINE       0     0    83
          cache
            S5G7NS0R801522T-part2  ONLINE       0     0     0

Note: les devices de caching d'un pool ne sont pas en mirroir et donc les devices seront ajoutés à la liste sans niveau qui parle d'un mirroir.

Retirer un disque d'un miroir

# zpool detach BACKUP Z1Y389E3-3TB_crypt

désactiver la crypto sur le disque.

# cryptdisks_stop Z1Y389E3-3TB_crypt

Mettre à jour le /etc/crypttab

Retirer un disque de caching d'un pool

Comme les disques en caching ne sont pas en mode mirroir, pour les retirer on peut simplement les enlever avec la commande:

# zpool remove BACKUP S5G7NS0R801522T-part2

Remplacer un disque brisé par le nouveau disque dans un pool "dégradé"

Cette procédure est très similaire à l'ajout d'un disque dans un pool degraded mais se charge du retrait du device brisé en même temps dans une seule étape.

Une fois que le nouveau disque est en place et le disque brisé sorti, et aussi qu'on a créé les partitions et la crypto sur le disque, on peut demander à zfs de remplacer un disque par le nouveau dans le pool.

Ici le disque brisé est le device Z1X4B6DS-2TB_crypt (listé dans zpool status) et le nouveau disque a le device de crypto nommé WD-WMC1P0199248-2TB_crypt (on peut spécifier le chemin complet du device ou bien seulement le nom symbolique, tant que le nom symbolique est trouvé sous /dev/disk/by-*/)

# zpool replace BACKUP Z1X4B6DS-2TB_crypt WD-WMC1P0199248-2TB_crypt

Une fois que l'opération se termine, zfs sera en mode "resilvering" et on pourra surveiller le progrès via watch -n 10 zpool status BACKUP

La commande plus haut ne fonctionne pas pour les devices de caching. Pour remplacer un device de caching, on doit ajouter le nouveau device et ensuite retirer l'ancien en deux opérations séparées.

Mettre un disque dans un miroir "dégradé"

Préparer le disque comme mentionné précédemment.

Activer le crypto

# cryptdisks_start WD-WMC1P0199248-2TB_crypt

Le disque actif est le Z1X4B6DS-2TB_crypt, et le nouveau disque à ajouter est le WD-WMC1P0199248-2TB_crypt

# zpool attach BACKUP Z1X4B6DS-2TB_crypt WD-WMC1P0199248-2TB_crypt

Ensuite, le miroir en fait, le nouveau disque va être en état de "resilvering" i.e. activation du miroir. Ça peut prendre de 3 à 4h pour un disque de 2TB, ou même 160h si le serveur est pas mal occupé et qu'on réactive 2 miroirs en même temps.

renommer un pool

S'assurer que le pool n'est pas utiliser (i.e. qu'il n'a pas de fichier d'ouvert).

Identifier le nom du pool avec la commande zpool status

La commande export va désactiver le pool.

# zpool export test

La commande zpool import qui liste les pools disponible pour l'importation (i.e. réactivation) ne detecte pas le pool qui a été exporté... (?) La commande suivante, voit le pool désactivé.

Ici, on fait juste lister les pools disponible pour l'importation.

# zpool import -d /dev/mapper/
   pool: test                                                                          │
     id: 13652816758537056789                                                          │
  state: ONLINE                                                                        │
 action: The pool can be imported using its name or numeric identifier.                │
 config:                                                                               │
        test                    ONLINE                                                 │
          mirror-0              ONLINE                                                 │
            Z1Y389E3-3TB_crypt  ONLINE                                                 │
            Z1Y3869L-3TB_crypt  ONLINE                                                 │

pour importer le pool test sous le nom TEST

# zpool import -d /dev/mapper/ test TEST

# update-initramfs -u -k all

Ajouter un disque de cache (L2ARC) pour accélérer les accès communs

Selon les use cases, ça peut être utile de conserver les fichiers les plus utilisés en cache pour accélérer leur accès. On peut conserver cette cache dans un disque SSD pour rendre les accès encore plus rapides.

TODO: tester sur un setup réel

# zpool add BACKUP cache devicename

voir:

mettre à jour un pool (upgrade)

Suite à la mise à jour de la version de zfs par exemple de stretch->buster, on veut mettre à jour le pool sinon, on va avoir le message suivant:

status: Some supported features are not enabled on the pool. The pool can
        still be used, but some features are unavailable.   
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(5) for details.

# zpool upgrade -a

Référence: https://docs.oracle.com/cd/E19253-01/819-5461/gcikw/index.html

gestion des volumes dans zfs

root@badbrains:~# zfs list -t volume
NAME                                                    USED  AVAIL  REFER  MOUNTPOINT
BACKUP/35f97e1a-14f1-4278-8723-69ec275b3675.ext.disk1  2,13G  6,28T    64K  -
BACKUP/f32d1ad9-2304-47c4-b27c-4649b2f2600e.ext.disk0  4,25T  10,5T   144K  -

root@badbrains:~# zfs destroy BACKUP/f32d1ad9-2304-47c4-b27c-4649b2f2600e.ext.disk0
root@badbrains:~# zfs destroy BACKUP/35f97e1a-14f1-4278-8723-69ec275b3675.ext.disk1

# zfs destroy -r BACKUP

# zpool destroy BACKUP

Troubleshooting

Débug d'un pool gélé!

# zpool events
TIME                           CLASS
Jul 13 2017 01:02:10.926875578 resource.fs.zfs.statechange
Jul 13 2017 01:02:10.926875578 resource.fs.zfs.statechange
Jul 13 2017 01:02:10.926875578 resource.fs.zfs.statechange
Jul 13 2017 01:02:10.926875578 resource.fs.zfs.statechange

Sortir les configurations;

root@alexandrie:~# for i in /sys/module/zfs/parameters/*; do echo $(basename $i) $(cat $i); done
ignore_hole_birth 1
l2arc_feed_again 1
l2arc_feed_min_ms 200
l2arc_feed_secs 1
l2arc_headroom 2
l2arc_headroom_boost 200
l2arc_nocompress 0
l2arc_noprefetch 1
l2arc_norw 0
l2arc_write_boost 8388608
l2arc_write_max 8388608
....

Analyse les processus qui roulent, avec top

le cas de txg_sync et txg_quiesce

Dans top on a txg_sync txg_quiesce qui tournent en rond... tout est gélé sur la machine

ça semble être ce bug, https://github.com/zfsonlinux/zfs/issues/3409

zfs_arc_min ne devrait pas être à 0, ça l'air.

Il est recommander de mettre 1GB comme min.

# echo 1073741824 >> /sys/module/zfs/parameters/zfs_arc_min

voilà tout est reparti. :-)

Added to the file /etc/modprobe.d/zfs.conf:

voici un autre suggestion pour les paramètres en permanence.

pour le moment, on va juste mettre le min... on verra pour le reste, si ça jam encore.

# options zfs zfs_arc_max=8589934592
options zfs zfs_arc_min=1073741824
# options zfs zfs_prefetch_disable=1

Nos traces dans 24610

Voir combien de données sont alloués sur chaque mirroir

# zpool list -v BACKUP
NAME                     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
BACKUP                  23.6T  13.1T  10.5T        -         -    41%    55%  1.00x    ONLINE  -
  mirror                3.63T  2.64T  1015G        -         -    54%  72.7%      -  ONLINE  
    N8GR5DVY-4TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
    K7GA9U4L-4TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
  mirror                5.45T  3.30T  2.15T        -         -    45%  60.5%      -  ONLINE  
    K8GHA7YD-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
    V9JR5XDL-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
  mirror                5.45T  2.23T  3.22T        -         -    28%  41.0%      -  ONLINE  
    V9JP2XML-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
    V7GHV7AH-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
  mirror                5.45T  2.44T  3.01T        -         -    36%  44.8%      -  ONLINE  
    K8GHN43D-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
    K8GHNVLD-6TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
  mirror                3.62T  2.52T  1.10T        -         -    55%  69.6%      -  ONLINE  
    K7GAA15L-4TB_crypt      -      -      -        -         -      -      -      -  ONLINE  
    K7G9GZVB-4TB_crypt      -      -      -        -         -      -      -      -  ONLINE  

Obtenir de l'information additionnelle sur les pools et leurs devices

On peut voir une liste un peu plus détaillée d'information sur les pools et les devices dedans:

# zdb

Ça liste entre autres choses:

Avoir de l'aide en ligne

Références

Remplacer un disque mort dans un miroir

links reemplazo de disco ZFS POOL DEGRADED

https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Grub_boot_ZFS_problem
https://edmondscommerce.github.io/replacing-failed-drive-in-zfs-zpool-on-proxmox/

pour ajouter plus de 2 disques dans un mirroir

* à tester! https://docs.oracle.com/cd/E19253-01/819-5461/gazgw/index.html

ZfsMaintenance (last edited 2023-08-02 10:10:59 by mathieul)