05.06.2011---&&&---!!!-rsync;NFS;autofs;inotify!!!同步配置

[1]

http://www.google.com.hk/search?hl=en&source=hp&q=rsync+inotify+%E9%85%8D%E7%BD%AE&aq=f&oq=&aqi=

http://www.google.com.hk/search?hl=en&source=hp&q=rsync+%E5%B1%80%E5%9F%9F%E7%BD%91%E5%90%8C%E6%AD%A5&aq=f&oq=&aqi=

http://www.google.com.hk/search?hl=en&source=hp&q=rsync%E6%98%AFLinux&aq=f&oq=&aqi=

http://www.google.com.hk/search?hl=en&safe=active&q=nfs+++linux+%E5%90%8C%E6%AD%A5&oq=nfs+++linux+%E5%90%8C%E6%AD%A5&aq=f&aqi=&aql=&gs_sm=e&gs_upl=8696l14969l0l9l8l0l0l0l0l467l1458l2-1.2.1

http://www.google.com.hk/search?hl=en&safe=active&q=nfs+rsync++%E5%90%8C%E6%AD%A5&oq=nfs+rsync++%E5%90%8C%E6%AD%A5&aq=f&aqi=&aql=&gs_sm=e&gs_upl=1384l4925l0l4l3l0l0l0l0l355l507l0.1.0.1

http://www.google.com.hk/search?q=+nfs++%E9%85%8D%E7%BD%AE++rsync&btnG=Search&hl=en&safe=active&sa=2

[2]

http://www.bchuan.com/archives/652.html

搞定rsync和NFS
发表于 2008 年 07 月 11 日 由 jianzi0307

记录一下流水账

…. =.=!

   NFS:
前几天搞了linux的NFS,今天搭建freebsd的NFS,对比之下,freebsd下简单的多得多了!
服务器端(192.168.30.1):
#vi /etc/rc.conf
rpcbind_enable=”YES”
nfs_server_enable=”YES”
nfs_server_flags=”-u -t -n 4″
mountd_flags=”-r”

#vi /etc/exports
/home -alldirs -maproot=root 192.168.30.7 192.168.30.8

#/usr/sbin/nfsd -u -t -n 4
#/usr/sbin/mountd -r

客户端(192.168.30.7,192.168.30.8):
#vi /etc/rc.conf
nfs_client_enable=”YES”

#showmount -e 192.168.30.1

#mount 192.168.30.1:/home/myproject /home/myproject

自动挂载
#vi /etc/fstab
192.168.30.1:/home/myproject /home/myproject nfs rw 0 0

重新启动nfsd,mountd,我都是直接kill掉,然后启动,不知有没有简单方法

rsync 同步:
服务器端(192.168.30.1):
1安装
#cd /usr/ports/net/rsync
# make install clean
2配置
#vi /usr/local/etc/rsyncd.conf
内容:
pid file = /var/run/rsyncd.pid
use chroot = yes
max connections = 4
log file = /var/log/rsyncd.log

[test]
path = /home/test/
auth users = root
uid = root
gid = wheel
hosts allow = 192.168.30.7,192.168.30.8
secrets file = /usr/local/etc/rsyncd.pub.secrets
read only = no

#vi /usr/local/etc/rsyncd.pub.secrets
内容:
root:123456 #这里设置用户和密码

#chmod 600 /usr/local/etc/rsyncd.pub.secrets
必须设置权限为600

#/usr/local/bin/rsync –daemon

客户端(192.168.30.7,192.168.30.8):
安装:
#cd /usr/ports/net/rsync
#make install clean

配置:
#vi /usr/local/etc/rsync.pub.key
内容:
123456 #这里只需填写密码,不要写用户

#chmod 600 /usr/local/etc/rsync.pub.key

开始同步
#/usr/local/bin/rsync -azrtopguL root@192.168.30.1::test /home/bakup –password-file=/usr/local/etc/rsync.pub.key

添加到crontab,做计划任务,每半小时执行一次,
*/30 * * * * /usr/local/bin/rsync -azrtopguL root@192.168.30.1::test /home/bakup –password-file=/usr/local/etc/rsync.pub.key



#####################################

#centos 下 rsync 客户端

A、安装:
tar -zxvf rsync-3.0.3.tar.gz
cd rsync-3.0.3
./configure
make
make install
B、添加密码文件
vi /etc/rsyncd.scrt (没有就新建)
内容如下:
123456 (文件与服务器端认证文件不一样)

服务器端认证文件内容是:

root:123456

C、改文件权限为600
chmod 600 /etc/rsyncd.scrt

备份命令格式:

rsync -avz –password-file=密码文件路径 username@需要备份的主机IP::备份里的模块名称
例如:
rsync -avz –password-file=/etc/rsyncd.scrt wwyhy@192.168.1.201::testlink
/home/wangwei/testlink/upload_area

-完-

[3]

http://wolfgangkiefer.blog.163.com/blog/static/8626550320099285321626/

centos上的rsync、nfs、autofs配置
基本知识请查看其它文档。

   1)rsync的配置,/etc/rsyncd下创建rsyncd.conf,rsyncd.secrets,rsync.password

rsync -avz --progress --password-file=/etc/rsyncd/rsync.password root@192.168.1.103::upload /backup/upload

从102拷贝文件同步到本地
rsync -avz --progress --password-file=/etc/rsyncd/rsync.password root@192.168.1.102::upload /backup/upload

从本地拷贝文件同步到102
rsync -avz --progress --password-file=/etc/rsyncd/rsync.password /backup/upload/* root@192.168.1.102::upload



2) nfs配置:
在103上配置/etc/exports
/backup/upload 192.168.1.102/24(rw,sync,no_root_squash)
在102上配置/etc/exports
/backup/upload 192.168.1.103/24(rw,sync,no_root_squash)



在103上nfs映射102上的目录:/etc/exports
mount -t nfs 192.168.1.102:/backup/upload /site/upload



在102上nfs映射103上的目录:/etc/exports
mount -t nfs 192.168.1.103:/backup/upload /site/upload

nfs与防火墙:修改/etc/sysconfig/nfs配置文件,把所有默认端口全部放开,并且在防火墙里面加上下面端口
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 32803 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 32769 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT

3) autofs的配置
采用autofs配置,其实还是比较简单的
在103上,对102进行自动映射,增加auto.nfs文件,加入:
upload -rw,soft,intr,rsize=8192,wsize=8192 192.168.1.102:/backup/upload
修改auto.master,加入
/site /etc/auto.nfs
并注释掉最后的nis相关
#+auto.master



注意:一般nfs的映射不成功都是防火墙惹得祸,请按上述放开端口即可

[4]

http://www.net527.cn/a/caozuoxitong/Linux/2010/0414/9594.html

Linux rsync+inotify 配置触发式(实时)远程同步

  使用rsync+inotify配置触发式(实时)远程同步 2008-11-01 TsengYia#126.com ################################################################ 系统环境:RHEL5 [ 2.6.18-8.el5xen ] 软件环境: rsync-2.6.8-3.1 nfs-utils-1.0.9-16.el5 portmap-4.0-65.2.2
使用rsync+inotify配置触发式(实时)远程同步

2008-11-01 TsengYia#126.com

################################################################
系统环境:RHEL5 [ 2.6.18-8.el5xen ]
软件环境:
rsync-2.6.8-3.1
nfs-utils-1.0.9-16.el5
portmap-4.0-65.2.2.1
inotify-tools-3.13.tar.gz
—— http://downloads.sourceforge.net/inotify-tools/inotify-tools-3.13.tar.gz?modtime=1199213676&big_mirror=0

目标功能:
源主机H1: 192.168.1.11/24
目标主机H2: 192.168.1.12/24

将H1主机中的开发数据(/var/devel/目录),上传同步至H2主机的/backup/devel/h1/目录。——当源数据有文件或目录更新 时,即时启动rsync同步进程。[基于安全性考虑,建议只在内部网络中使用]

################################################################
除inotify-tools(需要2.6.13以上内核的inotify功能支持)以外,其他软件均使用RHEL5系统自带的rpm包安装。

一、配置目标主机H2(发布NFS可写共享)

shell> mkdir -p /backup/devel/h1/
shell> vi /etc/exports
/backup/devel/h1 192.168.1.11(rw,no_root_squash)
shell> service portmap start
shell> service nfs start
shell> chkconfig portmap
shell> chkconfig nfs

如有必要,可以结合防火墙规则控制访问权限
shell> iptables -I INPUT -p tcp --dport 111 -j DROP
shell> iptables -I INPUT -p tcp --dport 111 -s 192.168.1.11 -j ACCEPT
shell> iptables -I INPUT -p udp --dport 111 -j DROP
shell> iptables -I INPUT -p udp --dport 111 -s 192.168.1.11 -j ACCEPT


二、配置源主机H1(上传备份发起端)

1、安装inotify-tools工具包
shell> tar zxvf inotify-tools-3.13.tar.gz -C /usr/src/
shell> cd /usr/src/inotify-tools-3.13
shell> ./configure
shell> make
shell> make install
—— 可以使用man inotify、man inotifywait、man inotifywatch查看相关手册页。

2、挂载H2发布的备份目录
shell> service portmap start
shell> chkconfig portmap
shell> mkdir -p /media/h2nfsdir/
shell> vi /etc/fstab
192.168.0.12:/backup/devel/h1 /media/h2nfsdir nfs defaults,noexec 0 0
shell> mount /media/h2nfsdir

3、编写触发同步脚本
shell> vi /opt/h1-h2_inosync.sh
#!/bin/sh
SRC=/var/devel/
DST=/media/h2nfsdir/
INWT=/usr/local/bin/inotifywait
RSYNC=/usr/bin/rsync
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F ; do
$RSYNC -aHqz --delete $SRC $DST
done
shell> chkmod +x /opt/h1-h2_inosync.sh

4、每次开机自动运行监控脚本
shell> echo "/opt/h1-h2_inosync.sh &" >> /etc/rc.local
shell> /opt/h1-h2_inosync.sh &


三、测试实时同步
在源主机H1上,修改/var/devel/目录中的内容(如增、删、改文件,添加、移除目录等),
——同时在目标主机H2上,观察备份目录/backup/devel/h1/中内容的变化。


############################## The End ##################################

[5]

http://blog.lubingit.com/post/100/

使用rsync+inotify配置触发式(实时)远程同步 [| 2010/07/15 16:36]
大 | 中 | 小
原文链接:http://bbs.linuxtone.org/thread-2681-1-1.html

安装软件:
rsync3.x
inotify-tools

条件:
需要实时同步的两台主机: 192.168.1.101 192.168.1.102
同步的网站目录: /data/www/wwwroot

# cd /usr/local/src
# wget http://www.samba.org/ftp/rsync/s ... nc-3.0.6pre1.tar.gz
# wget http://jaist.dl.sourceforge.net/ ... y-tools-3.13.tar.gz

# tar zxvf rsync-3.0.6pre1.tar.gz
# cd rsync-3.0.6pre1
# ./configure --prefix=/usr && make && make install

# tar zxvf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure && make && make install



# cd /usr/local/sbin
# vi rsync.sh //分别在两台机器上创建如下脚本,另一台改一下IP地址即可.
#!/bin/sh
src=/data/www/wwwroot/
des=/data/www/wwwroot
ip=192.168.1.101

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
| while read file
do
rsync -avz --delete --progress ${src} root@${ip}:${des} &&
#echo "${src} was rsynced"
#echo "-----------------------------------------------------"
done

# chmod a+x rsync.sh
# ./rsync.sh 执行同步脚本,在相应的目录下测试相关文件.
将此脚本写入到/etc/rc.local 让系统自动加载即可.

脚本相关注解:
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件~
-e create,move,delete,modify
监听 创建 移动 删除 写入 事件

rsync -aHqzt $SRC $DST

-a 存档模式
-H 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件

当要排出同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径。详细查看man rsync
当要排除都某个目录的事件监控的处理时,为inotifywait添加--exclude或--excludei参数。详细查看man inotifywait

另:
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
上面的命令返回的值类似于:
10/03/09 15:31 /wwwpic/1
这3个返回值做为参数传给read,关于此处,有人是这样写的:
inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F;do
细化了返回值。



说明: 当文件系统发现指定目录下有如上的条件的时候就触发相应的指令,是一种主动告之的而非我用循环比较目录下的文件的异动,该程序

在运行时,更改目录内的文件时系统内核会发送一个信号,这个信号会触发运行rsync命令,这时会同步源目录和目标目录。
--timefmt:指定输出时的输出格式
--format: '%T %w%f'指定输出的格式

二.关于inotify介绍
Inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的

、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。

inotify 可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所说的文件也包括目录。

[6]

http://www.6curl.com/nfs-config/

服务端上的配置:

[root@ns ~]# vi /etc/exports
/home 192.168.0.0/24(rw,sync,no_root_squash)

引用
/home ⇒ 共享出的目录
192.168.0.0/24 ⇒ 允许那个网段的访问
rw ⇒ 权限(读写)
sync ⇒ 内存硬盘同步写入
no_root_squash ⇒ root身份mount该NFS服务器,则身份就是root身份。



[root@ns ~]# /etc/rc.d/init.d/portmap start
Starting portmap: [ OK ]
[root@ns ~]# /etc/rc.d/init.d/nfs start
Starting nfs services: [ OK ]
Starting nfs quotas: [ OK ]
Starting nfs daemon: [ OK ]
Starting nfs mountd: [ OK ]
[root@ns ~]# /etc/rc.d/init.d/nfslock start
Starting NFS statd: [ OK ]
[root@ns ~]# chkconfig nfs on
[root@ns ~]# chkconfig nfslock on
[root@ns ~]# chkconfig portmap on

客户端的配置:
[root@www ~]# mount -t 192.168.0.2:/home /home
[root@www ~]# vi /etc/fstab
*//追加以下到最后一行//*
192.168.0.2:/home /home nfs defaults 1 2

[7]

http://www.liusuping.com/ubuntu-linux/Redhat-Linux-NFS-setting.html

Redhat Linux下NFS的配置及操作

分类: Linux/Unix作者: 刘苏平

  NFS服务简介

NFS是Network File System的缩写,即网络文件系统。NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS server也可以看作是一个FILE SERVER,用于在UNIX类系统之间共享文件,可以轻松的挂载(mount)到一个目录上,操作起来就像本地文件一样的方便。

服务器端配置

在Redhat Linux下NFS是默认安装的

[root@linux-a ~]# rpm -qa | grep nfs
nfs-utils-1.0.9-16.el5
nfs-utils-lib-1.0.8-7.2

NFS配置文件设置

NFS服务的配置文件是etc/exports

exports文件内容格式:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

1.输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

2.客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式
指定ip地址的主机 192.168.0.200
指定子网中的所有主机 192.168.0.0/24
指定域名的主机 a.liusuping.com
指定域中的所有主机 *.liusuping.com
所有主机 *

3.选项:

选项用来设置输出目录的访问权限、用户映射等。NFS主要有3类选项:

访问权限选项
设置输出目录只读 ro
设置输出目录读写 rw

用户映射选项
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash 与all_squash取反(默认设置);
root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash 与rootsquash取反;
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async 将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
no_wdelay 若有写操作则立即执行,应与sync配合使用;
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

NFS服务器配置实例

/nfs/public 192.168.0.0/24(rw,async) *(ro)
/nfs/frank 192.168.0.232(rw,sync)
/nfs/root *.liusuping.com(ro,no_root_squash)
/nfs/users *.liusuping.com(rw,insecure,all_squash,sync,no_wdelay)
/mnt/cdrom 192.168.0.*(ro)

注意:除了在配置文件中定义目录的读写权限外,还需要相应的目录具有相应的读写权限。

查看NFS共享目录信息

[root@linux-a ~]# exportfs
/nfs/public 192.168.0.0/24
/nfs/frank 192.168.0.232
/nfs/users *.liusuping.com
/mnt/cdrom 192.168.0.*
/nfs/root *.liusuping.com
/nfs/public <world>

启动或停止NFS服务

[root@linux-a ~]# sevice nfs start|stop|restart

[root@linux-a ~]# chkconfig --level 35 nfs on //设置NFS自动启动方式;

客户端配置

Linux客户端可以直接通过mount命令挂载NFS文件

[root@linux-a ~]# mkdir /mnt/nsf1

[root@linux-a ~]# mount -t nfs 192.168.0.231:/nfs/frank /mnt/nfs1

[root@linux-a ~]# mount | grep nfs

[root@linux-a ~]# umount /mnt/nfs1

通过修改/etc/fstab文件可以实现开机自动挂载nfs目录

[root@linux-b nfs1]# vim /etc/fstab

/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
192.168.0.231:/nfs/frank /mnt/nfs1 nfs defaults 0 0



转载请注明:

本文转自:http://www.liusuping.com/ubuntu-linux/Redhat-Linux-NFS-setting.html

[8]

http://space.itpub.net/11134237/viewspace-692893

linux系统rsync服务的安装配置及使用

上一篇 / 下一篇 2011-04-19 17:54:30 / 个人分类:Linux命令
查看( 10 ) / 评论( 0 ) / 评分( 0 / 0 )

  服务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服
务器来提供下载服务。当一台服务器上的文件更新后,其它的服务器也需要更新,而且 在更新的时
候应该是只对新增或是修改过的文件进行更新,否则会造成网络带宽和时间的浪费。rsync就是能有
效的保持文件及目录的一致的优秀软件。
  rsync,remote synchronize
  顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的
权限、时间、软硬链接等附加信息,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另
外它还是免费的软件。rysnc的官方网站:http://rsync.samba.org/,可以从上面得到最新的版本。
当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。你的Linux
里并没有安装rsync,你可以按以下的安法自行安装:
  一、安装过程
  1.下载rsync
  目前(2003年9月)最新的rsync版本是2.5.6,从rysnc的官方网站上下载一个回来:
  # wgethttp://ftp.samba.org/ftp/rsync/rsync-2.5.6.tar.gz
  2.解压
  # tar -xzpvf rsync-2.5.6.tar.gz

  3.编译安装
  # cd rsync-2.5.6/
  # ./configure --prefix=/usr/local/rsync
  # make
  # make install
  以上过程没有出现的话就安装好了,现在就有rsync命令可以用了,rsync命令放在
/usr/local/rsync/bin。用rsync命令可以去运行有rsync服务的服务器上抓取资料。
  如果要把当前的机器变成一台rsync服务器的话,就需要继续进行一些配置了。
  二、配置rsync服务
  配置一个简单的rsync服务并不复杂,你需要修改或建立一些配置文件。
  1.rsyncd.conf
  # vi /etc/rsyncd.motd
  rsyncd.con是rsync服务的主要配置文件,它控制rsync服务的各种属性,下面给出一个
rsyncd.conf文件的例子:
  #先定义整体变量
  secrets file = /etc/rsyncd.secrets
  motd file = /etc/rsyncd.motd
  read nly = yes
  list = yes
  uid = nobody
  gid = nobody
  hosts allow = 192.168.100.90 #哪些电脑可以访问rsync服务
  hosts deny = 192.168.100.0/24 #哪些电脑不可以访问rsync服务
  max connections = 2
  log file = /var/log/rsyncd.log
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsync.lock
  #再定义要rsync目录
  [terry]
  comment = Terry 's directory from 192.168.100.21
  path = /home/terry
  auth users = terry,rsync
  [test]
  comment = test rsync
  path = /home/test
  在上面的配置文件中,限定了192.168.100.0/24这个子网中,只有192.168.100.90的机器可以
来访问这台rsync服务器的rsync服务。配置文件的后面部分定义了两个rsync的目录,terry目录
是只有知道terry、rsync两个账号的人才能使用的,而text目录是无需账号就可以访问的。rsync
在定义目录时还提供了一些其它选项,可以作更严格的控制。
  2.rsyncd.secrets
  # vi /etc/rsyncd.secrets
  rsyncd.secrets是存储rsync服务的用户名和密码的,它是一个明文的文本文件,下面给出一个
rsyncd.secrets文件的例子:
  terry:12345
  rsync:abcde
  因为rsyncd.secrets存储了rsync服务的用户名和密码,所以非常重要,因此文件的属性必须
设为600,只有所有者可以读写:
  # chmod 600 /etc/rsyncd.secrets
  3.rsyncd.motd
  # vi /etc/rsyncd.motd
  rsyncd.motd记录了rsync服务的欢迎信息,你可以在其中输入任何文本信息,如:
  Welcome to use the rsync services!
  4.services
  # vi /etc/services
  services并不是rsync的配置文件,这一步也可以不做。而修改了services文件的好处就在于
系统知道873端口对就的服务名为rsync。修改services的方法就是确保services中有如下两行,
没有的话就自行加入:
  rsync  873/tcp  # rsync
  rsync  873/udp  # rsync
  5./etc/xinetd.d/rsync
  # vi /etc/xinetd.d/rsync
  建立一个名为/etc/xinetd.d/rsync文件,输入以下内容:
  service rsync
  {
    disable = no
    socket_type  = stream
    wait      = no
    user      = root
    server     = /usr/local/rsync/bin/rsync
    server_args  = --daemon
    log_on_failure += USERID
  }
  保存后,就可以运行rsync服务了。输入以下命令:
  # /etc/rc.d/init.d/xinetd reload
  这样rsync服务就在这台机器上(192.168.100.21)运行起来了,接下来就是如何来使用它了。
  三、rsync命令的用法
  在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很
多功能选项,下面就对介绍一下常用的选项:
  rsync的命令格式可以为:
  1. rsync [OPTION]... SRC [SRC]... [USER@]HOSTDEST
  2. rsync [OPTION]... [USER@]HOST:SRC DEST
  3. rsync [OPTION]... SRC [SRC]... DEST
  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  6. rsync [OPTION]... rsync://[USER@]HOST[PORT]/SRC [DEST]
  rsync有六种不同的工作模式:
  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST
路径地址包含单个冒号":"分隔符时启动该模式。
  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC
地址路径包含单个冒号":"分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
  下面以实例来说明:
  # rsync -vazu --progressterry@192.168.100.21:/terry//home

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
--stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

  以上命令是保持客户机192.168.100.90上的/home/terry目录和rsync服务器上的terry目录同
步。该命令执行同步之前会要求你输入terry账号的密码,这个账号是我们前面在rsyncd.secrets
文件中定义的。如果想将这条命令写到一个脚本中,然后定时执行它的话,可以使用--password-file
选项,具体命令如下:
  # rsync -vazu --progress --password-file=/etc/rsync.secret
  terry@192.168.100.21:/terry//home
  要使用--password-file选项,就得先建立一个存放密码的文件,这里指定为/etc/rsync.secret。
其内容很简单,如下:
  terry:12345
  同样要修改文件属性如下:
  # chmod 600 /etc/rsyncd.secrets
  四、利用rsync保持Linux服务器间的文件同步实例
  现在假设有两台Linux服务器A(192.168.100.21)和B(192.168.100.90),服务器A中的
/home/terry和服务器B中的/home/terry这两个目录需要保持同步,也就是当服务器A中文件发生
改变后,服务器B中的文件也要对应去改变。
  我们按上面的方法,在服务器A上安装rsync,并将其配置为一台rsync服务器,并将/home/terry
目录配置成rsync共享出的目录。然后在服务器B上安装rsync,因为B只做客户端,所以无需配置。
然后在服务器B,建立以下脚本:
  #!/bin/bash
  /usr/loca/rsync/bin/rsync -vazu --progress --delete
  --password-file=/etc/rsync.secretterry@192.168.100.21:/terry//home
  将这个脚本保存为AtoB.sh,并加上可执行属性:
  # chmod 755 /root/AtoB.sh
  然后,通过crontab设定,让这个脚本每30分钟运行一次。执行命令:
  # crontab -e
  输入以下一行:
  0,30 * * * * /root/AtoB.sh
  保存退出,这样服务器B每个小时的0分和30分时都会自动运行一次AtoB.sh,AtoB.sh是负责
保持服务器B和服务器A同步的。这样就保证了服务器A的所有更新在30钟后,服务器B也一样取
得了和服务器A一样的最新的资料。
  五、其它应用
  rsync除了同步文件及目录之外,还可以利用它来实现对远程网站的远程备份。如果再结合脚本
和Crontab就能实现定时自动远程备份。其可以实现与商业化的备份和镜象产品的类似效果,但完全
免费。

注:本文摘自http://wenku.baidu.com/view/a5202cc4bb4cf7ec4afed011.html

[9]

http://www.mike.org.cn/articles/linux-linux-rsync-server-set-up-under/

Linux┊Linux下架设rsync服务器

  本文主要以Linuxsir.Org上[rsync 服务器架设方法 v0.1b]为蓝本修订而成,在原文的基础上参考其它文章后加入了更多的细节描述。由于时间匆忙,可能会出现笔误的地方。如各位有发现文档错误的地方请留言告知以,以便即时修改!顺带提一下在整理完这个文档后,我认为在两台服务器做文件备份或者传输rsync是个不错的选择。这么说的原因是因为记得前段时间QQ群上某网友说ftp后台上传后更加好一些,也没有做过很大数据量的测试,有比较过的网友请留言告知!

  一、什么是rsync

  rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

  rsync 包括如下的一些特性:

  能更新整个目录和树和文件系统;
  有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  对于安装来说,无任何特殊权限要求;
  对于多个文件来说,内部流水线减少文件等待的延时;
  能用rsh、ssh 或直接端口做为传输入端口;
  支持匿名rsync 同步文件,是理想的镜像工具;

  二、架设rsync服务器

  架设rsync 服务器比较简单,写一个配置文件rsyncd.conf 。文件的书写也是有规则的,我们可以参照rsync.samba.org 上的文档来做。当然我们首先要安装好rsync这个软件才行;

  A、rsync的安装;

  获取rsync

  rysnc的官方网站:http://rsync.samba.org/可以从上面得到最新的版本。目前最新版是3.05。当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。

  软件包安装

  # sudo apt-get install rsync 注:在debian、ubuntu 等在线安装方法;
  # yum install rsync 注:Fedora、Redhat 等在线安装方法;
  # rpm -ivh rsync 注:Fedora、Redhat 等rpm包安装方法;

  其它Linux发行版,请用相应的软件包管理方法来安装。

  源码包安装

  tar xvf rsync-xxx.tar.gz
  cd rsync-xxx
  ./configure –prefix=/usr ;make ;make install 注:在用源码包编译安装之前,您得安装gcc等编译开具才行;
    
  B、配置文件

  rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)

  服务器配置文件(/etc/rsyncd.conf),该文件默认不存在,请创建它。

  具体步骤如下:

  #touch /etc/rsyncd.conf #创建rsyncd.conf,这是rsync服务器的配置文件。
  #touch /etc/rsyncd.secrets #创建rsyncd.secrets ,这是用户密码文件。
  #chmod 600 /etc/rsyncd/rsyncd.secrets #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!
  #touch /etc/rsyncd.motd

  下一就是我们修改rsyncd.conf和rsyncd.secrets和rsyncd.motd文件的时候了。

  设定/etc/rsyncd.conf

  rsyncd.conf是rsync服务器主要配置文件。我们先来个简单的示例,后面在详细说明各项作用。

  比如我们要备份服务器上的/home和/opt,在/home中我想把easylife和samba目录排除在外;

  # Distributed under the terms of the GNU General Public License v2
  # Minimal configuration file for rsync daemon
  # See rsync(1) and rsyncd.conf(5) man pages for help

  # This line is required by the /etc/init.d/rsyncd script
  pid file = /var/run/rsyncd.pid
  port = 873
  address = 192.168.1.171
  #uid = nobody
  #gid = nobody
  uid = root
  gid = root

  use chroot = yes
  read only = yes

  #limit access to private LANs
  hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
  hosts deny=*

  max connections = 5
  motd file = /etc/rsyncd.motd

  #This will give you a separate log file
  #log file = /var/log/rsync.log

  #This will log every file transferred – up to 85,000+ per user, per sync
  #transfer logging = yes

  log format = %t %a %m %f %b
  syslog facility = local3
  timeout = 300

  [rhel4home]
  path = /home
  list=yes
  ignore errors
  auth users = root
  secrets file = /etc/rsyncd.secrets
  comment = This is RHEL 4 data
  exclude = easylife/ samba/

  [rhel4opt]
  path = /opt
  list=no
  ignore errors
  comment = This is RHEL 4 opt
  auth users = easylife
  secrets file = /etc/rsyncd/rsyncd.secrets

  注:关于auth users是必须在服务器上存在的真实的系统用户,如果你想用多个用户以,号隔开,比如auth users = easylife,root

[10]

http://www.webjx.com/server/linux-18297.html

rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用。本文主要讲述的是如何自架rsync服务器,以实现文件传输、备份和镜像。相对tar和wget来说,rsync 也有其自身的优点,比如速度快、安全、高效;

  手动的:

  首先要建立好两台服务器之间的公钥和密钥,那样就不需要每次都输入密码,也可以实现自动了。

  可以先使用rpm -qa |grep rsync 查看rsync是否已经安装,软件下载 Rysnc的主页地址为:http://rsync.samba.org/

  本试验的测试环境(2台,一个服务端,一个客户端)

  rsync服务端的ip:192.168.48.60

  rsync客户端的ip:192.168.48.148

  -----------------------------------------------

  以下先配置服务器端:

  1. 安装rsync包

  # rpm -q rsync

  rsync-2.6.3-1

  2. rsync只使用一个配置文件就是/etc/rsyncd.conf 这个文件一般是没有的,那就自己建一个好了

  # vi /etc/rsyncd.conf

  uid = nobody

  gid = nobody

  max connections = 200

  timeout = 600

  use chroot = no

  read only = yes

  pid file=/var/run/rsyncd.pid

  host_allow =192.168.48.148 //客户端的IP地址写在这里

  #syslog facility = local7

  #log file=/var/log/rsyncd.log

  #rsync config

  #The 'standard' things

  [rsync_gmmold] //定义同步的路径(客户端用这个关键字链接)

  path = /home //需要同步的路径

  comment = gmmold //这个暂不知道

  3.启动服务

  #/usr/bin/rsync --daemon 最后在server端将rsync以守护进程形式启动, rsync启动的端口为 873端口

  4.加入开机启动

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

  5.检查rsync时候启动

  # ps -ef | grep rsync

  6.停止服务

  #kill `cat /var/run/rsyncd.pid`

  以下是客户端的配置:

  1. 安装rsync包

  [root@rhel403 old]# rpm -q rsync

  rsync-2.6.3-1

  2. 与服务器端同步:

  #rsync -ave ssh root@192.168.48.60:/home/ /home/ganfic/laji/ //把60机子的/home下的文件同步备份到/home/ganfic/laji/

  自动同步备份:

  1. 在tmp下建一个b.sh文件

  #vi /tmp/b.sh

  把以下内容写到里面去

  #!bin/sh

  rsync -ave ssh root@192.168.48.60:/home/ /home/ganfic/laji/

  :wq

  2 第2步就要涉及到crontab了,在命令行输入

  #crontab -e

  然后把 * * * * * sh /tmp/b.sh //* * * * *部分代表每一分钟,然后 sh /tmp/b.sh 表示运行 b.sh脚本(在下面我再补充说明),-e 使用环境变量EDITOR或RVISUAL指定的编辑器编辑crontab文件。新创建的crontab文件会放在/var/spool/cron目录下,文件名就是用户名,用cd /var/spool/cron后 会看到用户文件,然后用 vi root(我是在root用户下的)就会看到* * * * * sh /tmp/b.sh已经被转到这里来了。

  这样就完成了,之后就是看看 有没有运行了,打开日志文件,日志文件在 #vi /var/log/cron 就会看到有没有运行了,也可以这样,在没有用自动运行之前,我们是用手动操作的,那时也把60的机子的/home目录下的文件拷了下来,那样,我们进本机的/home/ganfic/laji文件夹里就会看到60机子下/home的内容,把这些内容都删了,然后再过1分钟看会不会把内容再补上,有的话就是成功了。

  Linux 防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。

  iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

  启动rsync服务:

  /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

  $rsync_HOME/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

  补充:

  rsync 的相关知识:

  rsync命令的用法

  在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项:

  rsync的命令格式可以为:

  1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

  2. rsync [OPTION]... [USER@]HOST:SRC DEST

  3. rsync [OPTION]... SRC [SRC]... DEST

  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]

  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

  6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

[11]

http://linux.vbird.org/linux_server/0330nfs.php#What_NFS_NFS


[12]

http://www.itlearner.com/article/4350

使用Linux的rsync命令实现:多服务器镜像同步

实现功能:当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性,只要执行相同的shell脚本,rsync就会自动找出有改动或删除的数据,将其传送到服务器上,使Linux服务器端某目录内的数据跟本地客户端某目录内的数据保持一致。

  ★方式一:

  一、服务器端(例:10.0.0.1*):

  1、创建用户和组

groupadd www -g 48

useradd -u 48 -g www www

mkdir -p /opt/htdocs

chmod +w /opt/htdocs

chown www:www /opt/htdocs

  2、编辑rsync的配置文件

vi /etc/rsyncd.conf

  输入以下内容:

uid=www

gid=www

max connections=10

use chroot=no

log file=/var/log/rsyncd.log

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

[zhangyan]

path=/opt/htdocs

comment = my htdocs

ignore errors

read only = no

hosts allow=10.0.0.21 10.0.0.22

  3、启动rsync服务器端

/usr/bin/rsync --daemon

  二、客户端(例:10.0.0.21和10.0.0.22):

  1、创建一个shell脚本push.sh

vi push.sh

  输入以下内容(10.0.0.1*为要推送到的目标服务器,zhangyan为服务器端rsyncd.conf配置文件中的模块名):

引用

#!/bin/sh

/usr/bin/rsync -vzrtopg --delete $1 10.0.0.10::zhangyan/

/usr/bin/rsync -vzrtopg --delete $1 10.0.0.11::zhangyan/

/usr/bin/rsync -vzrtopg --delete $1 10.0.0.16::zhangyan/

/usr/bin/rsync -vzrtopg --delete $1 10.0.0.19::zhangyan/

注:因为是内部局域网之间传输,这里没有设置密码。

  2、赋予push.sh执行权限

chmod +x ./push.sh

  3、同步推送客户端某个目录中(例:/home/zhanguan/abc)的文件到服务器端的/opt/htdocs目录:

./push.sh /home/zhanguan/abc/

  注意:不要忘了abc后面的/。如果更改的文件太大,可以在上面语句的末尾加上空格和&号,推到后台执行。例:

./push.sh /home/zhanguan/abc/ &

  ★方式二:

  一、服务器端(例:10.0.0.1*):

  1、创建用户和组

groupadd www -g 48

useradd -u 48 -g www www

mkdir -p /opt/htdocs

chmod +w /opt/htdocs

chown www:www /opt/htdocs

passwd www

为www用户设置一个密码。

  二、客户端:

  1、同步推送客户端某个目录中(例:/home/zhanguan/abc)的文件到服务器端的/opt/htdocs目录:

/usr/bin/rsync -vzrtopg --delete /home/zhanguan/abc/ -e ssh www@10.0.0.10:/opt/htdocs/

输入密码,回车即可,无须服务器端启动rsync服务。

[13]

http://home.lupaworld.com/home-space-uid-441-do-blog-id-696.html

Rsync与SSH结合进行文件同步

  Rsync与SSH结合进行文件同步
萧潇枫红

宠辱不惊,闲看庭前野花开落
去留无意,漫随天外浮云卷舒 By : 萧潇枫红
得分 : 尚未评分



转自:DBA Notes

面临的需求:在两个服务器之间进行安全的文件同步。首选的方法用 rsync ,如何与 SSH 集成在一起呢 ? 我以前还真的没试验过。到 del.icio.us 上查找. 现在如果查找技术文档,del.icio.us 成了我的首选资料库,只要被人收录的文章,基本上质量都不错。

实现起来还是相对比较简单的。

1 安装 rsync.
我的操作系统是 AIX ,到 IBM 的站点下载软件.可以直接用 RPM 工具包远程安装。

2 创建公钥并配置

为了避免每次都询问口令(假定 OpenSSH 已经安装就绪),需要创建密钥。用 ssh-keygen 工具。然后把公钥添加到 rsync 的 Server 端相关用户目录下的 .ssh/authorized_keys 文件中。

关于这个过程,前几天看到一段很浅显的解释,稍加改编一下:

SSH 告诉远程 Server 端的 sshd ,它想使用 RSA 认证协议...远程的 sshd 会生成一个随机数,并用我们先前拷贝过去的公钥对这个随机数进行加密。然后, sshd 把加密了的随机数发回给正在 本地服务器上运行的 ssh 。接下来,我们的 ssh 用 专用密钥对这个随机数进行解密后,再把它发回给远程服务器,类似于声明一下:“瞧,我真的有匹配的专用密钥;我能成功的对您的消息进行解密!”最后, 远程 sshd 得出结论,既然人家真的有该专用密钥,就应当让人家登录。因此,我们有匹配的专用密钥这一事实授权我们访问远程服务器
3 测试是否可正常运行

rsync -av -e ssh remote_host:/opt/backup /backup/注:很多文档都提及需要Server端的 Demon 需要启动,如果通过 ssh 的方式是不用的。更为灵活一些。

4 定制 Crontab ,使得任务自动化运行.








rsync 远程备份 --安恒网管员手记


今天在1台机器部署rsync远程同步, 记录一下过程
2台机器在一个vpn子网, 192.168.11.2 和192.168.11.24
在192.168.11.24上面发布/home, 在192.168.11.2上面每天做同步到/home1/192.168.11.24/home.
运行的是debian的sarge版
首先要安装rsync软件,照例,debian安装软件是最简单的:
aptitude install rsync
安装后默认的rsync是关闭的.需要在/etc/default/rsync文件中把它打开。这个文件是debian特有的设置,用开控制rsync是否运行在服务模式,和配置服务端口已经ip地址, 只开服务器端(192.168.11.24)就行了,客户端不用开。
只需要在vpn地址192.168.11.24上面开放这个服务,端口不要用默认的,/etc/defaule/rsync文件如下:
RSYNC_ENABLE=true
# RSYNC_CONFIG_FILE=
RSYNC_OPTS=' --address=123.45.67.89 --port=10001 '

然后配置192.168.11.24机器上面的/etc/rsyncd.conf ,设置提供的rsync服务目录,以及哪些ip可以访问,远程用户对应的本地帐号。
[home]
path = /home
comment = home directory
use chroot = true
uid = 0
gid = 0
host allow 192.168.11.2

还有密码设置文件 /etc/rsync.pass ,2台机器都应该有这文件。内容如下:
username:password

支此,设置就完成了。 在192.168.11.24运行rsync服务。
/etc/init.d/rsync start

然后就可以在 192.168.11.2运行下面这个脚本文件,进行同步。 可以把这个脚本放进/etc/crontab,让它定时进行操作。
#!/bin/bash
rsync --progress --recursive --links --hard-links --times --verbose
--compress --delete rsync://username@192.168.11.24:10001/home /home1/192.168.11.24/home --password-file=/etc/rsync.pass

rsync可以压缩传输,要是在局域网进行同步,可以去掉--compress 关闭压缩功能

[14]

http://hi.baidu.com/xuhonghui126/blog/item/962ae151f329568d8d5430ae.html

NFS---LINUX文件同步简单配置
2007-08-24 15:58概念理解:NFS基于RPC的网络服务,实现Unix主机之间资源共享。
前提:安装了nfs软件包(验证 rpm -qa | grep nfs 與 rpm -qa | grep portmap )

一:服务器的配置
1.开启portmap服务以激活RPC
service portmap start(等效于命令"/etc/rc.d/init.d/portmap start")
2.编辑/etc/exports文件(这个文件里存放了所有要共享的目录,及其权限)
示例:
/home 192.168.0.1/24(ro)
/abc 192.168.0.1(rw,no_root_squash)
文件的详细格式通过命令“man 5 exports”查看
3.启动或重新启动nfs服务器程序(其实是让服务器程序读取/etc/exports文件的配置信息)
service nfs start(等效于命令"/etc/rc.d/init.d/nfs start")
或者
service nfs restart(等效于命令"/etc/rc.d/init.d/nfs restart")
二:客户端的使用(另外一台Linux计算机)
1.开启portmap服务以激活RPC
service portmap start(等效于命令"/etc/rc.d/init.d/portmap start")
2.使用mount命令加载服务器的共享目录
mount -t 192.168.0.X:/home /mnt
(上面的“X”换成你的服务器的IP地址)
3.卸载已加载的文件系统
umount /mnt
三:辅助命令的使用
showmount -e 192.168.0.X
nfsstat


注意: 确认linux防火墙关闭

[15]

http://www.wangjian.info/archives/linux-rsync.html

linux rsync 同步文件夹

       备份是系统管理中最艰巨、最容易被忽略的工作之一,同时也是最重要的工作之一。备份是防御硬件故障、非法入侵和系统安全的最大威胁——终端用户的最后一道防线。

Rsync 是一个小巧的算法的强大实现。它最基本的功能是高效地镜像一个文件系统的能力。使用 rsync,可以灵活地选用一组网络协议,诸如 nfs、smb 或 ssh,方便地让一个文件系统与另一个文件系统保持同步更新。Rsync 的第二个功能,也就是备份系统使用的功能,它可以把已经发生改变或是被删除的文件的老的版本归档。

1.1 软件简介

Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由rsync.samba.org维护。Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。

Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

1.3 命令语法

rsync的命令格式可以为以下六种:

rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

1 同步本机文件测试

rsync –help
你可以看到很多参数,选择自己觉得需要的参数即可。

先测试一下本机同步:

rsync -vzrtopgu –progress /Data/scripts/ /tmp/back_srcipt/

会看到文件在传输,再运行一次,就知道没有运行复制,因为文件没有修改过

增加文件测试:
touch /Data/scripts/test.txt

再运行上面的脚本就可以看到把这个新文件传输过去了,没有复制别的文件。

3 服务器间同步文件

要在服务器间rsync传输文件,需要有一个是开着rsync的服务,而这一服务需要一个配置文件,说明当前运行的用户名和用户组,这个用户名和用户组讲在改变文件权限和相关内容的时候有用,否则有时候会出现提示权限问题。配置文件也说明了模块,模块化管理服务的安全性,每个模块的名称都是自己定义的,可以添加用户名密码验证,也可以验证IP,设置目录是否可写等。

vi /etc/rsyncd.conf

uid=root
gid=root
#这里指定的用户名和用户组是root,权限过高了,出于安全考虑可以用别的

[web_aslibra]
# 这里是认证的模块名,在client端需要指定
path = /Data/webapps/www.aslibra.com/
# 需要做镜像的目录
comment = test
ignore errors
# 可以忽略一些无关的IO错误
read only = yes
# 只读,如果是no,则可以从client发送文件到此服务器
list = no
# 不允许列文件
auth users = aslibra
# 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/rsyncd.pass
# 认证文件名

[web_aslibra_public]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = yes
list = no

[web_aslibra_write]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = no
hosts allow = 192.168.1.2
list = no

服务启动方式:

/Data/apps/rsync/bin/rsync –daemon

第一个模块,用户验证方式,需要指定用户名密码:

在/etc/下新建一文件rsyncd.pass
#vi /etc/rsyncd.pass
aslibra:aslibra.com
一行一个用户,用户名:密码
修改rsyncd.pass权限
chmod 600 /etc/rsyncd.pass
此步省略会导致rsync无法启动

客户端也需要有密码文件,当然路径可以不一样

rsync -rvlHpogDtS –progress –password-file=/etc/rsyncd.pass aslibra@192.168.1.3::web_aslibra /tmp/aslibra.com/

我有时候总是验证不对,不知道是否两个服务器间版本有差异的问题

第二个模块是没有验证的情况,都可读

rsync -rvlHpogDtS –progress aslibra@192.168.1.3::web_aslibra_public /tmp/aslibra.com/

第三个是验证ip,而且可写

发送文件很简单,把后面两个参数反过来就可以,拿上一个例子

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_public

这样会提示出错,因为web_aslibra_public是只读的

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_write

这样就可以了,但要看从哪个IP来的了,否则也失败

下面是摘录的一些详细的参数说明:

rsyncd.conf参数
uid
该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是”nobody”。
gid
该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为”nobody”。
exlude
用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用–exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用”-”和”+”来指定是exclude还是include。
但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exlude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。
exlude from
指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exlude列表定义。
include
用来指定多个由空格隔开的多个rsync并应该exlude的模式列表。这等同于在客户端命令中使用–include来指定模式,结合include和exlude可以定义复杂的exlude/include规则。一个模块只能指定一个include选项,但是可以在模式前面使用”-”和”+”来指定是exclude还是include。
include from
指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。
auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果”auth users”被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在”secrets file”选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
secrets file
该选项指定一个包含定义用户名:密码对的文件。只有在”auth users”被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个。(例如:/etc/rsyncd.secrets)
strict modes
该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。
hosts allow
该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:
o xxx.xxx.xxx.xxx,客户主机只有完全匹配该IP才允许访问。例如:192.167.0.1
o a.b.c.d/n,属于该网络的客户都允许连接该模块。例如:192.168.0.0/24
o a.b.c.d/e.f.g.h,属于该网络的客户都允许连接该模块。例如:192.168.0.0/255.255.255.0
o 一个主机名,客户主机只有拥有该主机名才允许访问,例如:backup.linuxaid.com.cn。
o *.linuxaid.com.cn,所有属于该域的主机都允许。
默认是允许所有主机连接。
hosts deny
指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义

ignore errors
指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过–delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。
ignore nonreadable
指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的

客户端同步命令
v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息

rsync foo/bar/foo.c remote:/tmp/

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

[16]

http://www.now163.net/2011/04/457.html

Linux下Inotify + Rsync文件实时同步
2011年4月19日 now163
跳到评论

一、使用前言*

随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问。为了统一各web服务器之间的数据随时一致,人工方式肯定是不可取,考虑到需要实时同步,进而采用inotify+rsync的方案进行同步!

配置环境:centos 5.3 x86_64

rsync版本:rsync-0.3.7

inotify版本:inotify-tools-3.14

服务器端:192.168.2.79 【也是rsync+inotify服务端】

客户端:192.168.2.100 【需要同步,保持数据一致的服务器】

首先下载所需的软件:

http://blog.mgcrazy.com/download/rsync-3.0.7.tar.gz

http://blog.mgcrazy.com/download/inotify-tools-3.14.tar.gz

二、正式安装:

登陆服务端192.168.2.79,下载文件到:/usr/src 下:

cd /usr/src && wget http://blog.mgcrazy.com/download/{inotify-tools-3.14.tar.gz,rsync-3.0.7.tar.gz} && tar xzf rsync-3.0.7.tar.gz && cd rsync-3.0.7 && ./configure –prefix=/usr/local/rsync &&make &&make install & cd ../ && tar xzf inotify-tools-3.14.tar.gz && cd inotify-tools-3.14 && ./configure &&make &&make install

自此rsync和inotify-tools安装完毕!【可以直接拷贝执行】

三、配置ssh认证:

【目的是为了实时同步的时候不需要输入密码】

在服务端执行这个命令生成公钥:ssh-keygen 一路回车:如下图

然后远程拷贝公钥到客户端服务器并重命名为authorized_keys :

scp -r /root/.ssh/id_rsa.pub root@192.168.2.100:/root/.ssh/authorized_keys 即可!

四、配置实时同步脚本:
#!/bin/sh
src=/home/webapps/www
des=/home/webapps/
ip=192.168.2.100

inotifywait -mrq –timefmt ‘%d/%m/%y-%H:%M’ –format ‘%T %w%f’ -e modify,delete,create,attrib ${src} | while read file
do
for i in $ip
do
/usr/local/rsync/bin/rsync -aP –delete $src root@$ip:$des
done
done

保存为rsync.sh 并给执行权限:chmod o+x rsync.sh 这里可以根据实际情况修改需要同步的路径和客户端ip:192.168.2.100 是客户端的ip。

五、测试结果:

剩下就是在后台一直开着这个脚本了:可以用:screen 后台执行; 然后 ./rsync.sh ;crtl+a +d退出,在服务端修改、创建一个文件,相当于一个动作会触发inotify,如果没有动作,默认它是不同步的,然后系统会自动执行rsync同步到客户端,你可以去客户端查看数据!

本文出自 “【烟雨楼台】” 博客,请务必保留此出处http://wgkgood.blog.51cto.com/1192594/533695

[17]

http://www.linuxshell.cn/bbs/thread-128-1-1.html

使用rsync+inotify配置触发式(实时)远程同步

CentOS 5.3的rsync升级3。X
安装步骤
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum update rsync


两台服务器 系统均为centos5.3,IP为:
192.168.4.167-server1
192.168.4.168-server2
把192.168.4.167的/disk目录实时同步到192.168.4.168的/disk目录下
查看是否支持inotify,从kernel 2.6.13开始正式并入内核,RHEL5已经支持。
看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify
[root@RHEL5 Rsync]# ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_queued_events
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_user_instances
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_user_watches

二.具体操作
1. 生成SSH KEY 让server1 SSH server2不需要密码
(1 Server1# ssh-keygen -t rsa
这个命令生成一个密钥对:id_rsa(私钥文件)和id_rsa.pub(公钥文件)。默认被保存在~/.ssh/目录下。
(2 公钥添加到远程主机的 authorized_keys 文件中
将文件上传到远程主机中
server1#scp ~/.ssh/id_rsa.pub root@192.168.4.168:/root/
SSH到登陆到远程主机,将公钥追加到 authorized_keys 文件中
server2#cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
(3)server2#service sshd restart

2.在server1上安装rsync
Server1# tar –zxvf rsync-3.0.2.tar.gz
Server1# cd rsync-3.0.2
Server1# ./configure
Server1#make
Server1# make install

3.安装inotify
Server1# tar –zxvf inotify-tools-3.13.tar.gz
Server1# cd inotify-tools-3.13
Server1# ./configure
Server1# make
Server1# make install
完成后,注意查看manpage,man inotify 、 man inotifywait
· inotifywait 仅执行阻塞,等待 inotify 事件。您可以监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等)。在 shell 脚本中使用 inotifywait。
· inotifywatch 收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

4.写个inotif_rsync.sh脚本

view plaincopy to clipboardprint?
/bin/sh
src=/disk
des=/
ip=192.168.4.168
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
| while read file
do
rsync -avz --delete --progress ${src} {des" target="_blank">root@${ip}{des} &&
echo "${file} was rsynced"
echo "---------------------------------------------------------------------------"
done
/bin/sh
src=/disk
des=/
ip=192.168.4.168
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
| while read file
do
rsync -avz --delete --progress ${src} {des" target="_blank">root@${ip}{des} &&
echo "${file} was rsynced"
echo "---------------------------------------------------------------------------"
done

将其赋予可执行权限:chmod 755 inotif_rsync.sh
执行此脚本:./ inotif_rsync.sh &
将此脚本写入到/etc/rc.local 让系统自动加载即可.

5.测试
在server1服务器的/disk目录下创建文件或目录,到server2的/disk目录下可以看到即OK
Server1# cd /disk
Server1# touch aaa
Server2# cd /disk
Server2# ls
看到aaa文件即OK!!!!


三. 脚本相关注解:
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件~
-e create,move,delete,modify
监听 创建 移动 删除 写入 事件
rsync -aHqzt $SRC $DST
-a 存档模式
-H 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件
当要排出同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径。详细查看man rsync
当要排除都某个目录的事件监控的处理时,为inotifywait添加--exclude或--excludei参数。详细查看man inotifywait
另:
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
上面的命令返回的值类似于:
10/03/09 15:31 /wwwpic/1
这3个返回值做为参数传给read,关于此处,有人是这样写的:
inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F;do
细化了返回值。

说明: 当文件系统发现指定目录下有如上的条件的时候就触发相应的指令,是一种主动告之的而非我用循环比较目录下的文件的异动,该程序
在运行时,更改目录内的文件时系统内核会发送一个信号,这个信号会触发运行rsync命令,这时会同步源目录和目标目录。
--timefmt:指定输出时的输出格式
--format: '%T %w%f'指定输出的格式
二.关于inotify介绍
Inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的
、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
inotify 可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所说的文件也包括目录。
相关参考:
http://www.ibm.com/developerworks/cn/linux/l-ubuntu-inotify/index.html
以上设置经过虚拟机centos5.3环境测试通过

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiedushi/archive/2009/07/29/4389622.aspx

[18]

http://blog.leezhong.com/project/2010/12/13/inotify-rsync.html

inotify-rsync实时同步脚本

2010-12-13
为什么要写这个脚本

rsync是linux下一款非常强大的同步工具,采用差异同步的方法,只上传文件/文件夹的不同部分,同时可以对上传部分先进行压缩,所以rsync的传输效率是很高的。

但rsync也有缺点,最大的问题就是每次执行rsync命令都会遍历目标目录,当文件不多时,这没什么问题,一旦文件数到了一定规模,那么每次遍历都会消耗很多资源。但事实上改动的文件并不多,如果可以只sync改动的文件,问题就迎刃而解了。

这时就得请出本文的另一个主角:inotify。inotify是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知。要使用inotify,linux的内核版本不能低于2.6.13
~$ uname -a
Linux lzyy-laptop 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010 i686 GNU/Linux

但inotify只提供了C语言接口,不方便调用,所以我们需要先安装inotify-tools,大多数的linux发行版应该都可以直接通过apt-get或yum来安装。
脚本说明与使用

其实前人已经做了类似的工作,不过有些地方尚未完善(如删除文件的同步),于是我改进和简化了一下。
服务端

以下是服务端脚本,运行这段脚本后,这个机器上对应的文件夹将会同步到其他机器上
#!/bin/bash

###########################
# 在这里配置本地文件夹,目标host,目标的rsync_module。rsync_module在同步机器的/etc/rsyncd.conf文件中配置
# 逗号前后不要有空格
sync[0]='/path/to/local/dir,1.2.3.4,test' # localdir,host,rsync_module
# sync[1]='/path/to/local/dir,host,rsync_module'
###########################

for item in ${sync[@]}; do

dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move,delete $dir | while read date time file event
do
echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="rsync -avz --exclude='*' --include=$file $dir $host::$module"
# echo $cmd
$cmd
fi
;;

MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="rsync -avz --delete-excluded --exclude="$file" $dir $host::$module"
# echo $cmd
$cmd
fi
;;
esac
done &
done

运行脚本
cd /path/to/inotify-rsync
chmod +x inotify-rsync.sh
./inotify-rsync

可以把这个脚本设置为开机启动,这样就可以自动同步了。
同步端

同步机器上要做两件事

1. 设置/etc/rsyncd.conf文件
# vim /etc/rsyncd.conf

uid=root
gid=root
# 这个test就是上面脚本中用到的rsync_module名
# path指定同步过来的文件存放的路径
# 如果只允许部分ip的机器进行同步的话,设置allow为 192.168.1.1/100 类似的格式
[test]
path=/path/to/your/dir
allow *

2. 启动rsync daemon
rsync --daemon
其他

金山的周洋同学用C++写了个Sersync,也是利用的inotify+rsync来实现实时同步,有兴趣的可以关注一下

--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢

[19]

posted @ 2011-05-06 14:15  陳聽溪  阅读(691)  评论(0)    收藏  举报