使用restic进行备份教程
摘要:记录一下使用restic备份数据的常见用例。
前言
Restic 的备份体系由备份端(客户端)与服务端(Rest Server)构成,备份端负责将数据传输并存放到服务端这个“集中式大仓库”中。在鉴权方面,可以使用 htpasswd 工具创建多个访问用户。但需要特别强调的是:如果服务端不加--private-repos配置,所有账号的数据是完全互通的。 想要做到用户之间的数据互相隔离、互不可见,服务端在启动时必须带上--private-repos参数,为每个用户划分专属的“私人仓库”。
服务端
配置服务端
(1) 安装服务端
# 下载压缩包
wget https://github.com/restic/rest-server/releases/download/v0.14.0/rest-server_0.14.0_linux_amd64.tar.gz
# 解压并放到系统执行目录
tar -zxvf rest-server_*.tar.gz
mv rest-server_*/rest-server /usr/local/bin/
chmod 755 /usr/local/bin/rest-server
# 安装生成密码文件的工具
apt install apache2-utils
# 创建备份主目录
mkdir -p /vdb1/restic_backup
# 首次创建连接账号和密码(例如账号叫 myuser1,回车后会让你输入两次密码)
# -c 新建并覆盖
# -B 强制使用 bcrypt 算法对密码进行加密存储
# /test/restic_backup是rest-server的存储根目录,.htpasswd 都必须放在此根目录下
htpasswd -B -c /test/restic_backup/.htpasswd myuser1
# 第二次创建连接账号和密码(例如账号叫 myuser2,回车后会让你输入两次密码)
# 这个时候不要使用-c参数了
htpasswd -B /test/restic_backup/.htpasswd myuser2(2) 启动服务端
# --path <目录> : 指定服务端存储备份数据的根目录(注意:密码文件 .htpasswd 必须放在此根目录下)。
# --append-only : 开启“防勒索(只追加)”模式。客户端只能上传新数据,拒绝所有网络删除请求(无法通过网络执行 prune 或 forget)。
# --private-repos : 开启“多用户隔离”模式。根据不同账号名,自动在根目录下创建并挂载专属的子文件夹,实现不同客户端数据互相不可见。
nohup rest-server --path /test/restic_backup --append-only --private-repos > /var/log/rest-server.log 2>&1 &rest-server 启动后默认监听8000端口。如果要关闭 rest-server,可以使用pkill rest-server命令关闭服务端。
其他常用命令
注:服务端使用apt-get install restic安装restic客户端。这样在服务端可以直接使用-r参数指定备份数据的根目录。
(1)清理废弃数据
# 这个命令用于清理服务端废弃数据
# 清理备份服务器的Tree/Index Blobs(目录结构和索引)和完全废弃的Data Blobs(实际的文件内容)
# 这个清理速度比较快
restic -r /test/restic_backup prune --repack-cacheable-only
# 这个清理速度比较慢
restic -r /test/restic_backup prune如果服务端使用参数--private-repos,则不能使用/test/restic_backup作为-r的参数。此时应该使用/test/restic_backup/用户名的形式,以前面的例子为例就是restic -r /test/restic_backup/myuser1 prune和restic -r /test/restic_backup/myuser2 prune。
(2)管理仓库密码
# 列出仓库密码
restic -r /test/restic_backup key list
# 添加仓库密码
restic -r /test/restic_backup key add
# 移除指定的仓库密码
restic -r /test/restic_backup key remove 03dbcfde备份端
(1) 安装备份端
apt-get update
apt-get install restic(2) 初始化仓库
# 192.168.1.2 为服务端的ip
# myuser1、myuser1_password分别为前面htpasswd设置的账户、密码
# 初始过程中会让你输入仓库密码
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ init注意:如果不启用--private-repos只需要初始化一次就行。如果启用了,每个用户都需要初始化一次自己的仓库。
(3) 备份数据
# /test/backup为要备份的目录
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ backup /test/backup
# /test/config.yaml为要备份的文件
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ backup /test/config.yaml其他常用命令
# 查看已经备份的数据快照
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ snapshots
# 查看某个具体快照中的文件列表
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ ls 1ae34c6d
# 将1ae34c6d数据快照恢复到本地的/code目录
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ restore 1ae34c6d --target /code
# 只将1ae34c6d数据快照中的`/test/backup/config.yaml`文件单独还原到`/config.yaml`文件
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ dump 1ae34c6d /test/backup/config.yaml > /config.yaml
# 可以将备份仓库挂载到本地的/restic/testmount目录,然后在本地的文件管理器可以直接访问
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ mount /restic/testmount
# 查看本地挂载的文件夹
mount | grep restic
# 结束挂载
umount /restic/testmount
# 删除本地的restic缓存
restic cache --cleanup
# 删除指定的快照`ff85c621`,不清理废弃数据
# 这个删除比较快
restic -r /vdb1/restic_backup forget ff85c621
# 删除指定的快照`ff85c621`,不清理废弃数据
# 这个删除比较慢
restic -r /vdb1/restic_backup forget ff85c621 --prune
# 对比快照的差异
restic -r rest:http://myuser1:myuser1_password@192.168.1.2:8000/ diff a096cdff 42032ee1参考教程
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。