# Mac OS X:升级rsync到最新版本
Tech Level 3
History:
July 17, 2009: 若干处修辞的修改. 添加了和TimeMachine的比较部分.
### rsync简介
rsync是开放许可GPL开放源码的增量数据传输/同步命令行工具。它采用快速算法,只把远程文件和本地文件不同的部分传输,从而得到本地和远程数据同步。作为系统管理员的一个难以置信好用的工具,它已经被接受和使用了好长时间了。
[![](image/56a5a6ac6fb84.jpg)](http://docs.google.com/File?id=dfm3jbw9_186d87gv7gw_b)
它的特点是:可以传输文件/文件夹/目录树/甚至是整个系统;可以保留符号连接/权限/硬连接/文件属性/设备等;可以是用ssh/rsh等用于传导;支持用于镜象操作的匿名传输等等。
它在类Unix系统中广泛存在和应用,这里引用当前最新版本3.0.6的安装使用,因为它的更新很快,所以请持续关注/更新。了解更多的详细信息,到它的官方网站http://samba.org/rsync/。
### 在Mac系统上的rsync
我目前的Mac OS XLeopard是10.5.7版本,它本身所带的rsync版本是2.6.9,在3.0.5之前的版本耗费更多的内存处理文件,并且对没有修改的resource forks也会传输,更致命的是有可能在处理极多数量文件(不是大文件)的时候造成内存溢出的错误,所以如果你没有更新,那么应该按照下面的方法更新。
### rsync的版本更新
这里涉及很多命令行,所以适合于熟悉Terminal的技术人员.
### 1. 下载最新版本:
你可以使用浏览器到rsync的官方下载网站下载源程序:[http://samba.org/ftp/rsync/](http://samba.org/ftp/rsync/ "http://samba.org/ftp/rsync/"). 也可以使用下面的命令行来下载, 其中主要有两个gz文件:
<table id="cor." style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">$ mkdir -p /Users/Shared/rsync<br/>$ cd /Users/Shared/rsync<br/>$ curl -O http://http://samba.org/ftp/rsync/<a href="http://samba.org/ftp/rsync/rsync-3.0.6.tar.gz">rsync-3.0.6.tar.gz</a><br/>$ curl -O http://http://samba.org/ftp/rsync/<a href="http://samba.org/ftp/rsync/rsync-patches-3.0.6.tar.gz">rsync-patches-3.0.6.tar.gz</a></td></tr></tbody></table>
假设这些下载的文件保存在/Users/Shared/rsync/目录中, 后面我们也将工作在这个目录中.
### 2. 展开tar.gz文件:
使用下面命令解压缩,或者是用Archive Utility.app来解压缩:
<table id="um5b" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">$ tar -xzvf rsync-3.0.6.tar.gz<br/>$ tar -xzvf rsync-patches-3.0.6.tar.gz</td></tr></tbody></table>
在/Users/Shared/目录中将出现rsync-3.0.6的文件夹。
### 3. 编译安装:
用下面的命令来打补丁保留Mac OS X的元数据
<table id="on3g" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ patch -p1 <patches/fileflags.diff<br/>$ patch -p1 <patches/crtimes.diff</span></td></tr></tbody></table>
配置编译并安装
<table id="jqke" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ ./prepare-source<br/>$ ./configure<br/>$ make<br/>$ sudo make install</span></td></tr></tbody></table>
### 4. 版本验证
<table id="guor" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;"><span style="font-family: Courier New; color: #660000;">$ /usr/local/bin/rsync --version</span><br/></span></td></tr></tbody></table>
应该输出如下:
<table id="pz8g" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%">rsync version <strong>3.0.6</strong> protocol version 30<br/>Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.<br/>Web site: http://rsync.samba.org/<br/>Capabilities:<br/> 64-bit files, 32-bit inums, 32-bit timestamps, 64-bit long ints,<br/> socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,<br/> append, ACLs, xattrs, iconv, symtimes, file-flags<br/><br/>rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you<br/>are welcome to redistribute it under certain conditions. See the GNU<br/>General Public Licence for details.</td></tr></tbody></table>
注意, rsync自动安装到/usr/local/bin/目录中, 而Mac OS X自带的rsync版本在/usr/bin/目录中,你可以添加路径或者将新版本的移动到/usr/bin/目录中.
### 5. 清理
这时候已经用不着保存这些下载文件和源程序了,删除他们:
<table id="zv_o" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New; color: #660000;">$ rm -fr /Users/Shared/rsync</span><br/><span style="font-family: Courier New; color: #660000;">$ sudo rm /usr/share/man/man1/rsync.1.gz</span><br/></td></tr></tbody></table>
因为最后的安装脚本没有考虑到需要删除原来Mac OS X自带的rsync.1 man文件,所以上面脚本的最后一行删除了旧版本的man文件。
### 命令解释
### 1. 基本形式
它的命令行的基本形式是:
rsync [OPTIONS] SRC [SRC]... DEST
其中
[OPTIONS]是参数
SRC [SRC]... 可以指定多个文件源
DEST 最后一个参数指定目的地
当然文件源SRC和目的地DEST可以是本地,可以是其它主机,可以是rsync服务程序地址等.
### 2. 常用参数:
-a:这个参数基本上包括了多数情况需要的复制选项,它等于选项-rlptgoD,
-r 所有子目录,
-l 复制符号连接
-t 保留文件修改日期
-g 保留group属性
-o 保留拥有者属性
-D 复制设备和特殊文件
-p 保留权限属性
-A, --acls:复制文件的ACLs
-N, --crtimes :保留生成日期属性
-X, --xattrs: 保留扩展属性(extended attributes)
--fileflags:复制文件的状态标志(Mac OS X使用)
--force-change: 取消目的地的文件和目录的系统和用户的immutable标志
{上面这些尤其对Mac OS X文件系统重要}
-H, --hard-links:复制硬连接
-q, --quiet:安静模式,不输出信息
-x, --one-file-system: 禁止复制跨文件系统的文件
-s, --protect-args: 不分析文件名,直接拷贝他们
### 3. 应用场景参数
下面根据不同的应用场景做解释
- 对于更新大文件可以使用--inplace选项,默认的是复制新文件,在确认复制完毕后,在删除原来旧的已经存在的文件,这样对于大文件,基于空间的考虑,可能造成备份的错误。
- 有的情况是只需要更新已经存在的文件,那么使用--existing, --ignore-non-existing选项
- 如果是移动而不是备份,可以是用--remove-source-files删除源文件
- 有的时候可能需要备份制定的文件,指定的文件在一个文件列表中,那么可以是用参数:--files-from=FILE
- 增量复制的时候,可以指定完全备份和其它增量备份的路径,这样本次的增量备份,只备份以前以来改变的文件,选项参数为:--compare-dest=DIR
- 压缩传输,这样数据被压缩后传输,适用于低速网络,-z, --compress
- 测试使用:
-n, --dry-run:这个参数只是模拟备份过程,而不是实际传输数据
-v,--vverbose:显示备份过程
-i, --itemize-changes:输出一个文件变化汇总。
--progress: 显示备份字节数,百分比,传输速度等信息
更多的参数和使用细则可以参考:
1. 使用rsync -h或者man rsync查看帮助信息。
1. rsync命令的网上帮助:http://samba.org/ftp/rsync/rsync.html
1. rsync作为伺服程序的在线帮助:http://samba.org/ftp/rsync/rsyncd.conf.html
### 应用实例:
1. 简单的在一个主机上的数据备份:
比如将/Users/Shared目录复制到/Users/Shared.Backup
<table id="g56i" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="font-family: Courier New;">$ </span><span style="font-family: Courier New;">/usr/local/bin/rsync -aANHXxs --progress </span><span style="font-family: Courier New; color: #660000;">/Users/Shared/ /Users/Shared.Backup/</span><br style="font-family: Courier New; color: #660000;"/></td></tr></tbody></table>
2. 复制整个Mac OS X系统到另外一台机器的目录中:
假设远程机器和目录是:remote_address:/Volumes/Backup/, 用户使用root
<table id="y8hl" style="width: 100%;" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000"><tbody><tr><td width="100%"><span style="color: #000000;">$ </span>/usr/local/bin/rsync -aNHAXx --protect-args --fileflags--force-change --rsync-path="/usr/local/bin/rsync" /root@remote_address:/Volumes/Backup/<br/></td></tr></tbody></table>
3. 使用ssh避免在远程机上的认证过程:
下面假设使用root用户作为远程复制的用户.
首先检查当前是否已经存在认证钥匙对:
| $ sudo ls -la /var/root/.ssh |
|-----|
如果有两个文件存在:id_dsa和id_dsa.pub, 如果不存在则运行下面的命令来生成
| $ sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "this is for rsync over ssh" |
|-----|
而id_dsa是私有钥匙,id_dsa.pub是公开钥匙.
现在就把id_dsa.pub公开钥匙添加到远程目标机上的"/var/root/.ssh/authorized_keys"中, 也可以用下面的命令添加:
| $ sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_address 'cat - >> ~/.ssh/authorized_keys' |
|-----|
完成上面的步骤两个机器就可以使用root用户互相信任了。
4. 使用Launchd来实现自动备份<待后续>
### 比较: rsync和Apple的Time Machine
大家不免要想到好多其它的备份软件,其中对于普通Mac OS X Leopard用户来说,当然要说是苹果开发随Mac OS X Leopard发布的"时间机器"(Time Machine)了.
有了时间机器还用rsync类似的第三方的备份/同步软件吗?
我说,对于普通用户,时间机器提供了功能强大稳定的用户数据备份功能,而且是在最少的用户干预情况下(用户到SystemPreferences里面,拨动那个开关就可以打开或者关闭它,然后就让它自己工作了),这对于普通用户的使用感受来说,简直是美妙极了。相比较上面的一大堆"非人性化的恶梦般的"参数,我很佩服时间机器的开发人员对于用户需求的高度概括抽象能力和人性化的表达能力以及付诸实施的执行力,这方面微软的备份和恢复功能,对于用户来说多少有点复杂和不够人性化了。
但是对于企业用户,或者说企业的系统管理员来说,那简直像一个玩具,无法达到企业备份需求.
当然了,时间机器并不是不可能在企业应用中使用,它作为一种用户个人辅助备份选择,同样可以发挥自己的桌面备份作用,至少是一个选项。
而rsync不仅提供了强大的功能,而且用户可以进行再次开发,或者给于GUI的包装,改进用户的使用体验,它很好地支持网络用户的需求,也给于了管理员很多自由度以及对于细节的控制。结合其它的技术,可以实现完全/增量备份,定时备份,远程备份恢复,用户数据同步,可以利用rsyncservice而对远程数据操作等等操作.
### 注释:
这里的命令行都以$为开始,用来标示后面是用户输入的命令的内容,用户输入命令的时候只输入后面的命令部分;有可能因为排版问题,命令会自动换行。
- 前言
- Mac OS X:如何将个人文件夹从默认卷移到其他卷(适合OSX10.5 Leopard)
- Mac OS X:Finder菜单中的Connect to Server选项禁止和打开
- Mac OS X: 苹果机支持的分区表类型及问题解决
- Mac OS X: 偏好Preferences基础(1)
- Mac OS X: 如何变更Office for Mac的注册码
- Mac OS X: 禁止/防止网络用户复制app程序到桌面
- Mac OS X: 用户帐户的选择
- Mac OS X: 实用脚本程序(bash scripts)系列
- Mac OS X: 共享iPhoto图片
- Mac OS X: 实用脚本程序(bash scripts)系列-2
- Mac OS X: 实用脚本程序(bash scripts)系列-3
- Mac OS X: 实用脚本程序(bash scripts)系列-4
- Mac OS X: 实用脚本程序(bash scripts)系列-5
- Mac OS X: 实用脚本程序(bash scripts)系列-6
- Mac OS X:升级rsync和同步应用实例
- Mac OS X: XAMP在Mac上的实现
- Mac OS X瘦身多法
- Mac OS X 10.5快速系统部署实践-计划(2) v1
- Mac OS X 10.5快速系统部署实践-制作核心系统镜像(1) v1
- Mac OS X数据备份方案一例
- Mac OS X数据备份方案一例(2)
- Mac OS X 10.5快速系统部署实践-制作核心系统镜像(2) v1
- Mac OS X: 打印系统治疗
- Mac OS X:禁止崩溃报告
- Mac OS X:Snow Leopard的几个改动(管理员相关)
- Mac OS X排错:雪豹的最新更新Airport可能不支持无线802.11n网络
- Mac OS X:雪豹内置支持读写NTFS卷
- Mac OS X:定制生成新用户的程序包
- Mac OS X:在Windows里面使用命令行设置启动系统
- Mac OS X: 实用脚本程序(bash scripts)系列-7
- Mac OS X:一种从APP中获得PKG的方法
- Mac OS X: bash脚本实现添加无线SSID(Update2009-10-09)
- Mac OS X: 实用脚本程序(bash scripts)系列-8
- Mac OS X 10.5快速系统部署实践-制作核心系统镜像(4) v1
- Mac OS X: 彻底删除GeekTool(bash脚本)
- Mac OS X: 实用脚本程序(bash scripts)系列-9
- 把你的Leopard变成Mac OS X的系统发布服务器(1)
- 把你的Leopard变成Mac OS X的系统发布服务器(2)
- 把你的Leopard变成Mac OS X的系统发布服务器(3)
- Mac OS X: 访问控制远程CUPS服务
- Mac &amp; Win混合平台访问和工具
- Mac OS X: DeployStudio更新v1.0rc16
- Mac: 想当Apple菜鸟不容易(1)
- Mac: 想当 Apple菜鸟不容易(2)
- Mac: 想当 Apple菜鸟不容易(3)
- Mac: 想当 Apple菜鸟不容易(4完)
- Mac电脑上处理摄像机上的存储内容
- Mac OS X: Google自动更新程序的卸载
- 雪豹系统和SMB不兼容的问题的解决汇总
- Mac OS X: 实用脚本程序(bash scripts)系列-10
- Mac OS X:MagicPrefs介绍
- Mac OS X: 系统部署后程序安装的用户提示
- Mac OS X:开启单程序模式
- Mac OS X: 在脚本里关闭Airport
- Mac笔记本电池:十点建议和其它
- Mac OS X: Launchd执行程序的一个例子
- Mac OS X:修改SMART Utility期限限制
- Mac OS X:网络用户环境个性配置实例
- Mac OS X:强制退出CD/DVD盘
- Mac OS X: launchd plist在线编辑器
- Mac OS X: 实用脚本程序(bash scripts)系列-11
- Mac OS X: 实用脚本程序(bash scripts)系列-12
- Mac: 卸载Safari 5.0.2
- Mac OS X: 实用脚本程序(bash scripts)系列-13
- Mac OS X: 文件图标制作和变更(Resource Fork)
- Mac OS X 10.6.6更新之后NTFS只读的解决
- Mac: 网络用户遇到Adobe Reader 9.x/10.x异常退出的解决
- Mac OS X: airport命令的参数
- Mac OS X的Spotlight综述
- Mac OS X:AFP和SMB共享配置详细配置
- Mac OS X:详细解读Munki和应用
- Mac OS X:显示/设置分辨率的命令(源程序)
- Mac OS X: 是否升级到Lion?
- OSX: 禁止Flash Player 10.3自动更新
- OSX脚本:禁止系统自动添加AppStore图标到用户Dock上
- 狮子GM版本的安装
- OS X Lion狮子安装盘的初步研究
- OS X Lion狮子的恢复盘的删除二法
- OSX: Finder的侧边栏(Sidebar)不显示已装载的网络共享
- OSX:隐藏文件或文件夹
- OS X: 实用脚本程序(bash scripts)系列-13
- OS X: 实用脚本程序(bash scripts)系列-14
- OSX:Lion支持登录窗口的Policy Banner
- OSX: 让狮子说中文