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: