记一次简单的 rsync 使用

rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。

我只做了手动同步,并没有进行推送处理,有兴趣的朋友可参考文末的链接。

服务端配置:
配置文件默认在:/etc/rsyncd.conf

配置中留意,用于设置客户端连接的用户名和密码,且保留该文件属于 root 组及用户,且权限为 600。

secrets file = /etc/rsyncd.password

密码文件格式(一行一个):
用户名:密码

# 增加项目(只读)
[sync1]
path = /tmp/sync1 # 允许同步的目录
auth users = test # 允许连接的用户
read only = true # 只读
comment = this is sync1 rsync # 注释

# 增加项目(允许读写)
[test]
path = /tmp/test # 允许同步的目录
auth users = test # 允许连接的用户
read only = false # 非只读,即允许写入,默认为,只读
comment = this is test rsync # 注释

开机启动

echo "/usr/bin/rsync --daemon" >> /etc/rc.local
chmod +x /etc/rc.local

更多配置信息,可参考文末的链接。

客户端同步时:

rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd_www.password test@domain.com::sync1 /tmp/test

命令解释:

-vzrtopg # 同步选项 v显示更多信息 z使用压缩 r递归同步文件夹 t保持文件时间 o保持文件所有者信息 p保持文件权限 g保持文件所在组

–progress # 显示进度

–password-file # 指定密码文件(只需要填写密码即可)

test@domain.com::sync1 # 以 test 用户名连接 domain.com 站的同步服务器,同步的项目为 sync1

/tmp/test # 并存储到本地目录

同理推送时:

rsync -avzP /www/test.log --password-file=/etc/rsyncd_test.password --exclude-from='./ignore.txt' test@domain.com::test

命令解释:

-avzP # 推送选项 a 递归方式保持文件属性等信息 v显示更多信息 z使用压缩 P保留那些因故没有完全传输的文件且在传输时显示传输过程

–password-file # 指定密码文件(只需要填写密码即可)
–exclude-from # 指定忽略的规则文件

test@domain.com::test # 以 test 用户名连接 domain.com 站的同步服务器,同步的项目为 test

报错信息
客户端报错:
The –password-file option may only be used when accessing an rsync daemon.
rsync error: syntax or usage error (code 1) at main.c(1393) [Receiver=3.1.3]

解决方法:增加 –port=服务端的端口号。

rsync: failed to connect to test.com (127.0.0.1): Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]

解决方法:端口未开放,防火墙开户指定端口。

rsync: server sent “HTTP/1.1 400 Bad Request” rather than greeting
rsync error: error starting client-server protocol (code 5) at main.c(1649) [Receiver=3.1.2]

解决方法:指定端口错误不是有效的同步端口(或者端口冲突),使用 netstat -antp 查看哪些程序占用了该端口,重新设置同步端口或移除冲突的程序。

@ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [Receiver=3.1.3]

解决方法:密码文件需要设置 600 权限。即,root 可读,可写,其他禁止操作

@ERROR: auth failed on module www
rsync error: error starting client-server protocol (code 5) at main.c(1657) [Receiver=3.1.3]

解决方法:检查密码文件,写一个,不需要指定用户名,或密码错误。

rsync: failed to connect to domainame (10.0.0.1): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(127) [Receiver=3.1.3]

解决方法:服务端,rsync 未启动,尝试手动启动,并增加开机启动。

ERROR: password file must not be other-accessible
解决方法:密码文件外部访问权限太大,改小点。

@ERROR: chdir failed
解决方法:服务端指定的同步路径不存在,在配置文件中核对。

更多的信息,参见:

Rsync 故障排查整理

rsync常见问题及解决办法收集

rsync用法详细解释

CentOS6 下rsync服务器配置

CentOS 7 用户账户配置

Linux下rsync的安装及简单使用

rsync 官网

Windows 下的 rsync