rsync那些事儿

rsync那些事儿

1.关于rsync

rsync是remote synchronize的简称,是一款远程同步软件,在项目中多有用到。其采用的rsync算法(酷壳上有一篇介绍rsync核心算法的博文rsync的核心算法)提供了一种比较快速的方法用于客户机和远程文件服务器同步。

rsync的特点是安装和配置都比较方便,然后同步文件时能够保持符号链接,硬链接,权限,文件时间,文件归属等数学。安全性方面则提供了密码、读写权限控制和IP权限控制。

2.rsync安装和配置

由于我用的是ubuntu,已经预装了rsync,所以就不用安装了。我的配置文件是/etc/rsyncd.conf,配置如下,更详细的配置介绍参见rsyncd.config

read only = yes
list = yes
uid = nobody
gid = nogroup

pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.secrets
log file = /var/log/rsync.log

[test]
comment = Welcome
path = /home/ssj/rsynctest
hosts allow = 127.0.0.1 10.211.55.11
auth users = rsynctest

其中read only设置同步目录只读,uid和gid为同步采用的用户和用户组。pid file和log file为pid文件和日志文件存放地址。

test为同步目录,path为同步目录,注意该变量后面加注释如#XXX之类,加了会报chroot错误。另外,hosts allow是限制同步的ip,多个ip空格分隔。auth users和secrets file分别是认证的用户和密码文件。其中secrets file权限必须为600,否则会同步会出错,格式为用户名:密码,这里的用户名不一定是系统用户,可以随便取名,比如我的是rsynctest:testpasswd

3.rsync同步命令

rsync同步有两种模式,一种通过远程shell如ssh进行连接,另外则是通过TCP直接连接rsync服务器。因为使用ssh等同步需要设置ssh对应端口,比较麻烦点,我一般都是采用直接连接rsync服务器这种方式。同步的命令最常见的就是下面这样:

rsync -avz --progress --delete rsync://[email protected].211.55.11/test/ rsynctarget/

其中rsynctest是我同步的用户名,10.211.55.11是我的rsync服务器的ip。运行命令然后输入密码就行了。如果不想每次都输入密码,可以加上参数--password-file=/etc/rsyncd.secrets,其中rsyncd.secrets是你rsync客户端机器上的文件,权限也要600,内容格式跟rsync服务器的不一样,这里只需要密码testpasswd即可。–progress显示同步的进度,–delete则是删除rsynctarget中多余的文件。

这几个选项avz很常用,其中v是verbose,z是压缩,a相当于rlptgoD,其中r是递归同步目录,如果不加-r而是用-d,则只会同步对应的目录,而不会同步目录下面的文件;l同步符号链接,p同步文件保持权限不变,t保持文件时间,g保持文件所属组,o保持文件所属用户,D保持设备文件。一般情况用avz就可以了。另外还有个选项-P也会常用,表示保持部分同步的文件,如果同步中断,可以续传。

另外有个地方要注意下,就是在同步一个子目录的时候,比如我同步rsynctest/testdir这个目录,如果命令是这样rsync -avz rsync://[email protected]/test/testdir rsynctarget/,因为testdir后面没有加”/”,则同步结果就是rsynctarget目录下面会有一个testdir目录,即rsynctarget/testdir这样。如果命令是`rsync -avz rsync://[email protected]/test/testdir/ rsynctarget/,那结果就是把testdir目录下面的文件全部同步到rsynctarget目录下,rsynctarget目录下面不会有testdir这个目录。

4.实例

为了方便,我建了个目录用来做rsync测试。目录rsynctest中的内容如下:

root@ubuntu:/home/ssj/rsynctest# ls -la
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 28 ssj    ssj     4096 Mar  7 16:13 ..
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  2 nobody nogroup   13 Mar  7 16:32 test.txt

其中softlink.txt是test.txt的符号链接,link.txt是test.txt的硬链接,而outer.txt是上一级目录的outer.txt的硬链接。

同步的目标目录rsynctarget的内容如下:

[email protected]-mbp ssj#ls -la rsynctarget/
total 8
drwxr-xr-x   3 65534  65534   102  3  7 17:15 .
drwxr-xr-x@ 94 ssj    staff  3196  3  6 23:38 ..
-rw-r--r--   1 root   65534     7  3  7 17:15 myfile.txt

采用不同的参数,同步的结果会不一样。

1)不用-a参数,也不用-og等,命令如下:

rsync -rpvz --progress --delete rsync://[email protected].211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

由于用了–delete,则原来rsynctarget中的myfile.txt会被删除,由于没有加-l,则符号链接文件outer.txt和softlink.txt没有同步过来。同步后,硬链接test.txt被当做一个新文件了,没有保留硬链接关系,如果要保留,需要加上-H选项。此外,文件所有者也不是原来的nobody:nogroup了,如果需要保留,要加-og参数。该命令同步后,rsynctarget目录内容如下:

root@ubuntu:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 root root 4096 Mar  7 17:31 .
drwxr-xr-x 29 ssj  ssj  4096 Mar  7 17:31 ..
-rw-r--r--  1 root root   13 Mar  7 17:31 link.txt
drwxr-xr-x  2 root root 4096 Mar  7 17:31 testdir
-rw-r--r--  1 root root   13 Mar  7 17:31 test.txt

2)采用-a参数。命令如下:

rsync -avz --progress --delete rsync://[email protected].211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

同步后rsynctarget目录内容如下,可以看到使用-a后,文件所有者都得到保留,软连接也同步过来了,不过硬链接关系没有保留。要保留的话,加上-H。

[email protected]:/home/ssj# ls -la rsynctarget/
total 20
drwxr-xr-x  3 nobody nogroup 4096 Mar  7 16:33 .
drwxr-xr-x 29 ssj    ssj     4096 Mar  7 17:31 ..
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 link.txt
lrwxrwxrwx  1 nobody nogroup   12 Mar  7 15:13 outer.txt -> ../outer.txt
lrwxrwxrwx  1 nobody nogroup    8 Mar  7 14:52 softlink.txt -> test.txt
drwxr-xr-x  2 nobody nogroup 4096 Mar  7 14:51 testdir
-rw-r--r--  1 nobody nogroup   13 Mar  7 16:32 test.txt

3)另外还有一个重要参数就是-P,注意这个P不是progress的意思,他是partial的意思,就是说同步过程如果出现中断(比如主动停止了同步或者网络问题导致同步中断),如果一个文件没有传完,是否保留这些已经传输的部分就是由-P来控制。这里我在rsynctest目录下面加了一个test.tar.gz文件,大小为2M,而我用bwlimit参数限制传输速度为10K/s以内,这样,中途终止同步,这样可以看到,如果没有加-P参数的时候,rsynctarget没有保存tornado.tar.gz这个文件已经传输的部分的,如果加了-P则会保存已经传输的部分,文件名也是tornado.tar.gz,下次重传会断点续传,即已经同步的部分不会重新传。同步过程中临时文件名是.tornado.tar.gz.qesuQR这样的格式。如果有程序是从同步目录取数据并处理的,最好不要用-P参数,因为如果网络问题会导致文件传了一部分,然后被处理了,这样会影响处理结果。

rsync -avzP --progress --delete --bwlimit=10 rsync://[email protected].211.55.11/test/ rsynctarget/ --password-file=/etc/rsyncd.secrets

5.参考资料

时间: 2024-10-17 16:39:56

rsync那些事儿的相关文章

rsync那点事儿

rsync那点事儿 ---石锅拌饭 1.关于rsync rsync是remote synchronize的简称,是一款远程同步软件,在项目中多有用到.其采用的rsync算法(酷壳上有一篇介绍rsync核心算法的博文rsync的核心算法)提供了一种比较快速的方法用于客户机和远程文件服务器同步. rsync的特点是安装和配置都比较方便,然后同步文件时能够保持符号链接,硬链接,权限,文件时间,文件归属等数学.安全性方面则提供了密码.读写权限控制和IP权限控制. 2.rsync安装和配置 由于我用的是u

Zabbix监控系列之-Rsync+Inotify实现文件同步更新(无防火墙版)

Rsync+inotify实现文件同步更新(无防火墙版) 目录 说明:... 2 准备工作:关闭服务器的防火墙... 2 关闭防火墙firewall2 禁止开机启动防火墙... 2 编写脚本"shut-firewall.sh". 2 发布服务器配置rsync:192.168.171.128. 2 安装配置Rsync. 2 配置rsyncd.conf文件... 2 创建认证文件:/etc/rsyncd.secrets. 3 设置文件权限... 3 启动rsync服务... 4 关闭rsy

rsync+inotify-tools实时同步

rsync概述: rsync是类unix系统下的数据镜像备份工具--remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率.你可以使用它进行本地数据或远程数据的复制,Rsync可以使用SSH安全隧道进行加密数

rsync存储服务器-全网备份

一.rsync功能介绍: 复制 (同步)的工具 全量及增量 本地和远程 Rsync英文全称为Remotesynchronization 本地复制cp(全量备份),rsunc也有此功能(增量) 远程复制scp(全量备份),rsync也有此功能(增量) 删除工具rm,rsync也有此功能 二. Rsync的特性 支持拷贝特殊文件如链接文件,设备等 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能 可以做到保持原文件或目录的权限.时间.软硬链接.属主.组等所有属性均不改变  - p

Rsync无差异同步原理和实现

4.Rsync无差异同步原理和实现.md 无差异同步   在生产环境中我们可能会遇到这样的状况,我们的客户端在服务端去拉取数据的时候,首先一点,对于拉取我们的服务端有的那么我们客户端肯定有.但是我们的客户端有的服务端就不一定是有的了.反之如果是推送的话,那么我们客户端有的我们的服务端那肯定是有的,但是我们的服务端有的我们的客户端不一定有.所以对于这种当服务端删除一条数据之后为了保障我们的客户端也能在下一次同步的时候进行删除的这种情况我们就需要采取无差异同步,保障数据的一致性. 实现方法 --de

rsync+inotify实时同步

一.Rsync简介: rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数据.rsync可以搭配

【转载】CentOS 6.3下rsync服务器的安装与配置

一.rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录. Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync

使用 rsync 出错:rsync: chgrp "XXXX" failed: Operation not permitted

You are probably running rsync like this: rsync -a dir/ remote:/dir/ The -a option according to the documentation is equivalent to: -rlptgoD       -a, --archive    archive mode; equals -rlptgoD (no -H,-A,-X) You probably want to remove the -o and -g 

RSync实现双机文件同步

双机同步任务操作步骤                      注:红色为注释说明的内容,绿色为示例内容,请以项目实际情况修改操作 1. 安装或更新相关软件包 #yum install rsync* xinetd* –y 2. 配置rsync服务端(提供文件同步的服务器),制定提供同步的应用条目信息 A. 配置文件实例如下 #vim /etc/rsyncd.conf                          -------------编辑rsync配置文件 uid = root