|
此文章由 芝麻绿豆 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 芝麻绿豆 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有些很出色的软件,如super flexible sync,非常好用,但是是收费的。
在盲目的寻找中,发现了rsync这个几乎所有linux和mac都标配的同步软件。
rsync功能强大得令人发指,并且采用一种三角算法,能够比较两个要同步的文件,只传输他们之间不同的那部分。这个算法好像还是个澳洲程序员发明的。
于是我开始了rsync的折腾之旅。几乎每个参数的使用,每个步骤的调试都充满了失败和无数的google 与尝试。单是log就写了好几页纸。
我下面要写的,应该是大虾们不屑一提的常识,但是可能对热爱折腾的菜鸟有所帮助。
----
首先,需升级系统自带的rsync。我的是2.8.9,在3.0.5版以前,有很多明显bug
具体方法参考
http://blog.csdn.net/afatgoat/article/details/4353523
帖子说的好像是3.0.6版,把相应数字换成现在最新的3.0.8版即可。
----
如果在升级时无法编译,那么说明需要安装xcode
找到系统盘直接安装即可,这是mac程序员的软件包,系统没有默认安装。
装完之后应该就可以编译,完成rsync安装了。之后别忘了把新装的(在/usr/local/bin中)覆盖原有的(在usr/bin中)
否则还是原有的rsync在起作用(因为path环境变量还是指向原有的),除非每次指定rsync的新目录。
查看rsync 版本:
rsync --version
----
现在,需要在mac和nas之间使用一组ssh key来确保不需要每次输入密码。
方法如下
Open Terminal and generate an ssh keypair:
ssh-keygen -t rsa
(hit return for all questions, do not enter a password when asked)
Copy the public key to the backup server’s root directory. You must have shell access and ssh enabled on your remote server:
scp ~/.ssh/id_rsa.pub <username>@<your-server.com>:~/
Login to the server shell:
ssh <username>@<your-server.com>
and enter your password to login.
If the server hasn’t yet been been used for for ssh keys, we need to type these lines (enter after each one):
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
rm id_rsa.pub
These commands create a .ssh directory on the NAS, then adds the key (that we copied over in step 2 using “scp”) to the NAS’ authorized_keys file, then removes the key from the NAS’ root. You may get an error after the “mkdir” step that the folder exists. This is fine.
Now we have to set up our permissions on the NAS:
chmod go-w ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
----
然后是选用适合你的参数,我使用如下
--archive \
--recursive \
--verbose \
--progress \
--update \
--super \
--exclude-from='/Users/xxxx/backup-daily-exclude.sh' \
--files-from='/Users/xxxx/backup-daily-include.sh' \
参数解释:
-archive,存档,其实一堆参数的集合
-recursive,这个参数本来是包含在-archive里的,但是由于后面使用了-files-from,这个参数需要单独再提出来使用一次,在这里作用是包含子目录。
-verbose,增量拷贝,不然每次发现文件不同都要重新拷贝一次整个文件
-progress,显示每个文件的拷贝进度
-update, 跳过nas上更新的文件。极个别的时候我需要直接在服务器上修改文件。
-super,这个参数保证了用户owner和组别是一致的。下面详述。
-exclude-from,排除文件,这里我用一个文件来列出排除文件清单
-files-from,要同步的文件清单,这里同样用一个文件来列出,这样方便将来修改。
-----
在终端下实验无误后,便可以将命令整理成脚本,并且利用ical定时运行了。
具体参考
http://garrickvanburen.com/archi ... l-and-applescript-2
----
注意,如果要保证拷贝到nas上的文件和源文件有相同的owner和group属性,则在nas上需要设置和拷贝源机器相同的用户名和组别。
在mac终端下查看组别命令:
$ dscl . list /groups
除此之外,还需要在让rsync以root名义运行,参数-super就是这个作用。
不过这个参数在非局域网中比较危险,因此还有别的办法,如使用-fake-super参数。相关讨论看这个帖子
http://lists.samba.org/archive/rsync/2002-March/001999.html
----
所有的filter,包括include,exclude等,都是以源文件为根目录的,因此在指定时不能带有这个目录的父目录及以上目录,比如,指定的拷贝文件夹是/User/xx/Pictures, 要排除的目录是/User/xx/Pictures/temp/,
那么制定exclude时,直接使用temp/, 甚至/temp/, 这时,/temp/并不是指系统根目录的temp文件夹。
----
其他文件路经使用全局路经,
如排除文件,使用:/User/xx/scripts/exclude.sh。
----
当脚本做好后,要给他赋予可执行性,否则applescript无法调用这个脚本,参看
http://www.douban.com/note/74637526/
----
多用-n参数,这个参数进行模拟运行,给出错误反馈。
----
最后,如果你像我一样是个菜鸟,那么一定要先看一遍rsync的帮助文档,再来看上述提示,这时你会发现每一条提示都很有用。而不是像现在一样一头雾水。
帮助文档:
http://www.samba.org/ftp/rsync/rsync.html |
评分
-
查看全部评分
|