说明:Restic
是使用Golang
写的一款开源免费且快速,高效和安全的跨平台备份程序,貌似和以前发的Duplicati差不多,可以存储在本地,云存储服务或远程文件服务器上,并且使用加密技术来你的数据安全性和完整性,同样支持增量备份,可随时备份和恢复备份。并支持3
种主要的操作系统Linux
,macOS
,Windows
及一些较小的操作系统FreeBSD
,OpenBSD
等。
支持的存储:
代码语言:javascript复制本地存储
SFTP
REST Server
Amazon S3
Minio Server
OpenStack Swift
Backblaze B2
Microsoft Azure Blob Storage
Google Cloud Storage
通过rclone挂载的存储(比如Google Drive、OneDrive等)
安装
Github地址:https://github.com/restic/restic
Restic
可以直接通过系统软件包安装,不过版本好像都有点旧,这里就选择最新的二进制方式安装。
二进制下载地址→传送门,先根据自己的架构选择对应的最新版本,这里只说Linux
系统,Windows
系统直接下载解压就行了。
使用命令:
代码语言:javascript复制#32位下载
wget https://github.com/restic/restic/releases/download/v0.9.4/restic_0.9.4_linux_386.bz2
#64位下载
wget https://github.com/restic/restic/releases/download/v0.9.4/restic_0.9.4_linux_amd64.bz2
#解压并删除压缩包
bzip2 -d restic*.bz2 && rm -rf restic*.bz2
#授权
chmod x restic*
#移动二进制文件
mv restic* /usr/local/bin/restic
#查看版本
restic version
之后可以直接使用restic self-update
命令升级二进制文件。
配置存储库
安装好了Restic
后,还需要配置下存储方式,也就是你想备份到服务器本地,还是其它远程服务上。以下配置过程中都会要你输入密码,别忘了,不然就找不回来了。
这里只说常用的本地、sftp
、rclone
备份方式,其它的远程库配置可以看下官方文档→传送门。
1、备份到本地
代码语言:javascript复制#备份到本地/moerats文件夹
restic init --repo /moerats
2、SFTP方式
该方法适合将文件备份到另一台VPS
服务器。首先我们需要在要备份的服务器上生成个公钥再复制给另一台远程服务器,这样就可以实现免密码登录了。
提示:以下将需要备份的服务器称为A,备份到远程文件服务器B。
先使用SSH
客户端登录服务器A
,使用命令:
cd ~
ssh-keygen -t rsa
这里会要你命名密匙名称(这里建议使用默认名称),然后连续按几次Enter
,这时候会在/root/.ssh
文件夹生成2
个ssh
密钥,然后我们查看公钥id_rsa.pub
。
cat ~/.ssh/id_rsa.pub
复制好公钥。
再使用SSH
登录服务器B
,使用命令:
#复制服务器A中的id_rsa.pub值
echo 'xxxxxxx' >> ~/.ssh/authorized_keys
如果提示No such file or directory
错误信息,先使用mkdir ~/.ssh
命令,再重新使用上面的命令。然后免密登录就配置完成了。
然后在服务器A
上使用命令:
#root为服务器B的用户名,1.1.1.1为服务器ip,端口默认为22,/moerats为服务器B上的存储文件夹,如果不存在则会自动创建
restic -r sftp:root@1.1.1.1:/moerats init
如果服务器B
端口非22
,就需要配置下了,在服务器A
中~/.ssh
目录创建config
文件,使用命令:
nano ~/.ssh/config
新增以下参数:
代码语言:javascript复制Host 1.1.1.1
User root
Port 2222
从上至下的参数为服务器B
的ip
、用户名和端口。然后重启ssh
。
/etc/init.d/sshd restart #centos系统
/etc/init.d/ssh restart #debian、ubuntu系统
此时可以直接在服务器A
上使用新的命令:
#参数详解可以参考上面
restic -r sftp:1.1.1.1:/moerats init
此时输入2
次密码就完成了。
3、Rclone方式
先在服务器上安装Rclone
,并配置Rclone
,方法参考:
#使用rclone挂载OneDrive网盘
https://www.moerats.com/archives/491/
#使用rclone挂载Google Drive网盘
https://www.moerats.com/archives/481/
只需要完成配置环节,启动的话,就交给Restic
了。
再使用命令:
代码语言:javascript复制#比如rclone配置名为RATS,本地文件夹为/moerats,如果该文件夹不存在则会自动创建
restic -r rclone:RATS:/moerats init
开始备份
代码语言:javascript复制提示:以下均将/rats文件夹的文件备份到/moerats存储文件夹,也就是上面设置的。
使用命令:
代码语言:javascript复制#该命令是备份/rats整个文件夹,如果备份单个文件,比如/rats.zip,那后面就改成/rats.zip
#本地备份
restic -r /moerats --verbose backup /rats
#sftp备份
restic -r sftp:1.1.1.1:/moerats --verbose backup /rats
#rclone备份
restic -r rclone:RATS:/moerats --verbose backup /rats
#对于rclone,还可以加一些rclone参数优化下,比如使用--bwlimit限制传输带宽
restic -o rclone.program="/usr/bin/rclone"
-o rclone.args="serve restic --stdio --bwlimit 1M --verbose"
-r rclone:RATS:/moerats backup /rats
运行命令后会要求你输入密码,然后备份后会在存储文件夹的snapshots
目录生成一个十六进制的文件。如果备份数据出现重复,则会自动跳过。如果文件夹有文件出现修改(包括修改时间)才会进行下一次备份。
这里如果使用rclone
挂载Gdrive
的,建议自己申请一个api
,博主测试了下,会出现一堆 Error 403: Rate Limit Exceeded, rateLimitExceeded
错误。申请教程→传送门。
你还可以用参数排除不想备份的文件夹或者文件,命令示例:
代码语言:javascript复制--exclude 指定一次或多次以排除一个或多个项目
--exclude-caches 指定一次以排除包含特殊文件的文件夹
--exclude-file 指定一次或多次以排除给定文件中列出的项目
--exclude-if-present 如果文件夹内容包含给定文件,则指定一次或多次排除文件夹内容
具体用法可以参考下官方文档→传送门。
restic
还支持命令传输,比如备份数据库文件夹,这里以sftp
为例,其它方式自行修改-r
后面参数,使用命令:
#比如将Typecho数据库备份到远程sftp,并命名typecho.sql,其它远程库就自己模仿
mysqldump -uroot -ppasswd typecho | restic -r sftp:1.1.1.1:/moerats backup --stdin --stdin-filename typecho.sql
备份好了后,可以使用命令查看备份文件,使用命令:
代码语言:javascript复制#查看所有备份文件
restic -r sftp:1.1.1.1:/moerats snapshots
#大概会输出以下信息
ID Time Host Tags Paths
---------------------------------------------------------------------
ef5ff5fe 2019-02-25 17:03:57 Rats /moerats
40724b53 2019-02-25 17:10:06 Rat /rats
---------------------------------------------------------------------
#只查看/moerats文件夹的备份文件
restic -r sftp:1.1.1.1:/moerats snapshots --path="/moerats"
#大概会输出以下信息
ID Time Host Tags Paths
---------------------------------------------------------------------
ef5ff5fe 2019-02-25 17:03:57 Rats /moerats
---------------------------------------------------------------------
#只查看主机名为Rat的备份文件
restic -r sftp:1.1.1.1:/moerats snapshots --host Rat
#大概会输出以下信息
ID Time Host Tags Paths
---------------------------------------------------------------------
40724b53 2019-02-25 17:10:06 Rat /rats
---------------------------------------------------------------------
这里没有使用标签参数,所以tags
那里是空的,不过我们可以在备份的时候加入标签参数--tag
,使用命令:
#如果想给备份文件加入site标签
restic -r sftp:1.1.1.1:/moerats --verbose backup /rats --tag site
#如果你想加入更多标签来更详细的区分备份,那就在后面多加几个--tag参数,这样查看备份的时候就可以看到tags了
最后还可以直接使用命令删除备份文件,使用命令:
代码语言:javascript复制#比如删除bcde备份文件
restic -r sftp:1.1.1.1:/moerats forget bcde
恢复备份
如果我们需要将远程存储文件夹的abcd
备份文件恢复到本地/rats
文件夹,这里以sftp
为例,其它方式自行修改-r
后面参数。
使用命令:
代码语言:javascript复制restic -r sftp:1.1.1.1:/moerats restore abcd --target /rats
#你也可以直接使用latest来恢复最后一次的备份文件
restic -r sftp:1.1.1.1:/moerats restore latest --target /rats
#如果你只想备份其中的一个文件夹/文件,使用--include参数,后面接文件/文件夹;如果不想备份其中的文件,那就使用--exclude参数即可,记得使用备份时文件的绝对路径。
脚本备份
上面备份的时候,都需要输入密码,肯定不适合脚本自动备份,所以我们还需要使用--password-file
参数来达到自动读取密码的步骤。
使用命令:
代码语言:javascript复制#先将密码,比如moerats保存在/root/resticpasswd文本中
echo 'moerats' > /root/resticpasswd
#然后在备份命令中加--password-file参数来读取文本中的密码,这里以sftp为例
restic -r rclone:RATS:/moerats --verbose backup /rats --password-file /root/resticpasswd
然后此时就不需要你再输入密码了,这时候就方便自己写脚本自动备份文件了。
然后最后博主也没过多的研究,只是大概的了解下,有兴趣的可自己仔细研究下官方文档→传送门。