准备一个新的存储库
将备份保存在的位置称为“存储库”。本章介绍如何创建(“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服务器
$ 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。
- 您也可以参考https://docs.minio.io获取关于安装的一步一步指导,并开始使用Minio Client和Minio Server。
您必须首先使用正在运行的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>
一旦设置了环境变量,就可以创建一个新的存储库。可以指定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操作,服务帐户必须具有
storage.objects.{create,delete,get,list}
存储桶的 权限。这些包含在“存储对象管理”角色中。 可以创建存储库存储桶。这样做需要 许可(“存储管理”角色)。如果存储桶已经存在,则不需要该权限。restic init
storage.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
$ 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
为了开始rclone,restic将通过参加以下列表(按照这个顺序)建立的参数列表:
rclone.program
,rclone.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
评论
发表评论