Linux下的远程备份(镜像)工具rsync
0 简介传统上,在Unix系统下使用的备份工具主要有tar、dump(rdump)、restore(rrestore)、dd、cpio、rcp等工具。这些工具中大多数适合于本地备份(native backup),倘若要执行远程备份(remote backup)的话,往往显得力不从心。在Linux系统下提供了一个工具——rsync,据其文档说明,它是rcp工具的一个替代品,但是更快捷、更灵活。rsync采用的remote-update协议允许rsync通过网络链路传输两组文件的增量,而是不是文件本身,据此rsync可以提高传输效率。rsync所具有的功能特色主要有:l 支持对连接、设备、用户、组、权限的拷贝;l 支持类似GNU tar工具的exclude和exclude-from选项;l 类似CVS的exclude模式:忽略相同的文件;l 可以使用多种远程shell工具,比如rsh或者ssh;l 不需要root权限即可运行;l 将文件传输流水线化以减少延迟开销;l rsync服务器允许以匿名或者认证方式登录(特别适合于做镜像)。和大多数网络工具一样,rsync也是以服务器/客户端的方式工作的。但较为特别的一点是:rsync服务器和客户端都使用同一个程序——rsync(如果按常见的做法,则应该是服务器程序为rsyncd,客户端程序为rsync)。启动服务器的时候需要指明–daemon选项,以表明启动的是服务器。而在启动客户端程序的时候则不应开启–daemon选项。在下文中,假设需要备份的主机为192.168.0.100,其上运行rsync服务器,将该主机称之为rsync-server;存放备份数据的主机为192.168.0.200,其上运行rsync客户端程序,将该主机称之为rsync-client。1 服务器端的配置rsync的配置文件为/etc/rsyncd.conf,这个配置文件控制着rsync服务器的认证、访问、logging、可用模块等信息。关于这个配置文件的详细说明请参见rsyncd.conf(5)。在本文中,仅对将要使用到的几个配置选项进行说明。需要提醒的是,默认情况下Fedora Core系统的/etc目录下没有rsyncd.conf这个文件,自行创建该文件即可。rsync服务器默认运行在TCP端口873上。在本文的示例中,要备份的数据统统位于rsync-server主机上的/home目录下,rsync-server主机上的配置文件/etc/rsyncd.conf的内容如下所示:[home]path=/homeuid=0gid=0配置文件rsyncd.conf的写法非常类似于samba服务器配置文件。rsyncd.conf文件主要包括两类配置信息:全局参数和模块参数。全局参数配置包含着用来控制rsync服务器运行方式的信息,比如日志文件的位置、套接口选项等,全局参数应该出现在第一个模块配置之前。在全局参数之后,是模块参数配置。不同的模块(module)以模块名区分,模块名包含在方括号之中,模块名之后的行都是针对该模块的配置信息,直到遇到下一个模块为止。rsyncd.conf配置文件是基于行的——也就是说一个文本行就是一条配置信息。每一行中出现的第一个等号是重要的,在这个等号之前是参数名,等号之后是参数值。也就是说,每一个参数都是以name=value的形式出现在每一行上的。在第一个等号之前或之后的空格都将被忽略。以#开始的行将被视为注释行而被忽略,如果参数信息太长以至于在一行上写不下,那么可以使用\将其延续到下一行上。参数值分为两种:字符参数和布尔参数,如果是布尔参数,那么可以使用的值为:yes/no,1/0,true/false。布尔参数值不用关心字符的大小写,但是字符参数值却是区分大小写的。有了上述说明之后,就可以来看一下上面的示例配置文件的含义了:l [home]创建一个名为home的模块;l path=/homehome模块要导出的路径为/home。每一个模块都必须具有path参数;l uid=0uid参数指定了以何种用户权限访问该模块(即文件传输时的用户权限);l gid=0gid参数指定了以何种组权限访问该模块(即文件传输时的组权限);除了上