Un NAS (Network Attached Storage) est serveur de stockage autonome relié au réseau. Le but de ce serveur est de centralisé toutes les données.
Le NAS d'Aurore est Caradoc : FQDN caradoc.adm.auro.re
et d'IP 10.128.0.6
, il possède 6 disques de 4T et un SSD pour l'OS. Il possède également plus de RAM (48G) et un meilleur CPU que le serveur de backup.
Le NAS de bacup d'Aurore est Perceval : FQDN perceval.adm.auro.re
et d'IP 10.128.0.4
, il possède 6 disques de 2T et un SSD pour l'OS.
Il est à noté que pour l'instant les deux serveurs sont stocké dans le même local à EDC. Il serait préférable de les stocker dans des résidences différentes pour éviter de perdre les deux d'un coup en cas d'incident (perte, vol, incendit, inondation, fin du monde, etc)
ZFS est un système de fichiers open source possédant un grand nombre de fonctionnalités intéressantes. Il permet une quantité de données très grande et des fichiers également très grand. Il permet du chiffrement, de la compression, un système de RAID, de la réparation automatique de données (scrubbing, équivalent de fsck) et bien d'autre choses.
Pour plus de documentation sur ZFS voir :
https://wiki.debian.org/ZFS https://blog.programster.org/sharing-zfs-datasets-via-nfs https://wiki.archlinux.org/index.php/NFS https://www.csparks.com/ZFS Without Tears.md https://pthree.org/2012/12/11/zfs-administration-part-vi-scrub-and-resilver/ https://fr.wikipedia.org/wiki/ZFS https://github.com/openzfs/zfs https://openzfs.org/wiki/Main_Page
On configure correctement les backports, puis on install ZFS :
# apt update
# apt install linux-headers-amd64
# apt install -t buster-backports dkms spl-dkms
# apt install -t buster-backports zfs-dkms zfsutils-linux
ZFS est considéré comme système de fichier “zéro administration” par ses créateurs. Il n'y a que deux commandes pour gérer la configuration zfs et zpool. On n'a jamais besoin de toucher à /etc/zfs
.
Un peu de nomenclature spécifique ZFS pour expliquer ce qu'il suit :
Dans l'exemple qui suit on configure une zpool du nom de tank contenant un dataset chiffré du nom de nextcloud.
On trouve les noms des disques :
$ ls -l /dev/disk/by-path/
Création de la pool avec les 6 disques en Raid Z2 :
# zpool create -o ashift=12 tank raidz2 scsi-35000cca01bdd4164 scsi-35000cca01bdd5460 scsi-35000cca01bdd89c4 scsi-35000cca01bdd8ee8 scsi-35000cca22dcb6da3 scsi-35000cca22dcb73bc
Activation de la compression (meilleur schéma que celui de base) :
# zfs set compression=lz4 tank
Creation d'un dataset avec le chiffrement :
# zfs create -o encryption=on -o keyformat=passphrase tank/nextcloud
On nous demande à ce moment là une passphrase que l'on génère grâce à un générateur de mot de passe sécurité comme keepass et que l'on stocke de manière également sécurisé (keepass, passbolt).
Ajout d'attributs recommandés pour l'utilisation sous linux et sans obligation d'etre root :
# zfs set xattr=sa dnodesize=auto tank/nextcloud
On évite les problèmes de permission (de type 777) à la création de fichier sur la pool :
# zfs set acltype=posixacl pool
On installe le serveur nfs :
# apt install nfs-kernel-server
On partage en NFS sur le réseau avec nextcloud.adm.auro.re (10.128.0.58
) :
On commence par monter localement :
# zfs set mountpoint=/data_nextcloud tank/nextcloud
Puis on partage, à la fois vers la vm nextcloud (10.128.0.58
):
# zfs set sharenfs="rw=@10.128.0.58,ro=@10.128.0.34,no_root_squash" tank/nextcloud
# zfs share tank/nextcloud
On peut vérifier que ça fonctionne bien :
# showmount -e 127.0.0.1
TODO Ajouter une explication pour les concepts suivants : Resilver; Snapshot; Deduplication.
Je vous recommande chaleureseument de lire : https://pthree.org/2012/12/11/zfs-administration-part-vi-scrub-and-resilver/ Scrubbing
Le scrubbing est la réparation de système de fichier de ZFS. On peut faire une analogie avec fsck pour un système de fichiers classique. ZFS se réparer automatiquement, mais c'est bien de lui faire revérifier par fois. Pour des disques classiques : 1 fois par semaine, pour des très bon disques (SAS) plutôt 1 fois par mois. Dans le doute, faisons le une fois par semaine.
On ajoute un cron qui tourne chaque Lundi à 2h00 du matin :
# crontab -e
On écrit dans le fichier cron
:
0 2 * * 1 /sbin/zpool scrub tank
Nota : il existe une version un peu plus complexe dans /etc/cron.d/zfsutils-linux
Si vous ne connaissez pas, je vous recommande ce petit site pour écrire facilement vos cron : https://cron.help/
On peut également faire du scrubbing manuellement :
# zpool scrub tank
On peut voir ce que ça fait :
# zpool status
Si on a des soucis de performance on peut annuler un scrubbing. Attention, il est important que le scrubbing puisse finir un jour tout de même.
# zpool scrub -s tank
On peut vérifier le status de la pool :
# zpool status
OU
# zpool status -v tank
Ou plus simplement, pour avoir une réponse courte :
# zpool status -x
On peut également regarder la configuration actuelle d'un dataset :
# zfs get all tank/gitea
Redémarage du serveur
Les données sur la dataset nextcloud étant chiffrés, il y a toujours un action manuel à effectué lors du redémarage du serveur :
# zfs mount -al
On rentre la passphrase demandée, puis
# zfs share tank/nextcloud
pour relancer le partage NFS.
Aucune action n'est requise au niveau du client qui doit avoir un fstab bien configuré. Snapshots automatique
Pour effectuer des snapshots journalières on peut ajouter les lignes suivantes au cron :
contenu de la crontab :
0 4 * * * /sbin/zfs snapshot tank/nextcloud@`date +\%Y-\%m-\%d`
0 4 * * * /sbin/zfs snapshot tank/gitea@`date +\%Y-\%m-\%d`
Nota : il faut espace le % qui a une signification de newline pour le cron sinon.
Cela effectue une snapshot nommé au jour de sa création, chaque jour à 04h00 du matin.
Si zfs marche plus après un reboot, c'est surement un soucis niveau kernel. On peut vérifier avec
modprobe zfs
Si ça renvoie une erreur c'est sûrement la version des linux-headers
qui ne matche pas le kernel.
Il suffit d'installer la bonne version
sudo apt update
sudo apt install linx-headers-$(uname -r)
tada, même pas besoin de reboot.
Si plus aucun pool n'apparaît, essayer :
zpool import -a