With HDD and 16GB for dbcache, 5 weeks in 2 to 3 hours. GUI still stalled badly I think.
Some notes:
The lopp.net blog has some articles on sync speed
If you have 16GB RAM do not allocate all of it to dbcache. I allow 1.2GB for OS and other functions, and I don't use GUI. This means set dbcache to 14800
I've only ever used HDD
With 4GB RAM and an I3 CPU, I set dbcache to 2800 and the IBD took 12 days
With 8GB RAM, I set dbcache to 6800 and the IBD finished in 55 hours
With 32GB RAM, I set dbcache to 16000 and the IDB finished in 16 hours
I have 2 HDD. It is faster to have chainstate on one HDD and blocks on a different HDD
According to the documentation, dbcache can't be more than 16000
Speed is best monitored as transactions per minute/hour, not blocks
I never use the GUI
Blocks are only written sequentially, never updated after closing each BLK**.DAT
Chainstate is constantly inserted and deleted. Using bigger dbcache (up to 16GB) stores more of chainstate in RAM, reducing the time-consuming insert/delete writes to disk
IBD does not verify txinput signatures if "assumevalid" is enabled, until the most recent blocks. IBD slows down a lot when it gets to this block, but by then it's nearly finished
Things not yet tried ...
Chainstate is about 12GB, so it would be cheap to use a small SSD for chainstate and keep blocks on HDD
...
Actual numbers are useful, but few people bother to make measurements. This means the generic "get a SSD" advice is based in ignorance
The biggest determinant is dbcache. One of the recent lopp.net articles has some measurements
Most people asking about slow node initialization do not specify how long it's taking, or what they expected, do not mention how much RAM they have, and never mention dbcache
Most "how to" articles fail to mention the initialization time. This is because most of those bloggers never actually finish the IBD, and do not admit it