暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在 Linux 中使用 BorgBackup 备份和恢复文件

运维漫谈 2021-12-03
4250

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

在这篇综合性的文章中,我们将研究什么是BorgBackup以及如何在 Linux 和类 Unix 系统中使用 Borg 备份和恢复文件。


  • 1.介绍

  • 2.什么是Borg?

  • 3. 在 Linux 中安装 Borg

  • 4. 使用 Borg 进行第一次备份

  • 5. 初始化仓库

  • 6.使用Borg备份文件

    • 6.1. 创建第一个备份

    • 6.2. 创建备份时显示文件

    • 6.3. 创建压缩备份

    • 6.4. 获取存档信息

  • 7. 列出备份

    • 7.1. 列出档案中的文件

    • 7.2. 从备份中排除文件和目录

  • 8. 找出档案之间的差异

  • 9.重命名档案

  • 10.使用borg恢复文件(从存档中提取数据)

    • 10.1. 从还原中排除文件

  • 11.挂载和卸载存储库和档案

  • 12. 修剪档案

  • 13.删除存储库和存档

  • 14.更改密钥密码

  • 15.导出和导入密钥

  • 16. 使用远程仓库

  • 17. 结论


1.介绍

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

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

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

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

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

2.什么是Borg?

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

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

  • 重复数据删除- 重复数据删除技术仅存储数据的增量副本,非常适合进行日常备份。
  • 跨平台- Borg 可以在 Linux、Mac OS X 和 FreeBSD 中安装和使用。
  • 安全- 支持使用AES加密(256 位)的数据加密,以验证使用HMAC-SHA256的真实性。
  • 压缩- 可以使用以下压缩方法压缩数据:
    • LZ4 -> 超快,低压缩。
    • ZSTD -> 高速低压缩到低速高压缩。
    • ZLIB -> 中等速度,中等压缩。
    • LZMA -> 低速,高压缩。
  • 远程备份- 数据可以通过 SSH 协议备份到远程机器。

3. 在 Linux 中安装 Borg

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

要在 Alpine Linux 中安装 borg,请运行以下命令:

$ sudo apk add borgbackup

要在 Arch Linux 及其变体(例如 EndeavourOS 和 Manjaro Linux)中安装 borg,请运行以下命令:

$ sudo pacman -S borg

在基于 Debian/Ubuntu 的发行版中安装 borg:

$ sudo apt install borgbackup -y

在 Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 中安装 borg:

$ sudo dnf install borgbackup -y

在 openSUSE 中安装 Borg:

$ sudo zypper install borgbackup -y

由于 borg 是用Python编写的,因此您可以使用 python 包管理器PiP来安装 borg。根据安装的 pip 版本,您可以运行以下任一命令。

$ pip install borgbackup

或者,

$ pip3 install borgbackup

安装后,您可以通过运行 version 和 help 命令来验证 Borg 安装:

$ borg --version

$ borg --help

4. 使用 Borg 进行第一次备份

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

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

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

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

5. 初始化仓库

执行borg init命令初始化备份目录。备份目录可以在本地机器或远程机器中。就我而言,我正在初始化我已经创建的目录(即备份)。

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

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

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

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

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

6.使用Borg备份文件

6.1. 创建第一个备份

初始化存储库后,您可以通过运行以下命令来创建备份存档:

$ borg create --stats --progress /home/karthick/borg/backup::25-11-2021 /home/karthick/borg/source/

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

6.2. 创建备份时显示文件

您还可以组合--list和-v标志以在运行borg create命令时显示存档中的文件列表。

$ borg create --list -v /home/karthick/borg/backup/::27-11-2021 /home/karthick/borg/source/

6.3. 创建压缩备份

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

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

$ borg create --compression zstd,1 /home/karthick/borg/backup/::27-11-2021 /home/karthick/borg/source/

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

6.4. 获取存档信息

您可以使用该info命令来获取有关特定存档的信息。

$ borg info /home/karthick/borg/backup/::25-11-2021

7. 列出备份

使用该borg list命令,您可以查询您的存储库以查找档案列表以及档案中包含哪些文件。

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

$ borg list /home/karthick/borg/backup

示例输出:

25-11-2021 Thu, 2021-11-25 13:16:53 [653d952301fc70ab9f2f74794361359144e05f5534e668ef4a4957d2c7f67937]
26-11-2021 Thu, 2021-11-25 13:19:51 [473bbe30fbe8597b63910310d567e69b501b2fb7127f04a78da76ab59d90114f]
27-11-2021 Thu, 2021-11-25 13:20:01 [0e6813f1a05246d43d196de9d28034d0397b4ae50cd20ee50163e347efee3e2a]

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

$ borg list --json /home/karthick/borg/backup

7.1. 列出档案中的文件

要获取存档中的文件列表,请运行以下命令。在这里,我列出了存档"25-11-2021" 中的文件。

$ borg list /home/karthick/borg/backup::25-11-2021

示例输出:

drwxrwxr-x karthick karthick 0 Thu, 2021-11-25 12:48:58 home/karthick/borg/source
-rw-r--r-- karthick karthick 807 Mon, 2021-11-22 13:35:51 home/karthick/borg/source/project_profile.txt
-rw------- karthick karthick 2301 Mon, 2021-11-22 13:35:51 home/karthick/borg/source/hist.txt
-rw-r--r-- karthick karthick 220 Mon, 2021-11-22 13:35:51 home/karthick/borg/source/external.txt
-rw-r--r-- karthick karthick 3895 Mon, 2021-11-22 13:35:51 home/karthick/borg/source/config.txt

您还可以使用该--json-lines标志以JSON格式列出存档内容。

7.2. 从备份中排除文件和目录

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

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

8. 找出档案之间的差异

您可以使用该diff命令来比较两个存档。

我正在创建一个名为目录datafile.txt下的新文件source,我还创建了一个名为28-11-2021 的档案。

现在我可以比较新存档和旧存档,如下所示:

$ borg diff /home/karthick/borg/backup/::27-11-2021 28-11-2021
added 2.89 kB home/karthick/borg/source/datafile.txt

9.重命名档案

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

假设我想将档案"27-11-2021"重命名为"29-11-2021",我可以通过运行以下命令来做到这一点。

$ borg rename /home/karthick/borg/backup/::27-11-2021 29-11-2021

10.使用borg恢复文件(从存档中提取数据)

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

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

$ borg extract -v --list backup/::25-11-2021

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

$ borg extract --dry-run -v --list backup/::25-11-2021

您可以通过传递目录名称从存档中提取特定目录,由于我的存档中只有一个目录,因此它将检索该目录。

$ borg extract -v --list backup/::25-11-2021 home/karthick/borg/source/

10.1. 从还原中排除文件

您还可以--exclude在提取目录时添加以省略文件,在这里,我正在提取所有文件,不包括带有hist 的任何文件。

$ borg extract -v --list backup/::25-11-2021 home/karthick/borg/source/ --exclude "hist"

11.挂载和卸载存储库和档案

您可以将存储库或特定存档安装为保险丝文件系统,然后,您可以使用安装的存档恢复文件。

要挂载整个存储库,请运行以下命令:

$ mkdir /tmp/borg/
$ borg mount /home/karthick/borg/backup/ /tmp/borg/
$ ls -l /tmp/borg/

示例输出:

drwxr-xr-x 1 karthick karthick 0 Nov 25 16:31 25-11-2021
drwxr-xr-x 1 karthick karthick 0 Nov 25 16:31 26-11-2021
drwxr-xr-x 1 karthick karthick 0 Nov 25 16:31 27-11-2021
drwxr-xr-x 1 karthick karthick 0 Nov 25 16:31 28-11-2021
drwxr-xr-x 1 karthick karthick 0 Nov 25 16:32 29-11-2021

您可以从上面的输出中看到我的所有档案都安装为一个目录,现在我可以通过复制文件来简单地恢复。

要挂载特定档案,只需将档案名称与存储库一起添加即可。

$ borg mount /home/karthick/borg/backup/::25-11-2021 /tmp/borg/

要卸载已安装的存储库或存档,请使用该borg umount命令。

$ borg umount /tmp/borg

$ ls -l /tmp/borg

12. 修剪档案

borg prune当您自动备份并且只想维护某些副本并清除剩余副本时,该命令将非常有用。

上表中的选项决定了您的存储库中要保存多少存档副本,例如,如果我只想从每周备份中保留2 个副本,那么我的命令将如下所示。

$ borg prune -v --list --keep-weekly=2 /home/karthick/borg/backup/

您也可以将上述条件单独应用于某些档案,例如,假设我的存储库中有 10 个存档,并且我希望应用存档 7 的保留规则,然后我可以使用该--prefix标志来设置条件。

$ borg prune -v --list --keep-weekly=2 --prefix='{archive name}' /home/karthick/borg/backup/

在运行prune命令之前,请使用--dry-run标志进行试运行。

13.删除存储库和存档

您可以使用该borg delete命令删除存档或整个存储库。

要删除单个存档,您必须提供存档名称。

$ borg delete /home/karthick/borg/backup/::26-11-2021

要删除整个存档,只需提供存储库路径。删除整个目录时,系统会提示您进行确认。

$ borg delete /home/karthick/borg/backup/

14.更改密钥密码

到目前为止,我已经展示了我的示例,但没有对存储库应用任何加密。正如在初始部分中所预测的那样,您可以在启用加密的情况下初始化一个目录,如果使用repokey或keyfile,它会要求您选择设置密码短语。

$ borg init --encryption=repokey /home/karthick/borg/bkup/

从现在开始,每当我尝试对该存储库进行任何操作时,我都应该每次都提供密码。看看下面的图片,我正在尝试列出存储库,我必须为其提供密码。

现在假设您希望更改密码,然后您可以使用该borg change-passphrase命令进行更改。

$ borg key change-passphrase -v /home/karthick/borg/bkup

您还可以使用环境变量设置密码。

$ BORG_PASSPHRASE="old password" BORG_NEW_PASSPHRASE="new password" borg key change-passphrase /home/karthick/borg/bkup

15.导出和导入密钥

您可以通过导出来备份存储库密钥,然后在需要时将其导入。

要导出密钥,请运行以下命令:

$ borg key export bkup/ ./key

$ cat ./key

要将密钥导入同一个存储库,请运行以下命令:

$ borg key import bkup/ ./key

16. 使用远程仓库

到目前为止,我们所看到的都是在同一台机器上备份您的数据,Borg 还支持远程存储库,您可以在其中备份任何远程机器上的数据。远程主机应该可以通过 SSH 访问。

句法:

$ borg init user@hostname :/path/to/repo

例子:

$ borg init karthick @ostechnix :/home/karthick/borg/bkup

您可以执行可以使用本地备份执行的各种类似操作。例如,要恢复您可以使用的备份extract,也可以使用该mount命令挂载远程存储库。

在这里,当指向远程目录时,您必须将 ssh 协议指向“ ssh://username@hostname:port/path/to/repo”。

$ borg mount ssh://karthick@ostechnix:2222/home/karthick/borg/bkup /tmp/borg

$ borg extract ssh://karthick@ostechnix:2222/home/karthick/borg/bkup

17. 结论

在本文中,我们已经看到了如何使用 borg 在 Linux 中备份和恢复您的数据,Borg 有很多特性,你可以通过测试工具来理解。

文章转载自运维漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论