使用Restic工具进行数据备份

简介

自从服务器中了病毒后,更加意识到了数据备份的重要性。

Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。
Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。

项目地址:https://github.com/restic/restic

Restic 支持的存储类型

Restic 支持的存储种类比较多,大致有如下这些类型:

  • 本地存储
  • SFTP
  • REST Server
  • Amazon S3
  • 阿里云 oss
  • Minio Server
  • OpenStack Swift
  • Backblaze B2
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • 通过 Rclone 挂载的存储 (比如:Google Drive、OneDrive 等)

安装

我是windows操作系统,下载的是:restic_0.13.0_windows_386.zip这个压缩包,解压后将restic.exe文件拷贝至C:\Windows\System32就可以了。当然你也可以拷贝至其他目录,只不过需要更改环境变量。

验证:

restic version

显示版本号则说明安装成功。

备份至本地

创建备份仓库

概念跟git相似,需要先创建一个库:

restic init --repo D:/backup

执行以上命令将D:/backup文件夹作为备份仓库。
执行命令过程中,会让你输入备份仓库密码,记住此密码不要丢失,后面的备份还原都需要用到该密码。

备份指定文件夹到备份仓库

添加一个本地文件夹到备份仓库:

restic --repo D:/backup backup D:/mywork

执行以上命令,会将D:/mywork文件夹中的内容备份至备份仓库。
执行命令过程中,需要输入之前你录入的密码,然后就是备份的过程,备份完成后会有如下提示:

最后的一行,snapshot 4bfac36b saved中的4bfac36b就是本次的备份版本号,后面可以通过该版本号来删除备份或还原备份。

查看备份快照

restic -r D:/backup snapshots

在恢复备份之前,一般会先查看一下快照,防止恢复了错误的版本,可以使用上面的命令。

还原备份

指定版本号还原

指定 restore 哪一个版本号,以及 target 指向一个恢复路径,就会完成备份的还原。

restic -r D:/backup restore 4bfac36b --target D:/mywork_restore

执行以上命令后,将会把4bfac36b版本恢复到D:/mywork_restore文件夹

还原最近一次备份

restic -r D:/backup restore latest --target D:/mywork_restore

还原后的问题

还原后,在指定的还原文件夹中会出现以路径形式的文件夹,例如上面的例子还原后的文件夹长这样:

D:/mywork_restore/D/mywork/...

如果你想去掉路径中的D/mywork,可以先cd进入到备份文件夹后,再使用如下命令备份:

cd D:/mywork;
restic --repo D:/backup backup .

可以看到,backup命令后是一个.,表示备份当前目录。这样还原出来的就不会有路径文件夹了。

备份至云

我这里备份至阿里云的OSS,理论上也支持备份至腾讯云等类似Amazon S3的对象存储。

设置密钥信息

Linux:

export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>

Windows:

SET AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY>
SET AWS_SECRET_ACCESS_KEY=<MY_SECRET_ACCESS_KEY>

创建备份仓库

restic -o s3.bucket-lookup=dns -o s3.region=<OSS-REGION> -r s3:https://<OSS-ENDPOINT>/<OSS-BUCKET-NAME> init

OSS-REGION:地域名称
OSS-ENDPOINT:地域节点
OSS-BUCKET-NAME:Bucket名称

例如:

restic -o s3.bucket-lookup=dns -o s3.region=oss-cn-shanghai -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest init

备份

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest backup D:/mywork

查看快照

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest snapshots

还原备份

按版本号还原

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore 9dc0a53a --target D:/mywork_restore

还原最近一次备份

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest restore latest --target D:/mywork_restore

更多用法

免密码操作

上面备份还原等操作,都需要输入密码,不适合脚本自动备份,可以使用--password-file参数自动从指定位置读取密码。
例如把密码保存在D:/resticpasswd文件中,执行备份或还原时,加上--password-file D:/resticpasswd参数即可。
例如备份操作:

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest --password-file D:/resticpasswd backup D:/mywork

设置排除文件

按文件路径及格式排除

备份过程中,有的目录不需要备份,例如缓存文件夹,日志文件夹,.svn,.git等。
将需要排除的目录写到一个文件中,例如我写到D:/excludes.txt,内容如下:

# 排除以下格式文件
*.pdf
*.zip
*.rar
*.psd
*.nb3
*.exe
*.mp3
*.mp4

# 排除以下文件夹
.idea
.svn
.git
uploads/*
cache/*
log/*

更多排除规则可以查看官网文档

在备份时加上--exclude-file参数,例如:

restic -r s3:https://oss-cn-shanghai.aliyuncs.com/backuptest --password-file D:/resticpasswd backup D:/mywork --exclude-file=D:/excludes.txt

这样再备份中,就会排除指定的文件,提高备份效率。

按文件体积排除

有的附件体积比较大,不想备份时,可以设置--exclude-larger-than参数进行排除,例如:

--exclude-larger-than 2M

即:大于2M的文件不备份

备份多个路径

当你想要从许多不同位置备份文件时,或者当你使用其他软件生成要备份的文件列表时。可以使用--files-from参数读取一个需要备份的文件夹列表,例如我把需要备份的多个目录写到D:/includes.txt文件,内容如下:

# 备份以下文件夹
D:\mywork
D:\mywork2
...

然后使用备份命令:

restic -r repo backup --files-from D:/includes.txt

当然也可以把前面的参数加进来,例如你需要从指定文件中读取需要备份的文件夹,同时这些文件夹中有的文件需要排除,那么可以这样使用:

restic -r repo backup --files-from D:/includes.txt --exclude-file=D:/excludes.txt

从快照中还原指定文件或文件夹

快照中包含了多个文件夹,也许你只需还原其中某一个文件或文件夹,那么可以使用--include参数,例如通过上面备份多个路径一节备份了多个目录,在还原时我只想还原D:\mywork2目录,可以这样使用:

restic -r repo restore latest --target D:/mywork_restore --include /D/mywork2

注意:如果你写成--include D:\mywork2将无法还原,原因是该路径在快照中并不存在。可以通过下面的命令来查看快照中有哪些文件。

相应的,如果你想排除某个目录不还原,则可以使用--exclude参数。

列出快照中的文件

restic -r repo ls <snapshotID>

备份标签

快照可以有一个或多个标签,即添加识别信息的短字符串。只需使用以下命令--tag

restic -r repo backup --tag project D:/work

然后执行查看快照命令,可以查看快照的标签。

删除快照

备份空间都是有限的,restic提供了命令删除旧快照。
对于删除操作,需要依次调用两个命令:forget删除快照,以及prune删除快照引用的数据。

删除单个快照

restic -r repo forget <snapshotID>

快照删除后,其文件引用的数据仍存储在存储库中。要清理未引用的数据,需要执行prune命令:

restic -r repo prune

根据策略删除快照

手动删除快照既乏味又容易出错,因此restic允许指定--keep-*参数来设置要保留的快照。例如,您可以定义要保留多少小时、天、周、月和年的快照,并且将删除任何其他快照。

例如保留最近一次快照,其余快照删除:

restic -r repo forget --keep-last 1 --prune

保留最近一个月的快照,其余的删除:

restic -r repo forget --keep-monthly 1 --prune

查看快照大小

查看指定快照大小

restic -r repo forget stats <snapshotID>

查看最近一次快照的大小

restic -r repo forget stats latest

查找文件

在所有快照中查找文件

restic -r repo find "*<keyword>*"

在指定快照中查找文件

restic -r repo find -s <snapshotID> "*<keyword>*"

常见问题

锁(lock)

有时候由于程序卡住了,或者服务器意外关机或重启,会导致备份中断,从而导致出现锁(lock)。这时执行命令时会提示repository is already locked by PID xxxx这种的错误。
解决办法:

restic -r repo unlock

也可以在你要执行的命令后加--nolock,例如查看快照:restic -r repo snapshots --nolock

有关锁的命令

查看有哪些锁:

restic -r repo list locks

发表评论

邮箱地址不会被公开。 必填项已用*标注