|
@@ -0,0 +1,106 @@
|
|
|
+---
|
|
|
+title: Backup to a removable drive or an intermittent server
|
|
|
+---
|
|
|
+## Occasional backups
|
|
|
+
|
|
|
+A common situation is backing up to a repository that's only sometimes online.
|
|
|
+For instance, you might send most of your backups to the cloud, but
|
|
|
+occasionally you want to plug in an external hard drive or backup to your
|
|
|
+buddy's sometimes-online server for that extra level of redundancy.
|
|
|
+
|
|
|
+But if you run borgmatic and your hard drive isn't plugged in, or your buddy's
|
|
|
+server is offline, then you'll get an annoying error message and the overall
|
|
|
+borgmatic run will fail (even if individual repositories complete just fine).
|
|
|
+
|
|
|
+So what if you want borgmatic to swallow the error of a missing drive
|
|
|
+or an offline server, and continue trucking along? That's where the concept of
|
|
|
+"soft failure" come in.
|
|
|
+
|
|
|
+## Soft failure command hooks
|
|
|
+
|
|
|
+This feature leverages [borgmatic command
|
|
|
+hooks](https://torsion.org/borgmatic/docs/how-to/add-preparation-and-cleanup-steps-to-backups/),
|
|
|
+so first familiarize yourself with them. The idea is that you write a simple
|
|
|
+test in the form of a borgmatic hook to see if backups should proceed or not.
|
|
|
+
|
|
|
+The way the test works is that if any of your hook commands return a special
|
|
|
+exit status of 75, that indicates to borgmatic that it's a temporary failure,
|
|
|
+and borgmatic should skip all subsequent actions for that configuration file.
|
|
|
+If you return any other status, then it's a standard success or error. (Zero is
|
|
|
+success; anything else other than 75 is an error).
|
|
|
+
|
|
|
+So for instance, if you have an external drive that's only sometimes mounted,
|
|
|
+declare its repository in its own [separate configuration
|
|
|
+file](https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/),
|
|
|
+say at `/etc/borgmatic.d/removable.yaml`:
|
|
|
+
|
|
|
+```yaml
|
|
|
+location:
|
|
|
+ source_directories:
|
|
|
+ - /home
|
|
|
+
|
|
|
+ repositories:
|
|
|
+ - /mnt/removable/backup.borg
|
|
|
+```
|
|
|
+
|
|
|
+Then, write a `before_backup` hook in that same configuration file that uses
|
|
|
+the external `findmnt` utility to see whether the drive is mounted before
|
|
|
+proceeding.
|
|
|
+
|
|
|
+```yaml
|
|
|
+hooks:
|
|
|
+ before_backup:
|
|
|
+ - findmnt /mnt/removable > /dev/null || exit 75
|
|
|
+```
|
|
|
+
|
|
|
+What this does is check if the `findmnt` command errors when probing for a
|
|
|
+particular mount point. If it does error, then it returns exit code 75 to
|
|
|
+borgmatic. borgmatic logs the soft failure, skips all further actions in that
|
|
|
+configurable file, and proceeds onward to any other borgmatic configuration
|
|
|
+files you may have.
|
|
|
+
|
|
|
+You can imagine a similar check for the sometimes-online server case:
|
|
|
+
|
|
|
+```yaml
|
|
|
+location:
|
|
|
+ source_directories:
|
|
|
+ - /home
|
|
|
+
|
|
|
+ repositories:
|
|
|
+ - me@buddys-server.org:backup.borg
|
|
|
+
|
|
|
+hooks:
|
|
|
+ before_backup:
|
|
|
+ - ping -q -c 1 buddys-server.org > /dev/null || exit 75
|
|
|
+```
|
|
|
+
|
|
|
+## Caveats and details
|
|
|
+
|
|
|
+There are some caveats you should be aware of with this feature.
|
|
|
+
|
|
|
+ * You'll generally want to put a soft failure command in the `before_backup`
|
|
|
+ hook, so as to gate whether the backup action occurs. While a soft failure is
|
|
|
+ also supported in the `after_backup` hook, returning a soft failure there
|
|
|
+ won't prevent any actions from occuring, because they've already occurred!
|
|
|
+ Similiarly, you can return a soft failure from an `on_error` hook, but at
|
|
|
+ that point it's too late to prevent the error.
|
|
|
+ * Returning a soft failure does prevent further commands in the same hook from
|
|
|
+ executing. So, like a standard error, it is an "early out". Unlike a standard
|
|
|
+ error, borgmatic does not display it in angry red text or consider it a
|
|
|
+ failure.
|
|
|
+ * The soft failure only applies to the scope of a single borgmatic
|
|
|
+ configuration file. So put anything that you don't want soft-failed, like
|
|
|
+ always-online cloud backups, in separate configuration files from your
|
|
|
+ soft-failing repositories.
|
|
|
+ * The soft failure doesn't have to apply to a repository. You can even perform
|
|
|
+ a test to make sure that individual source directories are mounted and
|
|
|
+ available. Use your imagination!
|
|
|
+ * This feature does not apply to `before_everything` or `after_everything`
|
|
|
+ hooks.
|
|
|
+
|
|
|
+## Related documentation
|
|
|
+
|
|
|
+ * [Set up backups with borgmatic](https://torsion.org/borgmatic/docs/how-to/set-up-backups/)
|
|
|
+ * [Make per-application backups](https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/)
|
|
|
+ * [Add preparation and cleanup steps to backups](https://torsion.org/borgmatic/docs/how-to/add-preparation-and-cleanup-steps-to-backups/)
|
|
|
+ * [Monitor your backups](https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/)
|