# Chaîne perdue après recréation du conteneur (hauteur 2 au lieu de ~11535) **Date** : 2026-02-02 **Auteur** : Équipe 4NK ## Problème - Le dashboard affiche une **hauteur de bloc 2** alors que la chaîne attendue est autour de **11535**. - La chaîne visible n’est pas la bonne : le nœud est sur une **nouvelle chaîne** (genèse récente), pas sur la chaîne signet existante. ## Cause racine - Le conteneur Docker `bitcoin-signet-instance` a été **recréé** (`docker stop` + `docker rm` + `docker run`) **sans montage persistant** du datadir Bitcoin (`/root/.bitcoin`). - Le Dockerfile déclare `VOLUME $BITCOIN_DIR` ; en l’absence de `-v` dans `docker run`, Docker utilise un **volume anonyme** lié au conteneur. - À la suppression du conteneur (`docker rm`), ce volume anonyme peut être supprimé (ou n’est plus rattaché), donc les **données de la chaîne (blocs, wallet, etc.) sont perdues**. - Le nouveau conteneur repart avec un datadir vide : install/signet crée une **nouvelle chaîne** (hauteur 0), puis le miner produit quelques blocs (ex. hauteur 2). ## Correctifs 1. **Documentation** : Toutes les commandes `docker run` du projet ont été mises à jour pour utiliser un **volume nommé** : ```bash -v signet-bitcoin-data:/root/.bitcoin ``` Ainsi, à chaque recréation du conteneur, les données restent dans le volume `signet-bitcoin-data`. 2. **Persistance** : Utiliser **toujours** soit : - le volume « chaîne complète » (s'il existe) : `update-signet.sh` utilise par défaut le volume d'ID **4b5dca4d940b9f6e5db67b460f40f230a5ef1195a3769e5f91fa02be6edde649** (~11530 blocs), soit - un volume nommé : `-v signet-bitcoin-data:/root/.bitcoin`, soit - un montage host : `-v /chemin/hote/signet-data:/root/.bitcoin` pour tout démarrage ou recréation du conteneur Bitcoin Signet. Voir docs/MAINTENANCE.md. ## Récupérer la chaîne ~11535 (reprendre sur la chaîne précédente) 1. **Obtenir une sauvegarde complète du datadir** (blocs + chainstate + config) : - **Sauvegarde prête à télécharger** : `backups/signet-datadir-latest.tar.gz` (symlink vers la dernière archive créée par `./save-signet-datadir-backup.sh`). - **Sur la machine qui a encore la chaîne** : exécuter `./save-signet-datadir-backup.sh` pour créer `backups/signet-datadir-YYYYMMDD-HHMMSS.tar.gz` et mettre à jour le symlink `signet-datadir-latest.tar.gz`. - Ou utiliser une archive existante (ex. `bitcoin-backup-*.tar.gz` créée avec `docker exec ... tar czf /tmp/bitcoin-backup.tar.gz /root/.bitcoin`). 2. **Sur la machine où reprendre la chaîne** : placer l’archive dans le projet (ex. `backups/`) puis lancer : ```bash ./restore-signet-from-backup.sh backups/signet-datadir-YYYYMMDD-HHMMSS.tar.gz ``` Le script arrête le conteneur actuel, remplit le volume nommé `signet-bitcoin-data` avec les données restaurées, puis redémarre le conteneur avec ce volume. 3. **Si aucune sauvegarde n’existe** : la chaîne à 11535 n’est plus récupérable sur ce nœud. Il faut qu’un autre nœud (ex. machine bitcoin) ait encore cette chaîne et qu’on en tire une sauvegarde avec `save-signet-datadir-backup.sh`, puis qu’on restaure avec `restore-signet-from-backup.sh`. ## Modifications - **docs/MAINTENANCE.md** : section « Persistance du datadir », et ajout de `-v signet-bitcoin-data:/root/.bitcoin` à toutes les commandes `docker run`. - **docs/README.md** : idem + note sur le volume. - **docs/INTERFACES.md** : idem. - **docs/INSTALLATION_NEW_NODE.md** : idem (premier démarrage et recréation). - **docs/TROUBLESHOOTING_MINING.md** : idem. ## Modalités d’analyse - Vérifier la hauteur et la chaîne : `sudo docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getblockchaininfo` - Vérifier les volumes Docker : `docker volume ls` (présence de `signet-bitcoin-data` si déjà utilisé). - En cas de hauteur très basse (0, 1, 2…) après une recréation récente du conteneur : confirmer si un volume persistant était utilisé. ## Scripts ajoutés - **save-signet-datadir-backup.sh** : crée une archive complète du datadir depuis le conteneur en cours. À exécuter sur la machine qui a encore la chaîne (ex. machine bitcoin). - **restore-signet-from-backup.sh** : restaure une archive datadir dans le volume `signet-bitcoin-data` et redémarre le conteneur. Usage : `./restore-signet-from-backup.sh `. ## Pages affectées - docs/MAINTENANCE.md - docs/README.md - docs/INTERFACES.md - docs/INSTALLATION_NEW_NODE.md - docs/TROUBLESHOOTING_MINING.md - save-signet-datadir-backup.sh (nouveau) - restore-signet-from-backup.sh (nouveau) - fixKnowledge/signet-chain-lost-volume-persistent.md (ce fichier)