跳至主要内容

Restic --准备一个新的存储库

准备一个新的存储库

将备份保存在的位置称为“存储库”。本章介绍如何创建(“init”)这样的存储库。存储库可以存储在本地,也可以存储在某个远程服务器或服务上。我们将首先介绍使用本地存储库,本章的其余部分涵盖所有其他选项。一旦你阅读了这里的相关章节,你可以跳到下一章。

本地

要创建存储库/srv/restic-repo,请运行以下命令并输入两次相同的密码:
$ restic init --repo /srv/restic-repo
enter password for new backend:
enter password again:
created restic backend 085b3c76b9 at /srv/restic-repo
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
警告
记住你的密码很重要!如果你失去它,你将无法访问存储在存储库中的数据。
对于自动备份,restic接受环境变量中的存储库位置RESTIC_REPOSITORY密码可以从文件(通过选项--password-file或环境变量 RESTIC_PASSWORD_FILE)或环境变量中读取RESTIC_PASSWORD

SFTP

为了通过SFTP备份数据,您必须先使用SSH设置服务器,并让它知道您的公钥。无密码登录非常重要,因为如果服务器提示输入凭据,restic无法连接到存储库。
一旦配置了服务器,SFTP存储库的设置就可以通过更改init命令中的URL方案来实现
$ restic -r sftp:user@host:/srv/restic-repo init
enter password for new backend:
enter password again:
created restic backend f1c6108821 at sftp:user@host:/srv/restic-repo
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
您还可以指定一个相对(/在开始处为read:no slash()字符)目录,在这种情况下,dir是相对于远程用户的主目录。
注意
请注意,sftp服务器不会扩展~通常用作用户主目录的别名的代字符字符()。如果要指定相对于用户主目录的路径,请将相对路径传递给sftp后端。
后端配置字符串不允许指定端口。如果您需要联系不同端口上的sftp服务器,则可以在该ssh文件中创建一个条目,通常位于用户的主目录中 ~/.ssh/config或位于/etc/ssh/ssh_config
Host foo
    User bar
    Port 2222
然后foo正常使用指定的主机名(在这种情况下,您不需要指定用户名):
$ restic -r sftp:foo:/srv/restic-repo init
您还可以添加一个具有不存在的特殊主机名的条目,仅用于restic,并使用该Hostname选项设置真实的主机名:
Host restic-backup-host
    Hostname foo
    User bar
    Port 2222
然后在后端规范中使用它:
$ restic -r sftp:restic-backup-host:/srv/restic-repo init
最后,如果您想使用完全不同的程序来创建SFTP连接,则可以指定要使用该选项运行的命令-o sftp.command="foobar"

REST服务器

为了通过HTTP或HTTPS协议将数据备份到远程服务器,您必须首先设置远程REST服务器实例。一旦配置好服务器,访问它就可以通过改变URL方案来实现:
$ restic -r rest:http://host:8000/
根据您的REST服务器设置,您可以使用HTTPS协议,密码保护或多个存储库。或者这些功能的任意组合,只要您认为合适。TCP / IP端口也是可配置的。这里有一些例子:
$ restic -r rest:https://host:8000/
$ restic -r rest:https://user:pass@host:8000/
$ restic -r rest:https://user:pass@host:8000/my_backup_repo/
如果您使用TLS,restic将使用系统的CA证书来验证服务器证书。验证失败时,restic拒绝继续并退出并出现错误。如果您拥有自己的自签名证书,或者应使用自定义CA证书进行验证,则可以通过选项向证书文件名传递restic --cacert然后,它将验证服务器的证书是否包含在传递给此选项的文件中,或由文件中的CA证书签名。在这种情况下,根本不考虑系统CA证书。
REST服务器使用与本地后端完全相同的目录结构,因此您应该可以同时在本地和通过HTTP访问它。

亚马逊S3

Restic可以将数据备份到任何Amazon S3存储桶。但是,在这种情况下,由于Amazon使用特殊安全凭证对HTTP请求进行签名,所以更改URL方案并不够。因此,您必须首先使用您在创建存储桶时获得的凭据设置以下环境变量。
$ export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
$ export AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>
然后,您可以轻松初始化使用Amazon S3作为后端的存储库,如果存储桶不存在,它将在默认位置创建:
$ restic -r s3:s3.amazonaws.com/bucket_name init
enter password for new backend:
enter password again:
created restic backend eefee03bbd at s3:s3.amazonaws.com/bucket_name
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
目前无法在不同的位置创建新的存储桶,因此您需要使用不同的程序创建它。之后,S3服务器(s3.amazonaws.com)会将restic重定向到正确的端点。
在版本0.8.0之前,restic使用了一个默认前缀restic,因此存储桶中的文件被放置在一个名为的目录中restic如果要访问使用旧版本的restic创建的存储库,请在存储桶名称之后指定路径,如下所示:
$ restic -r s3:s3.amazonaws.com/bucket_name/restic [...]
对于不是Amazon的S3兼容服务器(如Minio,请参见下文),或只能通过HTTP访问,您可以指定服务器的URL,如下所示:s3:http://server:port/bucket_name

Minio服务器

Minio是一个开源的对象存储,以Go编写,并与AWS S3 API兼容。
您必须首先使用正在运行的Minio Server的凭据设置以下环境变量。
$ export AWS_ACCESS_KEY_ID=<YOUR-MINIO-ACCESS-KEY-ID>
$ export AWS_SECRET_ACCESS_KEY= <YOUR-MINIO-SECRET-ACCESS-KEY>
现在,您可以轻松初始化restic,以便使用Minio服务器作为后端。
$ ./restic -r s3:http://localhost:9000/restic init
enter password for new backend:
enter password again:
created restic backend 6ad29560f5 at s3:http://localhost:9000/restic1
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is irrecoverably lost.

OpenStack Swift

Restic可以将数据备份到OpenStack Swift容器。由于Swift支持各种身份验证方法,因此凭据将通过环境变量传递。为了帮助整合现有的OpenStack安装,这些变量的命名约定遵循官方的Python Swift客户端:
# For keystone v1 authentication
$ export ST_AUTH=<MY_AUTH_URL>
$ export ST_USER=<MY_USER_NAME>
$ export ST_KEY=<MY_USER_PASSWORD>

# For keystone v2 authentication (some variables are optional)
$ export OS_AUTH_URL=<MY_AUTH_URL>
$ export OS_REGION_NAME=<MY_REGION_NAME>
$ export OS_USERNAME=<MY_USERNAME>
$ export OS_PASSWORD=<MY_PASSWORD>
$ export OS_TENANT_ID=<MY_TENANT_ID>
$ export OS_TENANT_NAME=<MY_TENANT_NAME>

# For keystone v3 authentication (some variables are optional)
$ export OS_AUTH_URL=<MY_AUTH_URL>
$ export OS_REGION_NAME=<MY_REGION_NAME>
$ export OS_USERNAME=<MY_USERNAME>
$ export OS_PASSWORD=<MY_PASSWORD>
$ export OS_USER_DOMAIN_NAME=<MY_DOMAIN_NAME>
$ export OS_PROJECT_NAME=<MY_PROJECT_NAME>
$ export OS_PROJECT_DOMAIN_NAME=<MY_PROJECT_DOMAIN_NAME>

# For authentication based on tokens
$ export OS_STORAGE_URL=<MY_STORAGE_URL>
$ export OS_AUTH_TOKEN=<MY_AUTH_TOKEN>
在大多数情况下,Restic应与OpenStack RC文件兼容
一旦设置了环境变量,就可以创建一个新的存储库。可以指定swift容器和可选路径的名称。如果容器不存在,它将自动创建:
$ restic -r swift:container_name:/path init   # path is optional
enter password for new backend:
enter password again:
created restic backend eefee03bbd at swift:container_name:/path
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
restic创建的新容器的策略可以使用环境变量进行更改:
$ export SWIFT_DEFAULT_CONTAINER_POLICY=<MY_CONTAINER_POLICY>

Backblaze B2

Restic可以将数据备份到任何Backblaze B2存储桶。您需要首先使用登录到B2帐户时获得的凭据设置以下环境变量:
$ export B2_ACCOUNT_ID=<MY_ACCOUNT_ID>
$ export B2_ACCOUNT_KEY=<MY_SECRET_ACCOUNT_KEY>
然后,您可以轻松初始化存储在Backblaze B2中的存储库。如果存储桶尚不存在,它将被创建:
$ restic -r b2:bucketname:path/to/repo init
enter password for new backend:
enter password again:
created restic backend eefee03bbd at b2:bucketname:path/to/repo
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
到B2服务的并发连接数可以使用默认情况下,最多建立五个并行连接。-o b2.connections=10

Microsoft Azure Blob存储

您还可以在Microsoft Azure Blob存储上存储备份。导出Azure帐户名称和密钥,如下所示:
$ export AZURE_ACCOUNT_NAME=<ACCOUNT_NAME>
$ export AZURE_ACCOUNT_KEY=<SECRET_KEY>
之后,您可以foo在根路径中调用的容器中初始化一个存储库,如下所示:
$ restic -r azure:foo:/ init
enter password for new backend:
enter password again:

created restic backend a934bac191 at azure:foo:/
[...]
到Azure Blob存储服务的并发连接数可以使用 默认情况下,最多建立五个并行连接。-o azure.connections=10

Google云端存储

Restic支持Google Cloud Storage作为后端。
Restic通过服务帐户连接到Google云端存储
对于正常的restic操作,服务帐户必须具有storage.objects.{create,delete,get,list}存储桶的 权限。这些包含在“存储对象管理”角色中。 可以创建存储库存储桶。这样做需要 许可(“存储管理”角色)。如果存储桶已经存在,则不需要该权限。restic initstorage.buckets.create
要使用Google Cloud Storage后端,请先创建服务帐户密钥 并下载JSON凭证文件。其次,在“存储/设置”菜单中找到您可以在Google云端平台控制台中看到的Google项目ID。将路径导出到JSON密钥文件和项目ID,如下所示:
$ export GOOGLE_PROJECT_ID=123123123123
$ export GOOGLE_APPLICATION_CREDENTIALS=$HOME/.config/gs-secret-restic-key.json
Restic使用Google的客户端库生成[默认身份验证资料](https://developers.google.com/identity/protocols/application-default-credentials),这意味着如果您在Google Container Engine中运行或位于其他位置一个具有默认服务帐户的实例,那么这些应该可以解决问题。
一旦通过身份验证,您就可以使用gs:后端类型foo在根路径的存储桶创建新的存储库
$ restic -r gs:foo:/ init
enter password for new backend:
enter password again:

created restic backend bde47d6254 at gs:foo2/
[...]
并发连接到GCS服务的数量可以使用 默认情况下,最多建立五个并行连接。-o gs.connections=10

通过rclone的其他服务

程序rclone可以用来访问许多其他不同的服务并在那里存储数据。首先,您需要安装和配置rclone。一般的后端规范格式是rclone:<remote>:<path>, <remote>:<path>组件将直接传递给rclone。当您配置一个名为remote的远程服务器时foo,您可以按如下方式调用restic,以bar在repo 的路径启动一个新的存储库
$ restic -r rclone:foo:bar init
Restic负责启动和停止rclone。
作为一个更具体的例子,假设你已经b2prod为rbone 配置了一个名为Backblaze B2 的远程 服务器,并且有一个bucket被调用yggdrasil然后,您可以使用rclone像下面这样列出存储桶中的文件:
$ rclone ls b2prod:yggdrasil
为了在存储桶的根目录中创建一个新的存储库,请像这样调用restic:
$ restic -r rclone:b2prod:yggdrasil init
如果您想要使用foo/bar/baz桶中的路径,请将此路径传递给restic:
$ restic -r rclone:b2prod:yggdrasil/foo/bar/baz init
直接用rclone列出空仓库的文件应该返回一个类似于以下的清单:
$ rclone ls b2prod:yggdrasil/foo/bar/baz
    155 bar/baz/config
    448 bar/baz/keys/4bf9c78049de689d73a56ed0546f83b8416795295cda12ec7fb9465af3900b44
Rclone可以配置环境变量,因此例如可以通过设置RCLONE_BWLIMIT环境变量来实现为rclone配置带宽限制 
$ export RCLONE_BWLIMIT=1M
为了调试rclone,你可以设置环境变量RCLONE_VERBOSE=2
rclone后端有两个附加选项:
  • -o rclone.program 指定rclone的路径,默认值就是 rclone
  • -o rclone.args 允许设置传递给rclone的参数,默认情况下是这样 serve restic --stdio --b2-hard-delete --drive-use-trash=false
最后两个参数(--b2-hard-delete和 --drive-use-trash=false)的原因可以在相应的GitHub 问题#1657中找到
为了开始rclone,restic将通过参加以下列表(按照这个顺序)建立的参数列表:rclone.programrclone.args和作为最后一个参数后面的值rclone:存储库规范的前缀。
所以,像这样叫restic
$ restic -o rclone.program="/path/to/rclone" \
  -o rclone.args="serve restic --stdio --bwlimit 1M --b2-hard-delete --verbose" \
  -r rclone:b2:foo/bar
运行rclone如下:
$ /path/to/rclone serve restic --stdio --bwlimit 1M --b2-hard-delete --verbose b2:foo/bar
手动设置rclone.program还允许运行远程实例的rclone,例如通过服务器上的SSH,例如:
$ restic -o rclone.program="ssh user@host rclone" -r rclone:b2:foo/bar
rclone命令也可以在SSH配置或用户的公共密钥中硬编码,在这种情况下,启动SSH连接可能就足够了(并且rclone:与存储库规范中传递的内容无关):
$ restic -o rclone.program="ssh user@host" -r rclone:x

Windows上的密码提示

目前,Restic只支持默认的Windows控制台交互。如果您使用仿真环境(如 MSYS2或 Cygwin),它们使用类似于Mintty或的终端 rxvt,则可能会出现密码错误:
你可以通过使用一个特殊的工具来解决这个问题winpty(详情请看 这里和 这里)。在MSYS2上,您可以winpty按如下方式安装
$ pacman -S winpty
$ winpty restic -r /srv/restic-repo init

评论

此博客中的热门博文

Restic --备份

备份 现在我们准备好备份一些数据。 在特定时间点的目录内容在restic中被称为“快照”。 运行以下命令并再次输入上面选择的存储库密码: $ restic -r /srv/restic-repo --verbose backup ~/work open repository enter password for repository: password is correct lock repository load index files start scan start backup scan finished in 1.837s processed 1.720 GiB in 0:12 Files: 5307 new, 0 changed, 0 unmodified Dirs: 1867 new, 0 changed, 0 unmodified Added: 1.700 GiB snapshot 40dc1520 saved 正如你所看到的,restic创建了该目录的备份并且速度非常快! 40dc1520 在这种情况下 ,刚刚创建的特定快照由一系列十六进制字符标识 。 如果你没有通过这个 --verbose 选项,restic将打印更少的数据(但你仍然会得到一个很好的实时状态显示)。 如果再次运行该命令,restic将会创建另一个数据快照,但这次更快。 这是工作中的重复数据删除! $ restic -r /srv/restic-repo backup --verbose ~/work open repository enter password for repository: password is correct lock repository load index files using parent snapshot d875ae93 start scan start backup scan finished in 1.881s processed 1.720 GiB in 0:03 Files: 0 new, 0 changed, 5307 unmodified Dirs

Restic --使用aws备份案例

例子 用Amazon S3设置restic 前言 本教程将向您展示如何在AWS S3中使用restic。 它将向您展示如何浏览AWS Web界面,创建S3存储桶,创建只能访问此存储桶的用户以及如何将restic连接到此存储桶。 先决条件 您的系统上应该已经有一个 restic 可以运行 的 二进制文件。 此外,您还应该拥有 AWS 账户  。 即使您使用 免费 套餐,您也可能需要提供信用卡详细信息才能进行结算  。 登录到AWS 将浏览器指向  https://console.aws.amazon.com  并使用您的AWS账户登录。 您将看到AWS主页: 通过使用左上角的“服务”按钮,可打开AWS提供的所有服务菜单: 对于本教程,简单存储服务(S3)以及身份和访问管理(IAM)是相关的。 创建桶 首先,必须创建用于存储备份的存储桶。 使用“服务”菜单,导航到S3。 如果您已经有一些S3存储桶,您会在这里看到它们的列表: 点击“创建存储桶”按钮,然后为新存储桶选择一个名称和区域。 为了本教程的目的,该存储桶将被命名  restic-demo 并驻留在法兰克福。 由于存储桶名称空间在所有AWS用户之间共享,因此名称 restic-demo 可能无法提供给您。 要有创意并选择一个独特的存储桶名称。 没有必要配置存储桶的任何特殊属性或权限。 因此,只需完成向导而不做任何进一步的更改: 新创建的 restic-demo 存储桶现在将显示在S3存储桶的列表中: 创建一个用户 使用AWS Web界面的“服务”菜单导航到IAM。 这会将您带到IAM主页。 要创建新用户,请点击左侧的“用户”菜单条目: 如果您之前已经拥有使用IAM的设置用户,您会在这里看到它们的列表。 使用顶部的“添加用户”按钮创建一个新用户: 对于本教程,新用户将被命名 restic-demo-user 。 随意选择最适合您需求的名称。 该用户只能通过该 restic 程序 访问AWS  ,而不能通过Web界面访问。 因此,“访问类型”选择了“编程访问”: 在下一步中,可以将权限分配给新用户。 要使用这个用户,只需要访问 restic-demo 存储桶。 选择“直接附加现有政策”,这将在下面列出

Restic --删除备份快照

删除备份快照 所有的备份空间都是有限的,所以restic可以删除旧的快照。 这可以通过手动(通过指定要删除的快照ID)或者使用描述要忘记哪些快照的策略来完成。 对于所有删除操作,需要依次调用两个命令: forget 删除快照并 prune 实际删除快照从存储库中引用的数据。 这可以通过 forget 命令 --prune 选项 来自动 执行, 如果快照已被删除 ,该 prune 命令 会自动 运行 。 建议 在修剪后 运行 restic   check ,以确保提醒您可能的损坏存储库的内部数据结构。 删除一个快照 该命令 snapshots 可用于列出存储库中的所有快照,如下所示: $ restic -r /srv/restic-repo snapshots enter password for repository: ID Date Host Tags Directory ---------------------------------------------------------------------- 40dc1520 2015-05-08 21:38:30 kasimir /home/user/work 79766175 2015-05-08 21:40:19 kasimir /home/user/work bdbd3439 2015-05-08 21:45:17 luigi /home/art 590c8fc8 2015-05-08 21:47:38 kazik /srv 9f0bc19e 2015-05-08 21:46:11 luigi /srv 要删除快照 /home/art ,请使用该 forget  命令并在命令行上指定快照ID: $ restic -r /srv/restic-repo forget bdbd3439 enter password for repository: removed snapshot d3f01f63 之后,此快照被删除: $ restic -r /srv/res