Version 1.5: Réplication des datasets enfants au lieu du pool racine

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
This commit is contained in:
Tellsanguis 2025-11-14 22:26:29 +01:00
parent c220b52bb8
commit 7336f86a64

View file

@ -11,7 +11,7 @@
# - Gère l'activation/désactivation de Sanoid selon le nœud actif
#
# Auteur : BENE Maël
# Version : 1.4
# Version : 1.5
#
set -euo pipefail
@ -439,8 +439,35 @@ else
SYNCOID_OPTS="--recursive --force-delete"
fi
# Lancer la réplication avec les options appropriées
if syncoid $SYNCOID_OPTS "$ZPOOL" "root@${REMOTE_NODE_IP}:$ZPOOL"; then
# Lister les datasets de premier niveau sous le pool
# (on ne réplique pas le pool racine lui-même, seulement ses enfants directs)
FIRST_LEVEL_DATASETS=$(zfs list -H -o name -r "$ZPOOL" -t filesystem,volume -d 1 | grep -v "^${ZPOOL}$")
if [[ -z "$FIRST_LEVEL_DATASETS" ]]; then
log "error" "Aucun dataset trouvé sous ${ZPOOL}"
exit 1
fi
log "info" "Datasets à répliquer:"
echo "$FIRST_LEVEL_DATASETS" | while read -r dataset; do
log "info" " - ${dataset}"
done
# Lancer la réplication pour chaque dataset de premier niveau
# Chaque réplication est récursive, donc elle inclut tous les datasets enfants
REPLICATION_SUCCESS=true
echo "$FIRST_LEVEL_DATASETS" | while read -r dataset; do
log "info" "=== Réplication de ${dataset} (récursif) ==="
if syncoid $SYNCOID_OPTS "$dataset" "root@${REMOTE_NODE_IP}:${dataset}"; then
log "info" "${dataset} répliqué avec succès"
else
log "error" "✗ Échec de la réplication de ${dataset}"
REPLICATION_SUCCESS=false
fi
done
if [[ "$REPLICATION_SUCCESS" == "true" ]]; then
log "info" "✓ Réplication récursive réussie vers ${REMOTE_NODE_NAME} (${REMOTE_NODE_IP})"
log "info" " Tous les datasets de ${ZPOOL} ont été synchronisés"