SyncThing: Synchronisieren von Savegames auf Anbernic, Synology, iOS und Steam Deck


Syncthing mit Batocera und einem Synology NAS

Wenn du Retro-Handhelds oder Raspberry Pis mit vielen ROMs und Savegames besitzt, kann Syncthing dir helfen, die Speicherstände und Spiele über alle deine Geräte zu synchronisieren wie dem Anbernic RGXX35 Plus (kaufen) und ein Backup zu erstellen. Am einfachsten geht das mit Batocera Linux und einem Synology NAS. Das funktioniert zuverlässiger als Lösungen über Dropbox oder Google Drive und ist einfacher einzurichten als das komplexe rclone.

Syncthing ist ideal für Spielstände

Der ideale Anwendungsfall für Syncthing ist das Sichern und Synchronisieren von Spielständen der ROMs. So hast du auf jedem Gerät denselben Spielstand zur Hand. Solange die Geräte Internetzugang haben, werden die kleinen Dateien innerhalb von Sekunden synchronisiert.

Syncthing: Unser Szenario für den Abgleich der Spielstände.
Syncthing kann alle Knoten miteinander abgleichen.

Was ist Syncthing und was nicht?

Syncthing ist ein Programm zur Dateisynchronisation, das Dateien in Echtzeit zwischen zwei oder mehr Computern über das Internet oder lokale Netzwerke abgleicht. Dafür müssen nicht zwingend Ports geöffnet werden. Es läuft auf verschiedenen Betriebssystemen, darunter Windows, macOS und Linux, und ist somit eine vielseitige Lösung für Nutzer verschiedener Plattformen.

Die Software schützt Daten effektiv vor unbefugtem Zugriff, indem sie die Kontrolle über Speicherort, Teilung und Übertragung der Daten dir überlässt. Syncthing ist ein Open-Source-Projekt und hat keine direkte Anbindung an Cloud-Dienste, sondern synchronisiert zwei oder mehr Geräte permanent.

Batocera auf dem RGXX35 Plus. Syncthing is nur ein Haken im Menü.
Batocera auf dem Anbernic RGXX35 Plus (kaufen). Syncthing is nur ein Haken im Menü.

Die Einschränkungen beim Einsatz von Syncthing

Beim Einsatz von Syncthing gibt es einige Herausforderungen. Es kann nicht auf jedem System installiert werden. Bei Retro-Handhelds wird oft ein Linux eingesetzt, bei dem das Dateisystem eingefroren ist. Bisher habe ich nur Batocera gefunden, das offiziell Syncthing als Plug-in integriert hat. Bei Geräten wie dem Steam Deck oder unter Windows oder macOS ist die Installation von SyncThing kein Problem. Beispielsweise unterstützt mein Anbernic RG351V kein Batocera und nur AmberELEC, welches kein Syncthing unterstützt. Dasselbe gilt für ArkOS, Lakka und im Prinzip alle außer Batocera.

Unterschiedliche Ordnerstrukturen

Die Ordnerstruktur der Speicherstände variiert stark zwischen den Systemen. Bei Batocera werden sie nach dem emulierten System abgelegt, während bei RetroArch alle Spielstände in einem Verzeichnis liegen. Das erschwert die Synchronisation zwischen RetroArch und Batocera. Dasselbe gilt für EmuDeck auf dem Steamdeck, das seine Spielstände wiederum anders ablegt.

Batocera

Die Savegames und savestates werden analog der ROM-Ordnerstruktur erzeugt.

saves
├── gba
│   └── Advance Wars (USA) (Rev 1) (patched).srm
├── dreamcast
├── snes
│   └── Chrono Trigger (USA).srm
└── psx

AmberELEC

AmberELEC macht es meiner Meinung nach maximal ungünstig und erstellt die Savegames direkt neben den ROMs. Ich habe keine Option gefunden, das zu ändern.

roms
├── gba
│   └── Advance Wars (USA) (Rev 1) (patched).gba
│   └── Advance Wars (USA) (Rev 1) (patched).srm
├── dreamcast
├── snes
│   └── Chrono Trigger (USA).sfc
│   └── Chrono Trigger (USA).srm
└── psx

RetroArch (SteamDeck)

Alle savesgames und savestates sind in einem „save“ Verzeichnis.

saves
├── Advance Wars (USA) (Rev 1) (patched).srm
└── Chrono Trigger (USA).srm

RetroArch: Spielstände nach Verzeichnis der Inhalte organisieren

Die Ordnerstruktur der Spielstände kann man unter RetroArch unter Settings->Saving konfigurieren. Dazu aktiviert man die beiden folgenden Optionen:

  • Sort Saves into Folders by Content Directory
  • Sort Save States into Folders by Content Directory

Nun müssen die ROMs allerdings analog der Ordnerstruktur der Spielstände anderer Systeme wie Batocera abgelegt werden. Ich habe einfach alles genau so angelegt wie in Batocera:

saves
├── gba
│   └── Advance Wars (USA) (Rev 1) (patched).srm
├── dreamcast
├── snes
│   └── Chrono Trigger (USA).srm
└── psx

Falls man schon vorher Spielstände in RetroArch angelegt hatte, dann muss man die Spielstände per Hand migrieren.

Syncthing unter Batocera und Synology NAS einrichten

Ein NAS oder ein anderes ständig eingeschaltetes Gerät ist erforderlich, um zu vermeiden, dass alle Geräte gleichzeitig eingeschaltet sein müssen. Zwar ermöglicht Syncthing die direkte Synchronisation zwischen allen Knoten im Netzwerk, aber es ist praktisch nicht durchführbar, alle Geräte durchgehend laufen zu lassen. Ein NAS dient hier als zentraler Knoten, der ständig aktiv bleibt und so die Verfügbarkeit der Daten für alle anderen Geräte sicherstellt.

Schritt 1: Syncthing aktivieren
Aktiviere zuerst Syncthing unter Batocera in den Einstellungen unter System Settings -> Services -> Syncthing.

Schritt 2: Gerät neustarten und verbinden
Starte das Gerät neu und verbinde es mit einem WLAN.

Schritt 3: IP-Adresse notieren
Notiere die IP-Adresse des Gerätes unter Network Settings -> IP Address.

Schritt 4: Syncthing-Web-Oberfläche öffnen
Öffne die Syncthing-Weboberfläche unter <IP-Adresse>:8384.

Syncthing: Die Weboberfläche ist einfach aufgebaut.
Syncthing: Die Weboberfläche ist einfach aufgebaut.

Schritt 5: Lokales Verzeichnis hinzufügen
Füge mit „Add Folder“ ein lokales Verzeichnis zur Synchronisierung hinzu:

  • Folder Name: „Spielstände“
  • Folder ID: (nicht ändern)
  • Folder Path: /userdata/saves/
    Achtung: Der Folder Path ist entscheidend und bei jedem System unterschiedlich. Nutze die Autovervollständigung, um Fehler zu vermeiden.

Schritt 6: Device ID notieren
Notiere unter Actions -> Show ID die Device ID des Handhelds für später.

Schritt 7: Syncthing auf Synology NAS installieren
Installiere Syncthing auf einem Synology NAS über das Package Center von DSM.

Schritt 8: NAS-Weboberfläche zugreifen
Greife auf die Weboberfläche des NAS unter <IP-Adresse NAS>:8384 zu.

Schritt 9: Gerät hinzufügen
Wähle „Add Remote Device„, gib die Device ID des Syncthing vom Handheld ein und vergebe einen Namen. Ohne „Auto Accept“, um automatische Ordnererstellung zu vermeiden.

Schritt 10: Vertrauenswürdiges Gerät bestätigen
Bestätige auf der Weboberfläche von Syncthing auf dem Handheld, dass das Synology NAS als vertrauenswürdiges Gerät akzeptiert wird.

Schritt 11: Ordner teilen
Teile den Ordner „Spielstände“ auf dem Handheld unter Edit -> Sharing mit dem NAS.

Schritt 12: Freigabe akzeptieren und lokalen Pfad vergeben
Akzeptiere auf der NAS Syncthing-Oberfläche diese Freigabe und vergebe einen lokalen Pfad wie /volume2/SSD/syncthing/saves/.

Schritt 13: Fertig!

Syncthing auf dem Steam Deck für den Game-Modus einrichten

Es ist kein Problem, Syncthing im Desktop Modus zu installieren. Allerdings sollte es auch im Game Modus durchgehend laufen, damit man immer einen aktuellen Stand auf dem NAS hat. Hier wird beschrieben, wie das geht.

Schritt 1: Syncthing im Discovery AppStore finden

Öffne den Discovery AppStore im Desktop-Modus deines Steam Decks. Suche nach „Syncthing GTK“ im Suchfeld des AppStores.

Schritt 2: Syncthing installieren

Klicke auf „Installieren“, um Syncthing auf deinem Steam Deck zu installieren.

Schritt 3: Syncthing starten

Öffne Syncthing nach dem Neustart über das Anwendungsmenü und konfiguriere es wie gewohnt. Hier ein paar Pfade, die bei der Konfiguration helfen.

RetroArch Spielstände (bei Installation auf SD Karte)
/run/media/mmcblk0p1/steamapps/common/RetroArch/saves

RetroArch Bios System (bei Installation auf SD Karte)
/run/media/mmcblk0p1/steamapps/common/RetroArch/system

EmuDeck ROMs
/run/media/mmcblk0p1/Emulation/roms/
/run/media/mmcblk0p1/Emulation/roms/snes
/run/media/mmcblk0p1/Emulation/roms/megadrive

Schritt 4: Syncthing Daemon temporär deaktivieren

Deaktiviere den Syncthing Daemon für die nächsten Schritte. Dabei reicht es nicht das Syncthing Fenster zu schließen. Du musst mit rechter Maustaste auf dem Icon in der Taskleiste Syncthing beenden.

Schritt 5: Systemd-Service für Syncthing erstellen

Öffne ein Terminal im Desktop-Modus. Erstelle eine Systemd-Servicedatei für Syncthing:

sudo nano /etc/systemd/system/syncthing.service

Schritt 6: Service-Datei konfigurieren

Füge den folgenden Inhalt in die Datei ein und speichere sie:

[Unit]
Description=Syncthing

[Service]
Type=simple
ExecStart=flatpak run --command=syncthing me.kozec.syncthingtk
Restart=on-failure
RestartSec=1
SuccessExitStatus=3 4

[Install]
WantedBy=default.target

Damit wird das Hinweisfenster abschaltet und kann nun im Game-Mode automatisch gestartet werden.

Schritt 7: Service aktivieren und starten

Aktiviere und starte den neuen Service:

sudo systemctl enable syncthing.service 
sudo systemctl start syncthing.service

Schritt 8: Überprüfen, ob der Service läuft

Stelle sicher, dass der Syncthing-Service läuft:

sudo systemctl status syncthing.service

Installation von Syncthing unter iOS für iPhone und iPad

Installation von Syncthing unter iOS für iPhone und iPad

Schritt 1: Installation der Möbius Sync App

Installiere die iOS App Möbius Sync aus dem App Store.

Schritt 2: Möbius Sync App starten

Öffne die Möbius Sync App auf deinem iPhone oder iPad.

Schritt 3: Syncthing einrichten

Folge den Anweisungen in der Möbius Sync App, um Syncthing auf deinem Gerät zu konfigurieren. Wichtig ist dabei, dass die App alle Rechte für Benachrichtigungen bekommt um im Hintergrund zu laufen.

Schritt 4: Geräte koppeln

Gehe in der Möbius Sync App zu „Geräte“ und füge das Gerät hinzu, mit dem du Daten synchronisieren möchtest. Verwende dafür die Geräte-ID des anderen Gerätes.

Schritt 5: Ordner freigeben

Wähle die Ordner aus, die du synchronisieren möchtest, und richte sie in der Möbius Sync App ein. Das funktioniert am zuverlässigsten mit den lokalen Dateien und nicht mit den iCloud Verzeichnissen.

Schritt 6: Synchronisation starten

Überprüfe in der Möbius Sync App, ob die Verbindung zu den anderen Geräten hergestellt ist und die Synchronisation gestartet wurde.

Schritt 7: Synchronisationsstatus überprüfen

Überwache den Synchronisationsstatus in der Möbius Sync App, um sicherzustellen, dass alle Dateien erfolgreich synchronisiert werden.

Aufpassen bei großen ISO und CHD-Dateien

Ich habe die Erfahrung gemacht, dass jede Menge große Dateien wie Dreamcast, PSX und PSP beim Scanning ewig benötigen. Gerade auf den kleinen Retro-Handhelds von Anbernic sind das teilweise 10 Minuten und mehr. In der Zeit ruckelt die gesamte UI des Handhelds und Emulation läuft nur stockend. Deswegen habe ich die folgenden Systeme beim Abgleich pausiert und starte diese nur, wenn ich wirklich neue ROMs auf dem Synology NAS habe:

  • Dreamcast
  • NeoGeo (Das komplette Set ist immer gleich)
  • Saturn
  • Sega CD
  • PSP
  • PSX

Ignore Liste allen Verzeichnissen hinzufügen

Per SSH verbinden und die .stignore anlegen.

nano /userdata/roms/.stignore

Dort dann Folgendes einfügen:

images
videos
*.xml
*.txt

Dann die Datei in alle Unterordner legen:

find /userdata/roms -mindepth 1 -type d -exec cp /userdata/roms/.stignore {} \;

Zusammenfassung und Tipps

Auf demselben Weg kannst du nun weitere Geräte wie einen Raspberry Pi mit Batocera einbinden und weitere Verzeichnisse wie „bios“ oder die Roms freigeben. Dafür habe ich nicht einfach den Hauptordner „roms“ geteilt, sondern ich habe die Systeme wie „snes“, „psx“, „n64“ und so weiter einzeln in Ordnern organisiert. Denn nicht jedes Gerät hat viel Speicher und die Anbernic Handhelds können nicht ausreichend schnell Nintendo 64 Spiele emulieren. Zudem benennen manche Firmwares die Ordner für dasselbe System unterschiedlich. Beispiel ist „dreamcast“ und „dc“. Wenn es aber passt, dann kann man auf dem NAS die ROMs in die Ordner legen und beim Einschalten der Handhelds, werde diese dann übertragen. Wirklich cool. Ab jetzt nutze ich nur noch Emulationsbetriebssysteme für meinen Anbernic RGXX35 Plus (kaufen), die auch Syncthing unterstützten. Und das ist bislang nur Batocera Linux.


Beitrag veröffentlicht

in

von

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert