跳到主要内容

掌握你的数据安全:正确选择备份工具(下)

本文主要介绍如何使用 Restic 备份到云存储中,并简单介绍如何从备份中还原数据。

承接上文,经过一番选择,我决定采用 Restic 来备份云服务器中的数据,本文将围绕已经搭建运行一年的 VaultWarden 服务,每天备份一次 VaultWarden 的数据到谷歌云盘中去,也会简单介绍下如何从备份数据里还原。

简介 #

Restic 是一款免费、开源、快速、高效且安全的备份程序,使用 go 编程语言编写,适用于多种平台(包括 Linux,Mac,Windows)。Restic 使用 AES-256 对数据进行加密,并使用 Poly1305-AES 对数据进行身份验证。主要设计目标是提供一个易于使用、快速且安全的备份解决方案。它允许你备份文件,然后将备份存储在本地硬盘驱动器或远程存储服务(例如 Amazon S3,Google Cloud Storage,或任何支持 SFTP 的服务器)。

安装与设置 #

Restic 的安装非常简单,大部分平台的包管理器里已经包含,安装只需一条命令足够了,具体可以参考官方安装文档

你可以使用 restic version 来测试安装是否成功。

接下来我们需要设置一个主仓库,也就是我们希望在哪里存储我们的备份文件,在 Restic 中,官方支持的种类非常多,主要包含:

  • 本地文件目录
  • AWS S3 或是兼容 S3 的服务,如自建的 Minio 或者比 S3 相对更便宜的 Wasabi
  • 其他各类大厂的对象存储服务,如 Aliyun OSS, B2, Azure Blob Storage, Google Cloud Storage等
  • 结合 rclone 支持 rclone 所支持的所有存储服务 (对于个人用户而言可能这个是最重要的了)

根据我的需求,我需要使用 Google Drive 来存储备份,那么显而易见我需要使用 rclone 作为我的主仓库。

首先按照常规配置好 rclone 连接到我的 Google Drive,并起名为 gd

初始化我的主仓库

restic -r rclone:gd:restic init

这段命令将会创建一个新的仓库,并提示你输入一个密码。这个密码用于加密你的备份数据,因此请务必记住它! 其中 rclone 是告诉 restic 程序这个主仓库是 rclone 的 mount,gd是具体 rclone 的配置名字,restic 是存储目录,

这就完成了安装和设置的步骤,接下来我们就可以开始使用 Restic 来备份数据了。

使用 Restic 进行备份和还原 #

打包 VaultWarden 的数据 #

首先我们需要将 VaultWarden 的内容打包,我的 VaultWarden 的数据库采用的Sqlite,存储路径是 /opt/vaultwarden/data,打包采用下面的命令:

cd /opt/vaultwarden/ && \
tar -cvzf ~/valutwarden_backup.tgz --exclude="./data/tmp" --exclude="./data/icon_cache" --exclude="./data/attachments" --exclude="./data/sends" ./data/

打包完成后在$HOME目录下会生成一个 valutwarden_backup.tgz 文件,验证这个文件里的内容是不是我们想要的,可以将打好的包拆开看一眼:

cd ~ && \
tar -xzvf valutwarden_backup.tgz && \
ls -l

可以看到一个新的文件夹 data,请仔细确认里面的内容是我们想要的,然后我们进行到下一步

给 Restic 配置环境变量 #

上一章节里我们已经配置好了我们的主仓库和密码,接下来我们需要将它们放置在环境变量里,避免每次我们都需要指定仓库地址和敲入密码

export RESTIC_REPOSITORY=rclone:gd:restic #请替换为你的仓库路径
export RESTIC_PASSWORD=mysecretpassword #请替换为你设置的密码

增加一个 cronjob 并备份 #

为了保持cronjob足够简单,我们先创建一个bash脚本,将刚才的打包以及 restic 的备份命令一起放在脚本里,我们在$HOME目录下创建 backup.sh文件,文件内容如下:

#!/bin/bash
cd /opt/vaultwarden/
tar -cvzf ~/valutwarden_backup.tgz --exclude="./data/tmp" --exclude="./data/icon_cache" --exclude="./data/attachments" --exclude="./data/sends" ./data/
restic backup ~/valutwarden_backup.tgz
rm ~/valutwarden_backup.tgz

给文件赋予运行权限

chmod +x ~/backup.sh

本地先运行一次,看看效果

~/backup.sh

运行 restic snapshots 快速检查 一切正常,接下来我们放入到 cronjob 里,执行

crontab -e

选择你喜欢的编辑器,添加一个job

0 2 * * * ~/backup.sh >> /var/log/restic.log 2>&1

每天凌晨两点,自动备份一次最新的 VaultWarden 数据

推荐使用 Crontab Guru 编写合适你的周期

恢复数据 #

使用 restic 恢复数据非常简单,只需运行下面的命令

restic restore [快照ID] --target [文件目录]

即可取回你备份的数据了,至此大功告成,关于 restic 的一些高级用法可以参考官方文档的详尽说明

参考文章 #

Daily backups to S3 with Restic and systemd timers