Contents
-
Zfs maintenance
- Commandes de base
-
Opérations
- Préparation d'un disque
- Ajouter un miroir (2 disques) à un pool
- Ajouter un disque à un mirror
- Retirer un disque d'un miroir
- Remplacer un disque brisé par le nouveau disque dans un pool "dégradé"
- Mettre un disque dans un miroir "dégradé"
- renommer un pool
- Ajouter un disque de cache (L2ARC) pour accélérer les accès communs
- mettre à jour un pool (upgrade)
- gestion des volumes dans zfs
- Troubleshooting
- Avoir de l'aide en ligne
- Références
Zfs maintenance
https://www.freebsd.org/doc/handbook/zfs-zpool.html Très bonne documentation
https://www.freebsd.org/cgi/man.cgi?zpool(8) la man page
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,
# zfs groupspace BACKUP TYPE NAME USED QUOTA POSIX Group backupninjas 966G none POSIX Group root 216K none
Par utilisateur,
# zfs userspace BACKUP TYPE NAME USED QUOTA POSIX User backup-aegir3 19,4G none POSIX User backup-apps 25,9G none POSIX User backup-argos 10,2G none POSIX User backup-auth 40,4M none POSIX User backup-chat0 59,6M none POSIX User backup-chat1 144M none POSIX User backup-filer2 98,3G none POSIX User backup-homere 783G none POSIX User backup-minerve 1,95G none POSIX User root 152K none ....
Opérations
Préparation d'un disque
- 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.
- 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.
- 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.
- Trouver le UUID du disque qui vient d'être formaté.
# lsblk --fs | grep sdn sdn crypto_LUKS 8d9129d8-3ffd-40bf-9cb4-f951d6d132e6
- 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)
- 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
- 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
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
Ajouter le nouveau device:
# zpool attach BACKUP K7GAA15L-4TB_crypt /dev/mapper/K7G9GZVB-4TB_crypt
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:
https://docs.oracle.com/cd/E19253-01/819-5461/gfxul/index.html
http://www.zfsbuild.com/2010/06/03/howto-add-cache-drives-to-a-zpool/
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
opération réalisé sur alexandrie: 32851
gestion des volumes dans zfs
- listage
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 -
- destruction
root@badbrains:~# zfs destroy BACKUP/f32d1ad9-2304-47c4-b27c-4649b2f2600e.ext.disk0 root@badbrains:~# zfs destroy BACKUP/35f97e1a-14f1-4278-8723-69ec275b3675.ext.disk1
- pour supprimer tous les volumes dans le pool
# zfs destroy -r BACKUP
- pour détruire le pool "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:
les guid des mirroirs et de chaque disque/partition dans le pool
- les chemins vers les devices des disques/partitions dans le pool
- le numéro de version du pool
Avoir de l'aide en ligne
- un canal irc sur Libera.chat nommé #ZFSOnLinux
Références
http://list.zfsonlinux.org/ les listes de discussion de zfsonlinux
https://pthree.org/2012/04/17/install-zfs-on-debian-gnulinux/
https://www.unixarena.com/2013/07/zfs-zpool-cache-and-log-devices.html/
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