使用 restic 和 systemd 自动备份

及时备份很重要。 以至于 备份软件 是一个共同的讨论话题,即使在这里 Fedora 杂志。 本文演示了如何使用 休息的 仅使用 systemd 单元文件。

有关 restic 的介绍,请务必查看我们的文章 Use restic on Fedora 用于加密备份。 然后继续阅读以了解更多详细信息。

为了自动拍摄快照和保持数据修剪,需要运行两个 systemd 服务。 第一个服务运行备份命令需要定期运行。 第二个服务负责数据修剪。

如果您根本不熟悉 systemd,那么现在是学习的最佳时机。 在杂志上查看有关 systemd 的系列,从单元文件的入门开始:

systemd 单元文件基础知识

如果你还没有安装restic,请注意它在官方 Fedora 存储库。 要安装使用此命令 sudo:

$ sudo dnf install restic

备份

首先,创建 ~/.config/systemd/user/restic-backup.service 文件。 将以下文本复制并粘贴到文件中以获得最佳效果。

[Unit]
Description=Restic backup service
[Service]
Type=oneshot
ExecStart=restic backup --verbose --one-file-system --tag systemd.timer $BACKUP_EXCLUDES $BACKUP_PATHS
ExecStartPost=restic forget --verbose --tag systemd.timer --group-by "paths,tags" --keep-daily $RETENTION_DAYS --keep-weekly $RETENTION_WEEKS --keep-monthly $RETENTION_MONTHS --keep-yearly $RETENTION_YEARS
EnvironmentFile=%h/.config/restic-backup.conf

此服务引用环境文件以加载机密(例如 RESTIC_PASSWORD)。 创建 ~/.config/restic-backup.conf 文件。 复制并粘贴以下内容以获得最佳效果。 这 example 使用 BackBlaze B2 存储桶。 相应地调整 ID、密钥、存储库和密码值。

BACKUP_PATHS="/home/rupert"
BACKUP_EXCLUDES="--exclude-file /home/rupert/.restic_excludes --exclude-if-present .exclude_from_backup"
RETENTION_DAYS=7
RETENTION_WEEKS=4
RETENTION_MONTHS=6
RETENTION_YEARS=3
B2_ACCOUNT_ID=XXXXXXXXXXXXXXXXXXXXXXXXX
B2_ACCOUNT_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
RESTIC_REPOSITORY=b2:XXXXXXXXXXXXXXXXXX:/
RESTIC_PASSWORD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

现在服务已安装,重新加载 systemd:systemctl –user daemon-reload。 尝试手动运行该服务以创建备份:systemctl –user start restic-backup。

因为该服务是一次性的,所以它会运行一次并退出。 验证服务是否运行并根据需要创建快照后,设置一个计时器以定期运行该服务。 为了 example,要每天运行 restic-backup.service,创建 ~/.config/systemd/user/restic-backup.timer 如下。 同样,复制并粘贴此文本:

[Unit]
Description=Backup with restic daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

通过运行以下命令启用它:

$ systemctl --user enable --now restic-backup.timer

修剪

虽然主服务运行忘记命令仅将快照保留在保留策略中,但实际上并未从静态存储库中删除数据。 prune 命令检查存储库和当前快照,并删除与快照无关的任何数据。 因为修剪可能是一个耗时的过程,所以不必在每次运行备份时都运行。 这是第二个服务和计时器的完美场景。 首先,通过复制和粘贴以下文本来创建文件 ~/.config/systemd/user/restic-prune.service:

[Unit]
Description=Restic backup service (data pruning)
[Service]
Type=oneshot
ExecStart=restic prune
EnvironmentFile=%h/.config/restic-backup.conf

与主要的 restic-backup.service 类似,restic-prune 是一次性服务,可以手动运行。 设置服务后,在 ~/.config/systemd/user/restic-prune.timer 中创建并启用相应的计时器:

[Unit]
Description=Prune data from the restic repository monthly
[Timer]
OnCalendar=monthly
Persistent=true
[Install]
WantedBy=timers.target

就是这样! Restic 现在将每天运行并每月修剪数据。

摄影者 塞缪尔·泽勒不飞溅.