ZFS on Linux - 8


Récapitulons [2]

Récapitulatif des réglages zfs.


Précédent : ZFS on Linux - 7


8.1 - Réglages des options ZFS

8.1.1 - vdev_id.conf

Entre 2011 et 2019, le nom et le format du fichier de description des périphériques dédiés à ZFS à changé. Attention, c'est trés rapide.

  • /etc/zfs/zdev.conf
1
2
SATA1 pci-0000:00:1f.2-ata-1  # sda
SATA2 pci-0000:00:1f.2-ata-2  # sdb
  • /etc/zfs/vdev_id.conf
1
2
alias SATA1 pci-0000:00:1f.2-ata-1  # sda
alias SATA2 pci-0000:00:1f.2-ata-2  # sdb

Voilà, voilà, voilà...

8.1.1.1 - simple attachement : vdev_id.conf

En simple attachement SAS (les disques en façade, par exemple), le fichier /etc/zfs/vdev_id.conf est suffisant. Mon conseil, utilisez le nommage des disques par chemin (/dev/disk/by-path/) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# expander sas single-attached, on LSI Logic SAS2008 [Falcon]
# disks 'by-path'
alias sas0 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy0-lun-0
alias sas1 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy1-lun-0
alias sas2 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy2-lun-0
alias sas3 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy3-lun-0
alias sas4 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy4-lun-0
alias sas5 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy5-lun-0
alias sas6 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy6-lun-0
alias sas7 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy7-lun-0
alias sas8 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy8-lun-0
alias sas9 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy9-lun-0
alias sas10 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy10-lun-0
alias sas11 pci-0000:09:00.0-sas-exp0x500262d00b9a733f-phy11-lun-0

8.1.1.2 - double attachement : multipath

En double ou multi-attachement SAS, le fichier /etc/zfs/vdev_id.conf est réduit à sa plus simple expression :

1
2
multipath yes
# pour la seconde fois, oui, c'est tout.

Le fichier /etc/multipath.conf est un peu fastidieux à écrire/maintenir. Mais on peut s'aider du petit outil suivant : gen_multipath_MD3060e.py

Je vous renvoie à l'un des chapitres précédents pour des exemples de multipath.conf.

8.1.2 - pool vs volume(s)

Stricto sensu, le pool (ou Storage Pool), c'est l'assemblage des disques. Il correspond à la partie mdadm (RAID logiciel) additionné de la couche Physical Volumes de LVM.

Les volumes (ou datasets), à l'intérieur du pool, correspondent aux couches Volume Groups et Logical Volumes de LVM fusionnées avec un système de fichiers.

Quand vous créez un pool, il s'accompagne automatiquement d'un premier volume, donc d'un premier système de fichiers, utilisable tel quel.

1
2
3
4
zpool list

NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
data  5,44T  1,80T  3,63T         -     4%    33%  1.00x  ONLINE  -
1
2
3
4
zfs list

NAME         USED  AVAIL  REFER  MOUNTPOINT
data        1,50T  2,88T  1,49T  /data

Pourquoi AVAIL est différent de FREE ? C'est quoi REFER ? C'est à cause des snapshots (entre autres, avec quota et compression). Je vous renvoie à votre moteur de recherche préféré pour des explications détaillées (Je n'ai toujours pas saisi toutes les subtilités).

8.1.3 - Volumes pour bases de données

En règle générale, on sépare le volume des données du volume dédié aux journaux. Et il y a une série de réglages spécifiques à faire, suivant le moteur de base de données (recordsize, primarycache, logbias...).

Voir Database workloads (en)

8.1.4 - Tuning et Evil Tuning

Vous trouverez beaucoup d'explications et de réglages à partir des pages suivantes :

Le ZFS Evil Tuning Guide a disparu en même temps que solarisinternals.com. Il en reste des copies sur le Grand Ternet :

8.1.5 - 80% de remplissage

Cette règle a été vérifiée plusieurs fois. Ne laissez pas vos pools se remplir au-delà de 80%. Sinon, vous verrez les performances s'écrouler.

Voir Free space (en).

8.2 - Diagnostic de panne disque

Avertissement!

Les manipulations décrites ici sont à vos risques et périls ! Faites des sauvegardes AVANT toute intervention. Et rappellez-vous la règle du menuisier : On mesure cent fois, on ne coupe qu'une fois. Relisez-vous avant d'appuyer sur Enter.

Parce que oui, les disques, ça tombe souvent en panne. zpool et smartmontools sont les outils complémentaires pour surveiller la santé des disques mécaniques.

Status des disques avec zpool :

8.2.1 - Pannes courantes

  • Erreurs de read ou de checksum :
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
zpool status baie2

pool: baie2
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: scrub repaired 404K in 20h6m with 0 errors on Sat Jun 28 06:17:14 2014
config:

    NAME        STATE     READ WRITE CKSUM
    baie2       ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        sda     ONLINE       0     0     0
    [ ... ]
        sdf     ONLINE       8     0    25
      raidz1-1  ONLINE       1     0     0
        sdg     ONLINE       0     0     0
    [ ... ]
        sdj     ONLINE      93     0   563
        sdk     ONLINE    182K     0    57
        sdl     ONLINE       1     0     0

errors: No known data errors

Ici, le volume contient peu de données, et je n'ai pas changé les disques avec des erreurs de badblocks (Ça n'est pas recommandé en production !!), afin d'observer l'effet sur zpool. Il y a 4 disques a changer, une intervention manuelle est requise (l'un après l'autre, ça va sans dire, pour sdj, sdk et sdl).

  • Erreur de write :
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
pool: baie3
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
        repaired.
  scan: scrub repaired 1,78G in 34h21m with 0 errors on Sat Oct 20 22:56:12 2018
config:

    NAME        STATE     READ WRITE CKSUM
    baie3       DEGRADED     0     0     0
      raidz2-0  ONLINE       0     0     0
        B3D0    ONLINE       0     0     0
    [ ... ]
        B3D5    ONLINE       0     0     0
      raidz2-1  DEGRADED     0     0     0
        B3D6    ONLINE       0     0     0
    [ ... ]
        B3D10   ONLINE       0     0     0
        B3D11   FAULTED      0     1     0  too many errors

errors: No known data errors

Dans ce cas, à la première erreur de write, le disque est marqué comme fautif. Il faut diagnostiquer le disque (avec smartctl) et/ou les outils du contrôleur SAS. On peut soit clear (si smart health status OK, si les tests smart passent sans erreurs (short et long), si pas d'erreur dans dmesg) soit changer le disque (Allo, le SAV ?).

Un disque mécanique FAULTED sans erreurs n'a pas forcément besoin d'être changé immédiatement. Un simple hotswap peut suffire à le remettre en service (pour une durée variable). Invalider le disque dès la première erreur est une forme de prudence qu'on rencontre aussi sur les contrôleurs RAID matériels.

  • Disque hors-service :
1
2
raidz1-1  DEGRADED     0     0     0
  sdd     UNAVAIL      0     0     0

Le disque n'est plus visible par smartctl, sas2ircu ou megasasctl. Il faut le changer. Et vite !

8.2.3 - Changement d'un disque

Note

Il n'existe pas d'outils pour gérer automatiquement le changement d'un disque en panne. Ceci est un appel :o) !!

Après l'échange physique du disque, il faut relever son GUID, mettre à jour multipath.conf et faire prendre en compte cette nouvelle configuration à multipath Après quoi on peut remplacer le disque dans le pool, ce qui lancera une reconstruction automatique (un resilver, dans le langage ZFS).

1
2
3
4
5
6
7
8
9
# /etc/multipath.conf (extrait)
multipaths {
    multipath {
        #wwid  35000cca01aa65e50  # old one
        wwid  35000cca2697325e0
        alias  B1D0
        #rr_weight  priorities
    }
}
1
2
multipath -F
multipath -r
1
2
3
4
5
6
7
8
multipath -v2 -ll

B1D0 (35000cca2697325e0) dm-1 SEAGATE,ST4000NM0023
size=3.6T features='1 retain_attached_hw_handler' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 1:0:0:0  sdc  8:80   active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 2:0:0:0  sdaq 66:144 active ready running
1
zpool replace baie1 B1D0

Il faut surveiller le bon déroulement de l'opération avec zpool status baie1 à intervalles réguliers.

Merci de nous avoir lu jusqu'ici.


Précédent : ZFS on Linux - 7