πŸ“˜ Node Migration Playbook (Polkadot / Kusama) β€” DN Standard

A practical guide for safely migrating a Polkadot/Kusama node to a new server without DB corruption or app-hash divergence.


1. Pre-Migration Checklist

Match client version

polkadot --version

Same version must be installed on the new server.

Check current height

curl -s http://localhost:9933 -H "Content-Type: application/json" \
-d '{"id":1,"jsonrpc":"2.0","method":"chain_getHeader"}'

Ensure database type matches

RocksDB vs ParityDB must be identical.

Stop the node cleanly

sudo systemctl stop polkadot

Lock filesystem before copying

Wait 3–5 seconds until process is fully terminated:

ps aux | grep polkadot

2. Preparing Destination Server

Create directories

Install same binary

Copy service file (optional)


3. DB Transfer (Safest DN Method)

On source server

Stop node β†’ ensure no process β†’ then run:

Recommended flags:

  • --delete β€” removes junk files

  • -avz β€” safe incremental copy

  • never copy db-lock file manually


4. Integrity Validation Before First Start

Check DB size match

On both servers:

Check last block and state root

or via RPC after start in safe mode (below).


5. First Start (Safe Mode)

Start once with debug logs:

Watch for:

βœ” β€œImporting finalized block” βœ” no β€œUnexpected state root” βœ” no β€œDisjointed block ancestry” βœ” no DB repair triggered

If everything looks clean β†’ stop the node.


6. Start with Systemd


7. Post Migration Validation

Validate height vs reference

Compare with any DN reference node / telemetry.

Check app-hash consistency

Compare stateRoot of latest block with a trusted node.

Check GRANDPA consistency

Look for finality logs:


8. Common Issues & Fixes

❗ Divergent state root

Re-sync using warp sync:

❗ Node stuck after migration

Usually caused by incomplete DB. Recopy directory:

❗ DB corruption warning on startup

Remove column cache + restart:

❗ Warp sync mismatch

Remove only block database and resync:


  1. Stop source node

  2. rsync database to new server

  3. Start node in debug mode

  4. Check:

    • height matches

    • state root matches

    • finality correct

  5. Enable systemd

  6. Remove old node from network

This minimizes downtime and guarantees no double-import or app-hash mismatch.

Last updated