三月 19, 2021

备份工具 kopia 应用

跨平台备份工具,支持端到端加密,压缩,去重,增量备份,排除策略,定时任务等

缘由

以前一直在用 borgbackup 来备份服务器数据,苦于在 Windows 下使用比较不方便。而且也一直关注备份工具。最近在GitHub 上发现以前关注过的kopia更新了大版本 0.8.0 ,就打算来用一下 顺便记录下简单的使用过程。

软件很简单,有 CLI 版本和 GUI 版本。为了灵活使用我这里使用 CLI 版本来操作。后续说明截图以CLI来说明。

首先从 GitHub 下载最新版。这篇文章使用的是 0.8.0-beta2。我这里下载 kopia-0.8.0-beta2-linux-x64.tar.gz ,然后解压,把执行文件移动到了 /usr/local/bin 下方便使用。

基本使用

首先先要建立数据保存的地方。软件内叫 repository

$ kopia repository create filesystem --path /tmp/my-repository

根据向导,会让你输入库的密码。然后可以用下面命令看到已经在对应路径下创建了最基本的数据库。

$ find /tmp/my-repository -type f
/tmp/my-repository/n1b/d00/aa56a13c1140142b39befb654a2.f
/tmp/my-repository/pea/8b5/e01d92618653ffbf2bb9961448d.f
/tmp/my-repository/kopia.repository.f

然后用如下命令连接到数据库

$ kopia repository connect filesystem --path /tmp/my-repository

同样,会提示输入数据库密码。连接成功后,使用如下命令来备份你的数据

kopia snapshot create $HOME/Projects/github.com/kopia/kopia

同样 上面在 create 后可以跟很多个你需要备份的文件/夹的路径。

备份支持 类似 gitignore 的排除文件的方式。可以轻松排出一些不需要备份的文件。只需要在文件夹下 建立一个名为 .kopiaignore 的文件。一行一个排除语法。详细语法可以参考这里。 其次还支持在文件夹内放置一个  CACHEDIR.TAG 来排除整个文件夹不备份。

创建备份后可以使用 kopia snapshot list 来查看备份文件的路径。使用 kopia mount 来挂载查看和还原。详细 操作可以参考 官方文档

一些进阶应用方法

服务器模式

从 0.8.0 开始 服务器模式变化有点大。所以我直接把遇到的坑和解决方案一次调整完使用下面流程来建立服务器端和使用客户端来连接服务器进行备份。

首先服务器端同正常使用一样 先连接到 repository ,这样可以为其他用户提供类似S3 的后端存储而不暴露S3的登陆信息。连接或者创建成功后使用如下命令会看到类似的反馈。

[email protected]:~# kopia repository status
Config file:         /root/.config/kopia/repository.config

Description:         s3 repository
Hostname:            it
Username:            root
Read-only:           false

Storage type:        s3
Storage config:      {
                       "bucket": "<bucket>",
                       "prefix": "<prefix>/",
                       "endpoint": "<endpoint>",
                       "accessKeyID": "<accessKeyID>",
                       "secretAccessKey": "************************************",
                       "sessionToken": ""
                     }

Unique ID:           <repository-id>
Hash:                BLAKE2B-256-128
Encryption:          AES256-GCM-HMAC-SHA256
Splitter:            DYNAMIC-4M-BUZHASH
Format version:      1
Max pack length:     20 MiB

然后添加服务器的用户,使用如下命令,就能创建一个 在机器名 hostuser 用户了。另外需要注意的是,用户一定是 [email protected] 的形式,并且都是小写字母。

kopia server users add [email protected] #0.8.0-beta3 变更

创建完用户后,使用如下命令启动 kopia 服务器端。

server start --tls-cert-file /usr/local/etc/kopia/server.pem --tls-key-file /usr/local/etc/kopia/server.key --server-password <password> --address=0.0.0.0:51515 --file-log-level=error

替换命令里的 证书路径即可。

然后来到需要连接服务器端的客户端。因为使用的是自签名证书。所以链接的时候需要提供 服务器证书的数字指纹。使用如下命令来获取服务器证书的数字指纹。

openssl x509 -in /usr/local/etc/kopia/server.pem  -noout -fingerprint -sha256 | sed 's/://g' | cut -f 2 -d =
48537CCE585FED39FB26C639EB8EF38143592BA4B4E7677A84A31916398D40F7

然后在客户端使用下面命令连接到服务器端。

kopia repository connect server --url=kopia://<server-ip>:51515 --server-cert-fingerprint=<fingerprint-string> --override-username=user --override-hostname=host

默认策略设置

这里说明下服务器端的策略设置,主要就是压缩,毕竟S3的费用还不便宜,使用下面的命令来设置压缩。这里使用了一个比较效率的中等压缩率的方式。

kopia policy set --global --compression=zstd-better-compression #添加全局压缩模式
kopia policy set --global --add-ignore=.git #添加全局排除文件

图形界面

在之前我们创建了服务器模式的 kopia ,所以直接访问服务器的 51515 端口即可。即 https://<server-ip>:51515 ,使用用户名 kopia 和密码 <password> 来登录。