ubuntu 缺省安装的安装中, rsync 服务是没有开启的。需要做 3 步:

1 、修改 /etc/default/rsync ,让 rsync 服务在开机的时候启动。 
$ sudo vi /etc/default/rsync  
 将 RSYNC_ENABLE=false 改为 RSYNC_ENABLE=true 

2 、创建一个 rsyncd.conf ,缺省安装中是没有这个文件的。 
$ sudo vi /etc/rsyncd.conf  
 输入以下几行: 
uid=nobody  
gid=nobody  
max connections=3 
use chroot=no  
log file=/var/log/rsyncd.log  
pid file=/var/run/rsyncd.pid  
lock file=/var/run/rsyncd.lock  
secrets file=/etc/rsync.pwd 

3 、启动 rsync 服务。 
$ /etc/init.d/rsync start

 

 

基本命令:

  rsync -avz ./libserver1.0.1 cxf@202.117.15.144:/home/cxf/backup  目录上传

  rsync -avz cxf@202.117.15.144:/home/cxf/libserver ./backup       目录下载

  rsync -avz ./libserver1.0.1./* cxf@202.117.15.144:/home/cxf/backup 文件上传

  rsync -avz cxf@202.117.15.144:/home/cxf/libserver/* ./backup      文件下载

 

一、通过 rsh 或 ssh 命令

  在没有建立 rsync 服务器的情况下,我们可以利用 rsync 命令直接进行快速的差异备份:

CODE:
命令格式:
#rsync [option] 源路径 目标路径
其中:
[option] :
a: 使用 archive 模式,等于 -rlptgoD ,即保持原有的文件权限
z: 表示传输时压缩数据
v: 显示到屏幕中
e: 使用远程 shell 程序(可以使用 rsh 或 ssh )
--delete: 精确保存副本,源主机删除的文件,目标主机也会同步删除
--include=PATTERN: 不排除符合 PATTERN 的文件或目录
--exclude=PATTERN: 排除所有符合 PATTERN 的文件或目录
--password-file: 指定用于 rsync 服务器的用户验证密码

 

源路径和目标路径可以使用如下格式:
rsync://[USER@]Host[:Port]/Path <--rsync 服务器路径
[USER@]Host::Path <--rsync 服务器的另一种表示形式
[USER@]Host:Path <-- 远程路径
LocalPath <-- 本地路径

 

※ 需要注意的是,来源或目的路径最少要有一个是本地路径,如果忽略本地路径,则只会列出远端的文件列表。

例子:

CODE:
#rsync -ave ssh test:/home/ftp/pub/ /home/ftp/pub/

 

把源路径中远端 test 机器上的 /home/ftp/pub/ 目录中的内容,通过 rsync 同步到本地的 /home/ftp/pub/ 目录下。
◎ 小心源路径结尾时候的 / 号,后缀 / 通知 rsync 复制该目录的内容,但不复制目录本身。例如:

CODE:
#rsync -ave ssh test:/home/ftp/pub /home/ftp/

则会把 pub 目录整个同步到本地 /home/ftp/ 路径中

 

CODE:
#rsync -azv --delete rsync://linuxing@192.168.1.100/blog /var/www/html/

  通过 linuxing 登陆到 192.168.1.100 中,同步 rsync 服务器的 blog 项到本地的 /var/www/html/ ,并删除本地上源路径中不存在的文件或目录。

※ 千万要注意 --delete 参数,在使用此参数的时候,建议用绝对路径指定本地目录,防止清空当前目录。

二、建立 rsync 服务器

  当服务器没有开通 ssh ,或备份方没有 ssh 权限的时候,我们可以通过建立 rsync 服务器,进行匿名的数据同步。
要使用 rsync 服务,需要建立服务端和客户端:

1 、服务端
主配置文件:

CODE:
#vi /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[test] #rsync 区段的设定名称
path = /var/www/html/test # 需要同步的数据存放路径
comment = test folder # 注释
uid = apache # 采用什么身份进行文件读取
gid = apache # 同上,必须是有读取 path 权限的用户、组
ignore errors # 忽略错误
read only = yes # 只读
list = no # 不能列表
auth users = linuxing # 连接 rsync 服务的帐号
secrets file = /etc/rsyncd.secrets # 指定存放帐号密码的位置

帐号密码文件:

CODE:
#vi /etc/rsyncd.secrets
# 格式:帐号 : 密码 (每行一组,帐号和密码用 : 号分开)
linuxing:backup

保存后,需要保证用户是 root ,权限是 600

CODE:
#chown root:root /etc/rsyncd.secrets
#chmod 600 /etc/rsyncd.secrets

启动服务:
#rsync --daemon

保证开机自动启动:
修改 /etc/xinetd.d/rsync 文件,把其中的 disable=yes 改为 disable=no

CODE:
#sed -i -e "/disable/{ s/yes/no/ }" /etc/xinetd.d/rsync
#service xinetd.d restart

 

2 、客户端
使用用法一中涉及到 rsync:// 的方法即可。
如果 rsync 服务器需要密码验证,可以增加 --password-file 参数:

CODE:

#rsync -azv --delete rsync://linuxing@192.168.1.100/test /var/www/html --password-file=/etc/test 
 #vi /etc/test 
 # 指定访问密码  
 bakcup 
 #chmod 600 /etc/test

3 、定时
另外,由于 rsync 客户端没有定时功能,我们可以通过在 crontab 中增加计划任务实现定时的同步,如:(不要使用 -v 参数,防止刷屏)

CODE:
#crontab -e
0 22 * * 1-5 /usr/bin/rsync -az --delete rsync://linuxing@192.168.1.100/test /var/www/html --password-file=/etc/test
# 指定星期一到五,每晚十点整进行同步

三、总结

  使用 rsync 的优点:可通过 ssh 进行网络加密传输,也可以利用 ssh 客户端密钥建立信任关系。当在两台计算机之间保持大型、复杂目录结构的同步时候,比 tar 或 wget 等方式都要快。而且可以做到精确同步。

 

四、附录

  如果是通过编译安装的 rsync (如 FreeBSD ),路径有点不同:
  服务器的配置文件在: /usr/local/etc/rsyncd.conf
  启动文件: /usr/local/etc/rc.d/rsyncd.sh
  命令文件: /usr/local/bin/rsync
  系统启动托管: /etc/rc.conf (增加 rsyncd_enable="YES" )

 

#!/bin/bash
#already install rsync
if test -e /etc/default/rsync.bak
then
	pwd
else
	sudo cp /etc/default/rsync /etc/default/rsync.bak
fi
#let rsync service start with the machine
sudo sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync
#if not exist, then create a file named rsyncd.conf
if test -e /etc/rsyncd.conf
then
	sudo cp /etc/rsyncd.conf /etc/rsyncd.conf.bak
else
	sudo touch /etc/rsyncd.conf
fi
sudo cat <<END >/etc/rsyncd.conf
uid=nobody
gid=nobody
max connections=3
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsyncd.secrets
auth users=ct #the account to connect rsync
END
if ! test -e /etc/rsyncd.secrets
then
	sudo touch /etc/rsyncd.secrets
fi
echo 'ct:550336392ctqazplm' >> /etc/rsyncd.secrets
sudo chmod 600 /etc/rsyncd.secrets
#start-up the rsync service
sudo /etc/init.d/rsync start 
sudo rsync --daemon