前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Restic Backup Client将数据备份到对象存储服务

如何使用Restic Backup Client将数据备份到对象存储服务

原创
作者头像
乌鸦
发布2018-07-20 17:59:40
3.7K1
发布2018-07-20 17:59:40
举报

介绍

Restic是一个用Go语言编写,安全且高效的备份客户端。它可以将本地文件备份到许多不同的后端存储库,例如本地目录,SFTP服务器或对象存储服务。

在本教程中,我们将安装Restic并在对象存储服务上初始化存储库。然后我们会将一些文件备份到存储库。最后,我们将配置一些文件,另其可以自动执行备份以获取每小时快照,并在必要时自动精简旧快照。

准备

对于本教程,您需要一台基于UNIX的计算机,其中包含一些您要备份的文件。虽然Restic本身适用于Mac,Linux和Windows系统,但本教程中使用的命令和技术仅适用于MacOS和Linux。

Restic的运行需要大量内存,因此请保留1GB或更多的RAM。

您还需要了解有关对象存储服务的以下详细信息:

  • 访问密钥
  • 密钥
  • 服务器URL
  • Bucket名称

获得对象存储信息后,请继续按照下一部分安装Restic软件。

安装Restic Backup Client

Restic可用作许多平台的可执行预编译文件。这意味着我们可以下载单个文件并运行它,不需要包管理器或依赖项。

首先我们使用Web浏览器导航到GitHub上的Restic发布页面。您将在“下载”标签下找到一个文件列表。

64位Linux系统(最常见的服务器环境)请查找以_linux_amd64.bz2结尾的文件。

MacOS系统请查找以_darwin_amd64.bz2结尾的文件。

右键单击正确的文件,然后选择“ 复制链接地址”

接下来,在您要备份的计算机上的终端会话的主目录中(如果它是远程计算机,您可能需要先通过SSH登录)使用curl命令下载该文件:

代码语言:txt
复制
$ cd ~
$ curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

解压缩我们下载的文件:

代码语言:txt
复制
$ bunzip2 restic*

然后将文件复制到/usr/local/bin并更新其权限。我们需要使用sudo完成这两个操作,因为普通用户没有写入/usr/local/bin的权限:

代码语言:txt
复制
$ sudo cp restic* /usr/local/bin/restic
$ sudo chmod a+x /usr/local/bin/restic

通过调用无参数restic命令来测试安装是否成功:

代码语言:txt
复制
$ restic

如果您的界面出现了一些帮助文本,那么就说明restic二进制文件已正确安装。接下来,我们将为Restic创建一个配置文件,然后初始化我们的对象存储库。

创建配置文件

Restic需要访问密钥,密钥,对象存储连接详细信息和存储库密码,以便初始化存储库。我们将使用环境变量向Restic提供此信息。

环境变量是您可以在shell中定义的信息,它们会传递给您运行的程序。例如,您在命令行上运行的每个程序都可以看到包含当前目录路径的\$PWD环境变量。

通常的做法是将敏感的令牌和密码放在环境变量中,因为在命令行中指定它们并不安全。我们稍后将自动执行备份,因此我们会将此信息保存在我们的脚本可以访问的文件中。

首先,在您的主目录中打开一个文件:

代码语言:txt
复制
$ nano ~/.restic-env

此命令将使用nano文本编辑器打开一个空白文件。完成后,该文件将包含四个export命令。这些export语句定义了环境变量并可用于将来运行的任何程序:

代码语言:txt
复制
.restic-ENV
export TencentCloud_ACCESS_KEY_ID="your-access-key"
export TencentCloud_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_REPOSITORY="s3:server-url/bucket-name"
export RESTIC_PASSWORD="a-strong-password"

访问密钥和密钥将由对象存储服务提供。

上文中RESTIC_REPOSITORY的实例值是:s3:nyc3.digitaloceanspaces.com/example-bucket。如果您需要连接到非标准端口上的服务器或通过不安全的HTTP连接,请在URL中包含类似于如下的信息:s3:http://example-server:3000/example-bucket。

RESTIC_PASSWORD定义Restic将用于加密备份的密码。此加密发生在本地,因此您可以备份到不受信任的异地服务器,而无需担心文件的内容被暴露。

您应该使用一个复杂的密码,并将其复制到安全备份的地方。生成复杂的随机密码的一种方法是使用以下openssl命令:

代码语言:txt
复制
$ openssl rand -base64 24
代码语言:txt
复制
j8CGOSdz8ibUYK137wtdiD0SJiNroGUp

这将输出一个24个字符的随机字符串,您可以将其复制并粘贴到配置文件中。正确填写所有变量后,保存并关闭文件。

初始化存储库

将配置加载到我们的shell环境中,source我们刚创建的文件:

代码语言:txt
复制
$ source ~/.restic-env

您可以通过打印出其中一个变量来检查其是否有效:

代码语言:txt
复制
$ echo $RESTIC_REPOSITORY

使用Restic命令初始化我们的存储库:

代码语言:txt
复制
$ restic init
代码语言:txt
复制
created restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket

Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.

存储库现在已准备好接收备份数据。我们接下来会发送这些数据。

备份目录

现在,我们可以将备份数据推送到远程对象存储库。除了加密,Restic还可以在备份时进行差异化和重复数据删除。这意味着我们的第一个备份将是所有文件的完整备份,后续备份只需要传输新文件和文件更改就可以了。此外,这还将检测重复数据,避免将其写入后端,从而节省空间。

在我们备份之前,如果您正在裸系统上测试内容并需要备份一些示例文件,请在主目录中创建一个简单的文本文件:

代码语言:txt
复制
$ echo "sharks have no organs for producing sound" >> ~/facts.txt

这将创建一个facts.txt文件。备份这个文件以及主目录的其余部分:

代码语言:txt
复制
$ restic backup ~
代码语言:txt
复制
scan [/home/sammy]
scanned 4 directories, 14 files in 0:00
[0:04] 100.00% 2.558 MiB/s 10.230 MiB / 10.230 MiB 18 / 18 items 0 errors ETA 0:00
duration: 0:04, 2.16MiB/s
snapshot 427696a3 saved

请您耐心等待,Restic会实时显示备份状态,然后输出新快照的ID。

注意:如果要备份其他目录,请将~替换为目录路径。如果目标目录不属于您的用户,您可能需要在restic backup前面使用sudo。如果需要sudo备份,请记住在还原快照时再次使用它,否则可能会出现一些无法正确设置权限的错误。

接下来,我们将学习如何找到有关存储库中存储快照的更多信息。

列出快照

要列出存储在存储库中的备份,请使用snapshots子命令:

代码语言:txt
复制
$ restic snapshots
代码语言:txt
复制
ID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
427696a3  2017-10-23 16:37:17  restic-test              /home/sammy

您可以看到我们在第一次备份期间的快照ID,拍摄快照的时间戳,主机名,标签以及备份的目录。

我们的标签栏是空白的,因为我们在此示例中没有使用任何标签。您可以通过-tag来为快照添加标记。您也可以通过重复-tag选项添加多个标记。

在您设置保留策略时,或者在手动搜索要还原的特定快照时,标记可用于过滤快照。

主机被包括在列表中,因为您可以发送多个主机快照到一个单一的存储库。您需要将存储库密码复制到每台计算机。您还可以为存储库设置多个密码,以获得更细分化的访问控制。您可以在官方Restic文档中找到更多有关管理存储库密码的信息。

现在我们已经上传了快照,并知道如何列出我们的存储库内容,下面我们将使用我们的快照ID来测试恢复备份。

恢复快照

我们要将整个快照还原到一个临时目录中来验证一切都能正常工作。使用上一步列表中的快照ID,我们将恢复的文件发送到一个新目录/tmp/restore:

代码语言:txt
复制
$ restic restore 427696a3 --target /tmp/restore
代码语言:txt
复制
restoring <Snapshot 427696a3 of [/home/sammy] at 2017-10-23 16:37:17.573706791 +0000 UTC by sammy@restic-test> to /tmp/restore

切换到该目录并列出其内容:

代码语言:txt
复制
$ cd /tmp/restore
$ ls

您应该可以看到我们备份的目录。它将是用户sammy的主目录。输入已恢复的目录并列出其中的文件:

代码语言:txt
复制
$ cd sammy
$ ls
代码语言:txt
复制
$ facts.txt restic_0.7.3_linux_amd64

我们的facts.txt文件与我们在本教程开头提取的restic二进制文件将出现在一起。打印facts.txt:

代码语言:txt
复制
$ cat facts.txt

您应该看到我们先前放入的文件。

注意:如果您不想还原快照中的所有文件,可以使用--include和--exclude选项进行微调。

接下来,让我们自动创建新快照。

自动备份

Restic中的forget命令可以帮助维护快照的运行存档。您可以使用restic forget --prune设置每小时,每日,每周等保留的备份数量。任何不符合策略的备份都将从存储库中清除。

我们将使用cron系统服务,每小时运行一次备份任务。首先,打开用户的crontab:

代码语言:txt
复制
$ crontab -e

系统可能会提示您选择文本编辑器。我们选择nano 然后按ENTER。用户的默认crontab将在文本编辑器中打开。在文件末尾,将以下内容添加到新行:

代码语言:txt
复制
. . .
42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7

该42 * * * *定义了cron运行任务的时间。在这种情况下,它会在每隔42分钟运行。

. /home/sammy/.restic-env;相当于我们之前运行的source ~/.restic-env,其将密钥和密码加载到shell环境中。这在我们的crontab中具有相同的效果:此行上的后续命令将可以访问此信息。

/usr/local/bin/restic backup -q /home/sammy;是我们的Restic备份命令。我们使用restic二进制文件的完整路径,因为cron服务不会自动查找/usr/local/bin命令。同样,我们明确地列出主文件夹路径/home/sammy而不是使用~快捷方式。在编写命令时,最好尽可能明确cron。我们使用该-q标志来抑制Restic的状态输出。

最后,/usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7将根据指定的保留标志精简不再需要的旧快照。在此示例中,我们将保留24小时快照和7天的每日快照。还有每周,每月,每年和基于标签的策略选项。

更新命令后,保存文件并退出文本编辑器。随后,crontab将安装并激活。几个小时后,我们可以再次运行restic snapshots以验证其是否正在上传新快照。

结论

在本教程中,我们使用对象存储及验证细节为Restic创建了一个配置文件,使用Restic初始化存储库,备份了一些文件并测试了备份。最后,我们用cron自动化了这个过程。腾讯云也提供云关系型数据云数据库Redis云数据库MongoDB 等等数据库服务,欢迎大家试用。


参考文献:《How To Back Up Data to an Object Storage Service with the Restic Backup Client》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 安装Restic Backup Client
  • 创建配置文件
  • 初始化存储库
  • 备份目录
  • 列出快照
  • 恢复快照
  • 自动备份
  • 结论
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档