**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
78 lines
4.7 KiB
Markdown
78 lines
4.7 KiB
Markdown
# 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 <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)
|