之前都是自己写了一个AppleScript,来做MACBook和PC之间的文件夹网络同步。要求的效果其实非常简单,就是将办公PC的文档备份到笔记本上一个加密的DMG里。AppleScript的流程也非常简单,无非就是切换网络、通过smb挂载PC的共享目录、判断并加载dmg,最后通过rsync来抓取PC上的内容。当然,我希望是无线搞定,不用通过U盘等媒介,并且得增量实现,否则每次几个G的文档能把人折磨死。
但不幸的是,上周突然发现DMG的文件比PC文件夹内容要少。经过仔细的检查,发现问题出在Samba上,某些子目录通过smb协议共享后会丢失,而更奇怪的是,这些文件夹在加载后,通过命令行是能看到的,只是属性不对:
ernMacBook:广东方案 ern$ ls -la
total 69584
drwx——@ 1 ern staff 16384 4 2 18:52 .
drwx—— 1 ern staff 16384 4 2 18:56 ..
似乎就是这个“.”目录的特殊属性限制了它的可见性。搜索各大网站看到,可能和目录的名字有关系(samba协议本身有要求),也可能和samba本身的bug有关系,反正就是无法解决。
假期研究了一下,发现还是要通过Rsync协议来处理。在Windows PC上安装Rsync服务端,MACBook作为客户端同步过来。除了对顶层目录要求是英文以外,其他没有任何限制,今天测试通过。
下面来介绍下实现过程:
1. MAC OS X自带了Rsync客户端,如果不是版本控的话,就可以直接用了,从测试来看,能够正常使用。如果你喜欢用最新版,那得麻烦下载源代码然后编译安装了。下载地址:http://rsync.samba.org/,目前最新版本是3月份的3.0.8版。
2. Windows的服务端程序叫cwrsync,到这里下载:http://www.itefix.no/i2/node/10650。其实质是通过cygwin来支持。在Windows 7上正常安装,只需要一路next即可,当然安装目录是可以自己指定的,否则默认是在C盘ISW下,安装目录自己记住哦,后面会用到。第一次安装时还会建立一个名为RSyncServer的Windows服务。建议在提示一个用户名、密码的对话框里不要更改服务名和密码,否则你会发现无法正常安装服务。
3. 要正常使用Rsync的服务端,关键是两个步骤,一个是配置Rsync.conf,另一个启动服务。现在到安装目录里打开这个conf文件吧,如下修改(##后面是本人添加的说明):
pid file = rsyncd.pid
lock file = rsync.lock
log file = rsyncd.log ##日志文件名
uid = 0
gid = 0
use chroot = false
max connections = 4 ##最大连接数,这个看你的用途,只是单点对单点同步的话,可以不用设很大[workdocs] ##模块名,这个名字在后面调用的时候会用到,可以自己随便定义。一个服务端可以配置多个目录供同步,就通过这个模块名来区分
path =/cygdrive/d/work ##这个要注意,这是你准备用来同步的源文件夹,都是以/cygdrive/开头,后面表示是D盘的work文件夹,自己改吧。但要注意,这里必须是英文,放中文是无法同步的
ignore errors # 可以忽略一些无关的IO错误
auth users = testuser ##允许同步的用户名,如果没有这行, 则表明是匿名
secrets file = etc/testuser.passwd ##这个文件里包含了上面定义的用户对应的密码
4. 在安装目录的etc目录下新建一个文本文件,改名为testuser.passwd,内容如下:
testuser:testpassword
这表示用户名是“testuser”,密码是“testpassword”,中间用一个半角冒号分隔。
至此,Windows服务端配置就搞定了。进入管理工具——服务,打开RsyncServer服务,建议配置成自动启动,免得每次都得手动打开。
5. 确保你的MAC和PC网络上互通(Rsync默认走873端口,你也可以在上面的conf文件里通过“port = nnnn”来修改)。
6. 在MAC打开终端程序,输入:
/usr/local/bin/rsync -avE –delete –progress –ignore-errors testuser@PC的IP::workdocs 目的文件夹路径
其中:
–progress会提示你同步每个文件的进度;
-v是给出详细提示信息,你可以看到正在同步哪个文件;
–delete是在同步的同时将你目的文件夹中有而源文件夹中没有的文件删除;
两个冒号后面跟模块名。
如果一切正常,在语句执行5秒左右吧,就会提示你输入密码,正确输入后就开始同步了。
如果你需要自动执行,不提示密码,那么还可以加上“–password-file=filename”这个参数。filename是你需要新建的一个密码文件,这也是一个纯文本文件,里面只有你服务端的密码(对比上面的配置,这里不需要写用户名和两个冒号)。然后chmod为600即可。
好了,如果你正常照做的话,现在已经可以享受胜利成果了,扔掉你手边的U盘吧,也不用纠结NTFS还是HFS+了。
BTW:其实Rsync就是跨平台的,so,PC和PC之间、和Linux之间等等都是OK的,设置也和上面差不多。
Goodspeed
2011年6月12日 @ 17:13
各个系统同步的话,建议使用Unison。
ern
2011年6月12日 @ 17:16
@Goodspeed
是,一直想抽空搞下这个unison。不过好像很久没更新了,不知道支持如何。