网站搜索

rdiff-backup - Linux 远程增量备份工具


rdiff-backup 是一个功能强大且易于使用的用于本地/远程增量备份的 Python 脚本,适用于任何 POSIX 操作系统,例如 Linux、Mac OS X 或 Cygwin。它汇集了镜像和增量备份的显着功能。

值得注意的是,它保留了子目录、开发文件、硬链接和关键文件属性,例如权限、uid/gid 所有权、修改时间、扩展属性、acls 和资源分支。它可以通过管道以带宽高效模式工作,与流行的 rsync 备份工具类似。

rdiff-backup 使用 SSH 通过网络将单个目录备份到另一个目录,这意味着数据传输是加密的,因此是安全的。目标目录(在远程系统上)最终是源目录的精确副本,但是额外的反向差异存储在目标目录的特殊子目录中,从而可以恢复一段时间之前丢失的文件。

依赖关系

要在 Linux 中使用 rdiff-backup,您需要在系统上安装以下软件包:

  • Python v2.2 或更高版本
  • librsync v0.9.7 或更高版本
  • pylibacl 和 pyxattr Python 模块是可选的,但分别是 POSIX 访问控制列表 (ACL) 和扩展属性支持所必需的。
  • rdiff-backup-statistics 需要 Python v2.4 或更高版本。

如何在 Linux 中安装 rdiff-backup

重要:如果您通过网络进行操作,则必须在两个系统上安装 rdiff-backup,最好两个 rdiff-backup 的安装必须完全相同相同版本。

该脚本已经存在于主流 Linux 发行版的官方存储库中,只需运行以下命令即可安装 rdiff-backup 及其依赖项:

在 Ubuntu 上安装 rdiff-backup

Ubuntu FocalDebian Bullseye 或更新版本(有 2.0)上安装 Rdiff-Backup


sudo apt-get update
sudo apt-get install librsync-dev rdiff-backup

要在旧版本的 Ubuntu 向后移植上安装 Rdiff-Backup(需要向后移植的 2.0)。


sudo add-apt-repository ppa:rdiff-backup/rdiff-backup-backports
sudo apt update
sudo apt install rdiff-backu

在 CentOS/RHEL 8 上

在 CentOS 和 RHEL 8 上安装 Rdiff-Backup(来自 COPR)。


sudo yum install yum-plugin-copr epel-release
sudo yum copr enable frankcrawford/rdiff-backup
sudo yum install rdiff-backup

在 CentOS/RHEL 7 上

在 CentOS 和 RHEL 7 上安装 Rdiff-Backup(来自 COPR)。


sudo yum install yum-plugin-copr epel-release
sudo yum copr enable frankcrawford/rdiff-backup
sudo yum install rdiff-backup

在 CentOS/RHEL 6 上


sudo yum install centos-release-scl
sudo yum install rh-python36 gcc libacl-devel
scl enable rh-python36 bash
sudo pip install rdiff-backup pyxattr pylibacl
echo 'exec scl enable rh-python36 -- rdiff-backup "$@"' | sudo tee /usr/bin/rdiff-backup
sudo chmod +x /usr/bin/rdiff-backup

在软呢帽上

在 Fedora 32+ 上安装 Rdiff-Backup。


sudo dnf install rdiff-backup

如何在 Linux 中使用 rdiff 备份

正如我之前提到的,rdiff-backup 使用 SSH 连接到网络上的远程计算机,SSH 中的默认身份验证是用户名/密码方法,这通常需要人工交互。

但是,要自动执行诸如使用脚本自动备份等任务,您将需要使用 SSH 密钥配置 SSH 无密码登录,因为 SSH 密钥增加了两个 Linux 服务器之间的信任,以便于文件同步或传输。

设置 SSH 无密码登录后,您可以开始使用以下示例的脚本。

备份文件到不同分区

下面的示例将把 /etc 目录备份到另一个分区的 Backup 目录中:

sudo rdiff-backup /etc /media/aaronkilik/Data/Backup/mint_etc.backup

要排除特定目录及其子目录,可以使用 --exclude 选项,如下所示:

sudo rdiff-backup --exclude /etc/cockpit --exclude /etc/bluetooth /media/aaronkilik/Data/Backup/mint_etc.backup

我们可以使用 --include-special-files 选项包含所有设备文件、fifo 文件、套接字文件和符号链接,如下所示:

sudo rdiff-backup --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

我们还可以为文件选择设置另外两个重要标志; --max-file-size 大小,排除大于给定大小(以字节为单位)的文件, --min-file-size 大小,排除小于给定大小的文件给定的大小(以字节为单位):

sudo rdiff-backup --max-file-size 5M --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

在本地 Linux 服务器上备份远程文件

就本节而言,我们将使用:

Remote Server (tecmint)	        : 192.168.56.102 
Local Backup Server (backup) 	: 192.168.56.10

正如我们之前所说,您必须在两台机器上安装相同版本的rdiff-backup,现在尝试检查两台机器上的版本,如下所示:

rdiff-backup -V

在备份服务器上,创建一个用于存储备份文件的目录,如下所示:

mkdir -p /backups

现在,从备份服务器运行以下命令,从远程 Linux 服务器 192.168.56.102 备份目录 /var/log//root/backups 中:

rdiff-backup [email ::/var/log/ /backups/192.168.56.102_logs.backup
rdiff-backup [email ::/root/ /backups/192.168.56.102_rootfiles.backup

下面的屏幕截图显示了远程服务器 192.168.56.102 上的根文件和后端服务器 192.168.56.10 上的备份文件:

请注意在 backup 目录中创建的 rdiff-backup-data 目录,如屏幕截图所示,它包含有关备份过程和增量文件的重要数据。

现在,在服务器 192.168.56.102 上,其他文件已添加到根目录中,如下所示:

让我们再次运行备份命令来获取更改的数据,我们可以使用 -v[0-9] (其中数字指定详细级别,默认为 3,即静默)选项设置详细程度功能:

rdiff-backup -v4 [email ::/root/ /backups/192.168.56.102_rootfiles.backup 

要列出 /backups/192.168.56.102_rootfiles.backup 目录中包含的部分增量备份的数量和日期,我们可以运行:

rdiff-backup -l /backups/192.168.56.102_rootfiles.backup/

使用 Cron 自动进行 rdiff-back 备份

我们可以在成功备份后使用 --print-statistics 打印摘要统计信息。但是,如果我们不设置此选项,该信息仍然可以从会话统计文件中获得。在手册页的统计部分阅读有关此选项的更多信息。

–remote-schema 标志使我们能够指定连接到远程计算机的替代方法。

现在,我们首先在备份服务器 192.168.56.10 上创建一个 backup.sh 脚本,如下所示:

cd ~/bin
vi backup.sh

将以下行添加到脚本文件中。

#!/bin/bash

#This is a rdiff-backup utility backup script

#Backup command
rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only  /"'  [email ::/var/logs  /backups/192.168.56.102_logs.back

#Checking rdiff-backup command success/error
status=$?
if [ $status != 0 ]; then
        #append error message in ~/backup.log file
        echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
        exit 1;
fi

#Remove incremental backup files older than one month
rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back

保存文件并退出,然后运行以下命令将脚本添加到备份服务器 192.168.56.10 上的 crontab 中:

crontab -e

添加此行以每天午夜运行备份脚本:

0   0  *  *  * /root/bin/backup.sh > /dev/null 2>&1

保存 crontab 并关闭它,现在我们已经成功地自动化了备份过程。确保它按预期工作。

通读 rdiff-backup 手册页以获取更多信息、详尽的使用选项和示例:

man rdiff-backup

rdiff-backup 主页:http://www.nongnu.org/rdiff-backup/

现在就是这样!在本教程中,我们向您展示了如何安装和基本使用 rdiff-backup,这是一个易于使用的 Python 脚本,用于在 Linux 中进行本地/远程增量备份。请通过下面的反馈部分与我们分享您的想法。