Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591890
  • 博文数量: 118
  • 博客积分: 2114
  • 博客等级: 大尉
  • 技术积分: 1275
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-10 00:02
文章分类

全部博文(118)

文章存档

2019年(1)

2018年(4)

2017年(1)

2016年(6)

2015年(1)

2014年(1)

2013年(5)

2012年(4)

2011年(17)

2010年(13)

2009年(65)

分类: LINUX

2009-07-10 09:53:20

传统上,在Unix系统下使用的备份工具主要有tardumprdump)、restorerrestore)、ddcpiorcp等工具。这些工具中大多数适合于本地备份(native backup),倘若要执行远程备份(remote backup)的话,往往显得力不从心。在Linux系统下提供了一个工具——rsync,据其文档说明,它是rcp工具的一个替代品,但是更快捷、更灵活。rsync采用的remote-update协议允许rsync通过网络链路传输两组文件的增量,而是不是文件本身,据此rsync可以提高传输效率。

rsync所具有的功能特色主要有:

l          支持对连接、设备、用户、组、权限的拷贝;

l          支持类似GNU tar工具的excludeexclude-from选项;

l          类似CVSexclude模式:忽略相同的文件;

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=/home

uid=0

gid=0

配置文件rsyncd.conf的写法非常类似于samba服务器配置文件。rsyncd.conf文件主要包括两类配置信息:全局参数和模块参数。全局参数配置包含着用来控制rsync服务器运行方式的信息,比如日志文件的位置、套接口选项等,全局参数应该出现在第一个模块配置之前。在全局参数之后,是模块参数配置。不同的模块(module)以模块名区分,模块名包含在方括号之中,模块名之后的行都是针对该模块的配置信息,直到遇到下一个模块为止。rsyncd.conf配置文件是基于行的——也就是说一个文本行就是一条配置信息。每一行中出现的第一个等号是重要的,在这个等号之前是参数名,等号之后是参数值。也就是说,每一个参数都是以name=value的形式出现在每一行上的。在第一个等号之前或之后的空格都将被忽略。以#开始的行将被视为注释行而被忽略,如果参数信息太长以至于在一行上写不下,那么可以使用\将其延续到下一行上。参数值分为两种:字符参数和布尔参数,如果是布尔参数,那么可以使用的值为:yes/no1/0true/false。布尔参数值不用关心字符的大小写,但是字符参数值却是区分大小写的。

有了上述说明之后,就可以来看一下上面的示例配置文件的含义了:

l          [home]

创建一个名为home的模块;

l          path=/home

home模块要导出的路径为/home。每一个模块都必须具有path参数;

l          uid=0

uid参数指定了以何种用户权限访问该模块(即文件传输时的用户权限);

l          gid=0

gid参数指定了以何种组权限访问该模块(即文件传输时的组权限);

除了上面这些模块参数之外,对于模块还有其他很多参数可以选用,比如,可以指定访问控制选项以控制哪些主机可以访问rsync服务器,哪些主机不可以;可以指定哪些文件应当排除在被传输的文件之外(exclude);或者可以指定哪些文件应当被包括在被传输的文件集合之内(include);可以指定rsync客户端的超时时间;可以指定是否采用压缩传输;等等,详见rsyncd.conf(5)。在指定了rsync服务器配置选项之后,应当启动rsync服务器,采用如下命令即可:

[root@localhost etc]# rsync --daemon

[root@localhost etc]# ps auxw | grep rsync      

root      4988  0.0  0.0  1688    4 ?        S    Nov07   0:00 rsync --daemon

root      7427  0.0  0.2  3544  552 pts/1    S    01:08   0:00 grep rsync

rsync服务器在启动之后即转入后台运行。ps命令显示的结果表明rsync服务器程序进入了睡眠状态。当有客户端与之建立连接时,rsync服务器将被唤醒。

2 运行客户端

rsync客户端有六种运行方式:

l          拷贝本地文件。调用方式为:

rsync [OPTION]... SRC [SRC]... DEST

注:SRCDEST都是本地文件(或目录)。

l          通过远程shell从本地主机拷贝文件到远程主机。调用方式为:

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

注:SRC是本地文件,DEST是远程主机上的文件。

l          通过远程shell从远程主机拷贝文件到本地主机。调用方式为:

rsync [OPTION]... [USER@]HOST:SRC DEST

注:SRC是远程主机上的文件,DEST是本地文件。

l          从远程rsync服务器拷贝文件到本地主机。调用方式为:

rsync [OPTION]... [USER@]HOST::SRC [DEST]

或者

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

注:SRC是远程主机上的文件,DEST是本地文件。

l          从本地主机拷贝文件到远程rsync服务器。调用方式为:

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

注:SRC是本地文件,DEST是远程主机上的文件。

l          列出远程主机上的文件列表。调用方式为:

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC

注:SRC是远程主机上的文件(或目录)。

在上述六种运行模式中,除了列表模式(最后一种)外,其余模式都要求SRCDEST中至少一个是本地文件(或目录)。

rsync的传输既可通过远程shell通道完成,也可以直接以服务器/客户端的方式完成。如果是后者,实际上就是通过套接口实现的数据传输。在本文的示例中,采用服务器/客户端的方式,不采用远程shell通道作为传输接口。

本文的示例中,在rsync-client上如下运行rsync客户端程序:

[root@localhost backup_31_64]# rsync –v --archive --recursive --progress --delete --times --perms --compress rsync://rsync-server:/home /home/backup_rsync_server/

该命令将把rsync-server主机上的/home目录下的所有数据同步到本地主机的/home/backup_rsync_server/目录下。在这个命令中使用的几个选项的含义如下:

l          -v

输出详细信息。

l          --archive

采用归档模式。在这种模式下,几乎所有东西都将被保留(如用户、组、权限、时间等)。

l          --recursive

这个选项告诉rsync要递归地拷贝目录。如果不指定该选项,rsync不会拷贝目录。

l          --progress

这个选项告诉rsync打印传输的进展情况。通常与-v联合使用。

l          --delete

这个选项告诉rsync删除任何存在于接收端但不存在于发送端的文件。

l          --times

这个选项告诉rsync将文件的更改时间与文件一起传输,并在远程系统上更新它们。

l          --perms

这个选项命令rsync确保远程系统上的文件权限与本地系统上的文件权限相同。

l          --compress

这个选项告诉rsync将数据压缩之后再传输。该选项在低速链路上非常有用。

可以看到,这里采用的是rsync六种工作方式中的第四中工作方式,rsync://是一个URL标记。以上列举的是rsync客户端程序常用的选项,rsync命令完整的选项列表请参考rsync(1)

发出上述命令之后,rsync开始从rsync-server主机同步数据到本地主机的/home/backup_rsync_server/目录下。同步过程中的文件传输等信息将在控制台上显示出来。

3 结论

本文展示了在Linux系统下如何通过rsync工具完成备份工作的基本流程。尽管只就使用rsync工具的一种简单情形做了说明,但是在此基础上很容易扩展到rsync的其它工作模式上去。rsync工具灵活的选项、增量更新的备份方式、多样的功能模式使得它非常适合于在多台主机之间进行远程备份。

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