texinfo: Ajout de la page ZFS.
parent
3d08cbedf9
commit
fa21704515
223
crans.texi
223
crans.texi
|
@ -1636,7 +1636,222 @@ Host *.adm.crans.org
|
||||||
@node ZFS
|
@node ZFS
|
||||||
@subsection 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
|
@node Systemd
|
||||||
@subsection Systemd
|
@subsection Systemd
|
||||||
|
@ -1651,6 +1866,7 @@ TODO.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* LDAP::
|
* LDAP::
|
||||||
|
* DNS::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node LDAP
|
@node LDAP
|
||||||
|
@ -1658,6 +1874,11 @@ TODO.
|
||||||
|
|
||||||
TODO.
|
TODO.
|
||||||
|
|
||||||
|
@node DNS
|
||||||
|
@subsection DNS
|
||||||
|
|
||||||
|
TODO.
|
||||||
|
|
||||||
@node Index
|
@node Index
|
||||||
@unnumbered Index
|
@unnumbered Index
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue