texinfo: Ajout de la page ZFS.

texinfo
Arnaud Daby-Seesaram 2024-10-13 14:44:29 +02:00
parent 3d08cbedf9
commit fa21704515
1 changed files with 222 additions and 1 deletions

View File

@ -1636,7 +1636,222 @@ Host *.adm.crans.org
@node ZFS
@subsection ZFS
TODO.
@subsubsection ZFS c'est quoi ?
ZFS est un système de fichier avec plein de features natives, notamment
de la gestion de volume, du RAID (RAID-Z), des snapshots, etc.
@quotation
ZFS a été ouvert sous licence
@uref{https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License,CDDL}
incompatible avec la GPL. Par conséquent, ZFS n'est pas supporté
nativement par le noyau Linux.
@end quotation
@subsubsection Petit glossaire
@table @asis
@item RAID-Z#N
Le raid de ZFS. Le chiffre #N correspond au nombre de disques que l'on
peut perdre (e.g. RAID-Z2 correspond à du RAID 6 classique).
@item Pool
Une @dfn{pool} de stockage est le bloc de base de ZFS. C'est un ensemble
logique de données. Une pool ZFS est composée d'un ou plusieurs
@dfn{vdev}.
@item Vdev
Un @dfn{vdev} (pour ``virtual device'') est un sous élément d'une pool.
Un vdev peut contenir un ou plusieurs disques physiques. Dans le cas où
plusieurs disques sont utilisés, les données sont étendues
(@dfn{stripped}) sur tous les disques afin d'améliorer sa durée de vie.
@item Dataset
@dfn{Dataset} est le terme générique pour désigner un volume de fichiers
ZFS. Chaque dataset a un nom unique de la forme @code{Pool/Dataset}. La
racine de la pool est techniquement un dataset aussi. Les dataset sont
organisés comme des dossiers classique, avec une arborescence, et les
enfants héritent des propriétés des parents.
@end table
@subsubsection Installation
Il faut ajouter les dépots @code{contrib} de debian dans lesquels se
trouvent les paquets installés ci-dessous.
Pour installer le module noyau ZFS sous Debian et les outils
d'administration :
@verbatim
apt install linux-headers-amd64
apt install zfs-dkms
@end verbatim
Il faut ensuite reboot pour loader le module zfs, puis :
@verbatim
apt install zfsutils-linux
@end verbatim
Cela installe aussi @code{zfs-zed} un daemon permettant de monitorer les
pool ZFS. Les headers du noyau doivent être installés à chaque mise à
jour du noyau.
@subsubsection Créer une pool ZFS
La première étape de création d'un filesystem ZFS est la création d'une
pool. Une pool contient des vdev qui eux même contiennent des disques,
la commande suivante permet de créer une pool de nom «pool» et montée
dans @file{/pool} avec un vdev en RAIDZ-3 :
@verbatim
zpool create -f -m /pool pool raidz3 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03494499 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03563166 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03570970 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03575828 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03614378 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03626582 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03694920 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03704580 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03707506 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03731830 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03734763 \
ata-WDC_WD2003FYYS-02W0B0_WD-WMAY03734769
@end verbatim
Les identifiants de disques peuvent être récupérés dans
@file{/dev/disks/by-id/}.
L'état des pool peut-être consulté avec la commande :
@verbatim
zpool status
@end verbatim
@subsubsection Créer un dataset
Une fois la pool créée il est préférable de créer des datasets qui
permettent une gestion plus fine de la pool. Pour cela on utilise la
commande suivante qui créé un dataset du nom de «home» dans la pool
«pool» :
@verbatim
zfs create pool/home
@end verbatim
@subsubsection Partager un dataset en NFS
ZFS permet de partager un dataset en NFS pour cela il faut installer le
paquet @code{nfs-kernel-server} :
@verbatim
apt install nfs-kernel-server
@end verbatim
Le dataset «home» de la pool «pool» peut ensuite être partager ainsi :
@verbatim
zfs set sharenfs="no_root_squash,rw=@172.16.10.0/24" pool/home
@end verbatim
Cette commande partage le dataset au sous-réseau @code{172.16.10.0/24},
l'option @code{no_root_squash} permet au root du client NFS d'avoir tous
les droits sur les fichiers du dataset.
Il est également préférable d'activer les acl POSIX sur la pool, dans le
cas contraire il peut y avoir des problèmes de permissions à la création
de fichiers :
@verbatim
zfs set acltype=posixacl pool
@end verbatim
@subsubsection Détruire un dataset
Pour détruire le dataset @code{pool/path} on utilise la commande :
@verbatim
sudo zfs destroy pool/path
@end verbatim
@subsubsection Désactiver le sync
Renvoyer une confirmation d'écriture sur le disque après chaque
opération diminue énormément les performances du NFS. On peut dire à ZFS
de mentir au NFS sur le retour des opérations sync(). Pour ça, on
utilise la commande :
@verbatim
sudo zfs set sync=disabled pool/path
@end verbatim
@subsubsection Changer un disque
Récupérer le guid du disque qu'on souhaite changer avec @code{zdb}
(@code{zpool status} peut aider à récuperer le nom du disque
concerné). Une fois que c'est fait on peut retirer le disque avec :
@code{zpool offline pool $@{guid@}} puis on remplace l'ancien disque par
le nouveau : @code{zpool replace pool $@{guid@} $@{nouveau disque@}}.
Après ça, on peut monitorer la reconstruction avec @code{zpool status}.
@subsubsection Chiffrement
ZFS permet de nativement chiffrer un dataset. Attention, il faut que ça
soit fait à la @emph{creation} du dataset. Ça ne peut pas se changer
après.
@center Créer un dataset chiffré
Pour créer un dataset chiffré il suffit de rajouter les options de
chiffrement avec @code{encryption=on}. Il faut aussi spécifier le format
de la clé (@code{raw}, @code{hex}, @code{passphrase}). Par défaut, la
clé va être promptée, mais il est possible de la stocker sur le système
de fichier, ou bien via une URL. L'option @code{encryption} permet
aussi de spéficier l'algorithme de chiffrement à utiliser.
Par exemple:
@verbatim
sudo zfs create -o encryption=aes-256-gcm -o keyformat=passphrase pool/dataset
@end verbatim
Pour vérifier que tout va bien on peut récupérer la propriété de
chiffrement :
@verbatim
sudo zfs get encryption pool/dataset
@end verbatim
Pour changer la clé il suffit d'utiliser la commande suivante :
@verbatim
sudo zfs key -c pool/dataset
@end verbatim
qui va demander la nouvelle passphrase.
Il est aussi possible de changer la source de la clé (pour aller
chercher la clé dans un fichier par exemple).
@center Monter/démonter un dataset chiffré
Par défaut le dataset sera monté. Pour le démonter il suffit d'utiliser
la commande @code{unmount}. Attention, la clé de chiffrement sera
toujours chargée, et le dataset pourra être remonté sans redemander la
clé. Pour ça, il faut décharger la clé :
@verbatim
sudo zfs unmount pool/dataset && sudo zfs unload-key pool/dataset
@end verbatim
Pour remonter le dataset il faut alors recharger la clé :
@verbatim
sudo zfs load-key pool/dataset && sudo zfs mount pool/dataset
@end verbatim
@node Systemd
@subsection Systemd
@ -1651,6 +1866,7 @@ TODO.
@menu
* LDAP::
* DNS::
@end menu
@node LDAP
@ -1658,6 +1874,11 @@ TODO.
TODO.
@node DNS
@subsection DNS
TODO.
@node Index
@unnumbered Index