https://www.cnblogs.com/taosim/articles/
一、服务器端配置:
# yum -y install xinetd
# vi /etc/xinetd.d/rsync
将如下代码
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
中的 disable = yes 改成 disable = no
然后启动 xinetd
# /etc/init.d/xinetd start 或 service xinetd restart
注意:如果服务器上装有防火墙记得要打开端口,默认端口是873
# telnet 127.0.0.1 873
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
# iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 873 -j DROP
# vi /etc/rsyncd.conf (这个文件如果不存在自己创建)
#Global Settings
uid = root #以什么身份运行rsync
gid = root
use chroot = no #不使用chroot
max connections = 20 #最大连接数
secrets file = /etc/rsyncd.secrets #密码文件位置,认证文件设置,设置用户名和密码
log file = /var/log/rsyncd.log #指定rsync的日志文件,而不将日志发送给syslog
pid file = /var/run/rsyncd.pid #指定rsync的pid文件
lock file = /var/run/rsync.lock #指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock
comment = hello world
#motd file = /etc/rsyncd.motd #欢迎信息文件名称和存放位置(此文件没有,可以自行添加)
[backup] # 这里是认证的模块名,在client端需要指定
path = /titan24/www/repos # 需要做镜像的目录
auth users = rsync # 授权帐号。认证的用户名,如果没有这行,则表明是匿名,多个用户用,分隔
read only = no # yes只读 值为NO意思为可读可写模式,数据恢复用NO
hosts allow = 192.168.3.128 #允许访问的服务器IP
hosts deny = * #黑名单
list = true # 允许列文件
#ignore errors # 可以忽略一些无关的IO错误
#exclude = cache/111/ cache/222/ #忽略的目录
# vi /etc/rsyncd.secrets (设置访问(认证)的用户名密码)
rsync:111111 #用户名:密碼
给文件正确的权限
# chown root:root /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets #(必须是600)
二、client 端进行同步
客户端默认好像已经装了rsync,没有的话装下:
# yum -y install rsync
执行异步同步操作:
/usr/bin/rsync -avz --progress [email protected]::backup /www
# crontab -e #(可以定时每三分钟同步一次文件)
*/3 * * * * rsync -avz --progress [email protected]::backup /www
下面这个命令完整一点:
#vi /etc/rsyncd.pas
加入密码
rsyncofpass
注意,客户端的密码文件只需要密码,而不需要用户名!
更改文件权限:
#chmod 0600 /etc/rsyncd.pas
#rsync -vzrtopgu --progress --delete --password-file=/etc/rsyncd.pas [email protected]::rsync_module_name1 /www/
这个命令行中-vzrtopg里的v是verbose,
z是压缩传输,
r是recursive,
topg都是保持文件原有属性如属主、时间的参数。
u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器的时钟的同步。
–progress是指显示出详细的进度情况,
–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
后 面的[email protected]::rsync_module_name1中,之后的rsync_module_name1是模块名, 也就是在/etc/rsyncd.conf中自定义的名称,rsync_user是指定模块中指定的可以同步的用户名。
最后的/www是备份到本地的目录名。
在这里面,还可以用-e ssh的参数建立起加密的连接。
可以用–password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
#/usr/local/rsync/bin/rsync -vzrtopg –progress –delete[email protected]::rsync_module_name1 /tmp/
Password:
或者你也可以制定password文件
由于需要系统crontab执行,所以这里采用读入密码文件的方式,
这个时候就成功了。
---------------------------------同步命令说明:---------------------------------
1 显示目录内容
命令
——
a) rsync
b) rsync -r
c) rsync [email protected]::
d) rsync [email protected]:
命令说明
———
a) 显示目录内容(第一层)
b) 递归显示目录内容
c) 显示远程主机目录内容
*注1:端口模式, 基于rsync用户的身份验证
*注2:rsync server上的目录必须具有xx7的权限.
d) 查看远程主机目录内容
*注1:remote shell模式, 通过ssh连接的基于系统本地用户的身份验证
*注2:这里只使用了一个冒号(:),同时用户名是远程主机的ssh 用户,密码也是ssh用户对应的密码。
*注3:使用””,则列出文件夹本身的信息。若要列出文件夹内容,应使用”/”。
参数说明
———
-r 对目录进行递归操作
2 本地目录之间同步
命令
——
a) rsync -av –progress / *** 注意(/) ***
b) rsync -av –progress
c) rsync -avu –progress –delete /
d) rsync -av –progress –temp-dir=/tmp /
命令说明
———
a) 同步src-dir目录下所有文件到dst-dir目录下
b) 同步src-dir目录下所有文件到dst-dir/src-dir目录下
c) 对src-dir目录内容向dst-dir目录下进行差异更新,有增加/更新则添加替换,有减少则对其删减
d) 比a)多了–temp-dir=/tmp,即指定/tmp为临时交换区,这样可以避免因目标目录空间不够引起的无法同步文件的错误。
参数说明
———
-a 相当于 -rlptgoD 的集合
-u 等同于 –update,在目标文件比源文件新的情况下不更新
-v 显示同步的文件
–progress 显示文件同步时的百分比进度、传输速率
–delete 删除目标目录中多于源目录的文件
3 异地主机之间同步
命令
——
a) rsync -avz –progress [email protected]::/
b) rsync -avz –progress [email protected]::/ –password-file=/home/jack/rsync.jack
c) rsync -avuz –progress –delete [email protected]::/ –password-file=/home/jack/rsync.jack
d) rsync -avz –progress [email protected]::/
命令说明
———
a) 同步本地目录的内容到远程主机192.168.0.1的目录下,jack是rsync数据库用户(参见3. /etc/rsync.secrets)
b) 通过自动读取用户密码而实现非交互登录文件同步
c) 较b)多了-u和–delete
d) 同步远程主机内容到本地目录
本文出自 “为了梦想奋斗” 博客,请务必保留此出处http://navyaijm.blog.51cto.com/4647068/816619
http://baiqiuyi.com/linux/rsync-ssh-difference-port.html
以前在使用rsync备份这篇文章里说到怎么使用rsync使用ssh协议,来同步远程文件的方法,rsync -zvrtopg -e ssh
但是如果遇到ssh不是22端口的呢?man了半天,其实很简单
rsync -zvrtopg -e ‘ssh -p 端口’
很简单很好用!特别是对于小文件特别多的时候,rsync独特算法的优势展现得淋漓尽致 !
http://hi.baidu.com/jiaozhenqing/item/e84ca1c16ab4ab350931c69c
1,默认配置下,rsync的目录是只读的,除非你显示的注明 read only = no
2,同步软链接出现的问题---/rsyncd-munged/
如果rsync服务器提供的目录可写,并且设置use chroot = no,那么就会出现这样的问题,在软链接地址前多了/rsyncd-munged/
如果rsync服务器提供的目录可写,并且设置use chroot = yes,那么问题就可以解决。
原因:默认情况下,rsync的目录是只读的,因此同步的时候,安全机制的干预较少,出现的问题较少。
如果设置rsync的目录可写后,rsync的安全机制就进行干预了,会防止恶意破坏rsync的服务器目录,因此默认会在软链接前面
加上/rsyncd-munged/,防止越权操作。
3,软链接同步问题
a,把软链接当作软链接来同步,使用命令-l
b,把软链接当作目录来同步,使用命令-L
c,不同步软链接,不使用上述命令
4,rsync同步目录技巧
a,同步命令 host::test/test/ /home/test/ 直接将host::test/test/下面的文件同步到/home/test/下,因此两个目录是完全一致的。
b,同步命令 host::test/test/ /home/test 直接将host::test/test/下面的文件同步到/home/test/下,因此两个目录是完全一致的。
c,同步命令 host::test/test /home/test 直接将host::test/test/下面的文件同步到/home/test/test/下,因此两个目录是不一致的。
d,同步命令 host::test/test /home/test/ 直接将host::test/test/下面的文件同步到/home/test/test/下,因此两个目录是不一致的。
总结,同步目录host::test/test/是说将该目录下面的内容不同到指定目录中;
同步目录host::test/test 是说将该目录同步到指定目录中;
至于说后面的指定目录有没有"/"真的不重要,都可以;
5,rsync基于ssh方式传输文件
rsync -av [email protected]:/tmp/test.ios /tmp/ 指定帐号
rsync -av miotour.com:/tmp/test.ios /tmp/ 使用默认的帐号
6,rsync基于ssh方式传输和基于socket方式传输速度对比,sockey方式明显胜出,速度提升38%
为了防止同步同一个文件造成误差,因此同时生成两个文件
dd if=/dev/zero of=/home/test.iso bs=1G count=10
dd if=/dev/zero of=/home/test1.iso bs=1G count=10
time /usr/local/bin/rsync -av --progress miotour.com::miotour/test.iso . real 1m31.417s
time /usr/local/bin/rsync -av --progress [email protected]:/home/test1.iso . real 2m28.177s
7,限速 单位KB/S
--bwlimit=40960 限速为40MB/S
8,文件修改后的传输方式
dd if=/dev/zero of=/home/test.iso bs=100M count=20
第一次传输情形如下:
echo "jiaozhenqing">>test.iso ls命令检查确认文件更新
可以看到,received 199105 bytes;而整个文件传输的话,传输了2097408128bytes,传输的体积占据文件体积的万分之一
9,传输压缩和不压缩的区别
传输压缩的话,速度慢,时间长;
传输不压缩的话,速度快,时间短,节省38%的时间。
疑问?压缩和不压缩传输的文件体积基本相似 文件体积是2097152026这个没有争议
并且该文件可以被gzip压缩到2035286的体积,不存在类似图片等无法压缩的情况
time /usr/local/bin/rsync -avz --progress 压缩传输
time /usr/local/bin/rsync -av --progress 不压缩传输
10,添加-W(--whole-file)参数后,不进行增量检测,如果文件发生变化,就会全量传输,而非变动部分传输。
11,指定检验算法使用的块尺寸,默认是700字节 -B, --block-size=SIZE
time /usr/local/bin/rsync -av --progress -B 2000
默认尺寸的话,传输了199111 bytes。设置为2000字节的话,传输了4194455bytes;
增大块尺寸,并没有明显的收益,反而增加了传输时间和传输体积,不可取。
下面是默认尺寸的
time /usr/local/bin/rsync -av --progress -B 2000
time /usr/local/bin/rsync -av --progress -B 400000
12,rsync开启强制对文件传输进行校验性能对比
time /usr/local/bin/rsync -av --progress -c 开启后,文件传输体积稍微增大一点点,可忽略不计,但传输时间明显延长27%
time /usr/local/bin/rsync -av --progress
time /usr/local/bin/rsync -av --progress -zc 如果说同时开启了c和z呢,时间增加一倍,传输体积居然也增加了,不可理解。
13,待解决问题
14,rsync同步单个文件时候的行为
我同步一个文件到web目录下,并且显示web目录已经达到了1.2GB了
执行ls命令啥也看不到,执行ls -al则看到了一个隐藏文件,原来rsync同步单个文件的时候,在没有完全同步之前,是先搞成隐藏文件来处理的
15,Too many links (31)
今天rsync同步持续失败,手工执行命令,发现一直报这个错误Too many links (31),想了下,应该是有太多的软链接了吧,导致同步失败,上去检查,发现没有问题,因为rsync报错的目录,只有三个文件,并且一定不包含链接。
网上查了好久,没有啥眉目,没办法了,至少自己动手了,想了半天,感觉可能是文件数太多搞成的,然后我自己手工通过find检查了下,发现主机有150万文件,备机有800万文件,挂不得主机同步不过去了,删除备机的文件后,同步恢复。
究其原因,应该是对端文件数太多了,导致rsync无法进行同步了。当时为了排除问题,直接用scp 拷贝一个只有三个文件的目录,报错同样的内容,因此问题定位是文件数的问题,而非rsync的问题。
16,网站镜像命令推荐
rsync -av --delete miotour.com::miotour /home/miotour/
其实--delete还有对删除文件进行重命名操作的,理论来讲,该功能可以防止rsync源数据出现问题导致的镜像机一并出现异常,但是使用久了就会发现,文件备份后,文件数在不断增长,最后还是会死。
17,rsync同步目录问题
在rsyncd.conf文件中指定目录
[miotour]
path = /home/miotour
[miotour1]
path = /home/miotour1
在/home/miotour下面创建三个目录,a1,a2,a
在/home/test下面进行同步a目录操作
1,rsync --port=12222 -vlzrtopg --delete miotour.com::mitour /home/test
该命令会将a a1 a2三个目录同步到/home/test下,并且先将/home/test下面的内容删除再同步
2,rsync --port=12222 -vlzrtopg --delete miotour.com::mitour/a /home/test
该命令会先将/home/test目录下面的内容删除后,在将a目录同步到/home/test,因此仅有a被同步了
所以,同步是将指定目录下面的文件全部同步到指定目录下面
3,rsync --port=12222 -vlzrtopg --delete miotour.com::mitour1 /home/test
4,rsync --port=12222 -vlzrtopg --delete miotour.com::mitour1/a /home/test
下面两个命令和上面的执行效果完全相同,并不会因为在rsyncd.conf的路径结尾多加了/而导致结果有任何不同。
http://a280606790.iteye.com/blog/920998
注 :下面所有例子中 – - 之间实际上是没有空格的,使用时请删除空格。
Rsync是一个远程数据同步工具,可通过LAN 或互联网快速同步多台主机间的文件。Rsync 本来是用以取代 rcp的一个工具,它当前由 rsync.samba.org 维护。Rsync 使用所谓的”Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync 的特色:
基本语法:
rsync options source destination
源和目标都可以是本地或远程,在进行远程传输的时候,需要指定登录名、远程服务器及文件位置
rsync 参数的具体解释如下:
Html代码
样例:
1 在本地机器上对两个目录进行同步
$ rsync -zvr /var/opt/installation/inventory/ /root/temp building file list … done sva.xml svB.xml . sent 26385 bytes received 1098 bytes 54966.00 bytes/sec total size is 44867 speedup is 1.63 $
参数:
2 利用 rsync -a 让同步时保留时间标记
rsync 选项 -a 称为归档模式,执行以下操作
$ rsync -azv /var/opt/installation/inventory/ /root/temp/ building file list … done ./ sva.xml svB.xml . sent 26499 bytes received 1104 bytes 55206.00 bytes/sec total size is 44867 speedup is 1.63 $
3 仅同步一个文件
$ rsync -v /var/lib/rpm/Pubkeys /root/temp/ Pubkeys sent 42 bytes received 12380 bytes 3549.14 bytes/sec total size is 12288 speedup is 0.99
4 从本地同步文件到远程服务器
$ rsync -avz /root/temp/ [email protected]:/home/thegeekstuff/temp/ Password: building file list … done ./ rpm/ rpm/Basenames rpm/Conflictname sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec total size is 45305958 speedup is 2.87
就像你所看到的,需要在远程目录前加上 ssh 登录方式,格式为 username@machinename:path
5 同步远程文件到本地
和上面差不多,做个相反的操作
$ rsync -avz [email protected]:/var/lib/rpm /root/temp Password: receiving file list … done rpm/ rpm/Basenames . sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec total size is 45305958 speedup is 2.87
6 同步时指定远程 shell
用 -e 参数可以指定远程 ssh ,比如用 rsync -e ssh 来指定为 ssh
$ rsync -avz -e ssh [email protected]:/var/lib/rpm /root/temp Password: receiving file list … done rpm/ rpm/Basenames sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec total size is 45305958 speedup is 2.87
7 不要覆盖被修改过的目的文件
使用 rsync -u 选项可以排除被修改过的目的文件
$ ls -l /root/temp/Basenames total 39088 -rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames $ rsync -avzu [email protected]:/var/lib/rpm /root/temp Password: receiving file list … done rpm/ sent 122 bytes received 505 bytes 114.00 bytes/sec total size is 45305958 speedup is 72258.31 $ ls -lrt total 39088 -rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
8 仅仅同步目录权(不同步文件)
使用 -d 参数
$ rsync -v -d [email protected]:/var/lib/ . Password: receiving file list … done logrotate.status CAM/ YaST2/ acpi/ sent 240 bytes received 1830 bytes 318.46 bytes/sec total size is 956 speedup is 0.46
9 查看每个文件的传输进程
使用 – -progress 参数
$ rsync -avz – -progress [email protected]:/var/lib/rpm/ /root/temp/ Password: receiving file list … 19 files to consider ./ Basenames 5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19) Conflictname 12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19) . . . sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec total size is 45305958 speedup is 2.87
10 删除在目的文件夹中创建的文件
用 – -delete 参数
# Source and target are in sync. Now creating new file at the target. $ > new-file.txt $ rsync -avz – -delete [email protected]:/var/lib/rpm/ . Password: receiving file list … done deleting new-file.txt ./ sent 26 bytes received 390 bytes 48.94 bytes/sec total size is 45305958 speedup is 108908.55
11 不要在目的文件夹中创建新文件
有时能只想同步目的地中存在的文件,而排除源文件中新建的文件,可以使用 – -exiting 参数
$ rsync -avz –existing [email protected]:/var/lib/rpm/ . [email protected]′s password: receiving file list … done ./ sent 26 bytes received 419 bytes 46.84 bytes/sec total size is 88551424 speedup is 198991.96
12 查看源和目的文件之间的改变情况
用 -i 参数
$ rsync -avzi [email protected]:/var/lib/rpm/ /root/temp/ Password: receiving file list … done >f.st…. Basenames .f….og. Dirnames sent 48 bytes received 2182544 bytes 291012.27 bytes/sec total size is 45305958 speedup is 20.76
输出结果中在每个文件最前面会多显示 9 个字母,分别表示为
> 已经传输
f 表示这是一个文件
d 表示这是一个目录
s 表示尺寸被更改
t 时间标记有变化
o 用户被更改
g 用户组被更改
13 在传输时启用包含和排除模式
$ rsync -avz – -include ‘P*’ – -exclude ‘*’ [email protected]:/var/lib/rpm/ /root/temp/ Password: receiving file list … done ./ Packages Providename Provideversion Pubkeys sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec total size is 32768000 speedup is 3.19
14 不要传输大文件
使用 – - max-size 参数
$ rsync -avz – -max-size=’100K’ [email protected]:/var/lib/rpm/ /root/temp/ Password: receiving file list … done ./ Conflictname Group Installtid Name Sha1header Sigmd5 Triggername sent 252 bytes received 123081 bytes 18974.31 bytes/sec total size is 45305958 speedup is 367.35
15 传输所有文件
不管有没有改变,再次把所有文件都传输一遍,用 -W 参数
# rsync -avzW [email protected]:/var/lib/rpm/ /root/temp Password: receiving file list … done ./ Basenames Conflictname Dirnames Filemd5s Group Installtid Name sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec total size is 45305958 speedup is 2.87