在 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 有很多特性,你可以通过测试工具来理解。