You can manually perform backups of Sandstorm data via the web interface and/or via the command line. In the long run, we'd like to enable automated backups as well.
To back up one individual grain
If you're the owner of a grain on Sandstorm, you can back up an individual grain by clicking the download icon in the top bar. This will give you a ZIP file of the grain's contents. This contains the full writable state of the app, so you can restore it to any Sandstorm server.
If you want to get crafty, you can modify a backup to point to a different app ID, allowing you to migrate data between apps, or use your data with an experimental app with a different app ID. To do this: - Make a backup of your data from the "old" app. - With the "new" app, create a new empty grain and make a backup of it. - Find the file called "metadata" inside the second backup, and copy it over to the first backup, overwriting its own "metadata". Now you have a zip which Sandstorm will recognize as belonging to the new app, even though the data came from the old app.
You can also change the contents of the backup before restoring it, by modifying the files in the zip.
In this way, Sandstorm gives every app a fully-functional import/export system.
To back up the entire Sandstorm server
Sandstorm stores all its data in
/opt/sandstorm, plus two symbolic links in
a service file for systemd or sysvinit.
If you run your own Sandstorm server, you can back up the entire Sandstorm installation safely by stopping the service:
sudo sandstorm stop sudo service sandstorm stop
and taking a filesystem snapshot of
/opt/sandstorm. If your filesystem doesn't support online
snapshots you can make a quick backup by running:
cp -a /opt/sandstorm $HOME/sandstorm-snapshot-from-$(date -I)
Alternatively, one can make a backup using tar.
tar -cf $HOME/sandstorm-snapshot-from-$(date -I).tar /opt/sandstorm
Then restart Sandstorm to end the interruption:
sudo service sandstorm start
This guide uses
$(date -I), which is a way to embed the current date into a filename, in a format
Note about warnings from tar: If you see errors involving socket files being ignored, you can
ignore those warnings. The
tar utility might print messages like this:
/opt/sandstorm/var/sandstorm/grains/bdMmGkov6gpiSSXC9GHysy/socket: socket ignored
You should rely on tar's exit code being 0 to know if the tar command completed successfully.
To restore a Sandstorm server backup
If you have a tar-based backup of
/opt/sandstorm, the easiest way to restore it is to:
Run the install script, and allow it to configure a systemd/sysvinit service.
Stop the Sandstorm service, e.g.
sudo sandstorm stop
Copy your backup into
Start the Sandstorm service, e.g.
sudo service sandstorm start
Visit your Sandstorm server and make sure everything still works.
Remove the now-useless
You can also use the Docker container
documentation to run your snapshot of
/opt/sandstorm. You will need to create a Docker volume with your backup of
it will continue to execute until you stop the Docker container.