如何在 Linux 上使用 autorestic 协调 Restic 备份
Restic 是一种现代备份程序,支持加密和重复数据删除。正如我们在本教程中看到的,Restic 易于使用,但它不使用配置文件,并且本身不包含编排和组织多个备份的方法。这就是 autorestic 派上用场的地方:它是 Restic 的包装器,让我们可以在单个 yaml 配置文件中配置和编排备份,指定多个源(位置)和目的地(后端)。
在本教程中,我们学习如何在 Linux 上安装 autorestic、其配置文件的结构以及如何创建基本设置。
在本教程中您将学习:
- 如何在 Linux 上安装 autorestic
- autorestic 配置文件的结构如何
- 如何使用 autorestic 配置 Restic 备份
- 如何在 autorestic hooks 上执行自定义命令
安装自动镇静剂
在本文中,我假设您已经安装了 Restic;如果您不熟悉它,您可能需要先看一下我们的介绍性教程。
在撰写本文时,在所有主要 Linux 发行版中,只有 Fedora 在其存储库中包含 autorestic。要安装该软件,我们可以从项目 GitHub 存储库下载预编译的二进制文件,也可以使用专用的 Docker 镜像。让我们探讨一下这些选项。
手动安装
安装 autorestic 最简单的方法是下载适合我们操作系统的二进制版本,并将其放置在我们的 PATH 中的目录中。在下面的示例中,我们下载最新的可用 x86_64 Linux 版本(撰写本文时为 1.8.2),并将其安装在 /usr/local/bin 目录
中。首先,我们下载“.bz2”存档:
$ curl -LO https://github.com/cupcakearmy/autorestic/releases/download/v1.8.2/autorestic_1.8.2_linux_amd64.bz2
下载完成后,我们提取文件:
$ bzip2 -d autorestic_1.8.2_linux_amd64.bz2
最后,我们将文件移动到目标目录中,并使其可执行:
$ sudo mv autorestic_1.8.2_linux_amd64 /usr/local/bin/autorestic && sudo chmod +x /usr/local/bin/autorestic
通过包管理器安装(仅限 Fedora)
如果我们使用 Fedora,安装 autorestic 最简单、最方便的方法是使用 dnf 包管理器,因为该工具包含在发行版的官方存储库中:
$ sudo dnf install autorestic
使用 autorestic Docker 镜像
官方 Docker autorestic 镜像可用;当运行基于它的容器时,我们需要将要备份的目录、autorestic配置文件和目标存储库(如果执行本地备份)绑定挂载到容器内的某个位置,并将autorestic指向带有 -c
选项的配置文件。下面是我们备份主机 /data
目录内容的示例:
$ sudo docker run --rm -v /data:/data:Z -v /etc/autorestic.yml:/etc/autorestic.yml:Z -v /mnt/restic_repo:/mnt/restic_repo:Z cupcakearmy/autorestic autorestic backup -va -c /etc/autorestic.yml
我们绑定安装了 /etc/autorestic.yaml
配置文件、/data
和 /mnt/restic_repo
目录(它们是源代码)和备份的目的地)在容器内各自的位置。对于每个绑定挂载,我们使用 Z
选项:仅当 SELinux 处于活动状态时才有必要,因为它将引用文件的标签更改为 object_r:container_file_t
,以便它们可以在容器内部访问。
自动调节配置文件
autorestic的核心是它的yaml配置文件。在此文件中,我们设置备份的源和目标、要使用的 Restic 选项以及许多其他内容。由于显而易见的原因,我们无法在这里涵盖所有可能的选项,因此我们只会看到基本的内容。
Autorestic 按优先级顺序在以下位置查找配置文件:
- .autorestic.yml
- 〜/ .autorestic.yml
- 〜/.config/autorestic/.autorestic.yml
在配置文件中,我们在“位置”部分定义备份源,在“后端”部分定义备份目的地。让我们从一个基本的例子开始。假设我们要将/data
目录的内容备份到/mnt/restic_repo
本地存储库。以下是我们填充 autorestic 配置文件的方法,我们将其保存为 .autorestic.yml
在当前工作目录中:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
每个位置均由小写名称标识;在本例中,我们使用“数据”来表示我们创建的数据。使用from
键,我们定义一个或多个要备份的目录:路径可以指定为绝对路径或相对于配置文件的路径。相反,使用 to
键,我们为该位置提供单个或多个目标或后端,同样通过名称引用它们。我们在“后端”部分定义每个目的地或“后端”。
在这个例子中,我们只定义了一个后端,我们称之为“localrepo”(就像位置一样,后端名称必须以小写形式定义)。通过将 type
键的值设置为“local”,我们指定后端是本地文件系统上存在的 Restic 存储库(众所周知,restic 支持很多存储平台;其中包括:Backblaze、S3 和 SFTP)。使用 path
键,我们指定了 Restic 存储库的路径,最后,使用 key
我们报告了存储库密码(将明文密码放入配置文件中可以危险,我们稍后会看到这种行为的一些替代方案)。
启动备份
现在,如果这是我们第一次运行备份,我们可以使用 autorestic check
命令,以确保一切都准备就绪。该命令将自动为我们初始化定义的后端,因此无需事先创建 Restic 存储库:
$ sudo autorestic check
要开始备份,我们现在可以使用 backup
命令:
$ sudo autorestic backup -va
上面,我们使用 -v
选项调用 autorestic,使其在详细模式下运行,并使用 -a
指示它执行所有现有位置的备份。如果我们定义了多个位置,并且我们只想备份其中的一个子集,我们可以将其名称的逗号分隔列表作为参数传递给 -l
选项,例如:
$ autorestic backup -v -l data
指定 Restic 选项
在 autorestic 配置文件中,我们可以为每个位置或全局指定要传递给 restic 的选项。应该调用的选项 Restic 是作为 options
键的值提供的。我们可以使用 backup
、forget
和 all
指定要为备份和忘记命令传递的选项,或者为这两个命令传递的选项 键,分别。这是一个例子。假设我们要在执行“数据”位置的备份时排除所有带有“.txt”扩展名的文件。我们会写:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Restic“forget”命令用于根据我们使用 --keep
选项指定的策略从存储库中删除旧快照。为了提供这些选项,我们在 forget
键下指定它们。例如,要始终保留所有最近的 10 个快照并删除较旧的快照,我们将使用 --keep-last=10
:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
当我们使用 forget
命令调用 autorestic 时,会应用“forget”选项:
$ autorestic forget -va
我们可以配置 autorestic,以便在每次备份后自动执行“forget”命令,方法是直接在位置定义中使用 forget
键。如果我们只想忘记快照,则可以将此键的值设置为 true
;如果我们还想从其中删除与被遗忘的快照相关的数据,则可以将其设置为 prune
存储库。这是一个例子:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
forget: prune
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
到目前为止,我们在配置文件中设置的选项仅对“数据”位置有效。如果我们有多个位置,并且希望对所有位置应用某些选项,则可以填充 global 部分,例如:
version: 2
global:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
特定于位置的选项会覆盖全局部分中设置的选项。如果我们只想指定异常,则此策略非常有用。
提供后端密码的其他方法
在前面的示例中,我们直接在配置文件中指定“localrepo”后端的密码。作为替代方案,我们可以将密码设置为启动 autorestic 时定义的环境变量的值,或者在名为 .autorestic.env
的专用文件中定义,该文件必须与配置文件位于同一目录中。为了使变量自动关联到特定后端,我们使用以下语法定义它:
AUTORESTIC_<BACKEND-NAME>_<VARIABLE_NAME>
因此,要为“localrepo”后端分配密码,我们可以编写:
AUTORESTIC_LOCALREPO_RESTIC_PASSWORD="repositorypassword"
我们还可以使用此策略来提供附加信息。例如,当使用远程 Backblaze 后端时,我们可以提供帐户 ID 和帐户密钥。假设我们定义了一个名为“backblaze”的备份,我们会这样写:
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_ID="123"
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_KEY="456"
另一种选择是使用 Restic 本机 --password-command
选项。使用此选项,我们可以提供一个必须将密码返回到标准输出的命令。例如,通过这种策略,我们可以从外部文件读取密码,如下所示:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
我们在“all”部分使用了该选项,以便无论我们运行备份还是忘记命令,它总是会被传递。
自动抑制钩子
Autorestic 允许我们使用以下钩子在特定时刻执行自定义命令:
- 预验证
- 前
- 后
- 失败
- 成功
prevalidate 钩子在其他所有事情之前运行,甚至在执行各种检查之前运行(例如,自动检查与某个位置关联的源目录是否存在);相反,before
挂钩在检查之后、启动备份之前执行。 after
挂钩始终在备份完成后执行,与退出状态无关(如果由于“prevalidate”或“在“钩子之前)。最后,与 failure
和 success
挂钩关联的命令分别在备份成功执行后或失败后调用。
在下面的示例中,如果备份成功,我们将使用 ntfy.sh 服务发送推送通知:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
hooks:
success:
- curl -d "backup executed succesfully!" ntfy.sh/lxcfg
backends:
localrepo:
type: local
path: /mnt/restic_repo
在挂钩期间,我们可以访问存储在一些预定义变量中的附加信息。以下是一些示例:
- AUTORESTIC_SNAPSHOT_ID
- AUTORESTIC_PARENT_SNAPSHOT_ID
- 自动RESTIC_FILES_ADDED
- AUTORESTIC_FILES_CHANGED
- AUTORESTIC_FILES_UNMODIFIED
- AUTORESTIC_LOCATION
结论
在本教程中,我们了解了如何使用 autorestic 包装器编排和组织 Restic 备份。 Autorestic 让我们通过创建和填充 yaml 配置文件来将多个位置备份到多个后端。我们了解了如何在最常用的 Linux 发行版上安装 autorestic,以及如何配置位置和后端。我们还学习了如何启动备份以及如何将自定义命令附加到 autorestic 提供的挂钩。要了解有关 autorestic 的更多信息,您可以查看官方文档。