Mac OS X:升级rsync到最新版本
Tech Level 3
History:
July 17, 2009: 若干处修辞的修改. 添加了和TimeMachine的比较部分.
rsync简介
rsync是开放许可GPL开放源码的增量数据传输/同步命令行工具。它采用快速算法,只把远程文件和本地文件不同的部分传输,从而得到本地和远程数据同步。作为系统管理员的一个难以置信好用的工具,它已经被接受和使用了好长时间了。
它的特点是:可以传输文件/文件夹/目录树/甚至是整个系统;可以保留符号连接/权限/硬连接/文件属性/设备等;可以是用ssh/rsh等用于传导;支持用于镜象操作的匿名传输等等。
它在类Unix系统中广泛存在和应用,这里引用当前最新版本3.0.6的安装使用,因为它的更新很快,所以请持续关注/更新。了解更多的详细信息,到它的官方网站http://samba.org/rsync/。
在Mac系统上的rsync
我目前的Mac OS X
Leopard是10.5.7版本,它本身所带的rsync版本是2.6.9,在3.0.5之前的版本耗费更多的内存处理文件,并且对没有修改的
resource forks也会传输,更致命的是有可能在处理极多数量文件(不是大文件)的时候造成内存溢出的错误,
所以如果你没有更新,那么应该按照下面的方法更新。
rsync的版本更新
这里涉及很多命令行,所以适合于熟悉Terminal的技术人员.
1. 下载最新版本:
你可以使用浏览器到rsync的官方下载网站下载源程序:http://samba.org/ftp/rsync/
. 也可以使用下面的命令行来下载, 其中主要有两个gz文件:
假设这些下载的文件保存在/Users/Shared/rsync/目录中, 后面我们也将工作在这个目录中.
2. 展开tar.gz文件:
使用下面命令解压缩,或者是用Archive Utility.app来解压缩:
$ tar -xzvf rsync-3.0.6.tar.gz
$ tar -xzvf rsync-patches-3.0.6.tar.gz |
在/Users/Shared/目录中将出现rsync-3.0.6的文件夹。
3. 编译安装:
用下面的命令来打补丁保留Mac OS X的元数据
$ patch -p1 <patches/fileflags.diff
$ patch -p1 <patches/crtimes.diff
|
配置编译并安装
$ ./prepare-source
$ ./configure
$ make
$ sudo make install
|
4. 版本验证
$ /usr/local/bin/rsync --version
|
应该输出如下:
rsync version 3.0.6
protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 32-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, file-flags
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details. |
注意, rsync自动安装到/usr/local/bin/目录中, 而Mac OS X自带的rsync版本在/usr/bin/目录中,你可以添加路径或者将新版本的移动到/usr/bin/目录中.
5. 清理
这时候已经用不着保存这些下载文件和源程序了,删除他们:
$ rm -fr /Users/Shared/rsync
$ sudo rm /usr/share/man/man1/rsync.1.gz
|
因为最后的安装脚本没有考虑到需要删除原来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: 显示备份字节数,百分比,传输速度等信息
更多的参数和使用细则可以参考:
- 使用rsync -h或者man rsync查看帮助信息。
- rsync命令的网上帮助:http://samba.org/ftp/rsync/rsync.html
- rsync作为伺服程序的在线帮助:http://samba.org/ftp/rsync/rsyncd.conf.html
应用实例:
1. 简单的在一个主机上的数据备份:
比如将/Users/Shared目录复制到/Users/Shared.Backup
$
/usr/local/bin/rsync -aANHXxs --progress
/Users/Shared/ /Users/Shared.Backup/
|
2. 复制整个Mac OS X系统到另外一台机器的目录中:
假设远程机器和目录是:remote_address:/Volumes/Backup/, 用户使用root
$
/usr/local/bin/rsync -aNHAXx --protect-args --fileflags
--force-change --rsync-path="/usr/local/bin/rsync" /
root@remote_address:/Volumes/Backup/
|
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类似的第三方的备份/同步软件吗?
我说,对于普通用户,时间机器提供了功能强大稳定的用户数据备份功能,而且是在最少的用户干预情况下(用户到System
Preferences里面,拨动那个开关就可以打开或者关闭它,然后就让它自己工作了),这对于普通用户的使用感受来说,简直是美妙极了。相比较上面的
一大堆"非人性化的恶梦般的"参数,我很佩服时间机器的开发人员对于用户需求的高度概括抽象能力和人性化的表达能力以及付诸实施的执行力,这方面微软的备
份和恢复功能,对于用户来说多少有点复杂和不够人性化了。
但是对于企业用户,或者说企业的系统管理员来说,那简直像一个玩具,无法达到企业备份需求.
当然了,时间机器并不是不可能在企业应用中使用,它作为一种用户个人辅助备份选择,同样可以发挥自己的桌面备份作用,至少是一个选项。
而rsync不仅提供了强大的功能,而且用户可以进行再次开发,或者给于GUI的包装,改进用户的使用体验,它很好地支持网络用户的需求,也给于了管理员
很多自由度以及对于细节的控制。结合其它的技术,可以实现完全/增量备份,定时备份,远程备份恢复,用户数据同步,可以利用rsync
service而对远程数据操作等等操作.
注释:
这里的命令行都以$为开始,用来标示后面是用户输入的命令的内容,用户输入命令的时候只输入后面的命令部分;有可能因为排版问题,命令会自动换行。
分享到:
相关推荐
linux 下rsync文件夹同步配置,可以定时。
Project Sync:基于rsync的同步项目;支持监控改动,并自动同步
MacOSX系统技巧:用Rsync备份文件.docx
亲测,有疑问可以加我,共同讨论学习!
同步时间机器使用rsync从Mac OS X备份模仿Time Machine如何起跑使用绝对路径和$EXCLUDE任何排除项定义$SOURCE和$DESTINATION变量。 安排它使用cron或launchd运行,或者手动运行。 请记住,尾部斜杠对rsync 。 如果您...
14:rsync_sersync实现数据实时同步.docx
rsync远程同步
图解rsync数据同步部署文档.docx
POE::Component::SmokeBox::Uploads::Rsync - 通过 rsync 获取上传的 CPAN 模块 版本 This document describes v1.001 of POE::Component::SmokeBox::Uploads::Rsync - released November 03, 2014 as part of POE-...
rsync使用–include参数与–exclude参数来实现同步指定目录,并且–exclude目录放在后面。 例如: linux上文件目录 代码如下: ls /usr/local/apache/htdocs/site aa bb cc dd ee .. zz 只想同步aa,bb,ee这三个目录...
RSYNC软件介绍: rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下: 可以镜像保存整个目录树和文件系统。 可以很容易做到保持原来文件的权限、时间、软硬链接...
rsync数据同步手册.pdf
rsync同步的艺术,学习rsync的很好的例子
3.6: rsync同步操作 、 inotify实时同步 、 数据库服务基础 、 管理表数据(1).docx
Mac OS X 备份实用程序有关 Mac OS X 的更多信息和 GUI 程序,请访问: : 这个项目最初是作为一个简单的 shell 脚本包装器。 rsync 是执行备份的绝佳工具,因为它将所有文件从源位置同步到目标目录,同时保持其大...
在互联网中,Windows环境中使用Rsync远程同步数据;使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他rsync主机同步。
平台前端tengine作为代理,后端两台IIS 7提供应用,为减少IIS的压力,使用两台IIS 7作为负载均衡,因此需要保证后端两台IIS 7的配置文件保持一致,在更新服务器时,在一台服务器上更新文件自动同步至另一台。
rsync任务-提供有关rsync任务的重要信息的包装器:进度,剩余项目,总项目和速度 任务包装器的用法 package main import ( "fmt" "grsync" "time" ) func main () { task := grsync . NewTask ( "username@...
rsync远程同步软件包
RsyncOSX:用于rsync的macOS GUI