每个系统都需要备份,因为丢失本地文件系统数据和配置的方式数不胜数。这种损失可能是灾难性的——可能导致收入损失、客户不满,甚至代价高昂的诉讼。《统计数据》相当悲观——60% 遭受数据丢失事件的企业会在六个月内倒闭,93% 失去数据中心超过十天的公司会在一年内申请破产。
一个惊人的统计数据是,96% 的公司没有备份用户工作站。这篇文章将向您展示如何使用 Restic 和 MinIO 的组合快速、轻松、不引人注意地进行备份。
高性能 MinIO 支持您能想到的任何在上面运行的工作负载。MinIO 是构建本地 数据湖 并将其公开给 AI/ML 和分析工作负载的标准。由于其业界领先的性能、可扩展性、S3-API 兼容性和持久性,MinIO 通常被用作备份目标。企业已经放弃了传统的磁带备份,转而依赖 MinIO 进行快速备份和恢复。不再需要管理、轮换和搜索磁带盒——MinIO 存储所有您的主要数据和备份,加快备份和恢复时间,同时消除备份损坏。
MinIO 不仅加速备份,还简化备份,与磁带相比,这极大地提高了自动化程度并降低了复杂性。使用基于容量的定价和无限无中断扩展的能力,可以轻松预测和控制工作负载——同时还提供企业级功能,例如云原生 安全和访问控制 和 双活复制。存储在 MinIO 中的数据受保护,因为 MinIO 对存储层中的对象进行加密,使用服务器端加密 (SSE)。MinIO 以极高的效率执行此操作——基准测试 表明 MinIO 能够以接近线速的速度进行加密/解密。
Restic 是一款现代备份程序,可以从 Linux、BSD、Mac 和 Microsoft Windows 备份到多种不同的存储类型,包括 S3、本地和云端。Restic 与 MinIO 配合良好,因为它开源、易于部署和使用、易于自动化,而且两者都是用快速的 Go 语言编写的。
继续阅读以了解更多关于使用 Restic 备份服务器和工作站以及将 MinIO 用作备份目标的信息。
如何使用 Restic 备份到 MinIO
本教程将向您展示如何使用 Restic 将数据备份到 MinIO。这是一种简单易用且功能强大的企业数据备份方法。Restic 对 MinIO 的功能与对 Amazon S3 相同,此外,MinIO 还具有额外的价值,它也可以作为 SFTP 服务器 用于 Restic 和更多其他功能。我们需要安装 MinIO 并记录 S3 兼容的帐户凭据。然后我们将安装 Restic,配置 MinIO 作为新的存储库并进行备份。
安装 MinIO
如果您尚未运行它,请在 裸机 或 Kubernetes 上安装 MinIO。
需要使用 MinIO 客户端 (mc) 访问 MinIO 服务器。以下是如何 在本地安装 mc。
记下您第一次运行 MinIO 服务器时显示的凭据和 S3 端点,因为您需要它们来配置您的 Restic 存储库。
安装 Restic
以下步骤使用的是 Ubuntu 20.04,但我也在 macOS 和 Windows 上安装并使用了 Restic。Restic 在每个系统上使用相同的命令和标志运行。
与 MinIO 一样,Restic 也很容易安装。
$ sudo apt update
$ sudo apt install restic
在使用之前更新 Restic
$ sudo restic self-update
…
successfully updated restic to version 0.16.2
Restic 将备份保存到本地或远程存储库。我们将使用 MinIO 作为 S3 兼容的存储库。
让我们创建 MinIO 存储库。设置我们在安装 MinIO 时获得的用于身份验证的变量。
$ export AWS_ACCESS_KEY_ID=<your-minio-access-key>
$ export AWS_SECRET_ACCESS_KEY=<your-minio-secret-access-key>
初始化您的 Restic 存储库
$ restic -r s3:http://your-minio-ip-address:9000/restic init
要进行自动备份,您可以使用 RESTIC_REPOSITORY
环境变量设置存储库,或使用标志 --repository-file
指定存储库。
您可以将所有环境变量放在一个文件中
$ vim ~/.restic-env
添加以下变量
export AWS_ACCESS_KEY_ID=<your-minio-access-key>
export AWS_SECRET_ACCESS_KEY=<your-minio-secret-access-key>
export RESTIC_REPOSITORY="s3:http://your-minio-ip-address:9000/restic"
export RESTIC_PASSWORD="your-strong-repository-password"
保存文件,然后将其作为源代码
$ source ~/.restic-env
最后,验证存储库
$ echo $RESTIC_REPOSITORY
s3:http://your-minio-ip-address:9000/restic
现在,您可以轻松地使用以下命令初始化存储库
$ restic init
现在,您在 MinIO 实例上有一个 restic
存储桶。

备份
存储库初始化后,我们就可以进行备份了。找到要备份数据的本地目录。在我的例子中,我将使用工作站上的 ~/openlake
目录作为示例。
## not using restic-env file
$ restic -r s3:http://10.0.0.10:9000/restic --verbose backup ~/openlake
## using restic-env file
$ restic --verbose backup ~/openlake
open repository
repository 914b1ddc opened (version 2, compression level auto)
…
processed 97 files, 111.876 MiB in 0:02
snapshot 1c334016 saved
速度很快!
在 Restic 中,备份称为快照。您可以使用以下命令列出所有快照
$ restic snapshots
repository 914b1ddc opened (version 2, compression level auto)
ID Time Host Tags Paths
-----------------------------------------------------------------------------
1c334016 2023-11-16 15:10:48 MDS-MINIO /home/msarrel/openlake
-----------------------------------------------------------------------------
1 snapshots
我们看到 restic
存储桶的内容已更新

我们最近的备份位于 snapshots
存储桶中。您可以看到对象名称与快照 ID 相同。

比较快照
再次备份本地计算机上与之前相同的目录。
现在,您在存储库中拥有相同数据的 2 个快照。
使用 diff
命令查看两个快照之间的差异。
$ restic diff 1c334016 d7044fee
repository 914b1ddc opened (version 2, compression level auto)
comparing snapshot 1c334016 to d7044fee:
[0:00] 100.00% 1 / 1 index files loaded
Files: 0 new, 0 removed, 0 changed
Dirs: 0 new, 0 removed
Others: 0 new, 0 removed
Data Blobs: 0 new, 0 removed
Tree Blobs: 0 new, 0 removed
Added: 0 B
Removed: 0 B
恢复
希望您不太需要使用此命令,但如果您需要,您会很高兴它高度可配置。
要将特定快照恢复到特定目标
$ restic restore 1c334016 --target /tmp/restore-openlake
repository 914b1ddc opened (version 2, compression level auto)
restoring <Snapshot 1c334016 of [/home/msarrel/openlake] at 2023-11-16 15:10:48.12843098 -0800 PST by msarrel@MDS-MINIO> to /tmp/restore-openlake
Summary: Restored 134 files/dirs (111.876 MiB) in 0:00
我们可以通过列出目标目录的内容来验证这一点。
要从最新快照恢复
$ restic restore latest --target /tmp/restore-new-openlake
repository 914b1ddc opened (version 2, compression level auto)
restoring <Snapshot d7044fee of [/home/msarrel/openlake] at 2023-11-16 15:24:38.906919692 -0800 PST by msarrel@MDS-MINIO> to /tmp/restore-new-openlake
Summary: Restored 134 files/dirs (111.876 MiB) in 0:00
自动化备份
我们在 MinIO 非常喜欢自动化,Restic 备份可以轻松地作为 cron
作业进行自动化。我们在创建 restic-env
文件以存储变量时已经迈出了第一步。
创建 cron
作业
$ crontab -e
输入以下内容,为您的环境进行自定义
30 * * * * ./home/msarrel/.restic-env; restic backup -q /home/msarrel/openlake; restic forget -q --keep-last 2 --prune
解释
- 30 * * * * 每小时、每天、每月和每周的每 30 分钟运行一次备份
- ./home/msarrel/.restic-env; 是声明环境变量的位置
- restic backup -q /home/msarrel/openlake; 是备份命令
- restic forget -q --keep-last 2 --prune 用于维护运行的快照存档。在这里,我们修剪除最后两个快照以外的所有快照。
使用 Restic 和 MinIO 进行简单快速的备份
这篇文章向您展示了如何使用 Restic 通过 S3 API 将 Linux 系统备份到 MinIO。我们只演示了一些基本命令。有关更多详细信息,包括加密、调整备份参数和设置恢复选项,请参阅 简介 - restic 0.16.2 文档。
Restic 和 MinIO 的组合提供了一种快速、高效、安全且可自动化的备份解决方案。通过少量脚本,您可以轻松地保护整个组织的工作站和服务器中的数据。
您如何以及将什么备份到 MinIO?加入我们的 社区 Slack,分享关于如何充分利用 MinIO 部署的技巧和窍门。