Restoring from Backup

Rattail tries to make the backup process more convenient, but it does not offer any conveniences for the restore process.

However, it uses “standard” tools to create the backup, and each of those tools essentially provides a way to restore. We’ll briefly outline each and give links to further reading.

Database Dumps

If your backup was configured to include database dumps, that means you will have files generated by one or both of:

  • mysqldump (MySQL / MariaDB)

  • pg_dump (PostgreSQL)

By default these files will be in the /root/data folder on the server (machine being backed up). However if rsync/borg were used then copies of these files should be elsewhere as well, e.g. borg archives.

Each is simply a gzip-ed SQL dump file as generated by the above commands. See their docs for how to restore:

Rsync

If your backup was configured to use rsync, that just means that some files were copied “as-is” from your server (machine being backed up) to some target path.

There is no default location for the target path, it will be whatever your config says. Could be either a “local” path on the server, or some remote path accessed via SSH.

Restoring such files is just a matter of copying them from that “target” path, back to wherever you need them to be..

However note that the rsync method would normally only have the “most recent” copy of the files, which may not be sufficient for you to restore from, depending on the nature of the problem. It’s for this reason that you’re encouraged to use the Borg feature also / instead.

Borg

If your backup involves Borg then that typically means you have one or more target paths, to which Borg archives are written each night. The archives are in fact written to a Borg “repo” which contains multiple archives, older ones being pruned over time to keep only so many around at a time.

And again there may be more than one of these target paths (Borg repos). From the perspective of the server (machine being backed up), there might be a Borg repo on an external disk, another on a local NAS device, another in a cloud server. All of the repos though probably work the same and so you can restore from any the same.

First, the official Borg docs on the matter:

Example Commands

For sake of example we’ll show some commands to “mount” a Borg archive, at which point it looks just like another folder in your file system, and you can then copy files as you please.

Let’s assume that the Borg repo lives on an external drive attached to your server. On your server then, we’ll mount one of the archives.

Command Basics

Just a reminder here that you’ll need the Borg encryption passphrase in order to decrypt the Borg repo and actually see “readable” files etc. (Borg will prompt you for it.) That password should be somewhere in /srv/envs/backup/app/rattail.conf on your server.

Also note that all commands shown here are meant to run on your server, but any machine which has Borg installed, could be used for this. You’d likely need to have SSH config in place in order to have basic access to the Borg repo location, and then would of course still need the encryption passphrase.

List Borg Archives

Next let’s take a look at which archives are available, again assuming they’re on an external drive (and assuming myserver is the name of your server):

sudo -H borg list /mnt/external/borg-repos/myserver

Note that if your Borg repo lives on another machine, then that command would look more like:

sudo -H borg list borg@cloud.example.com:/path/to/borg-repos/myserver

Mount a Borg Archive

Depending on which archives were listed via previous command, you would normally pick the one you wanted, and then “mount” it onto your local file system.

First create a mount point just for this:

sudo mkdir -p /mnt/borg

Then for instance, mount with something like:

sudo -H borg mount /mnt/external/borg-repos/myserver::myserver-2021-12-01T15:38:13 /mnt/borg

And again if your Borg repo lives on another machine:

sudo -H borg mount borg@cloud.example.com:/path/to/borg-repos/myserver::myserver-2021-12-01T15:38:13 /mnt/borg

Once mounted you can access the files just like you would any other mounted network share etc., the one caveat being that only root should have access to the borg mount. For instance:

myuser@myserver:~$ sudo ls -l /mnt/borg
total 0
drwxr-xr-x 1 root root 0 Jun 25 19:31 etc
drwxr-xr-x 1 root root 0 Sep  8  2019 home
drwxr-xr-x 1 root root 0 Sep  8  2019 opt
drwx------ 1 root root 0 Jul 18  2020 root
drwxr-xr-x 1 root root 0 Sep  9  2019 srv
drwxr-xr-x 1 root root 0 Dec  1 21:35 usr
drwxr-xr-x 1 root root 0 Sep  8  2019 var

When you’re finished you should unmount:

sudo -H borg umount /mnt/borg