HestiaCP 自带的备份功能提供了强大的数据保护功能,可以轻松地对用户数据进行全量备份。其实现方式是打包整个用户目录下的所有文件,这对于大多数用户来说已经足够。但如果你需要更高效、灵活的备份方式,尤其是增量备份,那么使用 Restic 进行备份将是一个更好的选择。

restic · Backups done right!

增量备份相比全量备份,能够只备份发生变化的数据,从而大幅减少备份数据量,节省存储空间并提高备份速度。虽然 HestiaCP 在未来的版本中计划内建对 Restic 增量备份的支持,但它仍然局限于备份位于用户目录下的文件。为了实现更灵活的备份,我们可以通过安装 Restic 和配置 Autorestic 来实现自动化增量备份,并且不仅限于用户目录的文件。

在本篇教程中,我们将详细介绍如何在 HestiaCP 中安装 Restic、配置 Autorestic,并通过定时任务实现自动增量备份。

安装使用 Restic

安装

Restic 的安装很简单。

sudo apt update
sudo apt install restic

安装后更新 Restic

sudo restic self-update

设置存储库

之前我们介绍了 MinIO 的安装方法。

HestiaCP 安装 MinIO 教程
在Hestiacp中新建网站,配置ssl,新建数据库的操作就不再赘述了。如果你是第一次看到hestiacp系列教程,请点击下方链接,就能看到完整的一系列教程了。 HestiaCP - HOSTEYEHOSTEYE由 FOXCOO 如果你想利用hestiacp的备份与恢复功能,那就将minio安装到网站目录下。这里将以此类情况演示。 安装 MinIO 服务器 这里新建用户不建议用minio 你可以使用minio-user 。 因为要利用hestiacp的备份与恢复功能,所以我们全部自定义安装。 然后进入网站目录/home/minio-user/web/xxx.com/public_html/ 使用以下命令下载最新的稳定 MinIO 二进制文件并将其安装到系统 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio 使用 systemd 守护进程 在 /etc/systemd/

Restic 支持将备份保存到本地或远程存储库,我们将使用 MinIO 作为 S3 兼容的存储库来保存备份数据。

首先,在 MinIO 中创建一个新的存储桶,命名为 restic,然后生成一对 Access Keys(访问密钥)。接下来,使用 MinIO 的凭据设置以下环境变量:

export AWS_ACCESS_KEY_ID=<YOUR-MINIO-ACCESS-KEY-ID>
export AWS_SECRET_ACCESS_KEY=<YOUR-MINIO-SECRET-ACCESS-KEY>

接着,初始化 Restic 存储库:

restic -r s3:https://xxx.com/restic init

在初始化过程中,系统会提示你设置一个密码。请务必妥善保存此密码,因为一旦丢失,无法访问或恢复存储库中的备份数据。

备份

现在,我们准备备份一些数据。在 Restic 中,特定时间点的目录内容被称为“快照”。运行以下命令进行备份,并输入你之前设置的存储库密码:

restic -r s3:https://xxx.com/restic --verbose backup /data
  • 在这里,--verbose 参数将提供更多的备份信息。

备份完成后,Restic 会创建一个名为十六进制字符的快照。如果你再次运行相同的备份命令,Restic 会创建另一个快照,但由于之前的数据已经存在,新的快照不会增加新的数据。

你甚至可以只备份单个文件,例如:

restic -r s3:https://xxx.com/restic --verbose backup /data/test.txt

快照可以拥有一个或多个标签,用来为快照添加标识信息。使用 --tag 参数逐一指定标签:

restic -r s3:https://xxx.com/restic --verbose backup --tag projectX --tag foo --tag bar /data

要查看所有的快照,可以使用以下命令:

restic -r s3:https://xxx.com/restic snapshots

假设你已经有两个存储库:一个本地存储库和一个远程存储库。可以使用以下命令将快照从本地存储库复制到远程存储库:

restic -r /srv/restic-repo-copy copy --from-repo /srv/restic-repo
  • 源存储库使用--from-repo指定

更多关于排除文件、备份功能以及快照比较等高级用法,请参考 Restic 官方文档

恢复

要恢复快照的内容,可以使用 restic restore 命令。以下命令将最新快照的内容恢复到 /data 目录:

restic -r s3:https://xxx.com/restic restore 1c33a516 --target /data

在这个命令中:

  • 1c33a516 是要恢复的快照 ID。你可以从 restic snapshots 命令中获取到快照 ID。
  • --target /data 指定恢复的目标目录。

如果你希望恢复最新的备份,可以使用 latest 关键字来代替快照 ID:

restic -r s3:https://xxx.com/restic restore latest --target /data

这会自动恢复最近创建的快照。

关于如何恢复单个文件或选择性恢复,请参考 Restic 官方文档 获取更多高级用法。

删除

如果你需要删除某个特定的快照,可以使用 restic forget 命令,并在命令行中指定要删除的快照 ID。例如,要删除 /home/art 目录的快照,可以运行:

restic -r s3:https://xxx.com/restic forget bdbd3439

你可以通过运行 restic snapshots 命令获取快照 ID。

清理未引用的数据

执行 forget 命令后,虽然指定的快照被删除,但这些快照中的文件引用的数据仍然保留在存储库中。要完全清理这些未引用的数据,必须运行 prune 命令:

restic -r s3:https://xxx.com/restic prune

定义快照保留策略

Restic 允许你通过指定保留策略来自动管理快照的生命周期。使用 --keep-* 选项,你可以定义保留哪些快照,删除不符合条件的其他快照。以下是一些常用的保留策略:

  • --keep-last n 保留最近的 n 个快照,删除其他的。
  • --keep-hourly n 保留过去 n 小时内每小时一个快照,删除更早的。
  • --keep-daily n 保留过去 n 天内每天一个快照,删除更早的。
  • --keep-weekly n 保留过去 n 周内每周一个快照,删除更早的。
  • --keep-monthly n 保留过去 n 个月内每月一个快照,删除更早的。
  • --keep-yearly n 保留过去 n 年内每年一个快照,删除更早的。

例如,想要保留最近的 5 个快照、每小时一个、每周一个和每月一个快照,可以运行:

restic -r s3:https://xxx.com/restic forget --keep-last 5 --keep-hourly 24 --keep-weekly 4 --keep-monthly 12

这将根据你指定的策略,自动保留符合条件的快照,并删除不符合条件的旧快照。

管理存储卡密钥

Restic 允许你管理每个存储库的密钥,使用 key 命令,你可以列出、添加、删除和更改密码。常用命令如下:

  • 列出密钥
    查看存储库中的所有密钥:
restic -r s3:https://xxx.com/restic key list

会显示每个密钥的 ID、用户和创建时间。

  • 添加新密钥
    向存储库中添加新密钥:
restic -r s3:https://xxx.com/restic key add

输入存储库密码并设置新密钥的密码。

  • 删除密钥
    删除一个密钥:
restic -r s3:https://xxx.com/restic remove <KEY-ID>

使用 key list 命令获取要删除的密钥 ID。

  • 更改密码
    更改存储库的访问密码:
restic -r s3:https://xxx.com/restic key passwd

输入当前密码并设置新密码。

安装使用 Autorestic

GitHub - cupcakearmy/autorestic: Config driven, easy backup cli for restic.
Config driven, easy backup cli for restic. Contribute to cupcakearmy/autorestic development by creating an account on GitHub.

Restic 本身没有内置的定时备份功能,因为它是一个手动运行的工具。

为了自动定期备份,我们需要使用 Autorestic。它可以帮助你安排和自动执行备份任务,确保数据定期备份而不需要手动操作。

安装

wget -qO - https://raw.githubusercontent.com/cupcakearmy/autorestic/master/install.sh | bash

配置

默认情况下,Autorestic 会在以下路径中查找 .autorestic.yml 配置文件:

  • ./.autorestic.yml
  • ~/.autorestic.yml
  • ~/.config/autorestic/.autorestic.yml

你也可以通过 -c 选项指定一个自定义的配置文件路径:

autorestic -c path/to/some/config.yml

下面是一个示例配置:

version: 2

locations:
  hestiacp_backup:
    from: /backup           # 备份的源路径
    to: HETZNER                 # 存储位置名称
    cron: '0 3 * * *'        # 定时备份任务,每天3点执行
    forget: prune            # 删除策略:使用prune来清理旧备份
    options:
      all:
        tag: hes_backup      # 为所有备份添加标签
      forget:
        keep-last: 50        # 保留最近的50个快照
        keep-daily: 7        # 保留最近7天的备份
        keep-weekly: 4       # 保留最近4周的备份
        keep-monthly: 12     # 保留最近12个月的备份
        keep-yearly: 3       # 保留最近3年的备份

backends:
  HETZNER:
    type: s3                # 使用S3存储后端
    path: https://xxx.com/restic  # 存储库地址
    key: 123456789          # 存储库密钥
    env:
      AWS_ACCESS_KEY_ID: AAAAAAAAAAAAAA  # S3访问密钥
      AWS_SECRET_ACCESS_KEY: AAAAAAAAAAAAAAA  # S3秘密访问密钥
  • locations:指定备份的位置,包括备份源 (from)、存储目标 (to)、以及定时任务 (cron)。
  • backends:配置备份存储后端,在这个例子中是 S3,指定了存储库路径、密钥和相关环境变量。

使用 copy 选项

可以使用 copy 命令将快照从一个存储库复制到另一个,避免重新计算备份。

locations:
  my-location:
    from: /data
    to:
      - a
      - b
    copy:
      a:
        - c

定时备份

定时备份配置

首先,打开 crontab 编辑模式:

crontab -e

在文件底部添加以下内容并保存:

# 设置环境变量,确保能找到 restic 命令
PATH="/usr/local/bin:/usr/bin:/bin"

# 每5分钟触发一次备份
*/5 * * * * autorestic -c /path/to/my/.autorestic.yml --ci cron

autorestic cron 的工作原理

  • 定时触发备份autorestic cron 会根据配置文件中定义的备份任务(如 locations 部分)自动执行备份,无需手动操作。
  • 独立于位置的 cron 设置:每个位置的 cron 属性独立配置,autorestic cron 会定期检查并执行所有任务。

手动备份与自动备份

手动执行的备份(如 autorestic backup)与定时任务(cron)相互独立,不会互相影响。手动备份立即执行,而定时备份根据设定的时间表自动触发。

更多请参考官方文档

autorestic – Nextra
Nextra: the next docs builder

注意事项

Restic 备份操作的基础和原理

  1. 增量备份原理: Restic 是增量备份软件,每次备份时会仅保存自上次备份以来发生变化的文件。Restic 会通过文件的内容、路径、标签和主机来判断哪些文件需要备份。
  2. 判断依据: Restic 判断是否需要进行备份,主要依赖以下几个参数:只要你能够“欺骗” Restic,让它认为文件发生了变化(即使内容没有变),你就可以使 Restic 执行新的备份。
    • Host:主机名。
    • Tags:标签。
    • Paths:备份的文件路径。
  3. 由于使用的是 HestiaCP,在不同的主机上安装时需要配置不同的域名,因此通常情况下,即使不使用标签(Tags),也不会触发增量备份,因为 Restic 会根据主机名(Host)来判断是否为新的备份。

迁移 Restic 存储库到新服务器

如果你将 Restic 存储库迁移到新的服务器,并且新服务器能够正确访问原有的 S3 存储桶(即存储库所在位置),只要提供了正确的访问凭证,你无需重新初始化存储库

配置完凭证后,你可以直接使用现有的存储库进行备份、恢复等操作,而不需要重新初始化存储库。


包含的标签:

教程, HestiaCP

最后更新: December 11, 2024