在 Debian 10 上使用 restic 和 Wasabi 进行经济的仅附加异地备份在 Debian 10 上使用 restic 和 Wasabi 进行经济的仅附加异地备份在 Debian 10 上使用 restic 和 Wasabi 进行经济的仅附加异地备份在 Debian 10 上使用 restic 和 Wasabi 进行经济的仅附加异地备份
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

在 Debian 10 上使用 restic 和 Wasabi 进行经济的仅附加异地备份

本指南介绍如何在 Debian Buster 上安装和配置免费备份软件 restic 以在云存储公司 Wasabi 存储异地备份。本指南的主要优点是它提供了强制性的仅附加备份。这意味着一旦备份完成,它就不会被覆盖或从创建备份的系统中删除,这意味着它是安全的。这意味着备份存档可以免受原始服务器的自然灾害(例如火灾)和人为事故(例如 root shell 提示符下的错误)的影响。备份在加密存储的意义上也受到保护,这意味着只有拥有备份密码的人或系统才能读取它。

请注意,本指南按原样提供,不提供任何保证。备份软件 restic 尚未达到 1.0 版,因此您永远不应将其用作唯一的备份解决方案。为了防止最终发生的事故,请确保在开始之前备份您打算用于本指南目的的系统。还要确保通过测试还原来测试您所做的备份是否真的有效。

该指南基于 Debian Buster (Debian 10) 并经过测试。较旧的 Debian 版本不在本指南的范围内,但如果您想自己试验,应该可以添加 Debian Buster apt 软件包存储库以在 Debian Jessie 或 Stretch 上安装最新版本的 restic、tinyproxy 和 rclone。

本指南分为五个部分:

在第一部分中,我们将在 Wasabi 云 存储中准备一个帐户,稍后我们将在其中存储备份。 Wasabi 提供 30 天免费试用以供测试。

其次,我们将安装和配置rclone,它一方面提供对Wasabi 存储的访问,另一方面提供restic 对存储的访问接口。

第三,tinyproxy - 一个简单的代理服务器 - 将被准备好,因为需要它作为使存储与 restic 一起以仅附加方式工作的中间体。

第四,我们将设置备份程序restic。

作为最后一步,我们将测试 进行备份和部分恢复。

1 在Wasabi云存储准备一个账户

1.1 开设 Wasabi 账户

Wasabi 有 30 天的免费试用期,可在此处找到:

在上面的网页上填写表格后,您将收到 Wasabi 网络界面的访问数据。使用您的访问数据在此页面登录:

1.2 创建一个数据桶和一个锁桶

我们现在将创建两个所谓的“桶”。存储桶是您存储数据的存储容器。

通过单击网页右上角名为 Create Bucket 的红色图标来创建第一个存储桶。第一个存储桶将存储所有备份数据,我们稍后将其称为 DATABUCKET。您知道需要选择一个存储桶名称。例如,您可以使用以下格式作为存储桶名称的模板:

yourdomain.com-restic-data

请将上面模板名称中的 yourdomain.com 替换为您要备份的计算机的域名。设置DATABUCKET名称后,请记下。稍后您将需要用它来替换本指南后面的模板中的占位符文本 DATABUCKET。

然后选择您希望存储桶所在的区域。为获得最佳性能,最好选择要备份的服务器所在的区域/大洲。因此,如果您的服务器在欧洲,您可以选择:

eu-central-1

然后按下一步。

在下一页显示两个选项:分别用于Bucket Versioning 和Bucket Logging。您可以让这些选项保持默认值,即 Suspend Versioning 和 Suspend Logging。然后单击下一步,然后单击创建存储桶。

现在,重复相同的过程并创建另一个存储桶。这第二个桶将只用于存储 restic 的锁定信息。我们稍后将其称为 LOCKBUCKET。再次点击 Create Bucket 按钮,现在为第二个 bucket 选择一个名称,例如使用以下格式:

yourdomain.com-restic-locks

请将上面模板中的 yourdomain.com 替换为要备份的计算机的域名。设置LOCKBUCKET名称后,请记下。稍后您将需要它来替换本指南后面的模板中的 LOCKBUCKET。

(Restic 使用锁来确保一次只有一个客户端进行备份或恢复。我们需要一个单独的存储桶来存储锁定信息的原因是 restic 需要能够添加和删除锁,因此我们需要一个存储桶允许删除。)

1.3 创建用户

单击最顶部图标行中的 IAM 图标。您现在已进入身份和访问管理。点击左侧栏中的用户。然后点击名为+创建用户的红色图标,选择一个逻辑用户名,比如你要备份的服务器的域名。例如,用户名可以是 system1.example.com。设置用户名后,请记下它,以便您可以用您的值替换本指南后面的模板中的USERNAME。

在对话框的访问部分下,选中名为程序化(创建 API 密钥) 的复选框。然后单击下一步。为用户创建一个组。如果您的所有服务器都位于一个主域下,则该主域可以是一个合适的组名。现在点击下一步。在下一页(策略创建)上,只需单击“下一步”。最后,点击创建用户按钮。

在对话窗口底部的Secret Key 文本右侧,您会找到一个名为Show 的小链接,您应该点击该链接。将ACCESS KEY 和SECRET KEY 保存在文本文件中。稍后当我们从您要备份的客户端计算机配置对 Wasabi 的访问时,您将需要此信息。

1.4 创建策略

为了允许我们创建的用户访问这两个存储桶,我们需要创建一个访问策略。

点击 Wasabi 网络界面左侧栏中的政策。然后点击红色按钮 Create Policy。您可以选择要备份的计算机的域名作为策略名称,例如 system1.example.com 。在左上方的字段中写下策略名称。

以下是您将用作实际政策基础的模板。将模板复制到文本编辑器,然后将文本文件中出现的两次 DATABUCKET 替换为您为第一个存储桶指定的名称,以及两次出现的 <LOCKBUCKET 使用您为第二个存储桶选择的名称。

{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Action": "s3:ListAllMyBuckets",
 "Resource": "arn:aws:s3:::*"
 },
 {
 "Effect": "Allow",
 "Action": "s3:*",
 "Resource": [
 "arn:aws:s3:::DATABUCKET",
 "arn:aws:s3:::DATABUCKET/*",
 "arn:aws:s3:::LOCKBUCKET",
 "arn:aws:s3:::LOCKBUCKET/*"
 ]
 }
 ]
}

复制您从文本编辑器中创建的策略并将其粘贴到 Wasabi 网页对话窗口的大主字段中。然后点击保存。

1.5 应用政策

现在需要将策略应用到用户。点击左侧的用户,然后点击您创建的用户。现在点击权限选项卡(在灰色水平菜单的右侧)。然后,在开始键入以查找用户策略 下的文本字段中,开始键入您在创建策略时选择的策略名称的首字母。单击您的保单名称。现在您已将策略应用到用户。

1.6 设置数据桶为不可变的(append-only)

出于安全原因,我们希望不可能从客户端(进行备份的计算机)覆盖已经进行的备份。为了实现这一点,我们使用了 Wasabi 不可变特性。在 Wasabi 的 Web 界面中,点击 Storage(在顶部栏中)。然后单击 DATABUCKET (可能是以 restic-data 结尾的那个)。点击设置的白色齿轮(右上角)。然后点击上方白色栏中的Compliance。单击合规模式右侧的滑块 以激活此模式。如果你愿意,你可以激活保留后删除,但你必须确保在保留时间中设置一个较大的值,这是每个文件在客户端之后保留的最短时间试图删除它。例如,将 100 年放在这里。 (似乎您不能为无限保留时间将此字段留空。)这意味着数据在 100 年内是安全的,在此期间数据不能被删除或修改。按保存以保存您的设置。

1.7 创建锁文件夹

在 Wasabi 的 Web 界面中,点击 Storage(在顶部栏中)。然后单击 LOCKBUCKET(以 restic-locks 结尾的那个)。

现在按名为创建文件夹 的绿色按钮。将文件夹命名为 locks 以便稍后可以将其用于 restic 锁文件。

我们现在完成了 Wasabi Web 界面中的配置。在下一节中,我们将在要备份的计算机的终端开始工作。

2 安装配置rclone

2.1 首先,通过您现有的系统进行备份

现在是时候访问要从中获取备份的计算机了。

请记得用现有系统备份这台电脑!在继续之前,还请通过测试还原测试备份是否有效。万一某些事情无法按预期工作,那么能够恢复到正常运行的阶段至关重要。

2.2 安装rclone

下面显示的所有行都应输入终端,然后按 Enter。

连接到要从中进行备份的计算机的终端,例如通过 SSH。然后发出此命令成为 root:

su -

然后是 Enter 和 root 密码。需要根访问权限,因为我们将从 Debian 存储库安装新程序。

现在安装 rclone:

apt install rclone

2.3 配置rclone连接Wasabi

然后配置 rclone,键入以下命令:

rclone config

然后输入:

n

现在是时候为配置选择一个名称了。请注意。名称中不允许使用(点),但另一方面允许使用 -(破折号)。为了命名您的 rclone 配置,请使用此模板,但首先将 yourdomain-com 替换为您自己的域名,首先替换。域名中的(点)和 -(连字符):

wasabi-你的域名-com-restic

保存您为 rclone 配置指定的名称,稍后您将用该名称替换占位符 RCLONECONFIG。

然后为 Amazon S3 Compliant Storage Providers 打印 4 并输入

然后为Wasabi Object Storage 打印7 并回车

然后打印1为Enter AWS credentials in the next step并回车

复制您之前保存在文件中的 ACCESS KEY 并粘贴,然后按 Enter

然后复制并粘贴您之前也保存在同一文件中的SECRET KEY,然后按 Enter

打印您为存储桶选择的区域。如果单击 Wasabi Web 界面顶行中的存储,则可以找到该区域。例如,为欧洲键入此区域,然后输入:

eu-central-1

对于 Endpoint for S3 API,如果存储桶位于欧盟地区,请键入此内容,然后按 Enter:

s3.eu-central-1.wasabisys.com

如果您的存储桶在美国,请在本文档中找到您的端点名称:

将 Location constraint 留空,然后按 Enter

按 1 Owner gets FULL_CONTROL 然后输入

按y Edit advanced config 然后回车

按 Enter 获取块大小
的默认值

按 Enter 获取禁用校验和
的默认值

按 Enter 获取会话令牌的默认值

为上传并发输入16,然后输入

按 Enter 获取 force_path_style 的默认值

按 Enter 获取 v2_auth 的默认值,然后按 Enter

按 y 表示 Yes this is OK 并输入

按 q 以退出配置。

现在 rclone 的配置已经完成。

2.4 测试 rclone 与 Wasabi 是否兼容

现在通过这个命令创建一个测试文件:

回声测试 >> /tmp/test.txt

通过以下命令传输测试文件。但是,您首先需要将 RCLONECONFIG 更改为您的值,并将 DATABUCKET 更改为该参数的值。一切都在一条线上:

rclone -v sync /tmp/test.txt RCLONECONFIG:DATABUCKET/

如果一切正常,您现在应该会在 DATABUCKET 的 Wasabi 网络界面中看到 test.txt 文件。请注意,有时它可能需要大约。文件显示前 1 分钟。还要用另一个桶测试传输,那个桶以 restic-locks 结尾:

rclone -v sync /tmp/test.txt  RCLONECONFIG:LOCKBUCKET/

现在再次检查 Wasabi 网络界面,寻找应该在 LOCKBUCKET 中的文本文件。

2.5 设置 rclone 通过 systemd 服务 restic

Rclone 具有使用云存储空间(在我们的例子中是 Wasabi)的内置功能,并以兼容的方式将其提供给 restic。这种运行 rclone 的方式是通过作为服务器进程的命令 rclone serve restic 完成的。我们将需要两个这样的服务器进程:一个主要用于几乎所有的事情,第二个只处理 restic 锁文件。

首先,创建一个静态用户:

adduser restic

将 rclone 配置从 root 用户复制到 restic 用户:

su restic
mkdir -p /home/restic/.config/rclone
exit
cp -a /root/.config/rclone/rclone.conf /home/restic/.config/rclone/
chown restic.restic /home/restic/.config/rclone/rclone.conf

创建一个 systemd 控制文件,例如通过 nano 编辑器:

nano /etc/systemd/system/restic-data.service

该文件应包含以下数据。请注意,和以前一样,您需要将 RCLONECONFIG 值以及 DATABUCKET 值更改为您的设置。

[Unit]       
Description=Rclone serve restic data on wasabi
After=network.target

[Service]
Type=simple
User=restic
Group=restic
ExecStart=/usr/bin/rclone serve restic RCLONECONFIG:DATABUCKET --addr=127.0.0.1:8001 --append-only --retries 10 --transfers 20 --s3-upload-concurrency 8 --s3-chunk-size 16M
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target

保存文件。它的目的是让 rclone 为 Wasabi 云存储桶提供静态接口。我们刚刚创建的 systemd 服务将在下次启动时自动启动,但首先我们需要通过以下命令激活它:

systemctl daemon-reload
systemctl enable restic-data
systemctl start restic-data

然后我们检查服务是否已经启动:

systemctl status restic-data

如果一切正常,您现在应该看到 Active: active (running) 。按 q 退出状态显示。

现在我们已经在端口 8001 上安装了 rclone serve restic 服务,它连接到一个仅附加的存储桶,并将存储备份。

接下来,我们需要在端口 8002 上为静态锁定系统提供另一个服务,连接到第二个读写桶。因此,我们将重复我们刚刚完成的步骤,并稍作修改。

创建 systemd 控制文件:

nano /etc/systemd/system/restic-locks.service

该文件应包含以下数据。以 ExecStart= 开头的行是一个单独的长行,在下面分成三行。请将 RCLONECONFIG 值以及 LOCKBUCKET 值更改为您的设置。

[Unit]       
Description=Rclone serve restic locks on wasabi
After=network.target

[Service]
Type=simple
User=restic
Group=restic
ExecStart=/usr/bin/rclone serve restic RCLONECONFIG:LOCKBUCKET --addr=127.0.0.1:8002
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target

保存文件并通过以下方式激活它:

systemctl daemon-reload
systemctl enable restic-locks
systemctl start restic-locks

检查服务是否已经启动:

systemctl status restic-locks

您现在应该看到 Active: active (running)。

按 q 退出。

现在我们已经创建了两个 rclone serve restic systemd 服务,首先在端口 8001 上以仅附加模式为主服务,然后在端口 8002 上以读写模式为锁定服务。

3 准备tinyproxy

Tinyproxy 会将这两个服务融合在一起,形成一个统一的前端呈现给 restic。它安装在您要备份的计算机的根终端中:

apt install tinyproxy

然后创建 tinyproxy 配置文件的备份:

cp -a /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.bak

如果在此处找不到该文件,通常可以在 /etc/tinyproxy.conf 中找到。

现在,编辑配置文件:

nano /etc/tinyproxy/tinyproxy.conf

您应该对现在将详细说明的文件进行一些更改。首先,注释掉预设的端口号并设置一个新的端口号:

#Port 8888
Port 8000

其次,重要的是只允许来自本地主机的连接,因此添加一个 Listen 行:

#Listen 192.168.0.1
Listen 127.0.0.1

第三,将超时值更改为一小时:

#Timeout 600
Timeout 3600

第四,将tinyproxy连接到两个rclone serve restic systemd服务。它们必须按照如下所示的顺序编写:一般规则在前,具体规则在后,因为在 tinyproxy 中,最后的规则总是在平局的情况下获胜。

ReversePath "/" "http://127.0.0.1:8001/"
ReversePath "/locks" "http://127.0.0.1:8002/locks"

最后,让 tinyproxy 在 reverse-only 模式下独占运行:

#ReverseOnly Yes
ReverseOnly Yes

现在,所有必要的编辑都已完成。请保存配置文件,在 nano 中按 Ctrl+O 执行此操作,然后使用 Ctrl+X 退出 nano 返回终端。

为了激活 tinyproxy,我们现在将重新启动它:

systemctl stop tinyproxy
systemctl start tinyproxy

最后请检查tinyproxy是否正常运行:

systemctl status tinyproxy

按 q 退出。现在,tinyproxy 已配置为供 restic 使用。在下一节中,我们将自行设置 restic。

4 设置restic备份程序

最后,我们将执行配置的最后一步,即设置 restic 备份程序。首先,安装restic:

apt install restic

然后我们需要初始化restic的环境变量。首先,我们通过在终端中输入以下内容来指定 restic 存储库位置:

export RESTIC_REPOSITORY='rest:http://127.0.0.1:8000/'

现在请为您的备份决定一个强密码。将密码短语存储在安全的地方很重要。需要密码才能访问备份,因为这些备份已完全加密。将下面的 PASSPHRASE 替换为您选择的密码,然后在终端中输入命令:

export RESTIC_PASSWORD='PASSPHRASE'

现在让我们创建 restic 存储库:

restic init

让我们测试 restic 是否正常工作。我们已经将密码存储在 RESTIC_PASSWORD 环境变量中,因此我们可以访问存储库以列出快照:

restic snapshots

如果一切顺利,我们现在应该得到一个空列表(因为我们还没有做任何备份)和文本 0 snapshots。

我们现在已经为备份存储准备好了一切,可以继续执行备份和恢复的最后步骤。

5 测试备份和部分恢复

在本教程的最后一步,我们将对系统进行完整备份,然后测试部分还原。为此,将创建两个 shell 脚本(一个用于备份,另一个用于恢复)。

5.1 准备备份脚本

首先,您需要有一个备份脚本,可以通过 cron 以合适的时间间隔运行,例如,每天一次。例如,备份脚本可以创建为只有 root 可以访问的文件,然后使用 nano 进行编辑:

touch /usr/local/bin/backup-restic.sh 
chown root.root /usr/local/bin/backup-restic.sh
chmod 700 /usr/local/bin/backup-restic.sh
nano /usr/local/bin/backup-restic.sh

以下是备份脚本内容的示例,其中您需要将 PASSPHRASE 更改为您之前选择的密码。

#!/bin/sh
export RESTIC_REPOSITORY='rest:http://127.0.0.1:8000/'
export RESTIC_PASSWORD='PASSPHRASE'      
restic backup / --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/mnt --exclude=/root/.cache

请注意上面的排除 - 您可能想要更改从备份中排除的目录。

5.2 运行备份脚本

保存文件并通过终端运行它:

/usr/local/bin/backup-restic.sh

几秒钟后,您应该会看到 restic 如何遍历您的文件,以及已完成备份的估计百分比。 ETA 是对距离最终确定还剩多少时间的粗略估计,以分钟和秒为单位。第一次备份需要相当长的时间,但随后的备份很快,因为只需要传输自上次备份以来更改或创建的文件。

为了定期运行备份,在 crontab 中添加一行。首先编辑 /etc/crontab :

nano /etc/crontab

然后添加备份的计划。例如,如果备份应在每天凌晨 02:00 运行,请将此行添加到 /etc/crontab :

00 02           * * *   root    /usr/local/bin/backup-restic.sh

(请注意,cron 以 mm:hh 的格式运行——即小时之前的分钟。)

5.3 测试恢复工作

一个备份系统永远不会完成,直到人们测试恢复工作良好。我们将使用 restic 的 fuse mount 来浏览最新的备份。在终端中键入此内容,将 PASSPHRASE 更改为您之前选择的静态密码:

mkdir /mnt/restic
export RESTIC_REPOSITORY='rest:http://127.0.0.1:8000/'
export RESTIC_PASSWORD='PASSPHRASE'
restic mount /mnt/restic &
cd /mnt/restic
cd snapshots
cd latest
ls

现在您将能够看到最后的快照(最后进行的备份)。您可以与 diff 比较文件是否已正确备份,例如 /etc/fstab :

diff /mnt/restic/snapshots/latest/etc/fstab /etc/fstab

如果您没有从 diff 中得到任何输出,则这两个文件是相同的,并且该文件的备份有效。另一方面,如果您在上次备份后更改了文件,您将看到文件中的哪些行不同。


最后,我们将卸载静态保险丝座:

cd ~
umount /mnt/restic/

5.4 结语

恭喜,如果一切顺利,您现在已经完成了具有几个强大功能的辅助备份系统的设置:

备份系统是异地,这意味着它可以保护数据免受进行备份的计算机可能发生的意外事故的影响。

它也是仅附加,这意味着制作备份的计算机上的病毒或事故不会覆盖之前已经制作的备份。删除备份的唯一方法是通过 Wasabi 网络界面登录,因此您应该保护您在 Wasabi 网络界面上的登录数据。最好您可以启用 2FA(双因素身份验证)以获得更高的安全性。

如果启用 cron 作业,备份系统也是自动。但是,请始终记住定期测试恢复,以便您可以验证备份是否有效。

与使用 Wasabi 的许多其他在线云存储服务相比,具有快速传输和有竞争力的价格的优势。

该系统适用于二次备份,作为额外的保险,以防万一第一个备份系统因任何原因失败。最后,一个重要的优势是它可扩展到您需要的任何大小 - 您只需按 GB 存储量付费(尽管您总是必须至少支付 1 TB 的费用)并且实际上对最大存储量没有任何限制空间。

©2015-2025 艾丽卡 support@alaica.com