rsync
rsync
远程数据同步工具
补充说明
rsync命令 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
语法
rsync [OPTION]... SRC DEST |
对应于以上六种命令格式,rsync有六种不同的工作模式:
- 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:
rsync -a /data /backup
- 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:
rsync -avz *.c foo:src
- 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:
rsync -avz foo:src/bar /data
- 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:
rsync -av root@192.168.78.192::www /databack
- 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:
rsync -av /databack root@192.168.78.192::www
- 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:
rsync -v rsync://192.168.78.192/www
选项
-v, --verbose 详细模式输出。 |
实例
SSH方式
首先在服务端启动ssh服务:
service sshd start |
使用rsync进行同步
接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下:
rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync |
上面的信息描述了整个的备份过程,以及总共备份数据的大小。
后台服务方式
启动rsync服务,编辑/etc/xinetd.d/rsync
文件,将其中的disable=yes
改为disable=no
,并重启xinetd服务,如下:
vi /etc/xinetd.d/rsync |
/etc/init.d/xinetd restart |
创建配置文件,默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为“/etc/rsyncd.conf”,创建该文件并插入如下内容:
vi /etc/rsyncd.conf |
创建密码文件,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。
echo "work:abc123" > /etc/rsyncd.passwd |
备份,完成以上工作,现在就可以对数据进行备份了,如下:
rsync -avz --progress --delete work@172.16.78.192::www /databack/experiment/rsync |
恢复,当服务器的数据出现问题时,那么这时就需要通过客户端的数据对服务端进行恢复,但前提是服务端允许客户端有写入权限,否则也不能在客户端直接对服务端进行恢复,使用rsync对数据进行恢复的方法如下:
rsync -avz --progress /databack/experiment/rsync/ work@172.16.78.192::www |
将源目录同步到目标目录
rsync -r source destination |
上面命令中,-r
表示递归,即包含子目录。注意,-r
是必须的,否则 rsync
运行不会成功。source
目录表示源目录,destination
表示目标目录。
多个文件或目录同步
rsync -r source1 source2 destination |
上面命令中,source1
、source2
都会被同步到 destination
目录。
同步元信息
-a
参数可以替代 -r
,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync
默认使用文件大小和修改时间决定文件是否需要更新,所以 -a
比 -r
更有用。下面的用法才是常见的写法。
rsync -a source destination |
目标目录 destination
如果不存在,rsync
会自动创建。执行上面的命令后,源目录 source
被完整地复制到了目标目录 destination
下面,即形成了 destination/source
的目录结构。
如果只想同步源目录 source
里面的内容到目标目录 destination
,则需要在源目录后面加上斜杠。
rsync -a source/ destination |
上面命令执行后,source
目录里面的内容,就都被复制到了 destination
目录里面,并不会在 destination
下面创建一个 source
子目录。
模拟执行的结果
如果不确定 rsync
执行后会产生什么结果,可以先用 -n
或 --dry-run
参数模拟执行的结果。
rsync -anv source/ destination |
上面命令中,-n
参数模拟命令执行的结果,并不真的执行命令。-v
参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。
目标目录成为源目录的镜像副本
默认情况下,rsync
只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用 --delete
参数,这将删除只存在于目标目录、不存在于源目录的文件。
rsync -av --delete source/ destination |
上面命令中,--delete
参数会使得 destination
成为 source
的一个镜像。
排除文件
有时,我们希望同步时排除某些文件或目录,这时可以用–exclude参数指定排除模式。
rsync -av --exclude='*.txt' source/ destination |
上面命令排除了所有 TXT
文件。
注意,rsync
会同步以"点"开头的隐藏文件,如果要排除隐藏文件,可以这样写 --exclude=".*"
。
如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样。
rsync -av --exclude 'dir1/*' source/ destination |
多个排除模式,可以用多个 --exclude
参数。
rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination |
多个排除模式也可以利用 Bash 的大扩号的扩展功能,只用一个 --exclude
参数。
rsync -av --exclude={'file1.txt','dir1/*'} source/ destination |
如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用 --exclude-from
参数指定这个文件。
rsync -av --exclude-from='exclude-file.txt' source/ destination |
指定必须同步的文件模式
--include
参数用来指定必须同步的文件模式,往往与 --exclude
结合使用。
rsync -av --include="*.txt" --exclude='*' source/ destination |
上面命令指定同步时,排除所有文件,但是会包括 TXT
文件。