With geth 1.10.3+, the following options should be used to sync a full node from scratch:
--datadir.ancient=, to put the freezer on a larger and less expensive drive (HDD), option added in geth 1.9--syncmode snap, to use the new "snap" initial sync mode, added in geth 1.10
e.g. geth --datadir /mnt/fast-ssd/geth --datadir.ancient /mnt/big-hdd/geth-ancient --syncmode snap
As of Ethereum mainnet block 12,517,949 (May-27-2021 06:27:52 PM +UTC), the disk space required is:
- state and indexes (
datadirminus the ancient folder): 151 GiB - freezer (
datadir.ancientfolder): 215 GiB
This can be done overnight on a 3 core 8 GiB RAM virtual machine with sufficient disk space and an NVMe SSD for the main datadir.
When the initial sync is completed, geth switches to full mode. Disk utilization begins to climb more quickly. Reports from the Go Ethereum Discord channel suggest that 10 GiB/week are expected. My observation are that the bulk of this new usage goes to the datadir. In just under 2 weeks since May 27, the datadir folder on the fast NVMe has grown by 18 GiB, while the ancient folder has grown by 4 GiB. In the same period, the node has used about 338 GiB egress and 277 GiB ingress.
The DB can be occasionally purged with the removedb command and then reconstructed with a fast or snap sync again, but this takes hours. With Go 1.10, a snapshot prune-state is recommended instead. Running the state prune looked like the following:
Use before:
219G /mnt/big-hdd/geth-ancient
168G /mnt/fast-ssd/geth/.ethereum
progress:
INFO [06-08|22:02:37.880] Iterating state snapshot accounts=136,898,891 slots=451,482,427 elapsed=1h6m32.182s eta=11.503s
INFO [06-08|22:02:45.308] Iterated snapshot accounts=136,898,891 slots=453,527,760 elapsed=1h6m39.611s
...
INFO [06-08|22:25:12.503] Pruned state data nodes=58,553,306 size=16.10GiB elapsed=20m34.954s
...
INFO [06-08|23:11:07.963] Compacting database range=0xf0- elapsed=45m54.990s
INFO [06-08|23:12:59.121] Database compaction finished elapsed=47m46.148s
INFO [06-08|23:12:59.121] State pruning successful pruned=16.10GiB elapsed=2h16m53.430s
Use after:
219G /mnt/big-hdd/geth-ancient
139G /mnt/fast-ssd/geth/.ethereum
It looked like roughly half of the disk use was from just the last year, so there should be plenty of free space on both disks.