分类: LINUX
2010-08-27 17:58:33
rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件,其具有如下特性:
需要提及的是 rsync 以其优越的性能优势区别于其它几种 Linux 文件传输方法,其同步文件的速度相当快,这主要归功于 rsync 所使用的传输算法。简而言之 rsync 算法能在相当短的时间内计算出需要备份的数据,只对源文件与目标文件的不同之处进行传输,从而降低网络中传输的数据量,以此达到快速备份镜像的目的。下面通过一典型应用场景来描述 rsync 算法的基本原理:主机 A 与主机 B 均有对同一文件的拷贝,用户对主机 A 上的拷贝进行更新,主机 B 通过 rsync 算法对更新后的文件进行同步。以下是该算法的实现步骤:
通过如上方式,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 | 设置可在文件传输前/后执行的命令。若在文件传输前执行的命令失败,则取消本次传输操作。 |
如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。 rsync 有许多功能选项,常用的选项如下:
选项 | 描述 |
-a, --archive | 归档模式,保持所有文件属性,等同于 -rlptgoD |
-v, --verbose | 详细信息输出 |
-r, --recursive | 对子目录进行递归处理 |
-R, --relative | 使用相对路径信息 |
-b, --backup | 创建备份 |
-z, --compress | 对备份的文件在传输时进行压缩处理 |
--delete | 用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除 |
--progress | 显示备份过程 |
查看服务端可用的模块列表以及注释信息
查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)
查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)
使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。
使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下
将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。
当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。