Triaxx Web Log

Restic

Use restic to backup a set of files/directories on several repositories.

Repo initialization

mkdir -p ~/.config/restic

echo "sftp:bak.triaxx.io:/srv/restic-repo" > .config/restic/repo-bak

cat > ~/.config/restic/passcmd << EOF
#!/usr/bin/env bash

ssh pass.triaxx.io pass restic
EOF
chmod +x ~/.config/restic/passcmd

restic --repository-file ~/.config/restic/repo-bak \
       --password-command ~/.config/restic/passcmd \
       init

Backup

find /etc /home -print > ~/.config/restic/files

restic --repository-file ~/.config/restic/repo-bak \
       --password-command ~/.config/restic/passcmd \
       backup \
       --files-from-verbatim ~/.config/restic/files \
       --skip-if-unchanged

Linux Automation

Create a systemd template service to execute restic backup for each repository:

mkdir -p ~/.config/systemd/user

cat > ~/.config/systemd/user/restic-backup@.service << EOF
[Unit]
Description=Restic backup service for %i repository
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/restic backup --files-from-verbatim %E/restic/files --skip-if-unchanged
ExecStartPost=/usr/bin/restic forget --keep-last 5 --prune
Environment="RESTIC_PASSWORD_COMMAND=%E/restic/passcmd"
Environment="RESTIC_REPOSITORY_FILE=%E/restic/repo-%i"

[Install]
WantedBy=default.target
EOF

Create a target to backup on several repositories:

cat > ~/.config/systemd/user/restic-backups.target << EOF
[Unit]
Description=Restic backup target
Requires=restic-backup@bak.service restic-backup@bak2.service restic-backup@bak3.service
EOF

Create a systemd timer to trigger restic-backups.target every day:

cat > ~/.config/systemd/user/restic-backup.timer << EOF
[Unit]
Description=Automatic restic backup

[Timer]
OnCalendar=daily
Persistent=true
AccuracySec=1h
Unit=restic-backups.target

[Install]
WantedBy=timers.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now restic-backup.timer
Tags: