anchorage_layer_simple/fixKnowledge/signet-chain-lost-volume-persistent.md
ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**Motivations:**
- Export Signet and mining wallet backups to git with only 2 versions kept
- Document and add backup/restore scripts for signet and mining wallet

**Correctifs:**
- Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo

**Evolutions:**
- data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section
- .gitignore: data/backup-to-git.log

**Pages affectées:**
- .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
2026-02-04 03:07:57 +01:00

78 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 nest 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 labsence 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 nest 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 larchive 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 nexiste** : la chaîne à 11535 nest plus récupérable sur ce nœud. Il faut quun autre nœud (ex. machine bitcoin) ait encore cette chaîne et quon en tire une sauvegarde avec `save-signet-datadir-backup.sh`, puis quon 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 danalyse
- 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 <chemin-vers-archive.tar.gz>`.
## 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)