跳转至

borg 文件备份

在 Linux 中,有多种备份工具提供系统级备份和用户数据备份功能

背景

当我在工作中处理大量数据时,首先想到的显而易见的问题是:

  • 如果我丢失了数据怎么办?
  • 我的数据的安全性如何?

相同的场景将应用于个人机器,您应该始终根据数据的重要性备份您的数据,并保护您的数据免受非法访问。

无论是您的个人数据还是官方数据,您都应该始终规划良好的备份策略,并使用强大的备份工具来帮助您备份重要数据。

最受推荐和广泛使用的开源备份应用程序之一是“Borg”。

什么是Borg

BorgBackup,简称borg,是一种备份工具,旨在提供一种使用重复数据删除技术备份数据的有效方法

下面列出了Borg的一些独特功能

  • 重复数据删除- 重复数据删除技术仅存储数据的增量副本,非常适合进行日常备份

  • 跨平台- Borg 可以在 Linux、Mac OS X 和 FreeBSD 中安装和使用

  • 安全- 支持使用AES加密(256 位)的数据加密,以验证使用HMAC-SHA256的真实性

  • 压缩- 可以使用以下压缩方法压缩数据:

    • LZ4 -> 超快,低压缩
  • ZSTD -> 高速低压缩到低速高压缩
  • ZLIB -> 中等速度,中等压缩
  • LZMA -> 低速,高压缩

  • 远程备份- 数据可以通过 SSH 协议备份到远程机器

linux 安装 Borg

Borg 在大多数 Linux 发行版的默认存储库中可用,因此,它可以使用特定于发行版的包管理器进行安装

在 rech linux 中安装:

dnf install borgbackup -y

使用 Borg 进行第一次备份

在进行第一次备份之前,您必须了解两个重要术语

  • 档案- 您的数据的备份副本(快照)将被称为档案
  • 存储库- 本地或远程文件系统中存储档案的目录

首先初始化存储档案的存储库(目录)

我在名为source的目录中有一个文件列表并创建了一个名为backup的新目录,它将作为我存储档案的存储库

初始化仓库

执行borg init 命令初始化目录, 备份目录可以在本地机器,也可以是远程机器

borg init --encryption=none /home/karthick/borg/backup

使用repokey加密

borg init --encryption=repokey  /home/karthick/borg/backup

使用keyfile 加密

borg init --encryption=keyfile  /home/karthick/borg/backup

初始化存储库时,您可以选择加密类型,当您使用加密类型为None 时,不会应用任何加密,当您使用repokeykeyfile作为加密类型时,它使用AES-CTR-256进行加密。

选择任何一种加密类型并运行该init命令,就我而言,出于演示目的,我选择加密类型为无

使用borg 备份文件

创建第一个备份

初始化备份文件夹之后, 可以通过下面命令来创建备份

borg create --stats --progress /home/cmzhu/backup::20230416 /home/cmzhu/kube-state-metrics

在这里,我以模拟每日备份的日期格式20230416给出存档名称,没有--stats--progress标志,创建命令的输出将是安静的。

创建备份时显示文件

borg create --list -v /home/cmzhu/backup/::20230416001 /home/cmzhu/kube-state-metrics
[root@cmzhu cmzhu]# borg create --list -v /home/cmzhu/backup/::20230416004 /home/cmzhu/kube-state-metrics
Creating archive at "/home/cmzhu/backup/::20230416004"
U /home/cmzhu/kube-state-metrics/Chart.yaml
U /home/cmzhu/kube-state-metrics/.helmignore
U /home/cmzhu/kube-state-metrics/README.md
U /home/cmzhu/kube-state-metrics/values.yaml
A /home/cmzhu/kube-state-metrics/test
U /home/cmzhu/kube-state-metrics/templates/NOTES.txt
U /home/cmzhu/kube-state-metrics/templates/_helpers.tpl
U /home/cmzhu/kube-state-metrics/templates/clusterrolebinding.yaml
U /home/cmzhu/kube-state-metrics/templates/deployment.yaml
U /home/cmzhu/kube-state-metrics/templates/kubeconfig-secret.yaml
U /home/cmzhu/kube-state-metrics/templates/pdb.yaml
U /home/cmzhu/kube-state-metrics/templates/podsecuritypolicy.yaml
U /home/cmzhu/kube-state-metrics/templates/psp-clusterrole.yaml
U /home/cmzhu/kube-state-metrics/templates/psp-clusterrolebinding.yaml
U /home/cmzhu/kube-state-metrics/templates/rbac-configmap.yaml
U /home/cmzhu/kube-state-metrics/templates/role.yaml
U /home/cmzhu/kube-state-metrics/templates/rolebinding.yaml
U /home/cmzhu/kube-state-metrics/templates/service.yaml
U /home/cmzhu/kube-state-metrics/templates/serviceaccount.yaml
U /home/cmzhu/kube-state-metrics/templates/servicemonitor.yaml
U /home/cmzhu/kube-state-metrics/templates/stsdiscovery-role.yaml
U /home/cmzhu/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml
U /home/cmzhu/kube-state-metrics/templates/verticalpodautoscaler.yaml
d /home/cmzhu/kube-state-metrics/templates
d /home/cmzhu/kube-state-metrics
[root@cmzhu cmzhu]# 

创建压缩备份

默认情况下,borg 使用lz4压缩算法lz4压缩算法速度非常快,压缩比低,如果您想使用不同的压缩算法,您可以使用该--compression标志并将类型与压缩级别一起传递

例如,如果我想使用zstd算法,那么我的命令将如下所示

borg create --compression zstd,1 /home/cmzhu/backup/::20230416002 /home/cmzhu/kube-state-metrics

您可以从 Borg 官方文档中查看不同的压缩算法及其级别

列出备份

使用Borg list 您可以查询您的存储库以查找档案列表以及档案中包含哪些文件

要单独获取档案列表,请运行以下命令

 borg list /home/cmzhu/backup
[root@cmzhu cmzhu]#  borg list /home/cmzhu/backup
20230416000                          Sun, 2023-04-16 11:02:46 [ccd447e44333e52bbb301b6c6d39f59003ef266ab3ebb4a4fcf943e9d6621eb4]
20230416001                          Sun, 2023-04-16 11:05:35 [752b594a8a4819bd98855742fb452825da97e386b230f533aa70be90e0fceb68]
20230416002                          Sun, 2023-04-16 11:08:15 [7e5a6c06ab89682cf2bb2355d3f73c28fa488c056f9d6a81556c30faf172121d]
20230416003                          Sun, 2023-04-16 11:21:16 [d438e2e37dc98652082881b40b2cd1a1a843aa714d07d4cc8ccd648c827de94d]

您还可以使用该--json标志,它将以json格式提供有关存储库和档案列表的更多信息

 borg list --json /home/cmzhu/backup
[root@cmzhu cmzhu]#  borg list --json /home/cmzhu/backup
{
    "archives": [
        {
            "archive": "20230416000",
            "barchive": "20230416000",
            "id": "ccd447e44333e52bbb301b6c6d39f59003ef266ab3ebb4a4fcf943e9d6621eb4",
            "name": "20230416000",
            "start": "2023-04-16T11:02:46.000000",
            "time": "2023-04-16T11:02:46.000000"
        },
        {
            "archive": "20230416001",
            "barchive": "20230416001",
            "id": "752b594a8a4819bd98855742fb452825da97e386b230f533aa70be90e0fceb68",
            "name": "20230416001",
            "start": "2023-04-16T11:05:35.000000",
            "time": "2023-04-16T11:05:35.000000"
        },
        {
            "archive": "20230416002",
            "barchive": "20230416002",
            "id": "7e5a6c06ab89682cf2bb2355d3f73c28fa488c056f9d6a81556c30faf172121d",
            "name": "20230416002",
            "start": "2023-04-16T11:08:15.000000",
            "time": "2023-04-16T11:08:15.000000"
        },
        {
            "archive": "20230416003",
            "barchive": "20230416003",
            "id": "d438e2e37dc98652082881b40b2cd1a1a843aa714d07d4cc8ccd648c827de94d",
            "name": "20230416003",
            "start": "2023-04-16T11:21:16.000000",
            "time": "2023-04-16T11:21:16.000000"
        }
    ],
    "encryption": {
        "mode": "none"
    },
    "repository": {
        "id": "469123c4118e0f016ec78d1dd213e0514b9c229d16f5d8c6088c5c797981d781",
        "last_modified": "2023-04-16T11:23:12.000000",
        "location": "/home/cmzhu/backup"
    }
}

列出存档中的文件

列出 20230416 存档中的文件

borg list /home/cmzhu/backup::20230416
[root@cmzhu cmzhu]# borg list /home/cmzhu/backup::20230416
drwxr-xr-x root   root          0 Wed, 2023-02-01 18:52:17 home/cmzhu/kube-state-metrics
-rw-r--r-- root   root        494 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/Chart.yaml
-rw-r--r-- root   root        333 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/.helmignore
-rw-r--r-- root   root       2725 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/README.md
-rw-r--r-- root   root      12810 Wed, 2023-02-01 18:52:17 home/cmzhu/kube-state-metrics/values.yaml
drwxr-xr-x root   root          0 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates
-rw-r--r-- root   root       1114 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/NOTES.txt
-rw-r--r-- root   root       3436 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/_helpers.tpl
-rw-r--r-- root   root        662 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/clusterrolebinding.yaml
-rw-r--r-- root   root      10489 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/deployment.yaml
-rw-r--r-- root   root        348 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/kubeconfig-secret.yaml
-rw-r--r-- root   root        579 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/pdb.yaml
-rw-r--r-- root   root       1039 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/podsecuritypolicy.yaml
-rw-r--r-- root   root        696 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/psp-clusterrole.yaml
-rw-r--r-- root   root        622 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/psp-clusterrolebinding.yaml
-rw-r--r-- root   root        477 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/rbac-configmap.yaml
-rw-r--r-- root   root       5203 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/role.yaml
-rw-r--r-- root   root        771 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/rolebinding.yaml
-rw-r--r-- root   root       1635 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/service.yaml
-rw-r--r-- root   root        592 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/serviceaccount.yaml
-rw-r--r-- root   root       3336 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/servicemonitor.yaml
-rw-r--r-- root   root        558 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/stsdiscovery-role.yaml
-rw-r--r-- root   root        636 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml
-rw-r--r-- root   root       1348 Wed, 2023-02-01 18:04:55 home/cmzhu/kube-state-metrics/templates/verticalpodautoscaler.yaml

使用 --json-lines

borg list --json-lines /home/cmzhu/backup::20230416
[root@cmzhu cmzhu]# borg list --json-lines /home/cmzhu/backup::20230416 | jq
{
  "type": "d",
  "mode": "drwxr-xr-x",
  "user": "root",
  "group": "root",
  "uid": 0,
  "gid": 0,
  "path": "home/cmzhu/kube-state-metrics",
  "healthy": true,
  "source": "",
  "linktarget": "",
  "flags": 0,
  "mtime": "2023-02-01T18:52:17.180590",
  "size": 0
}
...

从备份中排除文件和目录

您可以使用-e--exclude标志排除文件和目录

borg list /home/cmzhu/backup::25-11-2021 --exclude "hist"

找出档案之间的差异

可以使用 diff 命令来比对两个存档

borg diff /home/cmzhu/backup/::27-11-2021 28-11-2021
[root@cmzhu cmzhu]# borg diff /home/cmzhu/backup/::20230416 20230416003
[ctime: Wed, 2023-02-01 18:52:17 -> Sun, 2023-04-16 11:20:51] [mtime: Wed, 2023-02-01 18:52:17 -> Sun, 2023-04-16 11:20:51] home/cmzhu/kube-state-metrics
added           0 B home/cmzhu/kube-state-metrics/test
[root@cmzhu cmzhu]# 

重命名档案

创建存档后,如果您想重命名它,您可以使用该borg rename命令来完成

borg rename /home/cmzhu/backup/::20230416 20230416000
[root@cmzhu cmzhu]# borg rename /home/cmzhu/backup/::20230416 20230416000
[root@cmzhu cmzhu]# borg list /home/cmzhu/backup/
20230416000                          Sun, 2023-04-16 11:02:46 [ccd447e44333e52bbb301b6c6d39f59003ef266ab3ebb4a4fcf943e9d6621eb4]
20230416001                          Sun, 2023-04-16 11:05:35 [752b594a8a4819bd98855742fb452825da97e386b230f533aa70be90e0fceb68]
20230416002                          Sun, 2023-04-16 11:08:15 [7e5a6c06ab89682cf2bb2355d3f73c28fa488c056f9d6a81556c30faf172121d]
20230416003                          Sun, 2023-04-16 11:21:16 [d438e2e37dc98652082881b40b2cd1a1a843aa714d07d4cc8ccd648c827de94d]

使用borg 恢复数据

备份数据的主要重点是在需要时进行恢复,因此,您可以使用该borg extract命令从档案中检索数据,当您运行该extract命令时,它会将数据提取到您从中运行提取命令的当前工作目录

运行以下命令将存档解压缩到当前工作目录。随着-v--list标志补充说,它会告诉你提取的文件列表

borg extract -v --list backup/::20230416000

您还可以使用--dry-run标志,它只会显示将要提取的内容而不是提取它

borg extract --dry-run -v --list backup/::20230416000
[root@cmzhu cmzhu]# borg extract --dry-run -v --list backup/::20230416000
home/cmzhu/kube-state-metrics
home/cmzhu/kube-state-metrics/Chart.yaml
home/cmzhu/kube-state-metrics/.helmignore
home/cmzhu/kube-state-metrics/README.md
home/cmzhu/kube-state-metrics/values.yaml
home/cmzhu/kube-state-metrics/templates
home/cmzhu/kube-state-metrics/templates/NOTES.txt
home/cmzhu/kube-state-metrics/templates/_helpers.tpl
home/cmzhu/kube-state-metrics/templates/clusterrolebinding.yaml
home/cmzhu/kube-state-metrics/templates/deployment.yaml
home/cmzhu/kube-state-metrics/templates/kubeconfig-secret.yaml
home/cmzhu/kube-state-metrics/templates/pdb.yaml
home/cmzhu/kube-state-metrics/templates/podsecuritypolicy.yaml
home/cmzhu/kube-state-metrics/templates/psp-clusterrole.yaml
home/cmzhu/kube-state-metrics/templates/psp-clusterrolebinding.yaml
home/cmzhu/kube-state-metrics/templates/rbac-configmap.yaml
home/cmzhu/kube-state-metrics/templates/role.yaml
home/cmzhu/kube-state-metrics/templates/rolebinding.yaml
home/cmzhu/kube-state-metrics/templates/service.yaml
home/cmzhu/kube-state-metrics/templates/serviceaccount.yaml
home/cmzhu/kube-state-metrics/templates/servicemonitor.yaml
home/cmzhu/kube-state-metrics/templates/stsdiscovery-role.yaml
home/cmzhu/kube-state-metrics/templates/stsdiscovery-rolebinding.yaml
home/cmzhu/kube-state-metrics/templates/verticalpodautoscaler.yaml