经验表明,对于系统备份,你永远都不能太过于马虎。在保护和保留宝贵数据方面,最好多加努力,确保在需要时可以依赖备份。
即使在今天,当一些云和托管提供商以相对较低的成本提供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 8、AlmaLinux 8、Rocky Linux 8系统上:
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,则以下命令假定sshd守护进程正在侦听Debian服务器中的端口XXXXX 。将AAA.BBB.CCC.DDD替换为远程服务器的实际IP地址:
ssh-keygen -t rsa ssh-copy-id root@AAA.BBB.CCC.DDD ssh-copy-id -p XXXXX root@AAA.BBB.CCC.DDD
然后你应该确保无需使用密码即可连接到备份服务器:
ssh root@AAA.BBB.CCC.DDD
现在我们需要创建用于加密和解密数据的GPG密钥:
gpg2 --full-gen-key
这时候系统将提示你输入:
- 密钥种类
- 密钥大小
- 密钥的有效期限
- 口令短语(Passphrase)
gpg --list-keys
上面pub部分显示的字符串被称为公钥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://root@192.168.0.140//backups/rhel8 或者 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、YourPublicKeyIdHere和RemoteServer替换为你之前输入的口令短语、GPG公钥ID,以及备份服务器的IP或主机名。
你的输出应类似于下图这样:
上图表明总共86.3 MB已备份到目标中的3.22 MB 。让我们切换到备份服务器来检查我们新创建的备份:
第二次运行相同的命令会产生更小的备份大小和时间(即增量备份效果):
使用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
其中:
- filename是要提取的文件,以及备份目录的相对路径
- /where/to/restore是本地系统中我们要将文件恢复到的目录。
在我们的例子中,要从远程备份恢复cron主日志,需要运行:
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://root@AAA.BBB.CCC.DDD:XXXXX//backups/rhel8 /var/log/cron
这样应该将cron日志成功恢复到所需的目标位置。
同样,请随意从/var/log中删除目录并使用备份恢复它:
rm -rf /var/log/mail PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://root@AAA.BBB.CCC.DDD:XXXXX//backups/rhel8 /var/log/mail
在此示例中,邮件目录及其所有内容应恢复到其原始位置。
Duplicity命令用法
你可以随时使用以下命令显示存档文件的列表:
duplicity list-current-files sftp://root@AAA.BBB.CCC.DDD:XXXXX//backups/rhel8
删除超过6个月的备份文件:
duplicity remove-older-than 6M sftp://root@AAA.BBB.CCC.DDD:XXXXX//backups/rhel8
恢复目录gacanepa内的myfile,使其回到2天12小时前的状态:
duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://root@AAA.BBB.CCC.DDD:XXXXX//remotedir/backups /home/gacanepa/myfile
在最后的命令中,我们可以看到时间间隔的使用示例(由-t指定):一系列的数字和字符对,其中每个对由一个数字后跟字符s、m、h、D、W、M或Y组成,分别表示秒、分钟、小时、天、周、月或年。
总结
在本文中,小编简单解释了如何使用Duplicity工具,实际上它是一种备份实用程序,可为文件和目录提供开箱即用的加密。当然,小编建议大家访问Duplicity网站以获取更多文档和示例用法。
如果想了解更多Linux备份工具,可以查看最全面的Linux服务器系统备份工具整理,应该能找打适合你的一款!