The launch of Factorio 2.0 alongside the Space Age expansion fundamentally restructured how game worlds are saved and executed. Instead of maintaining a single planar Nauvis surface, factories now span across multiple planetary surfaces (Nauvis, Vulcanus, Gleba, Fulgora, Aquilo) as well as interplanetary space platforms journeying between orbits. For headless server administrators, this multi-surface architecture demands updated save synchronization routines, tuned autosave mechanisms, and proper network bandwidth allocation.
This article breaks down the internal file layout of Space Age saves, details the migration process from singleplayer to headless Linux servers, explains how to eliminate autosave pauses using Linux kernel fork routines, and prevents client desynchronizations during space transit.
Multi-Surface Architecture and Space Age Save Layout#
In Factorio 2.0, parallel planetary environments are represented internally as distinct surfaces (surfaces). Crucially, the entire planetary system is encapsulated within a single unified .zip archive:
ls -lh /opt/factorio/saves/
unzip -l /opt/factorio/saves/space_age_production.zip | head -n 15
Inside the archive, the core data components reside:
level.datandlevel.dat0— serialized entity graphs, tech tree progression, logistics network states, and inventories across every unlocked planet.script-output/— mod states and custom scenario metadata.- Chunk tables for each active surface.
Because automated assembly lines continue ticking on every discovered planet even when no players are present, Space Age save files expand rapidly. While a standard Nauvis save file averages 15–30 MB, an endgame multi-planet Space Age factory easily reaches 100–250 MB.
Migrating Singleplayer Space Age Saves to Headless Linux Servers#
To transfer a local game world to a remote dedicated server, upload the save archive into the server's saves/ folder:
scp space_age_production.zip user@server_ip:/opt/factorio/saves/
Grant read and write permissions to the dedicated service account:
sudo chown factorio:factorio /opt/factorio/saves/space_age_production.zip
sudo chmod 644 /opt/factorio/saves/space_age_production.zip
The fundamental prerequisite for running Space Age on a server is enabling the appropriate official expansion packages. In Factorio, Space Age content is packaged as official expansion mods. Inspect /opt/factorio/mods/mod-list.json:
{
"mods": [
{ "name": "base", "enabled": true },
{ "name": "elevated-rails", "enabled": true },
{ "name": "quality", "enabled": true },
{ "name": "space-age", "enabled": true }
]
}
If space-age, quality, or elevated-rails flags are missing or disabled, the headless server binary will abort startup due to prototype mismatches.
Configuring Non-Blocking Saving to Eliminate Autosave Freezes#
When save files exceed 100 MB, the traditional synchronous autosave routine freezes the main game loop for 3 to 8 seconds. In a multiplayer setting, this triggers the intrusive "Saving map..." modal for all players.
On Linux headless instances, Factorio features an asynchronous non-blocking saving routine (non_blocking_saving). This mechanism executes the POSIX fork() system call, creating a memory snapshot of the running server process that writes the save file to disk in the background:
Modify /opt/factorio/config/config.ini:
[server]
non_blocking_saving=true
To function reliably, the Linux host must have sufficient free memory headroom (typically 2–4 GB beyond base process memory) allowing the kernel to manage Copy-on-Write (COW) memory pages during disk flushing.
On an automated server management panel, RAM quotas and kernel parameters are preconfigured to enable non-blocking saving seamlessly upon deployment.
Troubleshooting Slow Map Downloads and Client Desyncs#
Whenever a player connects to an active Space Age server, the server transmits the entire multi-planet state. If outbound bandwidth is throttled, joining players may trigger heartbeat timeouts and drop connection.
Tune network parameters in /opt/factorio/data/server-settings.json:
{
"autosave_interval": 30,
"autosave_slots": 5,
"max_upload_in_kilobytes_per_second": 0,
"minimum_latency_in_ticks": 0,
"auto_pause": true
}
max_upload_in_kilobytes_per_second: 0removes bandwidth ceilings during client map downloads.auto_pause: truehalts the simulation when the server is empty, preventing resource waste and biter evolutions during idle hours.
Restart the systemd unit and verify map loading:
sudo systemctl restart factorio
sudo journalctl -u factorio -n 50 --no-pager | grep -i "loading map"
Save Snapshot Rotation and Platform Hygiene#
To manage disk growth over hundreds of gameplay hours, ensure damaged platforms are cleared and implement automated snapshot rotation:
BACKUP_PATH="/opt/factorio/backups"
mkdir -p "$BACKUP_PATH"
tar -czf "$BACKUP_PATH/factorio_sa_$(date +%Y%m%d_%H%M%S).tar.gz" -C /opt/factorio saves
find "$BACKUP_PATH" -type f -name "*.tar.gz" -mtime +14 -delete
This automated backup cadence protects planetary progress against unintended mod updates or catastrophic power loss.




