经验表明,对系统备份永远不能太过谨慎。当涉及到保护和保存宝贵数据时,最好走额外的一英里,确保在需要时可以依赖您的备份。
即使在今天,当一些云和托管提供商以相对较低的成本为VPS提供自动备份时,您最好还是使用您自己的工具创建备份策略以节省一些钱,然后也许用它来购买额外的存储空间或获得更大的VPS。
听起来有趣吗?在本文中,我们将向您展示如何使用一个名为Duplicity的工具来备份和加密文件和目录。此外,对于这个任务使用增量备份将帮助我们节省空间。
话虽如此,让我们开始吧。
在Linux中安装Duplicity备份工具
要在基于RHEL的发行版中安装duplicity,您首先必须启用EPEL存储库(如果您使用的是Fedora本身,则可以省略此步骤)。
在RHEL 9上:
subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
在CentOS 9、AlmaLinux 9、Rocky Linux 9上:
dnf config-manager --set-enabled crb dnf install epel-release
在RHEL 8上:
subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
在CentOS 9、AlmaLinux 9、Rocky Linux 9上:
dnf config-manager --set-enabled powertools dnf install epel-release
然后运行,
dnf install duplicity
对于基于Debian的发行版,如Ubuntu和Linux Mint。
sudo apt update sudo apt install duplicity
理论上,支持多种连接文件服务器的方法,尽管到目前为止,只有ssh/scp/sftp、本地文件访问、rsync、ftp、HSI、WebDAV和Amazon S3在实践中进行了测试。
安装完成后,我们将专门使用sftp在各种场景中,无论是备份还是恢复数据。
我们的测试环境包括一个RHEL 8盒子(将被备份)和一个Debian 11机器(备份服务器)。
创建SSH密钥以实现无密码登录远程服务器
让我们开始在我们的 RHEL 箱中创建 SSH 密钥,并将它们传输到 Debian 备份服务器。
如果你在不同的端口上运行 SSH,则下面的命令假设在 Debian 服务器上的 sshd 守护程序正在监听端口 XXXXX。用实际远程服务器的 IP 替换 AAA.BBB.CCC.DDD。
ssh-keygen -t rsa ssh-copy-id [email protected] ssh-copy-id -p XXXXX [email protected]
然后,您应该确保可以连接到备份服务器而不使用密码:
ssh [email protected]

现在,我们需要创建用于加密和解密数据的 GPG 密钥:
gpg2 --full-gen-key
您将被提示输入:
- 密钥类型
- 密钥大小
- 密钥有效期
- A passphrase

为了创建密钥所需的熵,您可以通过另一个终端窗口登录到服务器并执行一些任务或运行一些命令来生成熵(否则,您将不得不等待很长时间才能完成此过程的这一部分)。
一旦密钥生成完成,您可以按如下方式列出它们:
gpg --list-keys

上述黄色突出显示的字符串被称为公钥ID,它是用于加密您文件的请求参数。
使用Duplicity创建Linux备份
为了开始简单,我们只备份/var/log目录,除了/var/log/anaconda和/var/log/sa。
因为这是我们的第一次备份,所以它将是一个完整的备份。随后的运行将创建增量备份(除非我们在下面的命令中添加了没有连字符的完整选项):
PASSPHRASE="tecmint" duplicity --encrypt-key 115B4BB13BC768B8B2704E5663C429C3DB8BAD3B --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://[email protected]//backups/rhel8 OR PASSPHRASE="YourPassphraseHere" duplicity --encrypt-key YourPublicKeyIdHere --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://root@RemoteServer:XXXXX//backups/rhel8
确保您不要漏掉上面命令中的双斜杠!它们用于指示备份机器中的/backups/rhel8目录的绝对路径,备份文件将存储在此处。
用您之前输入的密码短语替换YourPassphraseHere,用GPG公钥ID替换YourPublicKeyIdHere,,用备份服务器的IP或主机名替换RemoteServer。
您的输出应与以下图片相似:

上面的图片说明总共备份了86.3 MB,目的地为3.22 MB。让我们切换到备份服务器检查我们新创建的备份:

A second run of the same command yields a much smaller backup size and time:

使用Duplicity恢复Linux备份
要成功恢复文件、目录及其内容或整个备份,目标目录必须不存在(duplicity不会覆盖已存在的文件或目录)。为了说明,我们在CentOS机器上删除cron日志:
rm -f /var/log/cron
提取远程服务器上的单个文件的语法是:
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore filename sftp://root@RemoteHost//backups/rhel8 /where/to/restore/filename
其中,
- 文件名是要提取的文件,相对于已备份的目录的路径
- /恢复至何处是我们要将文件恢复到的本地系统中的目录。
在我们的情况下,要从远程备份中恢复cron主日志,我们需要运行:
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://[email protected]:XXXXX//backups/rhel8 /var/log/cron
应将cron日志恢复到所需的目标位置。
同样,随时可以从/var/log中删除目录并使用备份进行恢复:
rm -rf /var/log/mail PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://[email protected]:XXXXX//backups/rhel8 /var/log/mail
在此示例中,邮件目录应恢复到其原始位置,并包含其所有内容。
重复命令使用
随时可以使用以下命令显示存档文件列表:
duplicity list-current-files sftp://[email protected]:XXXXX//backups/rhel8
删除早于6个月的备份:
duplicity remove-older-than 6M sftp://[email protected]:XXXXX//backups/rhel8
将myfile恢复到gacanepa目录中,就像2天12小时之前一样:
duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://[email protected]:XXXXX//remotedir/backups /home/gacanepa/myfile
在最后一个命令中,我们可以看到时间间隔的使用示例(由-t指定):一系列的对,其中每个对由一个数字后跟s,m,h,D,W,M或Y(分别表示秒,分钟,小时,天,周,月或年)的字符之一组成。
摘要
在本文中,我们已经解释了如何使用 Duplicity,这是一个备份实用程序,可以为文件和目录提供开箱即用的加密功能。我强烈建议您查看duplicity 项目的网站,以获取更多文档和示例。
我们提供了PDF 格式的 duplicity 的 man 手册供您阅读,也是完整的参考指南。
如果您有任何问题或意见,请随时告诉我们。
Source:
https://www.tecmint.com/duplicity-create-encrypted-incremental-linux-backup/