You have to use the same repository for deduplication to work. So if you'd like to deduplicate blocks for all your workstations, they have to connect to the same repository.
Borgmatic can be configured to back up different services (generally meaning particular directories on your system) with different configurations. Configurations are given to Borgmatic using .yaml files and can be specified as a launch option. A sample configuration file is as follows:
location: source_directories: - /path/to/source repositories: - backup:/path/to/backup storage: encryption_passphrase: "example password" compression: lz4 remote_rate_limit: 10000 archive_name_format: '{hostname}-my_service-{now:%Y-%m-%dT%H:%M:%S}' retention: prefix: "{hostname}-my_service-" keep_daily: 7 keep_weekly: 4 keep_monthly: 12 keep_yearly: 2 consistency: checks: - disabled
Systemd can be used to run Borgmatic on a schedule. This will require a two-part setup, using a systemd service and corresponding timer. This is configured using an instantiated service for flexibility as follows:
[Unit] Description=backup %i with borgmatic Wants=network-online.target After=network-online.target ConditionACPower=true [Service] Type=oneshot # Lower CPU and I/O priority. Nice=19 CPUSchedulingPolicy=batch IOSchedulingClass=best-effort IOSchedulingPriority=7 IOWeight=100 Restart=no # Prevent rate limiting of borgmatic log events. If you are using an older version of systemd that # doesn't support this (pre-240 or so), you may have to remove this option. LogRateLimitIntervalSec=0 # Delay start to prevent backups running during boot. Note that systemd-inhibit requires dbus and # dbus-user-session to be installed. ExecStart=systemd-inhibit --who="borgmatic-%i" --why="Prevent interrupting backup of %I" /your/borgmatic/path-c /etc/borgmatic/%i.yaml --syslog-verbosity 1
Multiple timer rules can be created to run at different intervals if desired. The following timer will run a daily backup:
[Unit] Description=%j backups for %i [Timer] Unit=borgmatic@%i.service OnCalendar=*-*-* 03:30:00 RandomizedDelaySec=15min [Install] WantedBy=timers.target
[Unit] Description=backup of docker-compose service %i with borgmatic Wants=network-online.target After=network-online.target ConditionACPower=true [Service] ExecStartPre=systemctl stop docker-compose@%i.service Type=oneshot # Lower CPU and I/O priority. Nice=19 CPUSchedulingPolicy=batch IOSchedulingClass=best-effort IOSchedulingPriority=7 IOWeight=100 Restart=no # Prevent rate limiting of borgmatic log events. If you are using an older version of systemd that # doesn't support this (pre-240 or so), you may have to remove this option. LogRateLimitIntervalSec=0 # Delay start to prevent backups running during boot. Note that systemd-inhibit requires dbus and # dbus-user-session to be installed. ExecStart=systemd-inhibit --who="borgmatic-%i" --why="Prevent interrupting backup of %I" /usr/local/bin/borgmatic -c /etc/borgmatic/%i.yaml --syslog-verbosity 1 ExecStopPost=/usr/local/bin/restart-compose-after-backup.sh %i
You have to use a script to restart the compose setup when the service is finished:
#!/bin/bash systemctl -q is-enabled "docker-compose@$1.service" && systemctl start "docker-compose@$1.service" exit 0
And the corresponding systemd timer looks like that:
[Unit] Description=%j backups for docker-compose service %i [Timer] Unit=borgmatic-compose@%i.service OnCalendar=*-*-* 03:15:00 RandomizedDelaySec=15min [Install] WantedBy=timers.target