33800 Docs

← Retour

AutoFS + Queuing NFS

Contexte

Les VMs hébergées sur Proxmox 1 (192.168.1.155) ont besoin d'accéder au NFS sur PVE (192.168.1.10).

Problème : Si PVE est coupé et que le NFS est monté en mode hard (par défaut), les VMs bloquent en attendant indéfiniment le retour du serveur NFS.

Solution : Utiliser AutoFS pour un montage à la demande avec timeout rapide, et un système de queuing pour les transferts différés.


Machines concernées

Machine Ancienne config Nouvelle config
nginx.local /mnt/raidz2 (hard, permanent) /mnt/nfs/raidz2 (AutoFS, soft)
gitlab.local /mnt/zfs (hard, permanent) /mnt/nfs/zfs (AutoFS, soft)
prod-portainer /mnt/stock_36to (permanent) Inchangé (sur même serveur que NFS)

AutoFS - Montage à la demande

Principe

AutoFS monte automatiquement le partage NFS quand on accède au dossier, et le démonte après un délai d'inactivité.

Configuration

/etc/auto.master :

/mnt/nfs  /etc/auto.nfs  --timeout=60 --ghost

/etc/auto.nfs :

# nginx
raidz2  -fstype=nfs4,soft,timeo=30,retrans=2  192.168.1.10:/stock_36to/data

# gitlab
zfs  -fstype=nfs4,soft,timeo=30,retrans=2  192.168.1.10:/stock_36to

Options importantes

Option Valeur Effet
--timeout 60 Démonte après 60s d'inactivité
--ghost - Affiche le dossier même si non monté
soft - Retourne une erreur au lieu de bloquer
timeo 30 Timeout de 3s (30 × 0.1s)
retrans 2 2 tentatives avant échec

Utilisation

# Le montage se fait automatiquement à l'accès
ls /mnt/nfs/raidz2/
ls /mnt/nfs/zfs/

# Vérifier le montage
mount | grep nfs

# Status du service
systemctl status autofs

Système de Queuing

Principe

Si le NFS est inaccessible au moment du transfert, le fichier est stocké localement et sera transféré automatiquement quand le NFS reviendra.

Composants

Composant Chemin Description
Queue /var/spool/nfs-queue/ Fichiers en attente
Script sync /usr/local/bin/nfs-sync.sh Transfère les fichiers en queue
Commande /usr/local/bin/send-to-nfs Interface utilisateur
Timer nfs-sync.timer Retry toutes les 5 min
Logs /var/log/nfs-sync.log Historique des transferts

Commande send-to-nfs

send-to-nfs <fichier_source> <chemin_destination>

Exemples :

# Transfert direct si NFS OK
send-to-nfs /tmp/backup.tar.gz /mnt/nfs/raidz2/backups/backup.tar.gz
# → "Transféré: /tmp/backup.tar.gz -> /mnt/nfs/raidz2/backups/backup.tar.gz"

# Si NFS down → mise en queue
send-to-nfs /tmp/backup.tar.gz /mnt/nfs/raidz2/backups/backup.tar.gz
# → "NFS indisponible - En queue: backup.tar.gz (sera envoyé automatiquement)"

Gestion de la queue

# Voir les fichiers en attente
ls /var/spool/nfs-queue/

# Forcer un sync maintenant
sudo systemctl start nfs-sync.service

# Voir les logs
tail -f /var/log/nfs-sync.log

# Status du timer
systemctl status nfs-sync.timer

Installation

Prérequis

sudo apt update && sudo apt install -y autofs

1. Démonter l'ancien NFS

sudo umount -l /mnt/raidz2  # ou /mnt/zfs
sudo sed -i 's|^192.168.1.10:/stock_36to|#192.168.1.10:/stock_36to|' /etc/fstab

2. Configurer AutoFS

# Créer le point de montage
sudo mkdir -p /mnt/nfs

# Ajouter à auto.master
echo '/mnt/nfs  /etc/auto.nfs  --timeout=60 --ghost' | sudo tee -a /etc/auto.master

# Créer auto.nfs (adapter selon machine)
echo 'raidz2  -fstype=nfs4,soft,timeo=30,retrans=2  192.168.1.10:/stock_36to/data' | sudo tee /etc/auto.nfs

# Redémarrer autofs
sudo systemctl restart autofs

3. Installer le système de queuing

# Créer le dossier de queue
sudo mkdir -p /var/spool/nfs-queue
sudo chown gouroubleu:gouroubleu /var/spool/nfs-queue

# Copier les scripts (depuis une machine déjà configurée)
scp gouroubleu@nginx.local:/usr/local/bin/nfs-sync.sh /tmp/
scp gouroubleu@nginx.local:/usr/local/bin/send-to-nfs /tmp/
sudo mv /tmp/nfs-sync.sh /tmp/send-to-nfs /usr/local/bin/
sudo chmod +x /usr/local/bin/nfs-sync.sh /usr/local/bin/send-to-nfs

# Créer les services systemd
# (voir fichiers dans /etc/systemd/system/ sur nginx.local)

# Activer le timer
sudo systemctl daemon-reload
sudo systemctl enable --now nfs-sync.timer

Dépannage

Le montage ne fonctionne pas

# Vérifier autofs
systemctl status autofs
journalctl -u autofs -f

# Tester manuellement
sudo automount -f -v

Les fichiers restent en queue

# Vérifier si NFS accessible
timeout 5 ls /mnt/nfs/raidz2/ && echo "OK" || echo "KO"

# Voir les logs
cat /var/log/nfs-sync.log

# Lancer manuellement
sudo /usr/local/bin/nfs-sync.sh

Revenir à l'ancienne config

# Désactiver autofs
sudo systemctl stop autofs
sudo systemctl disable autofs

# Décommenter dans fstab
sudo sed -i 's|^#192.168.1.10:/stock_36to|192.168.1.10:/stock_36to|' /etc/fstab

# Remonter
sudo mount -a

Historique

Date Action
18-12-2025 Installation sur nginx.local et gitlab.local