From 7336f86a64075b2b015355c5b1ce4d69e4622404 Mon Sep 17 00:00:00 2001 From: Tellsanguis Date: Fri, 14 Nov 2025 22:26:29 +0100 Subject: [PATCH] =?UTF-8?q?Version=201.5:=20R=C3=A9plication=20des=20datas?= =?UTF-8?q?ets=20enfants=20au=20lieu=20du=20pool=20racine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- zfs-nfs-replica.sh | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/zfs-nfs-replica.sh b/zfs-nfs-replica.sh index a7fa921..28e0765 100644 --- a/zfs-nfs-replica.sh +++ b/zfs-nfs-replica.sh @@ -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"