ARCH R

Cloud sync

Syncthing, rclone, NFS, keep saves and ROMs in sync across devices

Three approaches to keeping your handheld's /storage in sync with another machine. Pick whichever fits your setup.


Syncthing (peer-to-peer)

Best when you have a PC or another handheld and want continuous, automatic sync without involving a cloud account.

Setup on the handheld

  1. ES → Network Settings → Network Services → Enable Syncthing.
  2. Note the device IP, shown in System Information.
  3. Check the root password in System Settings → Security → Root password. It is archr out of the box, so change it before exposing the web interface.

Setup on your PC

Install Syncthing from your distro's package manager or syncthing.net.

Connect them

Browse to http://<handheld-ip>:8384 from your PC. The web interface listens on every interface. Log in as root with the password from the step above.

In the handheld's web UI:

  • Add Remote Device → paste the PC's Device ID (visible in your PC Syncthing's UI under Actions → Show ID). Same-LAN devices auto-discover, otherwise paste manually.
  • Add Folder → label it (e.g. roms), path /storage/roms. In the Sharing tab, tick the PC.

On the PC, accept the incoming device + folder. Pick a local folder to mirror to. Done, sync starts.

What to sync

Everything worth syncing sits under /storage/roms:

FolderContentWorth syncing
/storage/roms/<system>/ROMs, and the battery saves next to themthe saves yes, the ROMs only if you have the space
/storage/roms/savestates/<system>/Save-statessee the caveat below
/storage/roms/screenshots/Screenshotsyes
/storage/.config/Application configsusually not, they are device-specific

RetroArch here runs with savefiles_in_content_dir on, so a battery save (.srm, .sav) is written beside the ROM instead of in a central folder. Save-states are the exception: setsettings.sh points savestate_directory at /storage/roms/savestates/<system> before every launch.

Save-states are tied to the exact core build. If your PC and the handheld run different libretro core versions, a state written on one can fail to load on the other. Battery saves do not have that problem. Sync the saves freely, and sync the states only if you keep the core versions aligned.

Syncthing is stopped while a game is running and started again when you exit, so it never competes with the emulator for CPU and card I/O.


rclone (cloud storage)

For Google Drive / OneDrive / Dropbox / S3 / etc. ArchR ships rclone preconfigured with a wrapper at ES → Tools → Cloud Backup / Cloud Restore.

Setup

Enable SSH

As in the SSH guide.

Configure your cloud provider

ssh root@archr.local
rclone config

Follow the prompts; refer to rclone provider docs for OAuth headless setup if needed.

Edit cloud_sync.conf

Default at /storage/.config/cloud_sync.conf. Most useful keys:

KeyDefaultMeaning
BACKUPPATH/storage/romswhat to back up
RESTOREPATH/storage/romswhere to restore (different from BACKUPPATH to test restore safely)
BACKUPFOLDER/storage/roms/backuplocal backup files
SYNCPATH/GAMESpath on the cloud remote
BACKUPMETHODsyncsync mirrors / copy adds without deleting
RESTOREMETHODcopycopy preserves existing local / sync overwrites
RCLONEOPTSfilters & verbosityper rclone flags

Run a backup

ES → Tools → Cloud Backup. Same menu has Cloud Restore.

Logs

tail -f /var/log/cloud_sync.log

Filter rules

/storage/.config/cloud_sync-rules.txt decides what goes up. The paths in it are relative to BACKUPPATH, so /savestates/** means /storage/roms/savestates. The shipped rules include save-states, screenshots and the usual save extensions (.srm, .sav, .state*, .dsv*, N64 .eep and .mpk, PSX memory cards, Dreamcast and PPSSPP save folders), and exclude the ROMs themselves along with BIOS files, box art, videos, manuals and archives. The .defaults file next to it is the untouched template, so copy lines back from there if you want the original behaviour.


NFS (LAN file server)

If you have a NAS or a Linux PC running an NFS server, you can mount the NFS share over the games folder. ROMs live on the server; saves stay on the handheld.

Drop the mount file

/storage/.nfs-mount

Single line:

NFS_PATH=192.168.1.10:/volume1/retro_games

The exported directory has to contain a roms folder; that is what gets merged.

Mount

ES → Tools → Mount NFS. The share is mounted at /storage/games-external, then an overlay is assembled at /storage/roms with /storage/games-external/roms as the read-only lower layer and /storage/games-internal/roms as the writeable upper one. Reads come from the server, anything written stays on the card. EmulationStation restarts on its own when the overlay is up.

This is nice for big collections, store the 200 GB MAME romset on a NAS, have the handheld just see them on /storage/roms/arcade.

Caveats

  • NFS over WiFi is sensitive to packet loss; expect occasional latency spikes when the WiFi signal dips.
  • ROMs that need fast random reads (PSP ISO seek-heavy scenes) feel better when the file is local, copy your most-played titles into /storage/games-internal/roms/ to get the local-disk path of the overlay.
  • The mount is not restored automatically at boot: run Mount NFS again after a restart.
  • The mount options are tuned for a portable (soft, so an unreachable server returns an I/O error instead of freezing the console) and the script gives up quietly if the server does not answer a ping.

On this page