简介
自从服务器中了病毒后,更加意识到了数据备份的重要性。
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