Problème:
- Les boucles while avec pipe (|) s'exécutent dans un sous-shell
- SYNCOID_OPTS n'était pas accessible dans le sous-shell (set -u)
- Erreur: "SYNCOID_OPTS: unbound variable"
Corrections:
- Remplacement des pipes par des here-strings (<<<)
- Les boucles while s'exécutent maintenant dans le shell principal
- Changement de REPLICATION_SUCCESS (string) vers REPLICATION_FAILED (int)
- Variables maintenant accessibles dans toutes les boucles
Problème identifié:
- Le script tentait de répliquer le pool racine "zpool1" (96K de métadonnées)
- Syncoid ne pouvait pas gérer le dataset racine lors de la première sync
- Message: "Removing zpool1 because no matching snapshots were found"
Solution:
- Liste et réplique les datasets de premier niveau uniquement:
* zpool1/data-nfs-share
* zpool1/pbs-backups
- Chaque dataset est répliqué récursivement (inclut tous les enfants)
- Le pool racine n'est plus répliqué explicitement
Avantages:
- Permet la création automatique des datasets sur le nœud distant
- Réplication correcte de tous les datasets et snapshots
- Gestion individuelle de chaque dataset de premier niveau
Changements:
- Retrait de --quiet des options syncoid (première sync et incrémentale)
- Permet de voir la progression détaillée de la réplication
- Utile pour le debugging et le monitoring de la première sync (7.67TB)
Options syncoid:
- Première sync: --recursive --force-delete
- Sync incrémentale: --recursive --no-sync-snap
Problème résolu:
- L'option --no-sync-snap était utilisée dans tous les cas, empêchant
la première synchronisation de fonctionner correctement
- Message d'erreur: "Removing zpool1 because no matching snapshots were found"
Corrections:
- Options syncoid maintenant conditionnelles selon le contexte:
* Première sync: --recursive --force-delete --quiet
(pas de --no-sync-snap pour permettre création snapshot initial)
* Sync incrémentale: --recursive --no-sync-snap --quiet
(utilise les snapshots Sanoid existants)
Impact:
- Permet la synchronisation initiale elitedesk → acemagician
- Conserve l'optimisation des syncs incrémentales ultérieures
- Détection automatique snapshots en commun (sync incrémentale vs première sync)
- Gestion automatique Sanoid (activation/désactivation selon nœud actif)
- Protection #1: Comparaison tailles source/destination (ratio >= 50%)
- Protection #2: Historique des tailles avec tolérance ±20%
- Prévention écrasement accidentel lors remplacement disque
- Logs explicites avec actions recommandées en cas de blocage