RSYNC(Remote Synchronize)翻译成中文为“远程同步”。可通过LAN/WAN快速同步多台主机间的文件。RSYNC用“rsync算法”使得本地和远程两个主机之间的文件达到同步,RSYNC在第一次同步时,会复制全部的内容,下次只会传输修改过的文件,类似于增量备份,因此速度较快。RSYNC支持大多数的类Unix系统,比如Linux、Solaris或者BSD平台,此外,它在Windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。
一、RSYNC的安装
使用“sudo apt-get install rsync”命令安装RSYNC服务器程序,
不过一般Debian或Unbntu系统都默认集成了RSYNC服务,用户使用“rsync --version”命令可以查看服务器程序版本号,如图1所示。
图1 RSYNC版本RSYNC有六种工作方式,但是都大同小异,本文介绍的是从远程RSYNC服务器中同步文件到本地客户机上。更多使用详情请参阅http://rsync.samba.org/官方网站。
二、RSYNC实现Linux与Linux系统之间的同步
1、编辑rsyncd.conf配置文件
/etc/rsyncd.conf是rsync的默认配置文件,该配置文件不存在,需要用户自行编辑内容。建议大家在参考/usr/share/doc/rsync/examples/rsyncd.conf的基础上自行编辑。小研机器上的配置如下:
#登录提示信息
motd file=/etc/motd
#日志文件
log file=/var/log/rsyncd
#rsync 守护进程将其 pid写入指定的文件
pid file=/var/run/rsyncd.pid
#指定 rsync 发送日志消息给 syslog 时的消息级别
syslog facility=daemon
#需要同步的模块名称
[xk_rsync]
#模块描述,该描述连同模块名在客户连接得到模块列表时显示
comment = public archive
#指定当前模块在 rsync 服务器上的同步路径
path = /home/wanglei/xk_rsync
#指定的根目录下运行指令,在新根下将访问不到旧系统的根目录结构和文件,增强了安全性,建议开启该选项
use chroot = yes
#设置锁文件名称
lock file = /var/lock/rsyncd
#下载模式,不允许上传
read only = yes
#列出服务器同步目录
list = yes
#以nobody身份运行rsync server
uid = nobody
#以nogroup组身份运行
gid = nogroup
#同步认证用户名,由用户自行指定
auth users = xkyan
#rsync同步密码文件
secrets file = /etc/rsyncd.secrets
#密码文件只能被rsync服务器运行身份的用户访问
strict modes = yes
#是否忽略server上的IO错误
ignore errors = no
#同步时忽略没有访问权限的文件
ignore nonreadable = yes
#设定同步超时时间,单位为秒,0表示没有超时定义
timeout = 600
#列表禁止客户端使用的命令参数列表,必须使用命令全名
refuse options = checksum dry-run
#指定不进行压缩处理再传输的文件类型
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
RSYNC的配置文件选项很多,这里小研只列举了常用的一些选项,用户若还需要额外配置其他选项,可以查阅相关手册。
2、创建需要同步的文件夹xk_rsync
使用命令:
mkdir /home/wanglei/xk_rsync
3、使用vi编辑/etc/rsyncd.secrets密码文件
录入 xkyan:seekswan,用户和密码之间使用:作为分隔符,多组用户和密码可以换行录入。小研需要提醒您,该密码文件是以明文方式存放,必须使用命令sudo chmod 600 /etc/rsyncd.secrets对用户组和其他组进行限制。
4、在客户端同样设置密码文件/etc/rsyncd.secrets
注意,该密码文件中只需要输入seekswan密码即可,无需输入用户名。对用户组和其他组进行访问限制,使用命令:
chmod 600 /etc/rsyncd.secrets
5、以守护进程方式启动RSYNC服务
使用命令:
sudo /etc/init.d/rsync restart --daemon --config=/etc/rsyncd.conf
6、开始同步
在客户端/home/xk/目录下创建将要同步的文件夹rsync,使用sudo ifconfig命令查看服务器ip地址,使用同步命令:
rsync -avztop --delete --progress xkyan@192.168.0.166::xk_rsync /home/xk/rsync,如图2所示。
图2 同步命令
命令执行后,会出现输入密码提示,如图3所示。
图3 认证用户进行同步需要输入密码输入seekswan密码之后,同步开始。同步时长视文件大小和数量不等。同步结果如图4所示。
图4 同步结果
若在参数中加入参数--password-file=/etc/rsyncd.secrets,则在同步过程中无需交互式输入密码。
7、设置crontab自动同步
在客户端编写同步脚本cron.sh,内容如下:
#!/bin/bash
sudo /usr/bin/rsync -avztop –delete –progress –password-file=/etc/rsyncd.secrets xkyan@192.168.0.166::xk_rsync /home/xk/rsync
设置客户端定时计划,每小时执行一次cron.sh脚本进行自动同步。使用sudo vi /etc/crontab对计划内容进行编辑,如图5所示。
图5 利用crontab进行自动同步
三、RSYNC实现Linux与Windows系统之间的同步
Windows用户也可以使用cwRsync工具对远程NAS文件进行同步。可以从https://www.itefix.net网站下载cwRsync免费版本。小研虚拟机上安装的Windows客户端是Windows7 64位旗舰版。
1、创建同步目标文件夹
选择合适的驱动器,创建新文件夹windows_rsync。如图6所示。
图6 创建windows同步文件夹2、使用命令进行同步
点击“开始”按钮,在“搜索程序和文件”文本框中输入cmd之后回车。在伪DOS窗口输入命令,如图7所示。
图7 开始Windows系统同步
3、输入交互式密码
输入密码之后,可以看到最后的同步结果,如图8所示。
图8 Windows系统同步结果
4、查看同步结果
双击同步文件夹windows_rsync后查看结果,如图9所示。
图9 查看同步结果
5、使用--delete再次同步
在服务器同步文件夹中删除所有.c结尾的文件后,在Windows的CMD窗口中输入命令再次同步,本次同步使用了--delete参数,如图10所示。
图10 使用--delete再次进行同步
同步过程如图11所示。
图11 --delete同步删除客户端多余文件
6、使用Windows计划任务自动同步
首先编写自动执行的rsync.bat文件,如图12所示。
图12 Windows 同步bat文件
然后打开Windows“任务计划程序”,设置任务每天23:11分启动rsync.bat一次。如图13所示。
图13 创建Windows计划任务
至此,您就跟随小研设置好了Windows客户端与NAS服务器端的自动同步配置。