rdiff-backup:一个 Linux 中的远程增量备份工具

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

值得注意的是,它保留了子目录、dev 文件、硬链接,以及关键的文件属性,如权限、uid/gid 所有权、修改时间、扩展属性、acl 以及 resource fork。它可以通过管道以高效带宽的模式工作,这与流行的 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,两者最好是相同版本。

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

在 Debian/Ubuntu 中


  1. $ sudo apt-get update
  2. $ sudo apt-get install librsync-dev rdiff-backup

在 CentOS/RHEL 7 中


  1. # wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
  2. # rpm -ivh epel-release-7-9.noarch.rpm
  3. # yum install librsync rdiff-backup

在 CentOS/RHEL 6 中


  1. # wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  2. # rpm -ivh epel-release-6-8.noarch.rpm
  3. # yum install librsync rdiff-backup

在 Fedora 中


  1. # yum install librsync rdiff-backup
  2. # dnf install librsync rdiff-backup [Fedora 22+]

如何在 Linux 中使用 rdiff-backup

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

但是,要自动执行诸如脚本等自动备份之类的任务,那么你需要配置使用 SSH 密钥无密码登录 SSH,因为 SSH 密钥增加了两台 Linux服务器之间的信任来简化文件同步或传输

在你设置了 SSH 无密码登录后,你可以使用下面的例子开始使用该脚本。

备份文件到不同分区

下面的例子会备份 /etc 文件夹到另外一个分区的 Backup 文件夹内:


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

备份文件到不同分区

要排除一个特定文件夹和它的子目录,你可以如下使用 --exclude 选项:


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

我们可以如下使用 --include-special-files 包含所有的设备文件、fifo 文件、socket 文件和链接文件:


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

还有另外两个重要标志来用于选择文件,--max-file-size 用来排除大于给定字节大小的文件,--min-file-size 用于排除小于给定字节大小的文件:


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

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

要这么做,我们使用:


  1. Remote Server (tecmint) : 192.168.56.102
  2. Local Backup Server (backup) : 192.168.56.10

如前所述,你必须在两台机器上安装相同版本的 rdiff-backup,如下所示,请尝试在两台机器上检查版本:


  1. $ rdiff-backup -V

检查服务器中 rdiff 版本

在备份服务器中,像这样创建一个存储备份文件的目录:


  1. # mkdir -p /backups

现在在备份服务器中,运行下面的命令来将远程 Linux 服务器 192.168.56.102 中的 /var/log/ 和 /root 备份到 /backups 中:


  1. # rdiff-backup root@192.168.56.102::/var/log/ /backups/192.168.56.102_logs.backup
  2. # rdiff-backup root@192.168.56.102::/root/ /backups/192.168.56.102_rootfiles.backup

下面的截图展示了远程服务器 192.168.56.102 中的 root 文件夹以及 192.168.56.10 备份服务器中的已备份文件:

在本地服务器备份远程目录

注意截图中 “backup” 目录中创建的 rdiff-backup-data 文件夹,它包含了备份过程和增量文件的重要数据。

rdiff-backup – 备份过程文件

现在,在 192.168.56.102 服务器中,如下所示 root 目录已经添加了额外的文件:

验证备份目录

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


  1. # rdiff-backup -v4 root@192.168.56.102::/root/ /backups/192.168.56.102_rootfiles.backup

带有摘要的增量备份

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


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

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

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

-remote-schema 选项使我们能够指定使用替代方法连接到远程计算机。

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


  1. # cd ~/bin
  2. # vi backup.sh

添加下面的行到脚本中。


  1. #!/bin/bash
  2. #This is a rdiff-backup utility backup script
  3. #Backup command
  4. rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only /"' root@192.168.56.102::/var/logs /backups/192.168.56.102_logs.back
  5. #Checking rdiff-backup command success/error
  6. status=$?
  7. if [ $status != 0 ]; then
  8. #append error message in ~/backup.log file
  9. echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
  10. exit 1;
  11. fi
  12. #Remove incremental backup files older than one month
  13. rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back

保存文件并退出,接着运行下面的命令在服务器 192.168.56.10 上的 crontab 中添加此脚本:


  1. # crontab -e

添加此行在每天午夜运行你的备份脚本:


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

保存 crontab 并退出,现在我们已经成功自动化了备份过程。确保一切如希望那样工作。

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


  1. # man rdiff-backup

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

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

原文发布时间为:2017-05-10

本文来自合作伙伴“Linux中国”

时间: 2024-11-05 08:46:56

rdiff-backup:一个 Linux 中的远程增量备份工具的相关文章

rdiff-backup:一个Linux中的远程增量备份工具

rdiff-backup 是一个用于本地/远程增量备份的强大而易用的 Python 脚本,它适用于任何 POSIX 操作系统,如Linux.Mac OS X 或 Cygwin.它集合了镜像和增量备份的显著特性. 值得注意的是,它保留了子目录.dev 文件.硬链接,以及关键的文件属性,如权限.uid/gid 所有权.修改时间.扩展属性.acl 以及 resource fork.它可以通过管道以高效带宽的模式工作,这与流行的 rsync 备份工具类似. rdiff-backup 通过使用 SSH 将

实现Linux中Mysql数据库自动备份并上传到远程FTP服务器

这篇文章很有分享价值,因为我们在实际的生产环境中需要将数据库进行自动备份,然后上传到指定的位置,当然也可以像以下文章中所讲的一样,上传到你指定的FTP服务器中,从而实现Mysql数据库自动备份并上传到远程FTP服务器的部署,在Linuxhttp://www.aliyun.com/zixun/aggregation/31093.html">技术交流群中,也有朋友会遇到这方面的问题,可以将此文分享给群友共益. 注意:任何的操作都会具有风险性,请在本机实际测试通过之后再部署到服务器环境,这样即熟

Linux中向远程服务器上的所有用户发送信息

风信网(ithov.com)原创文章:Linux中向远程服务器上的所有用户发送信息,我们可以通过rwall命令来实现,使用rwall(向所有人远程写)命令同时发送消息到网络中的所有用户. rwall hosthttp://www.aliyun.com/zixun/aggregation/11696.html">name file 当使用CDE或OpenWindows等窗口系统时,每个窗口被看成是一次单个的登录;如果用户登录次数超过一次则消息直接发送到控制窗口

文件系统-这有一个Linux中我看不懂的问题,详情 看描述 求解答

问题描述 这有一个Linux中我看不懂的问题,详情 看描述 求解答 当某部主机上的 Linux 由于某些原因而无法正常进入系统时,除了可以使用 Rescue 模式进行援救之外,还可以将其硬盘挂载到另外一台主机,从而将其中重要的数据备份出来,但不管是哪种方法,我们可能都需要进入到被援救的 Linux 系统中执行某些特定指令,假设被救援的文件系统被挂载到 /mnt/sysimage,进入该 Linux 环境的指令是 解决方案 参考:http://jingyan.baidu.com/article/6

linux自动运行rman增量备份脚本_oracle

一.增量备份脚本0级备份脚本:红色部分为自定义的备份文件放置的目录 复制代码 代码如下: #script.:BackupFull.sh#creater:xyh#date:2014-03-08#desc:backup full database datafile in archive with rman#connect databaseexport ORACLE_BASE=/u01/app/oracleexport ORACLE_SID=orclexport ORACLE_HOME=/u01/ap

Linux中rsh远程shell命令的使用技巧解析

  rsh有两种使用模式: rsh $host : 远程登录,启动交互式进程. rsh $host $command :远程执行命令,并显示输出. rsh hosthostcommand rsh $host $command的作用是: 1.在远程机器上执行命令$command 2.通过网络连接(socket)重定向当前进程和远端进程的标准输入和标准输出 3.远端rsh进程在远端进程结束后结束 4.本地rsh进程读取远端进程的标准输出直到结束(EOF) 深刻理解这个执行过程有助于理解各种"奇怪&q

一个Linux中用于监控的简易shell脚本

系统管理员的任务真的很艰难,因为他/她必须监控服务器.用户.日志,还得创建备份,等等等等.对于大多数重复性的任务,大多数管理员都会写一个自动化脚本来日复一日地重复这些任务.这里,我们已经写了一个shell脚本给大家,用来自动化完成系统管理员所要完成的常规任务,这可能在多数情况下,尤其是对于新手而言十分有用,他们能通过该脚本获取到大多数的他们想要的信息,包括系统.网络.用户.负载.内存.主机.内部IP.外部IP.开机时间等. 我们已经注意并进行了格式化输出(在一定程度上哦).此脚本不包含任何恶意内

linux中查询远程服务器内存以及awk使用

使用方法 awk '{pattern + action}' {filenames} 调用awk 有三种方式调用awk 1.命令行方式 awk [-F  field-separator]  'commands'  input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的. input-file(s) 是待处理的文件. 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域.通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格. 2.shell脚本方式

linux中SSH 远程端口转发的配置

我在开发 Telegram bot 时,是先在本地写好代码,上传到服务器再测试的.因为 telegram 的 setWebhook 指定的网址是线上的.这一点,与微信公众号开发时的接入服务器配置是一样的. 当然,这样谈不上什么开发效率. 网上有些端口映射的工具,比如 ngrok,但 SSH 本身就带了这样一个工具. 假设我 telegram webhook 地址是 https://www.111cn.net /telegram,服务器运行在 3344 端口,本地的开发环境运行在 localhos