Restauration système sur ext4 avec rsync et liens physiques : une implémentation pratique
Les installations Linux standard sur ext4 ne disposent pas de fonctionnalité native de capture instantanée (snapshot), ce qui rend difficile la restauration rapide à un état antérieur. Les outils de sauvegarde comme borg ou restic se concentrent sur le stockage à long terme plutôt que sur la restauration locale. Restaurer à partir d'une sauvegarde complète prend des heures et implique le traitement de volumes importants, ce qui est inefficace pour corriger des erreurs de configuration locale ou des problèmes post-mise à jour.
Cette solution minimise les dépendances : pas besoin de changer le système de fichiers, d'utiliser LVM ou d'adopter des systèmes spécialisés comme Btrfs/ZFS. L'approche repose sur rsync avec support des liens physiques pour la déduplication.
Fonctionnement : rsync + liens physiques
rsync synchronise les répertoires en copiant uniquement les modifications. L'option --link-dest permet de référencer une capture précédente : les fichiers inchangés sont réutilisés via des liens physiques, minimisant l'utilisation du stockage. Un lien physique est un nom supplémentaire pour le même inode, garantissant une surcharge nulle pour les données inchangées.
Commande de base pour créer une capture :
rsync -aHAX --numeric-ids --delete --link-dest="$PREV" "$SRC" "$DEST_TMP/"
-a: Mode archive (récursif, conserve permissions, horodatages).-H: Conserve les liens physiques.-A: Conserve les ACL.-X: Conserve les attributs étendus.--numeric-ids: Utilise les UID/GID numériques.--delete: Supprime les fichiers supplémentaires dans le répertoire cible.
Cela amène l'état actuel à une capture, en copiant uniquement le delta.
Structure de stockage des captures
Les captures sont stockées dans .infra_snapshots/ comme répertoires normaux avec horodatages :
.infra_snapshots/
├── system/
│ ├── 2026-03-01_00-30-00/
│ ├── 2026-03-02_00-30-00/
│ └── LATEST -> 2026-03-02_00-30-00/
├── docker/
│ ├── 2026-03-01_23-30-00/
│ └── LATEST -> 2026-03-01_23-30-00/
Le lien symbolique LATEST pointe vers la capture la plus récente pour l'automatisation. Séparer system et docker isole les fichiers système des données des conteneurs : les volumes Docker sont exclus pour éviter les problèmes avec les données modifiables.
Processus de création :
- Créer un répertoire temporaire
.tmp-YYYY-MM-DD_HH-MM-SS. - Exécuter rsync dedans.
- Renommer atomiquement :
mv -T "$TMP_DEST" "$FINAL_DEST". - Mettre à jour
LATEST:ln -sfn "$FINAL_DEST" "$LATEST_LINK".
Cela garantit l'atomicité : la capture est soit complète, soit absente.
Restauration de l'état
La restauration implique une synchronisation inverse avec un essai à blanc pour prévisualisation :
rsync -aHAX --numeric-ids --delete --dry-run "$SNAP/" "/"
Après vérification, retirer --dry-run pour appliquer. rsync ramènera le système racine à l'état de la capture, supprimant les nouveaux fichiers et restaurant les anciens via des liens physiques.
Pour Docker : similairement, mais uniquement sur les répertoires des conteneurs, en excluant les volumes.
Limites de l'approche
- Absence d'atomicité système : rsync lit les fichiers séquentiellement ; le système peut changer pendant la création. Les captures sont cohérentes au niveau fichier mais pas instantanées.
- Données modifiables : Les journaux, bases de données et fichiers temporaires peuvent être dans un état intermédiaire. Excluez-les de rsync avec
--exclude. - Espace disque : Les nouvelles versions de fichiers occupent de l'espace ; nettoyez périodiquement les anciennes captures.
- Pas pour production à forte charge : Adapté aux serveurs/bureaux avec faible activité pendant la création de captures.
| Scénario | Temps de création (approx.) | Utilisation disque |
|----------|---------------------------|---------------|
| Système quotidien | 2-5 min | 100-500 Mo |
| Docker après mises à jour | 1-3 min | 50-200 Mo |
Automatisation
Intégrez dans cron pour des captures quotidiennes :
- 00:30 : système.
- 23:30 : docker.
Le script doit journaliser la sortie de rsync, vérifier les codes de sortie et notifier en cas d'erreurs.
Points clés :
- rsync avec
--link-destémule les captures sur ext4 sans changer le système de fichiers. - Les liens physiques fournissent la déduplication : les fichiers inchangés ne sont pas dupliqués.
- L'atomicité via répertoires temporaires empêche les captures partielles.
- Séparer système/docker améliore la précision de la restauration.
- L'essai à blanc est essentiel avant restauration pour la sécurité.
L'approche est transparente, utilise uniquement des utilitaires Linux standard et s'adapte à tout système ext4.
— Editorial Team
Aucun commentaire pour le moment.