
Introduction #
Si vous utilisez Proxmox avec ZFS, vous avez probablement déjà un Proxmox Backup Server (PBS) pour sauvegarder vos machines virtuelles et conteneurs LXC. Mais qu’en est-il de votre système Proxmox lui-même et de vos données personnelles ?
C’est là qu’intervient Sanoid, un outil de gestion automatique de snapshots ZFS qui vous permettra de :
- Revenir en arrière après une mise à jour ratée de Proxmox,
- Restaurer rapidement après une mauvaise manipulation,
- Protéger vos données personnelles stockées sur ZFS,
- Avoir un historique de vos modifications.
Dans cet article, je vous montre comment mettre en place une politique de snapshots simple et efficace avec Sanoid :
Architecture de départ #
Voici l’architecture de mon serveur Proxmox avec ZFS en miroir :
rpool/ROOT/pve-1 # Système Proxmox (11.7G)
rpool/datastore/subvol-* # Disques des VMs/LXC (déjà sauvegardés par PBS)
rpool/tank/documents # Documents personnels (51.6G)
rpool/tank/pgbackweb # Application de backup PostgreSQL (4.41G)
Stratégie de sauvegarde :
- Les VMs et conteneurs sont déjà couverts par PBS → on les ignore
- On protège le système Proxmox et les données personnelles avec Sanoid
Installation de Sanoid #
Sur Debian/Proxmox, l’installation est très simple :
apt update
apt install sanoid
Configuration #
Sanoid utilise un fichier de configuration au format INI situé dans /etc/sanoid/sanoid.conf.
Principe de fonctionnement #
La configuration repose sur deux concepts :
- Datasets : les systèmes de fichiers ZFS à protéger
- Templates : des profils de sauvegarde réutilisables
Configuration finale #
Voici la configuration complète et commentée :
# Système Proxmox - snapshots avant/après maintenance
[rpool/ROOT/pve-1]
use_template = proxmox_system
# Données personnelles - rétention modérée
[rpool/tank]
use_template = data
recursive = yes
process_children_only = yes
#############################
# Templates #
#############################
# Template pour le système
# 2 snapshots par semaine, rétention de 3 mois en mensuel
[template_proxmox_system]
frequently = 0
hourly = 0
daily = 14
monthly = 3
yearly = 0
autosnap = yes
autoprune = yes
# Template pour les données
# 2 snapshots par semaine, 1 mois de rétention
[template_data]
frequently = 0
hourly = 0
daily = 8
monthly = 0
yearly = 0
autosnap = yes
autoprune = yes
Explication des templates #
Template proxmox_system (pour le système) :
daily = 14: conserve 14 snapshots quotidiens (environ 2 par semaine sur 2 semaines)monthly = 3: conserve 3 snapshots mensuels (3 mois d’historique)- Total : environ 17 snapshots
Template data (pour les données) :
daily = 8: conserve 8 snapshots quotidiens (environ 2 par semaine sur 1 mois)- Pas de rétention mensuelle ou annuelle
- Total : 8 snapshots par dataset
Option importante :
recursive = yes: applique la politique à tous les datasets enfantsprocess_children_only = yes: ne snapshot que les enfants, pas le parent
Test et activation #
1. Test en mode lecture seule #
Avant d’activer, vérifiez que tout fonctionne sans modifier votre système :
sanoid --cron --verbose --readonly
Vous devriez voir les snapshots qui seraient créés sans qu’ils ne le soient réellement.
2. Activation du service #
Si le test est concluant, activez le timer systemd :
# Active et démarre le timer
systemctl enable sanoid.timer
systemctl start sanoid.timer
# Vérification
systemctl status sanoid.timer
systemctl list-timers sanoid*
Le timer s’exécute toutes les 15 minutes et vérifie s’il doit créer ou supprimer des snapshots selon votre configuration.
3. Premier run manuel (optionnel) #
Pour créer immédiatement les premiers snapshots sans attendre :
sanoid --cron --verbose
Vérification et monitoring #
Lister les snapshots créés #
# Tous les snapshots Sanoid
zfs list -t snapshot | grep autosnap
# Snapshots récents
zfs list -t snapshot | grep autosnap | tail -20
# Snapshots pour un dataset spécifique
zfs list -t snapshot rpool/ROOT/pve-1
Espace utilisé par les snapshots #
zfs list -o space rpool/ROOT/pve-1
zfs list -o space rpool/tank/documents
zfs list -o space rpool/tank/pgbackweb
Logs du service #
# Logs en temps réel
journalctl -u sanoid.service -f
# Logs du jour
journalctl -u sanoid.service --since today
# Dernières exécutions
journalctl -u sanoid.service -n 50
Utilisation pratique #
Restaurer après une mauvaise mise à jour #
Si une mise à jour de Proxmox pose problème, vous pouvez facilement revenir en arrière :
# 1. Lister les snapshots disponibles
zfs list -t snapshot rpool/ROOT/pve-1
# 2. Rollback vers un snapshot
# ⚠️ ATTENTION : vous perdrez toutes les modifications après ce snapshot
zfs rollback rpool/ROOT/pve-1@autosnap_2025-11-20_00:00:00_daily
# 3. Redémarrer
reboot
Snapshot manuel avant une intervention critique #
Avant une mise à jour majeure, créez un snapshot manuel :
# Créer un snapshot avec la date
zfs snapshot rpool/ROOT/pve-1@pre-update-$(date +%Y%m%d)
# Lister vos snapshots manuels
zfs list -t snapshot | grep pre-update
Récupérer un fichier supprimé #
Les snapshots ZFS sont accessibles dans .zfs/snapshot/ :
# Accéder aux snapshots d'un dataset
cd /mnt/tank/documents/.zfs/snapshot/
# Lister les snapshots disponibles
ls -la
# Copier un fichier depuis un snapshot
cp autosnap_2025-11-20_00:00:00_daily/mon-fichier.pdf ~/
Bonnes pratiques #
Ajuster la rétention selon vos besoins #
La configuration proposée est volontairement conservatrice. Vous pouvez l’ajuster :
Pour plus de protection système :
daily = 30 # 1 mois de snapshots quotidiens
monthly = 6 # 6 mois d'historique
Pour économiser l’espace disque :
daily = 7 # 1 semaine seulement
monthly = 0 # Pas de rétention mensuelle
Surveiller l’espace disque #
Les snapshots ZFS consomment de l’espace uniquement pour les données modifiées. Surveillez régulièrement :
zpool list
zfs list -o space
Combiner avec d’autres outils #
Sanoid est complémentaire à :
- Proxmox Backup Server : pour les VMs/conteneurs
- Syncoid : pour la réplication vers un autre serveur
- Backups hors site : pour une protection contre les sinistres
Dépannage #
Erreur “Argument isn’t numeric” #
Si vous obtenez cette erreur, vérifiez que vous n’avez pas de commentaires en fin de ligne dans votre configuration. Les commentaires doivent être sur des lignes séparées.
❌ Incorrect :
daily = 14 # commentaire ici
✅ Correct :
# Commentaire sur sa propre ligne
daily = 14
Les snapshots ne sont pas créés #
Vérifiez que :
- Le timer est bien actif :
systemctl status sanoid.timer - La configuration est valide :
sanoid --cron --readonly --verbose - Les logs pour identifier l’erreur :
journalctl -u sanoid.service
Supprimer tous les snapshots Sanoid #
Si vous voulez repartir de zéro :
# ⚠️ ATTENTION : supprime TOUS les snapshots autosnap
zfs list -t snapshot | grep autosnap | awk '{print $1}' | xargs -n1 zfs destroy
Conclusion #
Sanoid est un outil simple et efficace pour automatiser la gestion de vos snapshots ZFS. Avec la configuration proposée, vous bénéficiez :
- D’une protection du système Proxmox contre les mises à jour ratées
- D’un historique de vos données personnelles
- D’une gestion automatique sans intervention manuelle
- D’une consommation d’espace maîtrisée
N’hésitez pas à adapter la configuration à vos besoins spécifiques. L’important est de tester régulièrement vos procédures de restauration pour être prêt le jour où vous en aurez vraiment besoin !