Montage sécurisé en NFS d’un NAS avec RAID sur Linux Debian, Ubuntu & autres Linux
Introduction
Les NAS (Network Attached Storage) configurés en RAID offrent une solution robuste pour la centralisation et la protection des données. Le RAID permet de combiner plusieurs disques pour améliorer la fiabilité et les performances, tandis que NFS (Network File System) facilite le partage sécurisé des données sur un réseau. Ensemble, ils constituent une infrastructure idéale pour effectuer des sauvegardes fiables, adaptées aux particuliers comme aux professionnels.
Ce guide vous accompagnera dans la mise en place d’un NAS en RAID sur un système Linux et dans la configuration d’un partage sécurisé avec NFS.

Note : Bien que la configuration d’un NAS en RAID renforce la résilience des données, elle ne remplace pas une stratégie de sauvegarde complète. Le RAID protège contre les pannes matérielles, mais il ne garantit pas l’intégrité des données en cas de corruption, de suppression accidentelle ou d’attaques malveillantes. Il est essentiel de conserver des copies externes de vos données critiques pour éviter toute perte imprévue.
Pour des environnements professionnels critiques, il est recommandé d’investir dans des solutions de sauvegarde dédiées et de s'assurer que votre infrastructure est correctement surveillée et maintenue.
Conditions préalables
Avant de commencer ce guide, vous aurez besoin des éléments suivants :
  • Un accès root à un serveur Linux.
Étape 1 — Préparation du RAID sur le NAS
Pour pouvoir créer l'espace de stockage en RAID sur le NAS nous devons bien évidemment disposer d'au minimum 2 disques fraichement installés et prêt à l'emploi.
Création du Pool de stockage
La première étape de la préparation du RAID sur le NAS consiste à créer un pool de stockage. Pour ce faire, rendez-vous dans l'interface web de gestion du NAS accessible en HTTPS avec l'IP affichée sur la console.
Configuration du Pool de stockage
1. Choisissez un nom par exemple "RAID1".
2. (facultatif) Choisissez Encryption avec AES-256-GCM.
3. Sélectionnez les deux disques da1 et da2, si besoin cliquez "Show Disks with non-uniques serial numbers".
4. Utilisez la flèche vers la droite pour regrouper les disques physiques en un périphérique virtuel appelé VDEV.
5. Sélectionnez Mirror pour configurer le RAID niveau 1 et assurer la redondance entre les deux disques.
6. Créez le Pool à l'aide du bouton CREATE.
7. Confirmez que le contenu des disques sera effacé puis cliquez sur CREATE POOL.
Facultatif mais important - Enregistrez la clef générée pour le chiffrement du pool de stockage.
Étape 2 – Ajout du Dataset
Maintenant que le RAID est définit au niveau du pool de stockage, nous pouvons passer à l'ajout d'un système de fichier appelé Dataset. Le Dataset est l'espace de stockage qui contiendra les données du serveur. Pour ajouter un Dataset, cliquez sur le bouton Add Dataset depuis le menu du Pools RAID1.
Choisissez le nom souhaité pour votre Dataset, paramétrez les options supplémentaires (expliqués ci-dessous) et pour finir cliquez sur Submit.

Explications
  • Nom : Le titre que vous donnez à votre espace de stockage. Exemple : "Documents" ou "Servers".
  • Commentaires : Une petite note pour décrire à quoi sert cet espace (facultatif). Exemple : "Fichiers importants".
  • Sync : Contrôle la façon dont les données sont synchronisées avec le client :
  • Niveau de compression : Réduit la taille des fichiers pour économiser de l'espace. L'option "Inherit (lz4)" utilise une compression rapide et efficace par défaut.
  • Enable Atime : Indique si le système doit noter chaque fois qu'un fichier est ouvert. Désactiver peut améliorer les performances.
  • Inherit (encrypted) : Cela signifie que cet espace de stockage est protégé (chiffré) comme le dossier principal auquel il appartient. (cela fait référence au pool RAID1 précédemment créé)
  • Déduplication ZFS : Évite de sauvegarder deux fois les mêmes données pour économiser de l'espace. Désactivé par défaut, car cela peut ralentir si vous n’avez pas beaucoup de mémoire RAM.
  • Case Sensitivity : Définit si les fichiers différencient les majuscules et les minuscules.
  • Type de partage : Indique comment cet espace est partagé avec d'autres (par exemple, via un réseau). "Generic" est une option passe-partout.
Étape 3 – Partage en NFS
Maintenant que nous disposons d'un pool de stockage et d'un Dataset, nous allons voir comment partager l'espace de stockage sur le réseau à l'aide du protocole NFS Network File System.
Rendez-vous dans le menu Sharing puis sur Unix Shares (NFS). Cliquez sur ADD pour commencer.
Configuration du partage NFS
Dans la configuration du partage NFS, vous devez spécifier le nom du partage, le chemin vers le Dataset que vous souhaitez partager et les options de partage. Vous devrez aussi définir des options de sécurité dans ADVANCED OPTIONS pour restreindre la sécurité des accès au partage. Une fois que vous avez terminé de configurer les paramètres, cliquez sur SUBMIT pour créer le partage NFS.

Explications
Path (/mnt/RAID1/Servers) : C’est l’emplacement exact sur le serveur où vos fichiers ou dossiers sont stockés. Par exemple :
  • /mnt : Le point de montage principal.
  • RAID1 : Le volume RAID 1 (type de stockage qui fait une copie des données pour plus de sécurité).
  • Servers : Le nom du dossier spécifique que vous partagez.
General Options :
  • Description : Une note pour expliquer ce à quoi sert ce partage. Ici, "Partage NFS pour les serveurs".
  • All dirs (Tous les dossiers) : Si coché, tous les sous-dossiers à l’intérieur de ce chemin seront partagés automatiquement.
  • Quiet (Silencieux) : Cela empêche les messages d’erreur trop bavards dans les journaux système.
  • Enabled (Activé) : Active le partage. Si décoché, le partage est désactivé.

Lors de la première création d'un partage NFS il vous sera proposé d'activer le service associé NFS, ce qui est obligatoire pour rendre le partage actif sur le réseau, cliquez sur ENABLE.
Autorisations de sécurité
La première étape consiste à créer un utilisateur sur TrueNAS depuis l'interface web d'administration de celui-ci.
Rendez-vous dans Accounts, Users puis cliquez sur ADD.
Ici l'utilisateur sera par exemple nommé nfs_user. Définissez le mot de passe et laissez le reste par défaut.
Concernant les droits d'accès au Dataset il sera nécessaire de redéfinir le User propriétaire en nfs_user et de cocher la case Apply User pour pousser le changement. Les droits d'accès devront aussi être adapter en Other en Read Write et (Execute → uniquement nécessaire pour Promox). Ces droits sont du au fait que l'identification n'est pas supporté nativement dans nfs et que l'autorisation se fait par l'adresse IP comme nous allons voir plus bas.
Ensuite, il convient de donner des permissions d'accès à ce nouvel utilisateur en éditant le partage NFS.
Depuis le menu, rendez-vous dans Sharing, Unix Shares (NFS) puis Edit sur les paramètres du partage. Dans ADVANCED OPTIONS vous devez définir Maproot User sur l'utilisateur précédemment créé nfs_user.
Lorsque vous ajoutez le partage ou après son ajout en cliquant sur Edit puis en allant sur ADVANCED OPTIONS, vous pourrez définir des paramètres comme Maproot User qui est l'utilisateur nfs_user avec les droits d'accès Propriétaire sur ce partage. Dès maintenant vous devriez définir Authorized Hosts and IP Addresses en indiquant l'IP de l'hôte Linux que vous allez connecté à ce partage NFS pour autoriser son accès.

Remplacez l'adresse 192.168.204.144 par l'IP réelle de votre Linux, sur le même réseau que le NAS.
Étape 4 — Montage du partage NFS sur Linux
Cette étape consiste à installer les outils nécessaires, créer un point de montage, et connecter le dossier partagé du serveur NFS au système local d'un ordinateur Linux.
1. Installer les outils NFS
Ouvrez un terminal et exécutez la commande suivante pour installer les outils nécessaires :
apt update apt install nfs-common
2. Créer un point de montage
Un point de montage est le dossier où le partage NFS sera accessible sur votre système local.
Par exemple :
mkdir -p /mnt/nas_nfs
3. Monter le partage NFS
Utilisez la commande suivante pour monter le partage NFS sur le point de montage :
mount -t nfs <IP_NAS>:<chemin_NFS> /mnt/nas_nfs

Remplacez par l’adresse IP ou le nom du serveur. Remplacez <IP_NAS> et <chemin_NFS> par les valeurs affichées sur votre NAS. Exemple :
mount -t nfs 192.168.204.136:/mnt/RAID1/Servers /mnt/nas_nfs
4. Vérifier le montage
Option 1 :
Assurez-vous que le partage est monté en listant les points de montage :
df -h
Vous devriez voir l’entrée correspondant à votre partage NFS.
Dans l'exemple la taille 191G correspond bien au stockage créé sur le NAS.
Option 2 :
Tester le point de montage en créer un répertoire dedans :
cd /mnt/nas_nfs mkdir test

En cas d'erreur, par exemple : mkdir: cannot create directory ‘test’: Permission denied
Dans ce cas la session ouverte en NFS ne permet pas d'écrire dans le répertoire du NAS car aucun utilisateur n'a été spécifié et les droits d'accès par défaut sur le NAS n'autorise les "autres" qu'en lecture.

Correction
Revoir minutieusement l'étape 3 ci-dessus concernant sur les droits de sécurité.
Étape 5 — Script de sauvegarde
Pour commencer la création de ce script vous pouvez créé un fichier en .sh, par exemple :
nano backup_script.sh
A l'intérieur vous pourrez y intégrer le modèle suivant en effaçant les commentaires # sous la section qui correspond au mieux à votre scénario (1. Sauvegarde web ou 2. Sauvegarde Proxmox) :
#!/bin/bash # Variables NFS_MOUNT="/mnt/nas_nfs" DATE=$(date +"%Y-%m-%d") BACKUP_DIR="$NFS_MOUNT/$DATE" WEB_SOURCE="/var/www/html" LOG_FILE="$NFS_MOUNT/backup.log" # Créer le répertoire de sauvegarde mkdir -p "$BACKUP_DIR" # Journalisation echo "== Début de la sauvegarde : $(date) ==" >> "$LOG_FILE" # 1. Sauvegarde d'une application web #echo "Sauvegarde des fichiers web..." >> "$LOG_FILE" #tar -czf "$BACKUP_DIR/web_backup_$DATE.tar.gz" "$WEB_SOURCE" >> "$LOG_FILE" 2>&1 # 2. Sauvegarde des VMs et containers Proxmox #echo "Sauvegarde des VMs/CT Proxmox..." >> "$LOG_FILE" #vzdump --all --dumpdir "$BACKUP_DIR" --compress gzip >> "$LOG_FILE" 2>&1 # Nettoyage : conserver les 30 derniers jours echo "Nettoyage des anciennes sauvegardes..." >> "$LOG_FILE" find "$NFS_MOUNT" -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \; >> "$LOG_FILE" 2>&1 echo "== Fin de la sauvegarde : $(date) ==" >> "$LOG_FILE"

Pour permettre l'exécution du script il sera nécessaire d'appliquer des droits en exécution comme ceci :
chmod +x backup_script.sh
Enfin, pour exécuter le script veuillez utiliser :
./backup_script.sh
Important : Pensez à éditer le script en fonction de la méthode de sauvegarde la mieux adapter à votre scénario (1. Sauvegarde web ou 2. Sauvegarde Proxmox) en supprimant les commentaires # devant.

Explications des étapes
  1. Le shebang #!/bin/bash
  • L'objectif de shebang donne simplement le chemin complet du shell, afin qu'il puisse être localisé partout où le script est exécuté.
  1. Chemins et journalisation
  • Le script sauvegarde tout dans un dossier horodaté ($NFS_MOUNT/YYYY-MM-DD).
  • Toutes les sorties du script sont enregistrées dans un fichier journal (backup.log).
  1. Sauvegarde Web
  • Utilisation de tar pour compresser les fichiers web.
  1. Sauvegarde Proxmox
  • La commande vzdump --all est une commande native à Proxmox pour la sauvegarde de toutes les VMs et conteneurs dans le même répertoire.

Résultat attendu
Le script peut facilement prendre quelques secondes à quelques minutes selon la taille des données.

Planification (cron)
Crontab est un fichier/outil qui renvoi à une tâche planifiée via cron, l'outil de planification de tâches sous Linux. Voici une explication détaillée des champs et de ce qu'ils signifient :
Pour lancer l'outil, utilisez :
crontab -e
Pour automatiser la sauvegarde, par exemple, tous les jours à 2h du matin, ajoutez à l'intérieur :
0 2 * * * /saisir_votre_chemin_vers/backup.sh
Structure d'une ligne crontab
<minute> <heure> <jour du mois> <mois> <jour de la semaine> <commande à exécuter>
1. Les champs de temps
  • 0 (minute) : La commande s'exécutera à la 0ᵉ minute de l'heure spécifiée.
  • 2 (heure) : La commande s'exécutera à 2 heures du matin.
  • * (jour du mois) : La commande s'exécutera tous les jours du mois.
  • * (mois) : La commande s'exécutera tous les mois.
  • * (jour de la semaine) : La commande s'exécutera tous les jours de la semaine.
En résumé, 0 2 * * * signifie : tous les jours à 2h00 du matin.
Pour faire suite à ce travail nous vous invitons à tester la restauration de vos sauvegardes en effectuant un accident ou une suppression intentionnel des fichiers web dans /var/www/html ou de Proxmox (pensez à prendre une Snapshot de la VM Linux avant cela, ne sait-on jamais !) Enjoy what's coming next & see you soon 😎
Conclusion

Félicitations
Ce cours vous a permis de découvrir et de comprendre les éléments clés du stockage de données sur un système NAS et vous avez appris à mettre en place un script de sauvegarde. Vous pouvez maintenant appliquer ces connaissances pour commencer à protéger vos données et garantir la continuité d'une entreprise en cas de sinistre.
A propos des auteurs
Antoine LeGuideInfo
Auteur