星期五, 四月 23, 2010

用sersync同步文件夹


用sersync同步文件夹

目的:想将不同电脑的文件夹进行同步。原因是在有一台台式机、一台笔记本、一台服务器的情况下,希望通过同步软件做到台式机和笔记本上的某些文件夹是同步的。这样的好处是不需要移动硬盘了,在外的笔记本上做了什么事,可以自动同步到台式机上,然后到了办公室,可以直接在台式机上接着工作,而不用移动硬盘之类的拷贝。毕竟台式机的工作效率还是要高些的(但又缺少移动性)。

步骤:主要参考http://code.google.com/p/sersync/,基本上按照上面的来也就可以了。
以一台台式机和一台服务器为例
1. 两边都安装rsync
1.1 配置(如果没有就新建)/etc/rsyncd.conf
台式机上:
uid=zouyc
gid=zouyc
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock


[work]
path=/home/zouyc/work/
comment = work files
ignore errors = yes
read only = no
hosts allow = 202.114.23.??? 127.0.0.1
hosts deny = *


[work1]
path=/home/zouyc/test1/
comment = xoyo video files
ignore errors = yes
read only = no
hosts allow = 202.114.23.??? 127.0.0.1
hosts deny = *

其中hosts allow可以改成*号


服务器上:
uid = nobody
gid = nobody

#read only = true
#use chroot = true
#transfer logging = true
max connections=36000
use chroot=no
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
#hosts allow = trusted.hosts
#slp refresh = 300

[zou_work]
#uid = zouyc
#gid = zouyc
path = /home/zouyc/work
comment = work
ignore errors = yes
read only = no
hosts allow = *
#hosts deny = *

[leiwh_cloud]
path = /home/leiwh/mycloud
comment = mycloud
ignore errors = yes
read only = no
hosts allow = *
#hosts deny = *

其中uid和gid因为写root就权限太大了,写zouyc那别人同步就也显示为我了,所以写nobody。尝试了一下把这两个值放在比如[zou_work]里边,但是运行不成功。但是nobody不是我,结果导致我自己在服务器上没有权限访问同步后的文件。(这个还需要想办法解决一下。)

1.2 在两边运行它
sudo rsync --daemon

2. 安装sersync

2.1 到 http://code.google.com/p/sersync/ 上下载,此处是2.5beta版(sersync2.5beta1_32bit_binary.tar.gz
解压即可

2.2 修改里边的配置文件
台式机上的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.4">
<host hostip="localhost" port="8008"></host>
<filter start="false">
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
</filter>
<inotify>
<delete start="false"/>
</inotify>
<sersync>
<localpath watch="/home/zouyc/work" debug="false">
<remote ip="202.114.23.???" name="zou_work"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
</rsync>
<crontab start="false" schedule="600">
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="refreshCDN"/>
</sersync>


<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
</head>

注意修改这里即可:
<delete start="false"/>
</inotify>
<sersync>
<localpath watch="/home/zouyc/work" debug="false">
<remote ip="202.114.23.???" name="zou_work"/>
但是要和rsync的配置对应。大致上,相当于rsync是服务器端,sersync是客户端。例如服务器上开了rsync,台式机上的sersync里的地址和name就要和服务器上rsync里的配置的一致,这就是为什么这里的为 name="zou_work"了。当这一对配置好了之后,并运行了sersync之后,就可以从台式机往服务器传文件了,这便的修改都可以同步到服务器上。

由于担心发生这种情况:我新建一个台式机(或者实际上准备在笔记本上新建一个的),是个空文件夹,准备把服务器上的文件夹同步过来,但是不小心操作为先在新的台式机上运行了sersync -r,这时候,就是把新建的台式机上的文件夹同步到服务器上,可是新文件夹里什么都没有啊,于是悲剧诞生:这个命令将会删掉服务器上的所有文件!暂时的办法是:<delete start="false"/>,这个false就不删文件了。但问题是有时候真想删掉什么文件呀,除非手动到两边都删掉。。。


服务器上:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.4">
<host hostip="localhost" port="8008"></host>
<filter start="false">
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
</filter>
<inotify>
<delete start="false"/>
</inotify>
<sersync>
<localpath watch="/home/zouyc/work" debug="false">
<remote ip="192.168.1.???" name="work"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
</rsync>
<crontab start="false" schedule="600">
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="refreshCDN"/>
</sersync>


<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
</head>

2.3 两边运行 sersync
sersync -r -d
如果不在当前目录下运行的话,还要记得加上配置文件,否则在别的文件夹下是找不到配置文件滴

3. 如果一切顺利的话,就可以了!



参考:http://code.google.com/p/lsyncd/
http://code.google.com/p/sersync/

http://blog.chinaunix.net/u/14353/showart.php?id=2098686
貌似说得很不错,可惜没有弄成功,安装了之后,运行lsyncd没有反应。

ifolder, 应该是可以最完美解决问题的,但是却没见人安装成功过。

drbd, 貌似一个网络文件系统还是什么,没搞懂。