想要定时地把一台服务器上某个目录下的内容备份到另一台机器中,于是想到了rsync,两台机器均为CentOS操作系统。rsync有好几种使用模式,我采用的是服务器/客户端的模式,即其中一台作为服务端,一台作为客户端,服务端作为备份机,客户端定期将本地目录内容更新到远端机器上。
1. 配置服务端
a. 建立rsyncd配置文件 vi /etc/rsyncd.conf
secrets file = /etc/rsyncd.secrets
motd file = /etc/rsyncd.motd
read only = no
list = yes
uid = nobody
gid = nobody
hosts allow = (IP address)
max connections = 2
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
[abc_module]
comment = Abc's data
path = /home/abc
auth users = abc
其中secrets file是放置rsync用户密码的文件,需要新建,每一行放置一行用户名:密码如
abc:123456
该文件要设置为创建者只读,即 chmod 600 /etc/rsyncd.secrets
motd file为客户端连上来的欢迎语句,也需要新建,随便写上一句话就可以了
read only可以设置客户端是否只读或可写
hosts allow可以设置客户端的IP地址限制
[abc_module]是指定客户端连上来时采用的模块,该模块规定了使用的目录和用户名
b. 检查并开启防火墙
rsyncd将使用873端口,检查873端口是否开启
telnet 127.0.0.1 873
如果被拒绝,则需要开启873端口:
iptables -A INPUT -s (IP address) -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j DROP
其中IP address可填写为客户端的地址
c. 启动rsync作为后台运行:
rsync --daemon --config=/etc/rsyncd.conf
2. 配置客户端
a. 建立password file, vi /etc/rsync.pass
12345
注意该密码文件只含有密码,没有用户名。同样chmod 600 /etc/rsync.pass
b. 开始备份文件
rsync -avu --password-file=/etc/rsync.pass /path1/path2 [email protected]::abc_module
上述命令把本机的/path1/path2目录备份到远端192.168.1.10机器上,使用用户名abc,采用abc_module
此时远端的目录/home/abc需要有可写权限
c. 加入crontab
将上面的命令加入到crontab任务中,可以实现周期性的备份