#!/bin/bash # # Create a full datadir backup (blocks + chainstate + config) from the running # Bitcoin Signet container. Use this on the machine that has the chain you want # to keep (e.g. height ~11535), then copy the archive and run restore-signet-from-backup.sh # on the target machine. # # Usage: ./save-signet-datadir-backup.sh [output_dir] # Default output: backups/signet-datadir-YYYYMMDD-HHMMSS.tar.gz # # Author: 4NK Team # Date: 2026-02-02 set -e CONTAINER_NAME="bitcoin-signet-instance" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" OUTPUT_DIR="${1:-$SCRIPT_DIR/backups}" mkdir -p "$OUTPUT_DIR" TIMESTAMP=$(date +%Y%m%d-%H%M%S) BACKUP_FILE="$OUTPUT_DIR/signet-datadir-$TIMESTAMP.tar.gz" if ! docker ps --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then echo "Error: Container $CONTAINER_NAME is not running." exit 1 fi # Datadir inside container: use BITCOIN_DIR from container so backup matches actual bitcoind data DATADIR=$(docker exec "$CONTAINER_NAME" printenv BITCOIN_DIR 2>/dev/null || echo "/root/.bitcoin") DATADIR_REL="${DATADIR#/}" echo "=== Full Signet datadir backup ===" echo "Container: $CONTAINER_NAME" echo "Datadir: $DATADIR" echo "Output: $BACKUP_FILE" echo "" echo "Creating archive inside container..." # tar may exit 1 if a file changed during read (e.g. wallet.dat); archive is usually still usable sudo docker exec "$CONTAINER_NAME" tar czf /tmp/signet-datadir-backup.tar.gz -C / "$DATADIR_REL" || { e=$?; [ "$e" -eq 1 ] || exit "$e"; } echo "Copying archive to host..." sudo docker cp "$CONTAINER_NAME:/tmp/signet-datadir-backup.tar.gz" "$BACKUP_FILE" echo "Removing temp file in container..." sudo docker exec "$CONTAINER_NAME" rm -f /tmp/signet-datadir-backup.tar.gz echo "" echo "Backup saved: $BACKUP_FILE" echo "Size: $(du -h "$BACKUP_FILE" | cut -f1)" # Symlink for easy download (signet-datadir-latest.tar.gz) ln -sf "$(basename "$BACKUP_FILE")" "$OUTPUT_DIR/signet-datadir-latest.tar.gz" echo "Latest symlink: $OUTPUT_DIR/signet-datadir-latest.tar.gz -> $(basename "$BACKUP_FILE")" echo "" echo "To restore on this or another machine:" echo " ./restore-signet-from-backup.sh $BACKUP_FILE" echo " # or: ./restore-signet-from-backup.sh $OUTPUT_DIR/signet-datadir-latest.tar.gz" echo ""