欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu下安装配置rsync

程序员文章站 2022-05-27 23:15:38
...

Rsync(remote synchronize) 是一个远程数据同步工具,可以使用“Rsync算法”同步本地和远程主机之间的文件。Rsync的好处是只同步两个文件不同的部分,相同的部分不在传递。类似于增量备份,这使的在服务器传递备份文件或者同步文件,比起scp工具要省好多时间。

OS:        ubuntu server 14.04
server:  192.168.64.128
client:    192.168.64.145


Server


1.ubuntu  14.04默认已安装rsync,rsync服务默认不是启动的,我们要修改下面的文件。

  1. sudo vim /etc/default/rsync  
sudo vim /etc/default/rsync
  1. RSYNC_ENABLE=true   #false改true  
RSYNC_ENABLE=true   #false改true

2.修改配置文件

  1. sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc   #已默认安装的软件,默认不启动的似乎都要这么做  
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc   #已默认安装的软件,默认不启动的似乎都要这么做

我们先来查看一下这个文件

  1. sudo cat /etc/rsyncd.conf  
sudo cat /etc/rsyncd.conf
  1. # sample rsyncd.conf configuration file  
  2.   
  3. # GLOBAL OPTIONS  
  4.   
  5. #motd file=/etc/motd #登录欢迎信息  
  6. #log file=/var/log/rsyncd #日志文件  
  7. # for pid file, do not use /var/run/rsync.pid if  
  8. # you are going to run rsync out of the init.d script.  
  9. pid file=/var/run/rsyncd.pid  
  10.   
  11. #指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。  
  12. #syslog facility=daemon  
  13.   
  14. #自定义tcp选项,默认是关闭的  
  15. #socket options=  
  16.   
  17. #以下是模块信息,我们可以创建多个模块  
  18. # MODULE OPTIONS  
  19.   
  20. [ftp]  
  21.   
  22.         comment = public archive #模块描述  
  23.         path = /var/www/pub #需要同步的路径  
  24.         use chroot = yes #默认是yes|true,如果为true,那么在rsync在传输文件以前首先chroot到path参数指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接指向的目录文件。  
  25. #       max connections=10 #最大连接数  
  26.         lock file = /var/lock/rsyncd #指定支持max connections参数的锁文件。  
  27. # the default for read only is yes...  
  28.         read only = yes #只读选项  
  29.         list = yes #客户请求时可用模块时是否列出该模块  
  30.         uid = nobody #设定该模块传输文件时守护进程应该具有的uid  
  31.         gid = nogroup #设定该模块传输文件时守护进程应具有的gid,此项与uid配合可以确定文件的访问权限  
  32. #       exclude = #用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是exclude还是include    #这个我的理解是排除目录中不需同步的文件  
  33. #       exclude from = #可以指定一个包含exclude模式定义的文件名  
  34. #       include = #与exclude相似  
  35. #       include from = #可以指定一个包含include模式定义的文件名  
  36. #       auth users = #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)  
  37. #       secrets file = /etc/rsyncd.secrets #该文件每行包含一个username:password对,以明文方式存储,只有在auth users被定义时,此选项才生效。同时我们需要将此文件权限设置为0600  
  38.         strict modes = yes #该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true  
  39. #       hosts allow = #允许的主机  
  40. #       hosts deny = #拒绝访问的主机  
  41.         ignore errors = no #设定rsync服务器在运行delete操作时是否忽略I/O错误  
  42.         ignore nonreadable = yes #设定rysnc服务器忽略那些没有访问文件权限的用户  
  43.         transfer logging = no #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中  
  44. #       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #设定日志格式  
  45.         timeout = 600 #超时设置(秒)  
  46.         refuse options = checksum dry-run #定义一些不允许客户对该模块使用的命令选项列表  
  47.         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩  
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd #登录欢迎信息
#log file=/var/log/rsyncd #日志文件
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid

#指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。
#syslog facility=daemon

#自定义tcp选项,默认是关闭的
#socket options=

#以下是模块信息,我们可以创建多个模块
# MODULE OPTIONS

[ftp]

        comment = public archive #模块描述
        path = /var/www/pub #需要同步的路径
        use chroot = yes #默认是yes|true,如果为true,那么在rsync在传输文件以前首先chroot到path参数指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接指向的目录文件。
#       max connections=10 #最大连接数
        lock file = /var/lock/rsyncd #指定支持max connections参数的锁文件。
# the default for read only is yes...
        read only = yes #只读选项
        list = yes #客户请求时可用模块时是否列出该模块
        uid = nobody #设定该模块传输文件时守护进程应该具有的uid
        gid = nogroup #设定该模块传输文件时守护进程应具有的gid,此项与uid配合可以确定文件的访问权限
#       exclude = #用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是exclude还是include    #这个我的理解是排除目录中不需同步的文件
#       exclude from = #可以指定一个包含exclude模式定义的文件名
#       include = #与exclude相似
#       include from = #可以指定一个包含include模式定义的文件名
#       auth users = #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)
#       secrets file = /etc/rsyncd.secrets #该文件每行包含一个username:password对,以明文方式存储,只有在auth users被定义时,此选项才生效。同时我们需要将此文件权限设置为0600
        strict modes = yes #该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true
#       hosts allow = #允许的主机
#       hosts deny = #拒绝访问的主机
        ignore errors = no #设定rsync服务器在运行delete操作时是否忽略I/O错误
        ignore nonreadable = yes #设定rysnc服务器忽略那些没有访问文件权限的用户
        transfer logging = no #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中
#       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #设定日志格式
        timeout = 600 #超时设置(秒)
        refuse options = checksum dry-run #定义一些不允许客户对该模块使用的命令选项列表
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩


日志格式选项列表:

%h: 远程主机名
%a: 远程IP地址
%l: 文件长度字符数
%p: 该次rsync会话的进程id
%o: 操作类型:"send"或"recv"、”del.”
%f: 文件名
%P: 模块路径
%m: 模块名
%t: 当前时间
%u: 认证的用户名(匿名时是null)
%b: 实际传输的字节数
%c: 当发送文件时,该字段记录该文件的校验码


下面我们来定义自己的conf文件


  1.  # sample rsyncd.conf configuration file  
  2.   
  3. # GLOBAL OPTIONS  
  4.   
  5. #motd file=/etc/motd  
  6. log file=/var/log/rsyncd  
  7. # for pid file, do not use /var/run/rsync.pid if  
  8. # you are going to run rsync out of the init.d script.  
  9.  pid file=/var/run/rsyncd.pid  
  10. syslog facility=daemon  
  11. #socket options=  
  12.   
  13. # MODULE OPTIONS  
  14.   
  15. [my_rsync_bk] #名字可以任意命名,只要客户端的rsync命令一致  
  16.   
  17.         comment = public archive  
  18.         path = /home/rsync_bk                             #指定路径,如果没有这个目录自己建。  
  19.         use chroot = no  
  20. #       max connections=10  
  21.         lock file = /var/lock/rsyncd  
  22. # the default for read only is yes...  
  23.         read only = yes  
  24.         list = yes  
  25.         uid = nobody  
  26.         gid = nogroup  
  27. #       exclude =   
  28. #       exclude from =   
  29. #       include =  
  30. #       include from =  
  31.         auth users = liu_rsync              #rsync连接时的用户名,要和客户端rsync的命令一致  
  32.         secrets file = /etc/rsyncd.secrets #这里是保存密码的地方,如果屏蔽掉就不用密码了  
  33.         strict modes = yes  
  34.         hosts allow = 192.168.64.145 #运行的客户端ip  
  35. #       hosts deny =  
  36.         ignore errors = yes  
  37.         ignore nonreadable = yes  
  38.         transfer logging = yes  
  39.         log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.  
  40.         timeout = 600  
  41.         refuse options = checksum dry-run  
  42.         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz  
 # sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
 pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=

# MODULE OPTIONS

[my_rsync_bk] #名字可以任意命名,只要客户端的rsync命令一致

        comment = public archive
        path = /home/rsync_bk                             #指定路径,如果没有这个目录自己建。
        use chroot = no
#       max connections=10
        lock file = /var/lock/rsyncd
# the default for read only is yes...
        read only = yes
        list = yes
        uid = nobody
        gid = nogroup
#       exclude = 
#       exclude from = 
#       include =
#       include from =
        auth users = liu_rsync              #rsync连接时的用户名,要和客户端rsync的命令一致
        secrets file = /etc/rsyncd.secrets #这里是保存密码的地方,如果屏蔽掉就不用密码了
        strict modes = yes
        hosts allow = 192.168.64.145 #运行的客户端ip
#       hosts deny =
        ignore errors = yes
        ignore nonreadable = yes
        transfer logging = yes
        log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
        timeout = 600
        refuse options = checksum dry-run
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

创建一个密码文件

  1. sudo vim /etc/rsyncd.secrets  
sudo vim /etc/rsyncd.secrets
内容为:liu_rsync:123

  1. sudo chmod 0600 /etc/rsyncd.secrets   
sudo chmod 0600 /etc/rsyncd.secrets 

启动rsync

  1. sudo /etc/init.d/rsync start  
sudo /etc/init.d/rsync start

如果启动成功,那么server端酒配置成功了。


Client


我们再来看一下客户端的操作,一般客户端不需要进行特殊的配置,直接同步即可

  1. rsync -vzrtopg --progress  [email protected]::my_rsync_bk .  #.为当前目录,在服务端touch一个文件,同步后就会出现,当然你也可以指定一个位置比如/databk,需注意所建立的权限!  
rsync -vzrtopg --progress  [email protected]::my_rsync_bk .  #.为当前目录,在服务端touch一个文件,同步后就会出现,当然你也可以指定一个位置比如/databk,需注意所建立的权限!

此时就可以同步Server端的数据了,但是到目前为止,只能把Server端文件夹现有的数据同步下来,如果在Server端新加文件却不能同步进来,必须在客户端重新执行一次这个命令才行,试问这样水能忍受?

所以接下来我们借助于crontab去实现定时自动同步功能。

但是首先我们要创建一个密码文件:

  1. sudo vim /etc/rsync.pwd输入123,保存     #密码要一致  
sudo vim /etc/rsync.pwd输入123,保存     #密码要一致

注意指定使用的密码文件中只需要有密码,不要有用户名。

注意:下面这两步操作是必须的,没有足够权限同步就会不成功,ls -l 你所指向的目录

  1. sudo chmod 0600 /etc/rsync.pwd  
  2. sudo chown 普通用户:普通用户组 /etc/rsync.pwd  
sudo chmod 0600 /etc/rsync.pwd
sudo chown 普通用户:普通用户组 /etc/rsync.pwd

注:这里如果使用的是非root用户,这里只能使用自己当前用户和自己所在的组,不过这种设置方式我没有在linux试过,我在MAC机上试的结果并非如上所述,而是rsync.pwd只能被当前用户独有即权限之能是如下所示:

  1. -rw-------  
-rw-------

如果看不懂,可以去百度一下unix下权限表示

然后我们打开crontab,使它自动同步

  1. crontab -e  
crontab -e


  1. */1 * * * * rsync -a --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk    
*/1 * * * * rsync -a --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk  

一分钟同步一次。只要你在Server端添加了新文件或新文件夹,那么1分钟后就会自动同步到客户端。但是这样就完美了吗?还没有,因为你发现它其实还有问题,当我在Server端删除一个文件或目录的时候,1分钟后,客户端还有,这是怎么回事?这当然是有原因的。

修改上述配置如下所示:

  1. */1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk    
*/1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk  

添加一个--delete参数就行了,这样以后在Server端删文件已能同步了。

注意: 若用普通用户身份运行rsync命令,同步后的文件的属主将改变为这个普通用户身份;若用超级用户身份运行rsync命令同步后文件属性保持原来用户身份不变。若指定-tg但目标计算机没有指定用户和组,则复制的文件归入501用户 501组


参数说明:

  1. -a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H   
  2. -r 子目录以递归模式处理  
  3. -l 保持符号链接文件  
  4. -H 保持硬链接文件  
  5. -p 保持文件权限  
  6. -t 保持文件时间信息  
  7. -g 保持文件归属组信息  
  8. -o 保持文件归属用户信息  
  9. -D 保持设备文件和特殊文件  
  10. -z 在传输文件时进行压缩处理  
  11. --exclude=PATTERN 指定排除一个不需要传输文件匹配模式  
  12. --exclude-from=FILE 从FILE中读取排除规则  
  13. --include=PATTERN 指定需要传输的文件匹配模式  
  14. --include-from=FILE 从FILE中读取匹配规则  
  15. --copy-unsafe-links 复制指向复制源路径目录以外的链接文件  
  16. --safe-links 忽略指向复制源路径目录以外的链接文件(默认)  
  17. --existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件  
  18. --ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件  
  19. -b 当有变化时,对目标目录中的旧文件进行备份  
  20. --backup-dir=DIR 与-b结合使用,指定备份路径  
  21. --link-dest=DIR 当文件未改变时在指定路径创建硬链接文件  
  22. --delete 删除接收端还存在而保存端不存在的文件  
  23. --delete-before 接收端在传输之前进行删除操作(默认)  
  24. --delete-during 接收端在传输过程中进行删除操作  
  25. --delete-after 接收端在传输之后进行删除操作  
  26. --delete-excluded 接收端在传输同时进行删除操作  
  27. --e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh  
  28. --ignore-erros 即使出现I/O错误也要进行删除  
  29. --partial 保留因故没有完全传输的文件,以加快随后的再次传输  
  30. --progress 在传输时显示传输过程  
  31. -p 等价于—partial—progress  
  32. --delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件  
  33. -v,--verbose 详细输出模式  
  34. -q,--quiet 精简输出模式  
  35. -h,--human-readable 输出文件大小  
  36. -n,--dry-run 显示那些文件将要被传输  
  37. --list-only 仅列出文件而不进行复制  
  38. --rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径  
  39. --password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令  
  40. -4,-6 使用IPv4或者IPv6  
  41. --version 打印版本信息  
  42. --help 显示帮组信息  
-a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H 
-r 子目录以递归模式处理
-l 保持符号链接文件
-H 保持硬链接文件
-p 保持文件权限
-t 保持文件时间信息
-g 保持文件归属组信息
-o 保持文件归属用户信息
-D 保持设备文件和特殊文件
-z 在传输文件时进行压缩处理
--exclude=PATTERN 指定排除一个不需要传输文件匹配模式
--exclude-from=FILE 从FILE中读取排除规则
--include=PATTERN 指定需要传输的文件匹配模式
--include-from=FILE 从FILE中读取匹配规则
--copy-unsafe-links 复制指向复制源路径目录以外的链接文件
--safe-links 忽略指向复制源路径目录以外的链接文件(默认)
--existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件
--ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件
-b 当有变化时,对目标目录中的旧文件进行备份
--backup-dir=DIR 与-b结合使用,指定备份路径
--link-dest=DIR 当文件未改变时在指定路径创建硬链接文件
--delete 删除接收端还存在而保存端不存在的文件
--delete-before 接收端在传输之前进行删除操作(默认)
--delete-during 接收端在传输过程中进行删除操作
--delete-after 接收端在传输之后进行删除操作
--delete-excluded 接收端在传输同时进行删除操作
--e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh
--ignore-erros 即使出现I/O错误也要进行删除
--partial 保留因故没有完全传输的文件,以加快随后的再次传输
--progress 在传输时显示传输过程
-p 等价于—partial—progress
--delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件
-v,--verbose 详细输出模式
-q,--quiet 精简输出模式
-h,--human-readable 输出文件大小
-n,--dry-run 显示那些文件将要被传输
--list-only 仅列出文件而不进行复制
--rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径
--password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令
-4,-6 使用IPv4或者IPv6
--version 打印版本信息
--help 显示帮组信息



接下来举几个常用的例子:

 1.在本地机器上对两个目录同步

  1. $ rsync -zvr filename1 filename2  
$ rsync -zvr filename1 filename2
上述代码是将filename1中的文件与filename2中的文件同步,如果将filename2中的文件同步到filename1中,修改代码为:

  1. $ rsync -zvr filename2 filename1  
$ rsync -zvr filename2 filename1

2.使用rsync –a 同步保留时间按标记

  1. $ rsync -azv filename1 filename2  
$ rsync -azv filename1 filename2
使用上述命令,将filename2中新同步的文件的时间与filename1中的创建的时间相同,它保留符号链接、权限、时间标记、用户名及组名相同。

3.将远程服务器的文件同步到本地

  1. $rsync -avz [email protected]:/home/ubuntu/filename2 filename1  
$rsync -avz [email protected]:/home/ubuntu/filename2 filename1
上述命令是将远程192.168.0.1的主机上filename2同步到本地的filename1。
注意:如果远程主机的端口不是默认的22端口,假如是4000端口,上述的命令修改为,

  1. $ rsync -avz '-e ssh -p 4000' [email protected]:/home/ubuntu/filename2 filename1   
$ rsync -avz '-e ssh -p 4000' [email protected]:/home/ubuntu/filename2 filename1 

4.从本地同步文件到远程服务器

  1. $rsync -avz filename1 [email protected]:/home/ubuntu/filename2  
$rsync -avz filename1 [email protected]:/home/ubuntu/filename2
上述命令是将本地的filename1同步到远程192.168.0.1的主机上。
同理如果端口不是22,使用以下命令

  1. $ rsync -avz '-e ssh -p 4000' filename1 [email protected]:/home/ubuntu/filename2  
$ rsync -avz '-e ssh -p 4000' filename1 [email protected]:/home/ubuntu/filename2



原文链接:Ubuntu下 rsync同步文件实例




Rsync(remote synchronize) 是一个远程数据同步工具,可以使用“Rsync算法”同步本地和远程主机之间的文件。Rsync的好处是只同步两个文件不同的部分,相同的部分不在传递。类似于增量备份,这使的在服务器传递备份文件或者同步文件,比起scp工具要省好多时间。

OS:        ubuntu server 14.04
server:  192.168.64.128
client:    192.168.64.145


Server


1.ubuntu  14.04默认已安装rsync,rsync服务默认不是启动的,我们要修改下面的文件。

  1. sudo vim /etc/default/rsync  
sudo vim /etc/default/rsync
  1. RSYNC_ENABLE=true   #false改true  
RSYNC_ENABLE=true   #false改true

2.修改配置文件

  1. sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc   #已默认安装的软件,默认不启动的似乎都要这么做  
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc   #已默认安装的软件,默认不启动的似乎都要这么做

我们先来查看一下这个文件

  1. sudo cat /etc/rsyncd.conf  
sudo cat /etc/rsyncd.conf
  1. # sample rsyncd.conf configuration file  
  2.   
  3. # GLOBAL OPTIONS  
  4.   
  5. #motd file=/etc/motd #登录欢迎信息  
  6. #log file=/var/log/rsyncd #日志文件  
  7. # for pid file, do not use /var/run/rsync.pid if  
  8. # you are going to run rsync out of the init.d script.  
  9. pid file=/var/run/rsyncd.pid  
  10.   
  11. #指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。  
  12. #syslog facility=daemon  
  13.   
  14. #自定义tcp选项,默认是关闭的  
  15. #socket options=  
  16.   
  17. #以下是模块信息,我们可以创建多个模块  
  18. # MODULE OPTIONS  
  19.   
  20. [ftp]  
  21.   
  22.         comment = public archive #模块描述  
  23.         path = /var/www/pub #需要同步的路径  
  24.         use chroot = yes #默认是yes|true,如果为true,那么在rsync在传输文件以前首先chroot到path参数指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接指向的目录文件。  
  25. #       max connections=10 #最大连接数  
  26.         lock file = /var/lock/rsyncd #指定支持max connections参数的锁文件。  
  27. # the default for read only is yes...  
  28.         read only = yes #只读选项  
  29.         list = yes #客户请求时可用模块时是否列出该模块  
  30.         uid = nobody #设定该模块传输文件时守护进程应该具有的uid  
  31.         gid = nogroup #设定该模块传输文件时守护进程应具有的gid,此项与uid配合可以确定文件的访问权限  
  32. #       exclude = #用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是exclude还是include    #这个我的理解是排除目录中不需同步的文件  
  33. #       exclude from = #可以指定一个包含exclude模式定义的文件名  
  34. #       include = #与exclude相似  
  35. #       include from = #可以指定一个包含include模式定义的文件名  
  36. #       auth users = #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)  
  37. #       secrets file = /etc/rsyncd.secrets #该文件每行包含一个username:password对,以明文方式存储,只有在auth users被定义时,此选项才生效。同时我们需要将此文件权限设置为0600  
  38.         strict modes = yes #该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true  
  39. #       hosts allow = #允许的主机  
  40. #       hosts deny = #拒绝访问的主机  
  41.         ignore errors = no #设定rsync服务器在运行delete操作时是否忽略I/O错误  
  42.         ignore nonreadable = yes #设定rysnc服务器忽略那些没有访问文件权限的用户  
  43.         transfer logging = no #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中  
  44. #       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #设定日志格式  
  45.         timeout = 600 #超时设置(秒)  
  46.         refuse options = checksum dry-run #定义一些不允许客户对该模块使用的命令选项列表  
  47.         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩  
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd #登录欢迎信息
#log file=/var/log/rsyncd #日志文件
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid

#指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。
#syslog facility=daemon

#自定义tcp选项,默认是关闭的
#socket options=

#以下是模块信息,我们可以创建多个模块
# MODULE OPTIONS

[ftp]

        comment = public archive #模块描述
        path = /var/www/pub #需要同步的路径
        use chroot = yes #默认是yes|true,如果为true,那么在rsync在传输文件以前首先chroot到path参数指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接指向的目录文件。
#       max connections=10 #最大连接数
        lock file = /var/lock/rsyncd #指定支持max connections参数的锁文件。
# the default for read only is yes...
        read only = yes #只读选项
        list = yes #客户请求时可用模块时是否列出该模块
        uid = nobody #设定该模块传输文件时守护进程应该具有的uid
        gid = nogroup #设定该模块传输文件时守护进程应具有的gid,此项与uid配合可以确定文件的访问权限
#       exclude = #用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用"-"和"+"来指定是exclude还是include    #这个我的理解是排除目录中不需同步的文件
#       exclude from = #可以指定一个包含exclude模式定义的文件名
#       include = #与exclude相似
#       include from = #可以指定一个包含include模式定义的文件名
#       auth users = #该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)
#       secrets file = /etc/rsyncd.secrets #该文件每行包含一个username:password对,以明文方式存储,只有在auth users被定义时,此选项才生效。同时我们需要将此文件权限设置为0600
        strict modes = yes #该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true
#       hosts allow = #允许的主机
#       hosts deny = #拒绝访问的主机
        ignore errors = no #设定rsync服务器在运行delete操作时是否忽略I/O错误
        ignore nonreadable = yes #设定rysnc服务器忽略那些没有访问文件权限的用户
        transfer logging = no #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中
#       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #设定日志格式
        timeout = 600 #超时设置(秒)
        refuse options = checksum dry-run #定义一些不允许客户对该模块使用的命令选项列表
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告诉rysnc那些文件在传输前不用压缩,默认已设定压缩包不再进行压缩


日志格式选项列表:

%h: 远程主机名
%a: 远程IP地址
%l: 文件长度字符数
%p: 该次rsync会话的进程id
%o: 操作类型:"send"或"recv"、”del.”
%f: 文件名
%P: 模块路径
%m: 模块名
%t: 当前时间
%u: 认证的用户名(匿名时是null)
%b: 实际传输的字节数
%c: 当发送文件时,该字段记录该文件的校验码


下面我们来定义自己的conf文件


  1.  # sample rsyncd.conf configuration file  
  2.   
  3. # GLOBAL OPTIONS  
  4.   
  5. #motd file=/etc/motd  
  6. log file=/var/log/rsyncd  
  7. # for pid file, do not use /var/run/rsync.pid if  
  8. # you are going to run rsync out of the init.d script.  
  9.  pid file=/var/run/rsyncd.pid  
  10. syslog facility=daemon  
  11. #socket options=  
  12.   
  13. # MODULE OPTIONS  
  14.   
  15. [my_rsync_bk] #名字可以任意命名,只要客户端的rsync命令一致  
  16.   
  17.         comment = public archive  
  18.         path = /home/rsync_bk                             #指定路径,如果没有这个目录自己建。  
  19.         use chroot = no  
  20. #       max connections=10  
  21.         lock file = /var/lock/rsyncd  
  22. # the default for read only is yes...  
  23.         read only = yes  
  24.         list = yes  
  25.         uid = nobody  
  26.         gid = nogroup  
  27. #       exclude =   
  28. #       exclude from =   
  29. #       include =  
  30. #       include from =  
  31.         auth users = liu_rsync              #rsync连接时的用户名,要和客户端rsync的命令一致  
  32.         secrets file = /etc/rsyncd.secrets #这里是保存密码的地方,如果屏蔽掉就不用密码了  
  33.         strict modes = yes  
  34.         hosts allow = 192.168.64.145 #运行的客户端ip  
  35. #       hosts deny =  
  36.         ignore errors = yes  
  37.         ignore nonreadable = yes  
  38.         transfer logging = yes  
  39.         log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.  
  40.         timeout = 600  
  41.         refuse options = checksum dry-run  
  42.         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz  
 # sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
 pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=

# MODULE OPTIONS

[my_rsync_bk] #名字可以任意命名,只要客户端的rsync命令一致

        comment = public archive
        path = /home/rsync_bk                             #指定路径,如果没有这个目录自己建。
        use chroot = no
#       max connections=10
        lock file = /var/lock/rsyncd
# the default for read only is yes...
        read only = yes
        list = yes
        uid = nobody
        gid = nogroup
#       exclude = 
#       exclude from = 
#       include =
#       include from =
        auth users = liu_rsync              #rsync连接时的用户名,要和客户端rsync的命令一致
        secrets file = /etc/rsyncd.secrets #这里是保存密码的地方,如果屏蔽掉就不用密码了
        strict modes = yes
        hosts allow = 192.168.64.145 #运行的客户端ip
#       hosts deny =
        ignore errors = yes
        ignore nonreadable = yes
        transfer logging = yes
        log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
        timeout = 600
        refuse options = checksum dry-run
        dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

创建一个密码文件

  1. sudo vim /etc/rsyncd.secrets  
sudo vim /etc/rsyncd.secrets
内容为:liu_rsync:123

  1. sudo chmod 0600 /etc/rsyncd.secrets   
sudo chmod 0600 /etc/rsyncd.secrets 

启动rsync

  1. sudo /etc/init.d/rsync start  
sudo /etc/init.d/rsync start

如果启动成功,那么server端酒配置成功了。


Client


我们再来看一下客户端的操作,一般客户端不需要进行特殊的配置,直接同步即可

  1. rsync -vzrtopg --progress  [email protected]::my_rsync_bk .  #.为当前目录,在服务端touch一个文件,同步后就会出现,当然你也可以指定一个位置比如/databk,需注意所建立的权限!  
rsync -vzrtopg --progress  [email protected]::my_rsync_bk .  #.为当前目录,在服务端touch一个文件,同步后就会出现,当然你也可以指定一个位置比如/databk,需注意所建立的权限!

此时就可以同步Server端的数据了,但是到目前为止,只能把Server端文件夹现有的数据同步下来,如果在Server端新加文件却不能同步进来,必须在客户端重新执行一次这个命令才行,试问这样水能忍受?

所以接下来我们借助于crontab去实现定时自动同步功能。

但是首先我们要创建一个密码文件:

  1. sudo vim /etc/rsync.pwd输入123,保存     #密码要一致  
sudo vim /etc/rsync.pwd输入123,保存     #密码要一致

注意指定使用的密码文件中只需要有密码,不要有用户名。

注意:下面这两步操作是必须的,没有足够权限同步就会不成功,ls -l 你所指向的目录

  1. sudo chmod 0600 /etc/rsync.pwd  
  2. sudo chown 普通用户:普通用户组 /etc/rsync.pwd  
sudo chmod 0600 /etc/rsync.pwd
sudo chown 普通用户:普通用户组 /etc/rsync.pwd

注:这里如果使用的是非root用户,这里只能使用自己当前用户和自己所在的组,不过这种设置方式我没有在linux试过,我在MAC机上试的结果并非如上所述,而是rsync.pwd只能被当前用户独有即权限之能是如下所示:

  1. -rw-------  
-rw-------

如果看不懂,可以去百度一下unix下权限表示

然后我们打开crontab,使它自动同步

  1. crontab -e  
crontab -e


  1. */1 * * * * rsync -a --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk    
*/1 * * * * rsync -a --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk  

一分钟同步一次。只要你在Server端添加了新文件或新文件夹,那么1分钟后就会自动同步到客户端。但是这样就完美了吗?还没有,因为你发现它其实还有问题,当我在Server端删除一个文件或目录的时候,1分钟后,客户端还有,这是怎么回事?这当然是有原因的。

修改上述配置如下所示:

  1. */1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk    
*/1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd [email protected]::my_rsync_bk /databk  

添加一个--delete参数就行了,这样以后在Server端删文件已能同步了。

注意: 若用普通用户身份运行rsync命令,同步后的文件的属主将改变为这个普通用户身份;若用超级用户身份运行rsync命令同步后文件属性保持原来用户身份不变。若指定-tg但目标计算机没有指定用户和组,则复制的文件归入501用户 501组


参数说明:

  1. -a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H   
  2. -r 子目录以递归模式处理  
  3. -l 保持符号链接文件  
  4. -H 保持硬链接文件  
  5. -p 保持文件权限  
  6. -t 保持文件时间信息  
  7. -g 保持文件归属组信息  
  8. -o 保持文件归属用户信息  
  9. -D 保持设备文件和特殊文件  
  10. -z 在传输文件时进行压缩处理  
  11. --exclude=PATTERN 指定排除一个不需要传输文件匹配模式  
  12. --exclude-from=FILE 从FILE中读取排除规则  
  13. --include=PATTERN 指定需要传输的文件匹配模式  
  14. --include-from=FILE 从FILE中读取匹配规则  
  15. --copy-unsafe-links 复制指向复制源路径目录以外的链接文件  
  16. --safe-links 忽略指向复制源路径目录以外的链接文件(默认)  
  17. --existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件  
  18. --ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件  
  19. -b 当有变化时,对目标目录中的旧文件进行备份  
  20. --backup-dir=DIR 与-b结合使用,指定备份路径  
  21. --link-dest=DIR 当文件未改变时在指定路径创建硬链接文件  
  22. --delete 删除接收端还存在而保存端不存在的文件  
  23. --delete-before 接收端在传输之前进行删除操作(默认)  
  24. --delete-during 接收端在传输过程中进行删除操作  
  25. --delete-after 接收端在传输之后进行删除操作  
  26. --delete-excluded 接收端在传输同时进行删除操作  
  27. --e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh  
  28. --ignore-erros 即使出现I/O错误也要进行删除  
  29. --partial 保留因故没有完全传输的文件,以加快随后的再次传输  
  30. --progress 在传输时显示传输过程  
  31. -p 等价于—partial—progress  
  32. --delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件  
  33. -v,--verbose 详细输出模式  
  34. -q,--quiet 精简输出模式  
  35. -h,--human-readable 输出文件大小  
  36. -n,--dry-run 显示那些文件将要被传输  
  37. --list-only 仅列出文件而不进行复制  
  38. --rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径  
  39. --password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令  
  40. -4,-6 使用IPv4或者IPv6  
  41. --version 打印版本信息  
  42. --help 显示帮组信息  
-a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H 
-r 子目录以递归模式处理
-l 保持符号链接文件
-H 保持硬链接文件
-p 保持文件权限
-t 保持文件时间信息
-g 保持文件归属组信息
-o 保持文件归属用户信息
-D 保持设备文件和特殊文件
-z 在传输文件时进行压缩处理
--exclude=PATTERN 指定排除一个不需要传输文件匹配模式
--exclude-from=FILE 从FILE中读取排除规则
--include=PATTERN 指定需要传输的文件匹配模式
--include-from=FILE 从FILE中读取匹配规则
--copy-unsafe-links 复制指向复制源路径目录以外的链接文件
--safe-links 忽略指向复制源路径目录以外的链接文件(默认)
--existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件
--ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件
-b 当有变化时,对目标目录中的旧文件进行备份
--backup-dir=DIR 与-b结合使用,指定备份路径
--link-dest=DIR 当文件未改变时在指定路径创建硬链接文件
--delete 删除接收端还存在而保存端不存在的文件
--delete-before 接收端在传输之前进行删除操作(默认)
--delete-during 接收端在传输过程中进行删除操作
--delete-after 接收端在传输之后进行删除操作
--delete-excluded 接收端在传输同时进行删除操作
--e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh
--ignore-erros 即使出现I/O错误也要进行删除
--partial 保留因故没有完全传输的文件,以加快随后的再次传输
--progress 在传输时显示传输过程
-p 等价于—partial—progress
--delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件
-v,--verbose 详细输出模式
-q,--quiet 精简输出模式
-h,--human-readable 输出文件大小
-n,--dry-run 显示那些文件将要被传输
--list-only 仅列出文件而不进行复制
--rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径
--password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令
-4,-6 使用IPv4或者IPv6
--version 打印版本信息
--help 显示帮组信息



接下来举几个常用的例子:

 1.在本地机器上对两个目录同步

  1. $ rsync -zvr filename1 filename2  
$ rsync -zvr filename1 filename2
上述代码是将filename1中的文件与filename2中的文件同步,如果将filename2中的文件同步到filename1中,修改代码为:

  1. $ rsync -zvr filename2 filename1  
$ rsync -zvr filename2 filename1

2.使用rsync –a 同步保留时间按标记

  1. $ rsync -azv filename1 filename2  
$ rsync -azv filename1 filename2
使用上述命令,将filename2中新同步的文件的时间与filename1中的创建的时间相同,它保留符号链接、权限、时间标记、用户名及组名相同。

3.将远程服务器的文件同步到本地

  1. $rsync -avz [email protected]:/home/ubuntu/filename2 filename1  
$rsync -avz [email protected]:/home/ubuntu/filename2 filename1
上述命令是将远程192.168.0.1的主机上filename2同步到本地的filename1。
注意:如果远程主机的端口不是默认的22端口,假如是4000端口,上述的命令修改为,

  1. $ rsync -avz '-e ssh -p 4000' [email protected]:/home/ubuntu/filename2 filename1   
$ rsync -avz '-e ssh -p 4000' [email protected]:/home/ubuntu/filename2 filename1 

4.从本地同步文件到远程服务器

  1. $rsync -avz filename1 [email protected]:/home/ubuntu/filename2  
$rsync -avz filename1 [email protected]:/home/ubuntu/filename2
上述命令是将本地的filename1同步到远程192.168.0.1的主机上。
同理如果端口不是22,使用以下命令

  1. $ rsync -avz '-e ssh -p 4000' filename1 [email protected]:/home/ubuntu/filename2  
$ rsync -avz '-e ssh -p 4000' filename1 [email protected]:/home/ubuntu/filename2



原文链接:Ubuntu下 rsync同步文件实例




相关标签: ubuntu 服务器