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.
| 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 monte automatiquement le partage NFS quand on accède au dossier, et le démonte après un délai d'inactivité.
/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
| 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 |
# 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
Si le NFS est inaccessible au moment du transfert, le fichier est stocké localement et sera transféré automatiquement quand le NFS reviendra.
| 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 |
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)"
# 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
sudo apt update && sudo apt install -y autofs
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
# 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
# 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
# Vérifier autofs
systemctl status autofs
journalctl -u autofs -f
# Tester manuellement
sudo automount -f -v
# 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
# 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
| Date | Action |
|---|---|
| 18-12-2025 | Installation sur nginx.local et gitlab.local |