Not sure where exactly it is officially documented, but I recently wrote an article about Running an Ethereum Full Node on a RaspberryPi 4 (model B) where I provide in the introduction a summary of the different syncing modes of Geth.
Extract from the article:
Blockchain sync mode [
full sync: A full sync downloads all the data (block headers and block
bodies), processes the entire blockchain one link at a time, and
replays all transactions that ever happened in history (transaction
processing and PoW verification). This method is the most traditional
and stable but can take a very a long time (up to a few weeks) and
would require a more powerful machine. At the end of the process, the
node is a full node.
fast sync: A fast sync also downloads all the data (block headers and
block bodies) but exchanges processing power for bandwidth usage.
Instead of processing all the transactions that ever happened, fast
sync downloads all the transaction receipts and the entire recent
state database and perform a PoW verification. When the chain reaches
a recent state (head - 1024 blocks), geth switches to full sync mode,
import the remaining blocks and process them as in the classical sync
(full) to obtain a full node.
light sync: Light mode syncs directly to the last few blocks, does not
store the whole blockchain in database. Unlike full and fast, is not a
full node as it doesn't store the entire blockchain but only the block
headers, and it depends on full nodes. But this approach, less secure
and more suitable for IOT/mobiles, only uses 100MB of space.
Blockchain garbage collection mode [
--gcmode]: Garbage collection is
used to discard old state tries and save some space.
--gcmode full enables the garbage collection to keep in memory only the latest 128 tries. This saves a lot of space and it takes less than
200 GB at this stage (Sept 2019) to run a full node in this setup.
--gcmode archive disables the garbage collection and keep all the historical state data blocks after blocks of Ethereum since the
Genesis. (bear in mind, it takes more than 2.3 TB of space). But very
few people (such as Block Explorers) need an archive node.