Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80260
  • 博文数量: 14
  • 博客积分: 1972
  • 博客等级: 上尉
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 13:04
文章分类

全部博文(14)

文章存档

2012年(3)

2011年(8)

2010年(3)

分类: LINUX

2010-08-27 17:58:33

rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件,其具有如下特性:

  • 支持链接、所有者、组信息以及权限信息的拷贝;
  • 通过远程 shell(ssh, rsh)进行传输;
  • 无须特殊权限即可安装使用;
  • 流水线式文件传输模式,文件传输效率高;
  • 支持匿名操作;

需要提及的是 rsync 以其优越的性能优势区别于其它几种 Linux 文件传输方法,其同步文件的速度相当快,这主要归功于 rsync 所使用的传输算法。简而言之 rsync 算法能在相当短的时间内计算出需要备份的数据,只对源文件与目标文件的不同之处进行传输,从而降低网络中传输的数据量,以此达到快速备份镜像的目的。下面通过一典型应用场景来描述 rsync 算法的基本原理:主机 A 与主机 B 均有对同一文件的拷贝,用户对主机 A 上的拷贝进行更新,主机 B 通过 rsync 算法对更新后的文件进行同步。以下是该算法的实现步骤:

  1. 主机 B 将原始拷贝划分成大小为 N 的不重合的若干块(文件末尾部分分块大小可能不足 N),并对这些数据块进行两种不同方式的校验:32 位的滚动弱校验、128 位的 MD4 强校验。弱校验较之强校验计算速度快。
  2. 主机 B 将每个数据块的弱校验、强校验结果发送给主机 A 。
  3. 主机 A 对更新后的文件拷贝中的每个长度为 N 的数据块进行弱校验并与从 B 接收到的弱校验值进行匹配,若相同再进行强校验匹配。由于弱校验的滚动特性可以快速地筛选出需要进行同步的数据块。该算法的运算量主要集中在主机 A 上。
  4. 通过上述计算,主机 A 将文件的不同部分发送给 B,B 接收到两个拷贝之间的不同之处,从而同步得到更新后的文件。

通过如上方式,rsync 避免了对相同数据的传输,减少了网络带宽的浪费。在时间上整个过程中需一个往返,从某种程度上也保证了 rsync 的优越性能。

用户可从官方网站 上下载安装 rsync 的最新版本。使用时需将 rsync 分别安装于服务端和客户端,服务端和客户端使用同一个 rsync 软件包来实现远程镜像和定期同步更新。需要说明的是一个 rsync 服务端可同时备份多个客户端的数据;多个服务端备份一个客户端的数据。 rsync 默认端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。

rsync 服务端在使用之前需要进行必要的配置,其配置文件为 /etc/rsyncd.conf,进行认证、访问、日志记录等控制。配置文件包括全局参数、模块参数的设置。 rsyncd.conf 文件中 [module] 之前的所有参数为全局参数,也可以在全局参数部分定义模块参数,在这种情况下该参数的值就是所有模块的默认值。全局参数设置程序使用的端口号,指定消息文件、日志文件 pid 文件以及发送日志消息的级别。模块参数主要定义服务端哪个目录需要被同步。用户可根据不同的需要指定多个模块,每个模块对应需要备份的一个目录树,即若有 N 个需要备份的目录树,则需要 N 个模块与之对应。模块中可以定义许多参数,常见参数如下。



选项 描述
Comment 模块信息描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。
Path 指定供备份的目录路径,必须指定该参数。
max connections 指定最大并发连接数以保护服务器,超过限制的连接请求将被告知随后再试。默认值为 0,即没有限制。
log file 指定日志文件
read only 设定是否允许客户上载文件。若为 true 任何上载请求均会失败,若为 false 且客户端拥有服务器目录读写权限则可以上载。默认值为 true 。
write only 设定是否允许客户下载文件。若为 true 任何下载请求均会失败,默认值为 false 。
List 设定当客户请求可以使用的模块列表时,是否列出该模块。若为 false,则创建隐藏的模块。默认值为 true 。
fake super 允许文件享有所有权限,而无需后台服务以 root 权限进行操作。
Filter 设置过滤列表以决定哪些文件可由客户端访问。
hosts allow 指定允许客户连接的 IP 地址。可以为单个 IP 地址或整个网段。多个 IP 或网段需要以空格隔开。默认是允许所有主机连接。
dont compress 指定不进行压缩处理即可传输的文件,默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
pre-xfer exec, post-xfer exec 设置可在文件传输前/后执行的命令。若在文件传输前执行的命令失败,则取消本次传输操作。

  • 通过远程 shell 方式:
    • rsync [OPTION] [USER@]HOST:SRC DEST
    • 使用远程 shell(如 ssh, rsh)实现将远程机器的内容拷贝到本地机器。 SRC 地址路径中以单个冒号 ":" 进行分隔。
    • rsync [OPTION] SRC [USER@]HOST:DEST
    • 使用远程 shell(如 rsh、ssh)实现本地机器的内容拷贝到远程机器。 DEST 地址路径中以单个冒号 ":" 进行分隔。
  • 通过 rsync daemon 方式:
    • rsync [OPTION] [USER@]HOST::SRC DEST 或
    • rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
    • 从远程 rsync 服务器中拷贝文件到本地机。 SRC 地址路径中以双冒号 "::" 进行分隔。
    • rsync [OPTION] SRC [USER@]HOST::DEST 或
    • rsync [OPTION] SRC rsync://[USER@]HOST[:PORT]/DEST
    • 从本地机器拷贝文件到远程 rsync 服务器中。 DEST 地址路径中以双冒号 "::" 进行分隔。

如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。 rsync 有许多功能选项,常用的选项如下:



选项 描述
-a, --archive 归档模式,保持所有文件属性,等同于 -rlptgoD
-v, --verbose 详细信息输出
-r, --recursive 对子目录进行递归处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份
-z, --compress 对备份的文件在传输时进行压缩处理
--delete 用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除
--progress 显示备份过程

  • 查看服务端文件及列表
    • # rsync 9.186.110.53::

      查看服务端可用的模块列表以及注释信息

    • # rsync ibmuser@9.186.110.53::www/

      查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)

    • # rsync ibmuser@9.186.110.53:/var/www/html/

      查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)

  • 保持客户端与服务端的数据同步
    • # rsync -avz ibmuser@9.186.110.53::www/ /backup1/

      使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。

    • # rsync – avz ibmuser@9.186.110.53:/var/www/html /backup2/

      使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下

    • # rsync -avz --delete ibmuser@9.186.110.53::www/ /backup3/

      将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。

当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。

阅读(1721) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~