How to reduce time to sync Ethereum Geth node from few weeks to few hours?

Here is the answer!

To create your own Ethereum full node...

you need to have powerful server with a fast storage, fast internet connection and enough time to synchronize node with the network

Here is some benchmark results, regarding to the post from official Ethereum blog:

Full sync benchmark on two i3.2xlarge AWS EC2 instances ($0.624 per Hour, 8 cores, 61 GiB RAM, ephemeral volume 1.9 TiB NVMe SSD, if you stop the instance - you will lose all data)

with --cache=4096 --maxpeers=50 --syncmode=full

Geth sync benchmark

Using c5.xlarge instance with EBS io1 volume (Provisioned IOPS) you can spend more, than 4 weeks time and about $850, AWS calculation is here

Here is a way to download data from the existing node and continue to sync:

Pre Requirements:

All we need is a docker (here is manual for Ubuntu):

sudo apt-get update -y

sudo apt-get install -y

sudo usermod -aG docker $USER

sudo su - $USER

1. Download chaindata folder:

docker run -d --rm --name downloading-chaindata \

-v $PWD/fullnode:/fullnode \

-w="/fullnode" cirrusci/wget \

wget --continue --no-host-directories --recursive --level=2 \

To view downloading log:

docker logs -f downloading-chaindata

2. Run Geth mount the datadir folder:

mkdir full-ethereum-node

mv fullnode ./full-ethereum-node/geth

docker run -d --rm --name full-node-ethereum \

--ulimit nofile=10000:10000 \

-p 8545:8545 -p 30303:30303 \

-v $PWD/full-ethereum-node:/root/.ethereum \

ethereum/client-go \

--http --http.addr "" \

--nousb \

--ipcdisable \

--syncmode full

To view geth log:

docker logs -f full-node-ethereum

3. To check actual state of the node:

docker run --rm -it ethereum/client-go \

--exec "eth.blockNumber" \

attach http://$(hostname -I | awk '{print $1}'):8545

Donate ETH: 0x34AEC003f0F4812281770742c72D39D92Fdd58Ae