文件服务器为ubuntu的,客户端为windows的环境
sudo apt-get install rsync xinetd
/etc/default/rsync
启动rsync
作为使用xinetd
的守护进程# 打开rsync
sudo vim /etc/default/rsync
# 编辑rsync
RSYNC_ENABLE=inetd
# 创建并打开文件
sudo vim /etc/xinetd.d/rsync
# 编辑内容
service rsync
{disable = nosocket_type = streamwait = nouser = rootserver = /usr/bin/rsyncserver_args = --daemonlog_on_failure += USERID
}
# 创建并打开文件
sudo vim /etc/rsyncd.conf
# 编辑配置信息
max connections = 2
log file = /var/log/rsync.log
timeout = 300[share] # 模块名
comment = Public Share
# path为需要同步的文件夹路径
path = /home/share
read only = no
list = yes
uid = root
gid = root
# 必须和 rsyncd.secrets中的用户名对应
auth users = user
secrets file = /etc/rsyncd.secrets
# 创建并打开文件
sudo vim /etc/rsyncd.secrets
# 配置用户名和密码,密码可以任意设置
user:password
sudo chmod 600 /etc/rsyncd.secrets
sudo /etc/init.d/xinetd restart
cwRsync
path
中,在cwRsync
根目录下,将\bin
的路径添加到环境变量path
中在客户端运行下面的命令检查,确认rsync配置成功
# user是在服务器中rsyncd.secrets文件中配置的用户名
# xx.xx.xx.xx 是服务器的ip地址,也可以填写服务器对应的域名
# share 是rsyncd.conf中定义的模块
rsync user@xx.xx.xx.xx::share
输入密码后,如果输出以下类似内容,说明配置成功
drwxr-xr-x 4096 2006/12/13 09:41:59 .
drwxr-xr-x 4096 2006/11/23 18:00:03 folders
# 将当前目录下public路径下的全部内容,同步至服务器,服务器的同步路径在rsyncd.conf中指定
rsync -av ./public/ user@xx.xx.xx.xx::share
rsync -cvazu --progress user@xx.xx.xx.xx::share /rsyn
rsync需要开启端口873
--version输出rsync的版本号并退出。-v, --verbose该选项增加了传输过程中的大量信息。默认情况下,rsync以静默(silent)模式工作。单个"-v"将给出哪些文件正在被传输的信息,还会在传输结束时给出一个简要总结信息。两个"-v"选项(-vv)将给出哪些文件被忽略,并且在传输结束时给出更详细的信息。超过两个"-v"选项一般只在调试过程中使用。需要注意的是,传输过程中输出的文件名是被"--out-format=%n%L"处理过的,它表示仅显示文件名,如果是软链接文件,则还显示它指向谁。当使用一个"-v"选项时,将不会告诉你文件的属性改变了。如果明确要列出改变了属性的文件列表(既可以使用"--itemize-change"也可以在"--out-format"中增加"%i"),(客户端)输出结果中将总是会增加所有已改变的条目清单。更详细信息见"--out-format"选项。-q, --quiet该选项将减少大量传输过程中的信息,但无法禁止从远程主机产生的信息。该选项适用于cron任务计划中。--no-motd此选项会影响客户端在守护程序传输开始时输出的信息。它会禁止motd信息,但是也会影响daemon对"rsync host::"请求显示模块列表的回应信息,因此如果想要请求daemon的模块列表,应该忽略该选项。-I, --ignore-times正常情况下,rsync会忽略文件大小相同且最后修改时间戳相同的文件,该选项关闭"quickcheck"行为,使得所有的文件都会被更新。(译者注:即从增量拷贝变成全量拷贝)--size-only该选项将修改rsync查找需要被传输文件的"quick check"算法,默认该算法会找出所有大小或最后修改时间戳改变文件并传输,使用该选项将仅查找大小改变的文件并传输。在使用了某些镜像备份但没有保留精确时间戳的情况下,使用带有该选项的rsync将非常有帮助。--modify-window当比较时间戳时,rsync会把两者相差不超过该选项所指定的值时认为是相同的时间戳。正常情况下该选项的值为0(精确匹配),但在某些情况下,将此选项的值设置为非0将非常有用。特别是与Windows的FAT文件系统(此文件系统有2秒范围内的精确度差异)传输数据时,设置"--modify-window=1"将非常有用(允许文件时间戳有1秒的差异)。-c, --checksum此选项改变了rsync检查文件改变和决定是否要传输的方式。不使用该选项,rsync使用"quick check"(默认的)检查发送端和接收端两边文件的大小和最后一次修改时间是否改变。使用该选项,将对每个匹配了大小的文件比较128位的校验码。生成校验码意味着两端都会消耗大量的磁盘I/O以读取传输队列中文件的数据内容(传输队列早于读取文件数据,即先quickcheck,再生成和比较校验码),因此该选项会大幅度降低效率。发送端生成校验码的时刻是做文件系统扫描以生成可获取文件列表时。接收端生成校验码的时刻是在扫描哪些文件发生改变时,它会对那些与发送端文件大小相同的文件生成校验码。所以,该选项的结果是:只传输校验码改变或文件大小改变(意味着校验码也改变)的文件。注意,rsync默认总是在文件传输完成后再生成全部文件(whole-file)的校验码,并验证传输完成的文件是否正确重组。但是使用该选项,它隐含了在传输前做"该文件是否需要更新?"的检查,使得文件传输结束后不会自动去验证它们重组的正确性。从协议30版本开始(对应的rsync版本从3.0.0开始)使用的校验码是MD5格式的,更老的协议版本使用的校验码是MD4格式的。(译者注:即基于checksum来判断文件是否要同步,而不是基于quick check算法。在两个地方会计算checksum:sender端发送文件列表时,接收端的generator判断文件是否要传输时)-a, --archive该选项等价于"-rlptgoD"选项的组合。它表示使用归档模式并保留几乎所有属性(明显遗漏了"-H"选项)。上面的等价选项的唯一例外是指定了"--files-from"选项,它使得"-r"选项被强制忽略。注意,"-a"选项不保留硬链接属性,因为查找多个硬链接文件是非常昂贵的。若要保留硬链接属性,必须与"-a"分开独立使用"-H"选项。--no-OPTION在选项前面加上前缀"no-"表示关闭该选项的隐含选项功能。不是所有选项都能使用"no-"前缀:只有那些隐含了其他选项的选项(如--no-D,--no-perms)或者不同环境下有不同默认值的选项(如--no-whole-file,--no-blocking-io,--no-dirs)。"no-"后面即可以接短格式选项,也可以接长格式选项(如--no-R等价于--no-relative)例如:你想使用"-a"选项但不想使用它的隐含选项"-o"(--owner),即让"-a"等价于"-rlptgD",可以指定"-a --no-o"(或-a --no-owner)。选项的顺序是非常重要的:如果指定"--no-r -a",则最终会启用"-r"选项,与之相反的是"-a --no-r"。同样需要注意的是"--files-from"的副作用,它的位置顺序不重要,因为它影响了某些选项的默认行为,并轻微改变了"-a"的意义(见"--files-from"选项以获取更详细说明)。-r, --recursive此选项告诉rsync以递归模式拷贝目录。参见"--dirs"(-d)。从rsync 3.0.0开始,现在使用的递归算法是一种增量扫描,比以前少占用很多内存,并且在最初扫描完一些目录后就开始进行数据传输。增量扫描仅影响递归算法,不会改变非递归的传输类型。同样,只有传输两端的版本都高于3.0.0才会如此。某些选项要求rsync知道完整的文件列表,所以它们会禁用增量递归模式。这些选项包括:--delete-before,--delete-after,--prune-empty-dirs和--delay-updates。正因为如此,如果两端rsync版本都高于3.0.0时,指定"--delete"时的默认删除模式变为"--delete-during"(可以使用"--del"或"--del-during"来精确指定删除模式)。同样,选择使用"--delete-delay"选项比"--delete-after"会更好。增量递归模式可以使用"--no-inc-recursive"(--no-i-r)选项来禁用。-R, --relative表示使用相对路径。这意味着会将命令行中指定的全路径名而非路径最尾部的文件名发送给服务端。当要一次性发送多个不同目录时该选项非常有用。例如,如果使用下面的命令:rsync -av /foo/bar/baz.c remote:/tmp/这将会在远程主机上的/tmp/目录下创建一个baz.c文件。如果使用下面的命令:rsync -avR /foo/bar/baz.c remote:/tmp/将会在远程主机的/tmp/目录下递归创建foo/bar/baz.c,它保留了命令行中指定的全路径。这些额外的路径元素被称为"隐含目录"(如上例中的foo和foo/bar)。从rsync 3.0.0开始,rsync总是会发送这些隐含目录作为文件列表中的真实的目录,即使发送端的某个路径元素是一个软链接。这使得拷贝全路径文件时,不用担心因为路径中包含了软链接而可能出现的非预期的问题(译者注:即链接追踪)。如果要复制服务端符号链接,请通过其路径来复制符号链接,并通过实际路径来复制器真实对象。如果rsync版本较老,可能需要使用"--no-implied-dirs"选项。也可以对所指定的路径限制发送时作为隐含目录的路径信息。从rsync 2.6.7版本开始,rsync可以在源路径插入一个点".",就像这样:rsync -avR /foo/./bar/baz.c remote:/tmp/这将会在远程主机上创建/tmp/bar/baz.c。(注意点后面必须跟上斜线,因此"/foo/."将不会被缩写)对于更老版本的rsync,可能需要改变目录来限制源路径。例如,推送文件时:(cd /foo; rsync -avR bar/baz.c remote:/tmp/)(注意,括号将把两个命令放入子shell中执行,因此cd改变目录不会影响未来的命令)如果使用老版本的rsync拉取文件,使用以下惯用格式(但只适用于非daemon的传输):rsync -avR --rsync-path="cd /foo; rsync" \remote:bar/baz.c /tmp/--no-implied-dirs该选项影响"--relative"选项的默认行为。当指定该选项时,在传输时不会包含源文件的隐含目录。这意味着目标主机上对应路径元素会被保留不变(如果它们存在的话),并且缺少的隐含目录会以默认属性方式被创建。甚至允许目标主机上隐含路径元素和源地址的属性有非常大的区别,例如在接收端某文件可能是某个目录的符号链接。另外,当rsync要传输的文件为"path/foo/file"时,如果使用"--relative"选项,则目录"path"和"path/foo"是隐含目录。如果在目标主机上"path/foo"是一个指向"bar"文件的符号连接,接收端的rsync会删除"path/foo",并重建它为一个目录,然后将接收到的文件放入此新目录中。使用"--no-implied-dirs"选项,接收端使用已存在的路径元素更新"path/foo/file",意味着最终会在"path/bar"中创建file文件。另一个实现连接保留功能的方法是使用"--keep-dirlinks"选项(也将会使得后续的传输从符号链接定位到目录中)。当使用早于3.0.0版本的rsync拉取文件时,如果发送端的路径中包含了符号链接,并且希望隐含目录能以普通目录方式被传输时,可能需要使用该选项。-b, --backup当使用该选项时,如果目标路径中已存在需要被传输或需要被删除的文件时将重命名该文件。可以使用"--backup-dir"选项控制备份文件的保存路径,使用"--suffix"选项控制备份时追加在原文件名后的后缀。注意,如果不指定"--backup-dir"选项:(1)将隐含"--omit-dir-times"选项(2)如果"--delete"选项同时影响该文件,rsync将在排除规则的尾部添加一个起"保护"作用的筛选规则(例如,-f "P *~"),这会阻止之前备份的文件被删除。注意,如果你使用了自己定义的筛选规则,你可能需要手动插入你的exclude/include规则,并且保证其优先级较高防止被其他规则先匹配上而导致失效。--backup-dir=DIR结合"--backup"选项一起使用,这表示rsync在远端将存储所有备份文件到指定的目录下。这可用于增量备份。可以使用"--suffix"选项额外指定备份后缀(否则备份到指定目录的文件将使用原文件名)。需要注意如果拟制定了一个相对路径,备份目录将会相对到目标目录,因此你可能真正想要指定的是一个绝对路径或以"../"开头的路径。如果接收端是rsync daemon,备份目录将无法超出模块的路径层次结构,因此请特别注意不要将其删除或复制到其中。--suffix=SUFFIX该选项可自定义"--backup"(-b)选项的备份文件名后缀,如果没有指定"--backup-dir"选项,则默认后缀为"~",否则后缀为空字符串。-u, --update该选项将强制忽略在目标路径下已存在且修改时间比源文件更新的文件。(如果已存在的目标文件的修改时间和源文件相同,则只在文件大小不同时才会更新)注意该选项不会影响软链接或其他特殊文件的拷贝机制。而且,不管两端文件中的数据是否相同,考虑发送端和接收端不同的文件格式对于更新来说也是非常重要的。换句话说,如果源文件是一个目录,而目标已存在的同名文件却是一个普通文件,则rsync会直接忽略它们的时间戳。该选项是一种传输规则,不是排除规则,因此不会影响进入file-lists的文件,也因此不会影响删除。它仅会限制接收端请求传输的文件。--inplace该选项会改变当数据需要更新时,rsync传输文件的方式。默认情况下,rysnc会创建一个文件的新副本,当此文件传输完成时会将此副本移动到指定的路径下。使用此选项后,将直接把更新部分的数据写入到目标文件中。(译者注:此选项的拷贝机制可以理解为类似于drbd基于块的拷贝机制)这会带来以下几种影响:o 硬链接不会被破坏。这意味着通过其他硬链接文件可以直接访问到新数据。更进一步说,尝试拷贝不同源文件到多重链接的目标文件时,将导致目标数据像"拔河"一样,来来回回地变化。o 使用中的二进制程序不会被更新(操作系统会防止这样的事情发生,二进制程序自身也会在尝试数据交换时崩溃)。o 在传输过程中,文件的数据会进入不一致状态,并且如果传输被中断或者更新失败时,文件将继续不一致。o rsync无法将数据写入一个无法被更新的文件中。虽然超级管理员可以更新任意文件,但普通用户需要获取文件的写权限才能打开文件并向其中成功写入数据。o 如果目标文件中的数据在它被复制到某个位置之前被覆盖,则rsync的增量拷贝效率会降低。如果使用了"--backup"则不会出现这样的问题,因为rsync足够智能,它会使用备份文件作为传输的基准文件。警告:不能使用该选项对那些正被其他用户访问的文件,因此在选择使用此选项进行拷贝时需要小心谨慎。该选项适用于对于那些基于数据块(block-based)改变或向文件尾部追加了数据的大文件,也适用于那些安装在磁盘上而非网络上的系统。它也能有效帮助保持写时复制(copy-on-write)文件系统的快照。该选项隐含了"--partial"选项(因为传输中断不会删除文件),但和"--partial-dir"以及"--delay-udpates"选项冲突。--append该选项使得rsync以追加数据到文件尾部的方式来更新文件,它会假定接收端上已存在的文件和发送端文件的前段数据是一致的。如果接收端上文件的大小等于或大于发送端文件的大小,则此文件会被忽略。该选项不会干涉不被传输文件的非内容属性(non-content,如权限,所有者等),也不会影响对非普通文件(non-regular)的更新。隐含了"--inplace"选项,但是和"--sparse"选项不冲突(因为它总是扩充一个文件的长度)。--append-verify工作方式类似于"--append"选项,但是接收端已存在的数据在验证阶段会被包含在whole-file校验码中,如果最后验证阶段失败了,该文件会被传输(rsync将使用正常、非追加的"--inplace"模式重发文件)。-d, --dirs以不递归的方式拷贝目录本身,它不会拷贝目录中的文件。不像"--recursive"选项,只拷贝目录中的内容而不拷贝目录本身。除非目录名中使用了"."或者以斜线结尾(如".","dir/.","dir/"等)。既不指定该选项,也不指定"--recursive"选项时,rsync将忽略所有遇到的目录(并会向输出这些影响信息)。如果同时指定了"--dirs"和"--recursive"选项,"--recursive"将优先生效。若未给定"--recursive"选项,"--files-from"或"--list-only"选项会隐含"--dirs"选项,此时在列表中能见到所有目录。要想关闭此功能,可以指定"--no-dirs"或"--no-d"选项。还有一个比较有用的向后兼容的选项:"--old-dirs"(--old-d)。它告诉rsync使用"-r --exclude='/*/*'"仅列出目录而不递归。-l, --links当遇到符号链接时,将在目标路径重新创建符号链接。(译者注:即拷贝符号链接本身)-L, --copy-links使用该选项时,当遇到符号链接时将拷贝它所指向的目标而不是符号链接本身(译者加:但仅只是追踪了链接文件指向文件中的数据,文件名仍然是符号链接文件的文件名。举个例子,如果client端a文件-->b文件,则使用该选项拷贝a时,将在receiver端生成a文件,但a文件是一个普通文件,其中的数据来源是client端b文件的数据)。老版本的rsync使用该选项还会告诉接收端也追踪符号链接到其指向的目标中。在目前的rsync版本中,要实现这样的功能需要指定"--keep-dirlinks"(-K)选项。--copy-unsafe-linksThis tells rsync to copy the referent of symbolic links that point outside thecopied tree. Absolute symlinks are also treated like ordinary files, and so areany symlinks in the source path itself when --relative is used. This option hasno additional effect if --copy-links was also specified.--safe-linksThis tells rsync to ignore any symbolic links which point outside the copied tree.All absolute symlinks are also ignored. Using this option in conjunction with--relative may give unexpected results.-k, --copy-dirlinks该选项使得sender端将符号链接视为一个目录,就像它真的是一个目录一样。如果你不想让指向非目录的符号链接受到影响,可以使用该选项。Without this option, if the sending side has replaced a directory with a symlinkto a directory, the receiving side will delete anything that is in the way of thenew symlink, including a directory hierarchy (as long as --force or --delete isin effect).See also --keep-dirlinks for an analogous option for the receiving side.--copy-dirlinks applies to all symlinks to directories in the source. If you wantto follow only a few specified symlinks, a trick you can use is to pass them asadditional source args with a trailing slash, using --relative to make the pathsmatch up right. For example:rsync -r --relative src/./ src/./follow-me/ dest/This works because rsync calls lstat(2) on the source arg as given, and thetrailing slash makes lstat(2) follow the symlink, giving rise to a directory inthe file-list which overrides the symlink found during the scan of "src/./".-K, --keep-dirlinks该选项使得receiver端将符号链接视为目录文件,就像它是真的目录一样,但只有它在sender端能匹配一个真实目录时才会如此。不使用该选项,receiver端的符号链接将被删除或替换为一个真实目录。例如,假设你要传输一个包含文件"file"的目录"foo",但是在receiver端上的"foo"是一个指向"bar"目录的符号链接。如果不使用该选项,receiver端将删除符号链接"foo",然后重建它为一个目录,然后接收"file"到此目录中。如果使用了该选项,receiver端将保留符号链接,然后将"file"存放到"bar"目录中去。(译注:上述示例的命令格式为"rsync -r foo user@host:/path",其中path下有个名为foo的链接文件)需要注意一点:如果使用了"--keep-dirlinks",你必须信任你所有拷贝中的链接文件。如果某个非信任用户要创建属于它自己的符号链接(指向某目录),在下一次传输过程中,可能会使用真实目录替换掉符号链接并影响链接文件所指向目录中的文件内容。对于备份拷贝,你最好是用mount的bind功能而不是使用符号链接来改变接收端的目录层次。参见"--copy-dirlinks"选项,它是在sender端上类似的选项。-H, --hard-linksThis tells rsync to look for hard-linked files in the source and link togetherthe corresponding files on the destination. Without this option, hard-linkedfiles in the source are treated as though they were separate files.This option does NOT necessarily ensure that the pattern of hard links on thedestination exactly matches that on the source. Cases in which the destinationmay end up with extra hard links include the following:o If the destination contains extraneous hard-links (more linking than whatis present in the source file list), the copyingalgorithm will not break them explicitly. However, if one or more of thepaths have content differences, the normal file-update process will breakthose extra links (unless you are using the --inplace option).o If you specify a --link-dest directory that contains hard links, thelinking of the destination files against the --link-dest files cancause some paths in the destination to become linked together due tothe --link-dest associations.Note that rsync can only detect hard links between files that are inside thetransfer set. If rsync updates a file that has extra hard-link connections tofiles outside the transfer, that linkage will be broken. If you are tempted touse the --inplace option to avoid this breakage, be very careful that you knowhow your files are being updated so that you are certain that no unintendedchanges happen due to lingering hard links (and see the --inplace option formore caveats).If incremental recursion is active (see --recursive), rsync may transfer amissing hard-linked file before it finds that another link for that contentsexists elsewhere in the hierarchy. This does not affect the accuracy of thetransfer (i.e. which files are hard-linked together), just its efficiency (i.e.copying the data for a new, early copy of a hard-linked file that could havebeen found later in the transfer in another member of the hard-linked set offiles). One way to avoid this inefficiency is to disable incremental recursionusing the --no-inc-recursive option.-p, --perms该选项告诉receiver端的rsync,要将目标文件的权限值设置为何源文件一样(即权限保留)。(参见"--chmod"选项以获取rsync修改sender端权限的方式)当没有使用该选项时,将以如下方式设置权限值:o 已存在的文件继续保留它们的原有权限,尽管"--executability"选项可能会改变文件的执行权限。o 对于新文件,将从源文件中获取普通权限值,再配合receiver端文件所在目录的默认ACL权限或umask值决定文件的最终权限,并且会禁用它们的特殊权限位,除非新的目录文件从其父目录中继承了sgid权限。因此,当"--perms"和"--executability"选项都被禁用时,rsync的行为和其它文件拷贝工具的行为一样,例如cp、tar。总结以下:要设置目标文件(包括新文件和已存在的旧文件)的权限值为源文件的权限值,使用"--perms"选项。要设置新的目标文件默认权限,请确保"--perms"选项是关闭的,然后使用"--chmod=ugo=rwX"(这将保证启用所有非掩码位权限)。如果想以更简单的方式实现后一种情况,你可能需要为其定义一个popt别名,例如将下面的命令行放入文件~/.popt中(下面的命令中定义了"-Z"选项,并使用了"--no-g"使得目标文件的所属组使用目标目录的默认组):rsync alias -Z --no-p --no-g --chmod=ugo=rwX然后可以在命令行中使用新的选项,例如:rsync -avZ src/ dest/(警告:请确保"-a"选项不是跟随在"-Z"后的,否则将重新启用上面已经定义的两个"--no-*"选项。)-E, --executability该选项使得rsync在未指定"--perms"选项时对普通文件保留文件的执行权限(或者不可执行权限)。普通文件上开启了"x"才认为有可执行权限。当目标文件已存在且和对应源文件的可执行权限值不一样时,rsync将采用如下方式修改权限:o To make a file non-executable, rsync turns off all its ’x’ permissions.o To make a file executable, rsync turns on each ’x’ permission that has acorresponding ’r’ permission enabled.如果指定了"--perms"选项,则该选项被忽略。-A, --acls使目标文件的ACL属性和源文件的ACL属性一致。该选项隐含了"--perms"选项。-X, --xattrs使目标文件的扩展属性和源文件的扩展属性保持一致。--chmod该选项使得rsync可以将目标文件的权限设定为此处所指定的权限值,让rsync以为这些指定的权限就是源文件的权限。也因此在未配合"--perms"一起使用时该选项无效。在chmod(1)的man文档中记录了普通的语法解析规则,你可以通过加上一个前缀"D"来指定该权限规则只对目录有效,或者加上前缀"F"指定该权限规则只对普通文件有效。例如,下面的例子保证了所有目录都标记了sgid权限,其它人对文件都不可写,所有者和所属组都可写,且所有人都有执行权限:--chmod=Dg+s,ug+w,Fo-w,+X可以指定多个使用逗号分隔的"--chomod"选项。-o, --owner该选项使得rsync将目标文件的所有者设置为和源文件一样(即保留所有者属性),但要求接收端的rsync是以super user身份运行的(或指定了"--no-super"选项)。如果不指定该选项,目标文件的所有者将设置为调用rsync的用户身份(译者注:例如rsync /src name1@host:/path,则目标文件的所有者为name1)。默认情况下,目标文件的所有者名称由uid匹配而来,但在某些环境下,可能会保留使用uid。(详细信息见"--numeric-ids"选项)(译者注:例如源文件的所有者为name1,其uid=1000,那么将在目标主机上寻找uid=1000所对应的用户名,如果能找到则所有者设置为用户名,否则设置为uid=1000)-g, --group此选项的意义完全同"--owner",所以不做对应翻译。--devices该选项使得rsync可以传输字符设备和块设备到目标主机上以重新创建这些设备。该选项要求接收端的rsync是以super user身份运行的(译者注:例如,root用户也算是super user,则rsync /devicename root@host:/path),否则该选项失效。(见"--super"和"--fake-super"选项)--specials该选项使得rsync可以传输特殊文件,如命名套接字,命名管道等。-D 该选项等价于"--devices --specials"选项组合。-t, --times该选项告诉rsync将mtime随文件一起传输给receiver,使得目标文件的mtime和源文件一样。千万注意,如果不指定该选项,原本排除那些mtime相同的文件而获得的性能提升将不再生效;换句话说,如果没有在rsync命令行中使用"-t"或"-a"选项,将导致下一次传输以类似于"-I"的方式进行,即更新所有文件(尽管在文件没有真正发生更改的情况下,rsync的增量传输算法可以让更新效率很高,但最好还是使用"-t")-O, --omit-dir-times该选项告诉rsync,当保留mtime(见"--times")时,将忽略目录。如果receiver端正在通过NFS共享目录,使用"-O"是一个不错的选择。若指定了"--backup"但未指定"--backup-dir",将隐含该选项。--super该选项告诉receiver端在进行某些操作时尝试使用super-user身份,尽管receiver端的rsync不是以super user身份运行的。这些操作包括:通过"--owner"保留文件所有者,通过"--groups"保留文件所属组(包括辅助组),通过"--devices"选项拷贝设备文件。在receiver端未以super user身份调用rsync时,这些选项很有用。如果要关闭super user选项功能,则使用"--no-super"--fake-super如果启用了该选项,rsync将通过对附加在每个文件上的扩展属性(根据实际需要)的保存/恢复来模拟super user。扩展属性包括:文件的owner、group、文件的设备信息(设备文件和特殊文件被创建为空文本文件)以及所有特殊权限位(suid/sgid/sbit)。在不使用super user备份数据时但又想保存ACL属性时,该选项很有用。"--fake-super"选项默认只影响命令发起端,如果想要通过远程shell影响远程端时,可以指定rsync的路径:rsync -av --rsync-path="rsync --fake-super" /src/ host:/dest/由于本地拷贝时,两端都在本地主机上,该选项将会同时影响本地的sender端和receiver端的文件。如果想要避免这样的情况,需要通过指定"localhost"的地址方式来实现拷贝,或者可能也可以使用"lsh"远程shell来完成。该选项会被"--super"以及"--no-super"选项覆盖。其他信息可以参见rsyncd.conf文件中的"fake super"。-S, --sparse尝试以高效率的方式处理稀疏文件,使得它们在目标主机上占用更少的空间。该选项不能和"--inplace"选项一起使用,因为"--inplace"不能向稀疏模式的文件中覆盖数据。-n, --dry-run该选项使得rsync仅测试运行(并生成和真正运行时几乎一样的输出信息)。该选项常和"-v"、"--verbose"、"-i"、"--itemize-changes"选项一起使用,以便查看rsync在这些选项下是如何工作的。配合"--itemize-changes"时的输出结果应该要和真正运行的结果完全一致(除非人为故意欺骗rsync或系统调用失败)。如果输出结果不一致,则出现了bug。配合其他几个选项时,输出结果除了在某些方面外应该保持几乎一致。尤其是,dry run不会真的发送数据,因此"--progress"将的结果将很可能异常。-W, --whole-file使用该选项将使得rsync不再使用增量传输算法,而是传输所有文件。如果源和目标主机之间的带宽高于磁盘的带宽(特别是"磁盘"是网络文件系统时),则该选项比增量传输更有效。当源和目标都是本地时,该选项是默认的传输算法,但若受到write batch模式影响,则此算法不生效。(译者注:假设A主机和B主机之间的网络可以以1000MB/s的速度传输,而目标主机B上磁盘的带宽只有500MB/s,显然目标主机在文件重组时从basis file读取数据块的速度不如A发送给B快,所以在这种情况下,增量传输不如全量传输)-x, --one-file-system该选项告诉rsync不能跨文件系统递归(译者注:例如根目录下有mnt目录,mnt常用来做挂载点,则递归根目录时,不会递归到mnt里面)。该选项不会限制用户从多个文件系统指定拷贝项,仅只是限制rsync在每个目录下进行递归,同时也以类似的限制方式限制删除时receiver端递归。需要记住,使用mount命令的"bind"功能绑定了设备文件时,它也被认为是在同一个文件系统上。如果重复指定该选项,rsync将忽略client端所有的挂载点目录。否则,当遇到挂载点时将当作是空目录(这些空目录使用已挂载目录的属性,因为挂载点目录下的文件是无法访问的)。如果指定了"--copy-links"或"--copy-unsafe-links"选项使得rsync"瓦解"符号链接,则符号链接所指向的是另一个设备上的目录时将和挂载点一样对待。该选项不会影响指向非目录的符号链接。(译者注:翻译有点不标准,以下是原文)This tells rsync to avoid crossing a filesystem boundary when recursing. This doesnot limit the user’s ability to specify items to copy from multiple filesystems,just rsync’s recursion through the hierarchy of each directory that the userspecified, and also the analogous recursion on the receiving side during deletion.Also keep in mind that rsync treats a "bind" mount to the same device as being onthe same filesystem.If this option is repeated, rsync omits all mount-point directories from the copy.Otherwise, it includes an empty directory at each mount-point it encounters(using the attributes of the mounted directory because those of the underlyingmount-point directory are inaccessible).If rsync has been told to collapse symlinks (via --copy-links or--copy-unsafe-links), a symlink to a directory on another deviceis treated like a mount-point. Symlinks to non-directories areunaffected by this option.--existing, --ignore-non-existing告诉rsync,如果目标主机上文件或文件所在目录还不存在,则不自动创建它们,即这些文件将不被传输。如果该选项和"--ignore-existing"选项一起使用,将不更新任何文件(如果你的目的是删除目标主机上的无关文件,这将非常有用)。(译者注:例如rsync --existing /etc/dhcp/* /tmp,由于/tmp下没有dhcp目录,所以dhcp目录和其中的文件都不会被传输到/tmp下)该选项属于一种transfer rule,而不是exclude rule,因此不会影响进入file list的文件,也因此不会影响删除操作。该选项仅对receiver所请求要传输的文件进行了限制。--ignore-existing该选项告诉rsync忽略对目标主机上已存在的文件的更新(不会忽略已存在的目录,或者什么也不做)。见"--existing"选项说明。该选项属于一种transfer rule,而不是exclude rule,因此不会影响进入file list的文件,也因此不会影响删除操作。该选项仅对receiver所请求要传输的文件进行了限制。对于使用了"--link-dest"选项做备份时,碰巧备份被中断,如果想继续完成备份,则该选项有用。因为"--link-dest"选项会拷贝到一个新的目录层次中,使用"--ignore-existing"将保证已存在的文件不会被调整。这意味着该选项仅盯着目标上已存在的文件不放。--remove-source-files该选项告诉rsync移除sender端已经成功传输到receiver端的文件(不包括任何目录文件)。--delete该选项告诉rsync删除receiver端有而sender端没有的文件,但不是删除receiver端所有文件,而是只对将要同步的目录生效。你需要明确指定整个目录(如"dir"或"dir/")而不是使用通配符来通配目录的内容(如"dir/*"),因为通配符会被shell进行扩展,使得rsync被请求传输单个文件而非文件的父目录。被exclude排除的文件也会从delete中排除掉,除非使用了"--delete-excluded"选项或者标记了只对sender端匹配上的文件有效(见筛选规则中的include/exclude修饰符)。(译者注:由于exclude规则先生效,delete时认为源端不存在而目标端存在,使得delete也想要删除这些被排除的文件,但默认情况下,在删除时对这些被排除的文件加上了保护规则,所以这些文件无法被delete掉,这是一个容易疑惑的地方。要删除这些被排除的文件,只需使用选项"--delete-excluded"选项将这些被保护的文件强制取消保护)(译者注:(1)不会删除receiver端任何目录,即使是子目录也不删除;(2)delete动作是由generator进程执行的)该选项如果错误使用将是非常危险的!强烈建议先使用"--dry-run"(-n)进行测试,以确定将删除那些文件。如果sender端探测到了任何i/o错误,将自动禁用远程删除功能。这是为了防止sender端的临时文件系统故障(如NFS错误)导致大规模删除目标文件。可以指定"--ignore-errors"选项强制忽略任何I/O错误。"--delete"选项一般可能会配合"--delete-WHEN"的某一种或"--delete-excluded",它们不会冲突。但若未指定任何"--delete-WHEN"时,rsync将默认采用"--delete-during"算法。(译者注:即在generator启动后,每处理一个文件列表,就删除该文件列表中需要删除的文件,在处理某个文件列表时不会删除别的文件列表中的文件,其实这一点从"-vvvv"的结果中很容易获取到)--delete-before请求在传输开始前执行目标文件删除行为。该选项隐含了"--delete"选项。(译者注:传输之前删除指的在处理所有文件列表之前先删除所有文件列表中指定要删除的文件,也就是说在generator刚启动时立即删除所有文件列表中待删除文件,而默认的--delete则是在generator刚启动时删除第一个文件列表中的待删除文件)在传输之前执行删除对于文件系统空间紧俏时是很有帮助的。但是,由于它会在传输开始之前发起一段延迟,这一段延迟很可能会使得传输超时(如果指定了"--timeout"选项),还会强制rsync使用老的、非增量的递归算法,此算法要求rsync将所有传输中的文件一次性扫描到内存中。--delete-during, --del请求receiver端的文件删除行为是随着文件传输时逐步执行的。隐含了"--delete"选项。(译者注:"--delete"没有和"--delete-WHEN"同时使用时,"--delete"默认采用的就是"--delete-during")--delete-delay请求receiver端的文件删除行为在所有文件列表中的文件都全部传输完成后才删除。在结合"--delay-updates"、"--fuzzy"选项一起使用时比较有用,并且相比"--delete-after"来说效率更高。--delete-after请求receiver端的文件删除行为在所有文件列表中的文件都全部传输完成后才删除。和"--delete-delay"不同的是,该选项会采用老的、非增量传输的算法将传输中的所有文件一次性扫描到内存中,因此效率不高。--delete-excluded为了删除sender端没有而receiver端有的文件,可以指定该选项告诉rsync即使文件被"--exclude"排除了,也要在远程将其删除。--ignore-errors告诉"--delete",即使在遇到I/O错误时也要继续。--force该选项告诉rsync,当某个非空目录要被非目录文件替换时,将此非空目录删除掉。这只有在删除行为未激活时才有效。--max-delete=NUM限制rsync最多能删除NUM个文件或目录,如果突破了该限制,将输出警告信息并以状态码25退出。可以使用"--max-delete=0"来保证不会在远程删除任何文件,因为只要有删除行为,就会警告并退出。--max-size=SIZE限制rsync传输的最大文件大小。可使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")。该选项是一个传输规则,而不是排除规则,因此不会影响文件进入文件列表,也因此不会影响删除行为。它仅仅只是限制了receiver端请求传输的文件。有如下可用后缀:"K"("KiB")=1024字节、"M"("MiB")、"G"("GiB")。如果想使用1000作为换算单位,则使用KB、MB、GB。(注意,所有大写字母都可以使用小写字母替换)。最后,如果后缀以"+1"或"-1"结尾,则值表示减小或增大一个字节。例如:"--max-size=1.5mb-1"表示1499999字节,"--max-size=2g+1"表示2147483649字节。--min-size=SIZE限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。单位的指定方法同"--max-size"。-B, --block-size=BLOCKSIZE该选项强制修改rsync算法将文件划分为数据块时的块大小。一般基于正在更新的文件来选择大小值。详细信息见技术报告。(译者注:rsync算法的作者说块大小在500-1000时是比较好的选择。对于超过1M的文件绝对不要让块大小低于500,否则性能极低。)-e, --rsh=COMMAND该选项允许你选择用于本地和远程之间的通信的远程shell程序。一般情况下,rsync默认配置为使用ssh,但如果在本地网络上,你可能更喜欢使用rsh。如果该选项和格式[user@]host::module/path一起使用,则该远程shell命令会在远程主机上启动一个rsync daemon(译者注:可以认为是临时模拟的rsync daemon进程),并且所有数据都将通过此远程shell的连接传输,而不是通过网络套接字所连接的远程主机上的rsync daemon。见上文"通过远程SHELL连接使用RSYNC-DAEMON特性"。允许在COMMAND中提供多个远程shell参数,它们将会作为一个整体传递给rsync。多个参数必须使用空格(不能是制表符tab或其他任意空白字符),分隔,也可以使用单引号或双引号包围参数来保护空格(但不能使用反斜线)。注意在单引号字符串内部使用多个单引号将返回给你一对单引号,同理,双引号也一样(尽管你需要注意哪些引号是shell来解析的,哪些引号是rsync解析的)。例如:-e 'ssh -p 2234'-e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'(注意,可以在用户家目录下的.ssh/config文件中自定义ssh的连接选项。)你也可以使用RSYNC_RSH环境变量指定远程shell程序,它能接受和"-e"选项一样的值。另外请查看会影响该选项的"--blocking-io"选项。--rsync-path=PROGRAM指定远程机器上要运行的程序以启动远程rsync进程。当远程rsync程序不在默认目录/usr/local/bin/rsync下常会使用该选项指定其路径。但要注意,PROGRAM是在shell的帮助下运行的,因此它可以是任意程序、脚本或你想运行的命令序列,只要它们不会破坏rsync正在使用的标准输入和标准输出即可。一个很棘手的例子是在远程机器上设置不同的默认目录以便使用"--relative"选项。例如:rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/(译者注:以上示例将会在本地主机创建/e/c/d,其中c/d数据来源于远程主机的/a/b/c/d)-C, --cvs-exclude这是一个很有用的简写排除文件法,用于排除大量不希望在系统之间传输的文件。它使用了类似于CVS的算法来决定一个文件是否要被忽略。exclude列表被初始化为排除以下格式的文件(这些初始化条目被标记为易过期,见后文"筛选规则"段落的说明):RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo*~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o*.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/然后,$HOME/.cvsignore文件中的文件列表将会被添加到此exclude列表,此外还会包含CVSIGNORE环境变量中指定的所有文件(所有cvsignore名称由空白字符分隔)最后,和.cvsignore文件在同一个目录中的文件,如果它们能匹配此文件中列出的规则,则也会被排除。不像rsync的筛选/排除规则,这些匹配模式是使用空白字符分隔的。更多cvs的模式见cvs(1)的man文档。如果将"-C"选项结合"--filter"规则,需要记住,无论"-C"选项处于命令行的哪些位置,这些cvs排除规则都将会追加在你所指定的规则之后。这就使得"-C"选项指定的规则比你自行指定的规则优先级耕地。如果你想将CVS规则插入到你的筛选规则中的某个位置,那么就不要使用"-C"选项,而是使用一种结合方式:"--filter:C"或"--filter=-C"。前者启用.cvsignore文件中的规则进行每目录扫描,后者则是一次性导入所有上面说所的CVS规则。-f, --filter=RULE该选项可以让你添加规则,以便从待传输的文件列表中有选择性地排除某些文件。在递归传输中,结合该选项是非常有用的。你可以在命令行中使用任意多个"--filter"选项以建立要排除的文件列表。如果筛选规则中包含了空白字符,需要使用引号包围以防被shell解析。在下文中同样介绍了如何使用下划线替代空格来分隔rsync参数和规则。该选项的详细信息请参见"筛选规则"段落说明。-F 该选项是一种添加到"--filter"规则的简写法,只有两种可能:第一种是单个"-F"选项,此时它是以下规则的简写:--filter='dir-merge /.rsync-filter'这告诉rsync查找那些分散在目录结构中的所有.rsync-filter文件,然后使用这些规则筛选出传输中的文件。第二种是如果重复使用"-F"选项,则它是以下规则的简写:--filter='exclude .rsync-filter'该规则将从传输中筛选出.rsync-filter本身。关于该选项如何工作的更详细信息,见"筛选规则"段落说明。--exclude=PATTERN该选项是"--filter"选项的简化格式,默认为排除(exclude)规则,并且它将禁止对普通的筛选规则进行解析。更详细信息见"筛选规则"段落说明。--exclude-from=FILE该选项和"--exclude"选项类似,但是它是从包含了排除规则的文件中读取排除规则(每行一个规则)。空行以及";"或"#"开头的行为注释行,如果给定的文件为"-",则表示从标准输入中读取排除规则。--include=PATTERN该选项是"--filter"选项的简化格式,默认为包含(include)规则,并且它将禁止对普通的筛选规则进行语法解析。更详细信息见"筛选规则"段落说明。--include-from=FILE该选项和"--exclude"选项类似,但是它是从包含了排除规则的文件中读取排除规则(每行一个规则)。空行以及";"或"#"开头的行为注释行,如果给定的文件为"-",则表示从标准输入中读取排除规则。--files-from=FILE该选项可以在FILE中精确指定要传输的文件列表。如果FILE为"-"则表示从标准输入中读取文件列表。它还调整了rysnc的默认行为以便能够更简单地指定要传输的文件:o 它隐含了"--relative"(-R)选项,所以会保留在文件中每个条目所指定的路径信息。(使用"--no-relative"或"--no-R"关闭该功能)o 它隐含了"--dirs"(-d)选项,所以将在目标主机上创建列表中指定的目录而不是悄悄地跳过它们。(使用"--no-dirs"或"--no-d"关闭该功能)o "--archive"(-a)将不再隐含"--recursive"(-r),因此如果真的要递归到目录中,需要显式指定"--recursive"(-r)。o 它的副作用是改变了rsync的默认状态,因此"--files-from"选项在命令行中的位置和其它选项的解析无关(例如,"-a"选项放在"--files-from"选项的前后的工作方式是一样的)。从FILE中读取的所有文件名都是相对于源目录的相对路径,任何前导斜线都会被移除,也无法使用".."进入源目录的上一层次目录。例如:rsync -a --files-from=/tmp/foo /usr remote:/backup如果/tmp/foo中包含了字符串"bin"或"/bin",将在远程主机上创建/backup/bin作为/usr/bin所对应的目标文件。如果包含了字符串"bin/"(注意尾随斜线),则将传输/usr/bin目录以及其内的文件。如果指定了"-r"选项,则所有目录结构都会被传输(要记住当使用了"--files-from"时,"-r"选项需要显式指定,因为"-a"选项不再隐含该选项)。还要注意,适用"--files-from"时,"--relative"选项的默认行为是仅复制从文件中读取的路径信息,不再强制复制原规范路径(即此示例中的/usr)另外,"--files-from"的文件可以从远程主机上读取,而不一定要从本地主机上读取,需只在文件的前面指定"host:"即可。要求"host:"的host必须是rsync两端的某一端,为了简写,可以使用简写的前缀":"表示远端主机。例如:rsync -a --files-from=srchost:/path/file-list srchost:/ /tmp/copyrsync -a --files-from=:/path/file-list srchost:/ /tmp/copy这将会拷贝在远程主机"srchost"上/path/file-list文件中指定的所有文件。注意:对"--files-from"的文件进行排序可以使得rsync效率更高,因为它将使得rsync不用再重新读取相邻能共用的路径元素。如果不进行排序,则rsync可能会多次重新扫描路径元素(隐含目录),重复生成文件列表。-0, --from0告诉rsync从文件中读取规则或文件名时是以空字符(\0)终止的。该选项会影响"--exclude-from"、"--include-from"、"--files-from"以及所有在"--filter"中指定的规则合并文件。它不会影响"--cvs-exclude"(因为从.cvsignore文件中读取的名称都是以空白字符分隔的)。-s, --protect-args该选项将使得所有发送给远程rsync进程的文件名和大多数选项都不允许被远程shell解析。这意味着空格不再分隔文件名,任意非通配特殊字符都不会被翻译(即成为普通字符,如:~、$、;、&等)。通配字符将被远程主机上的rsync扩展(正常情况下是由远程shell来扩展的)。-T, --temp-dir=DIR该选项明确receiver端文件重组时的临时目录。默认情况下,receiver端将在文件所在目录中创建临时文件。在receiver端,如果目标文件所在磁盘分区剩余大小不足以存储待重组文件时,可以使用该选项将临时文件存储到其他的分区中,在这种情况下,由于创建的临时文件和目标路径不在同一个分区上,所以重组完成时无法直接重命名,而是只能从临时目录中拷贝到目标路径下。如果你使用该选项的原因不是磁盘空间不足,你可能要将此选项结合"--delay-updates"选项一起使用,这将保证所有拷贝的文件都放入目标层次结构的子目录中,并等待传输结束。-y, --fuzzy该选项告诉rsync,如果目标主机上的basis file缺失,将主动搜索出一个文件作为basisfile。目前的算法是在同一目录中模糊搜索目标basis file,搜索的规则是:要么文件大小和修改时间完全一致,要么文件名相似。如果搜索到了符合条件的文件,rsync将使用该文件作为basis file,这样可能会加速传输速度。(译者注:在目标主机上进行文件重组时,会从basis file中拷贝匹配块,在真正的basisfile缺失时,模糊搜索出的basis file可能能提供一些匹配块,从而减少sender要发送的数据量,加快整个同步过程)注意,如果使用了"--delete"选项,可能会把潜在的basis file给删除掉,因此要想避免种这情况,可以指定"--delete-after"选项,或者直接指定文件名来排除将被删除的文件。--compare-dest=DIR该选项指示rsync使用目标主机上的DIR作为额外的层次结构,以便和传输中的文件做比较(如果目标目录中不存在basis file)。如果在DIR中发现了和sender端完全一致的文件,则该文件将不会传输到目标目录中。该选项在做稀疏备份时很有用,因为它仅备份从某一次更早的备份开始发生了改变的文件。(译者注:以备份目录为比较目录DIR,同步时将比较该目录中的文件,最终将仅传输发生了改变的文件到目标目录下)从rsync 2.6.4版本开始,可以通过多个"--compare-dest"选项提供多个比较目录,使得rsync可以按照为了精确匹配而指定的顺序来搜索列表。如果发现能匹配上但仅只有属性不同,将生成一个本地副本然后更新这些属性信息。如果未能匹配上,将选择DIRs中的basisfile来提高传输速度。如果DIR是相对路径,它将是相对于目标目录的。见"--copy-dest"和"--link-dest"。--copy-dest=DIR该选项类似于"--compare-dest",但rsync会从DIR中以本地拷贝的方式拷贝未改变的文件到目标目录中。可以通过多个"--copy-dest"选项提供多个DIR,使得rsync可以按照为了匹配未修改文件的顺序来搜索列表。如果未匹配上,则选择DIR中的basis file以尝试提高传输速度。如果DIR是相对路径,它将是相对于目标目录的。见"--copy-dest"和"--link-dest"。--link-dest=DIRThis option behaves like --copy-dest, but unchanged files are hard linked fromDIR to the destination directory. The files must be identical in all preservedattributes (e.g. permissions, possibly ownership) in order for the files to belinked together. An example:rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/If file’s aren’t linking, double-check their attributes. Also check if someattributes are getting forced outside of rsync’s control, such a mount optionthat squishes root to a single user, or mounts a removable drive with genericownership (such as OS X’s "Ignore ownership on this volume" option).Beginning in version 2.6.4, multiple --link-dest directories may be provided,which will cause rsync to search the list in the order specified for an exactmatch. If a match is found that differs only in attributes, a local copy ismade and the attributes updated. If a match is not found, a basis file fromone of the DIRs will be selected to try to speed up the transfer.This option works best when copying into an empty destination hierarchy, asrsync treats existing files as definitive (so it never looks in the link-destdirs when a destination file already exists), and as malleable (so it mightchange the attributes of a destination file, which affects all the hard-linkedversions).Note that if you combine this option with --ignore-times, rsync will notlink any files together because it only links identical files together asa substitute for transferring the file, never as an additional check afterthe file is updated.If DIR is a relative path, it is relative to the destination directory. Seealso --compare-dest and --copy-dest.Note that rsync versions prior to 2.6.1 had a bug that could prevent --link-destfrom working properly for a non-super-user when -o was specified (or impliedby -a). You can work-around this bug by avoiding the -o option when sending toan old rsync.-z, --compress使用该选项,rsync将对发送给目标主机的文件数据(file data)进行压缩,这可以减少传输的数据量——在某些缓慢的连接中可能比较适用。注意,该选项一般情况下可以实现比通过远程shell压缩或传输过程压缩获得更好的压缩比,因为它利用了明确不通过连接发送的匹配数据块中的隐含信息。请通过"--skip-compress"选项确定不被压缩的默认文件后缀列表。--compress-level=NUM显式指定"--compress"的压缩级别。如果NUM为非零值,则该选项将隐含"--compress"。--skip-compress=LIST该选项通过指定后缀格式来决定哪些文件不被压缩。LIST的值为使用斜杠"/"分隔的一个或多个文件后缀(不包括点.)如果LIST指定的是空字符串,则表示压缩所有文件。支持简单的字符类匹配。所谓的字符类由中括号和写在中括号中的一系列的字母组成(如:非特殊的字符类[abcz],特殊的字符类[:alpha:],注意,短横线"-"在此没有特殊的意义,仅表示一个简单的字符)。注意,字符"*"和"?"没有特殊的意义。例如此处示例指定了6个不压缩的后缀(因为其中一个规则mp[34]匹配了两种后缀):--skip-compress=gz/jpg/mp[34]/7z/bz2默认不被压缩的后缀列表为:(不同版本的rsync可能会有些微改变)7z avi bz2 deb gz iso jpeg jpg mov mp3 mp4 ogg rpm tbz tgz z zip该后缀列表将会被"--skip-compress"选项指定的后缀列表覆盖,但有一种情况例外:以rsync daemon为源拷贝文件时,rsync将在不被压缩的文件列表中增加你指定的后缀文件(并且该文件列表可能会被配置为非默认情况)(译者注:也就是说,当从rsync daemon拷贝时,指定的压缩忽略后缀不是覆盖原压缩忽略列表,而是追加到原压缩忽略列表)。--numeric-ids使用该选项后,rsync将传输gid和uid,而不是字符格式的username和groupname然后将其映射到两端。默认情况下,rsync将使用用户名和组名来决定如何设置文件的所有者和所属组。但要注意,即使没有指定"--numeric-ids"选项,也绝不会通过字符格式的username和groupname来映射特殊的uid=0和gid=0。如果在源主机上的用户或组没有字符格式的名称(译注:即只有uid和gid,没有username和groupname),或者目标主机上没有相同的用户/组,则将使用uid/gid来设置所有权关系。请参看rsyncd.conf的man文档中关于"use chroot"的设置说明,以获取关于chroot设置后如何影响rsync对用户名和组名的查找能力以及你能对此做些什么。--timeout=TIMEOUT该选项设置的是最大IO超时时间,单位为秒。如果在指定时间内没有数据被传输,则rsync将直接退出。默认值为0表示永不超时。--contimeout该选项设置rsync成功连接rsync daemon的等待超时时间。若在指定时间内未连接上rsyncdaemon,rsync将以错误方式退出。--address默认当rsync连接rsync daemon时,rsync所使用的地址将会绑定到通配符地址上(译注:默认通配符地址为0.0.0.0,即可以从任意接口的任意地址上向外发起连接)。使用该选项可以明确指定rsync要绑定的IP地址或主机名。请同样参见"--daemon"模式中"--address"选项获取详细信息。--port=PORT该选项可以显式指定一个要使用的tcp端口号而不是默认的873端口。该选项只能在连接rsyncdaemon时的双冒号(::)的语法格式中使用(因为URL rsync://user@host:port/语法本身就可以指定端口号,所以不需要该选项明确指定)。请同样参见"--daemon"模式中"--port"选项获取详细信息。--sockopts这个选项可以为希望最大程度地调整系统的人们提供无穷乐趣。你可以设置各种套接字选项使得传输速度更快(或更慢!)。关于该选项的可设置项请阅读setsockopt()系统调用man文档。默认情况下,该选项没有设置任何值。该选项只影响使用套接字连接rsync daemon的情况。在"--daemon"模式中也有该选项。--blocking-io该选项告诉rsync在启动远程shell传输时使用阻塞I/O模型。如果远程shell为rsh或remsh,rsync默认使用阻塞I/O,否则默认将使用非阻塞I/O。(注意,ssh更适合使用非阻塞I/O)-i, --itemize-changes请求输出一个明细列表,这个列表记录的是每个文件发生了哪些改变,包括属性的改变。它完全等价于"--out-format='%i %n%L'"。如果重复该选项,未发生改变的文件也会被输出。因为几乎不用,所以不做翻译。--out-format=FORMAT该选项允许你自定义rsync client对每个更新过程产生输出的信息格式。指定的格式为"%"加一个单字符。如果指定了"-v"选项,则其默认的格式为"%n%L"(将输出文件名,如果是一个链接文件,则输出其指向的对象)。完整的格式列表,见rsyncd.conf的man文档中"logformat"段落。指定"--out-format"是对每个文件、目录等都输出信息的。rsync将在文件传输之前输出这些信息,除非请求输出传输过程中的统计信息,这样它会在文件传输结束前输出信息,在这种情况下如果同时指定了"--progress"选项,rsync将会同时输出正在传输中的文件名。--log-file=FILE请求将输出信息记录到文件中。类似于"--out-format"。它可以指定记录client以及非daemon的server端的日志。若在客户端的命令行上指定该选项,则默认格式为"%i %n%L"。以下是一个请求远端来记录日志的示例:rsync -av --rsync-path="rsync --log-file=/tmp/rlog" src/ dest/该选项对于调试非预期的连接关闭比较有用。--log-file-format=FORMAT该选项指定要在"--log-file"文件中记录的日志格式(当然,需配合"--log-file"才生效)。如果FORMAT指定为空,将不会记录更新的文件信息。完整的格式列表,见rsyncd.conf的man文档中"log format"段落。--stats该选项让rsync打印文件传输过程中的详细统计数据,从中可以看出增量算法的效率如何。统计数据包括如下几项:o Number of files是所有"文件"的数量总数,包含目录、字符链接等。o Number of files transferred是普通文件通过rsync增量传输算法更新的数据大小,它不包括创建的目录、字符链接等非文件数据。o Total file size是传输中所有文件总大小。该大小不会计算目录和特殊文件大小,但会包含字符链接的大小。o Total transferred file size是所有已传输文件的总大小。o Literal data是所有非匹配数据块的数据大小,即传输给receiver端的纯文件数据大小。o Matched data是所有匹配块的数据总大小,即receiver端从basis file中拷贝的数据大小。o File list size是sender发送给receiver端的文件列表大小。它比内存中文件列表的内容要小很多,因为sender将其传输给receiver端的时候会将其进行压缩。o File list generation time是sender创建文件列表消耗的时间,单位为秒。老版本的rysnc可能不会输出该项。o File list transfer time是sender将文件列表发送给receiver端消耗的时间,单位秒。o Total bytes sent是rsync从sender端传输给receiver端的所有数据大小,单位字节。(译者注:包括纯文件数据,信息数据等等非文件数据)o Total bytes received是receiver端收到的所有非信息数据大小,单位字节。-8, --8-bit-output告诉rsync在输出信息中保留所有高位字符不进行转义。几乎用不上,所以不做翻译。-h, --human-readable以人类可读方式输出信息。如果只指定单个该选项,则K/M/G的转换单位为1000,指定多次,则转换单位为1024。--partial默认rsync在传输中断时会删除只传输了一部分不完整文件(partial file)。在某些环境下,可能希望保留这些已传输的部分。"--partial"选项告诉rsync保留这些部分,这可以使得下一次传输只传输剩余部分,从而加快传输速度。--partial-dir=DIR比直接使用"--partial"更好的做法是指定一个存放不完整数据(partial file)的目录DIR,下次再传输时,rsync将使用一个文件来寻找到该DIR中的文件,以便提高传输速率,当数据真正传输完整且传输真正完成后,该DIR将被删除。注意,如果指定了"--whole-file"选项(后者隐含了该选项),则所有的"partial-dir"中正在更新的文件都会被删除,因为rsync此时没有使用增量传输算法来传输文件。rsync如果发现DIR不存在,则自动创建(但不是递归创建整个目录路径),这使得rsync在需要时能更方便地使用相对路径在文件所在目录下直接创建partial-dir(例如"--partial-dir=.rsync-partial"),并且在partial file被删除时自动移除该目录。如果partial-dir的值不是一个绝对路径,rsync将在所有exclude规则尾部追加一个exclude规则,用于防止partial file已经存在于sender端,也能防止receiver端过早删除partialfile。例如:"--partial-dir"将在其他筛选规则的尾部添加一个等价于"-f 'P .rsync-partial/'"的规则。如果你正在使用自定义的exclude规则,你可能需要在你的exclude/hide/protect规则中添加partial-dir相关的条目,因为(1)向其他规则的尾部自动添加规则的行为可能会失效(2)你可能希望覆盖rsync的排除选择。例如,如果你想让rsync清除被随意乱放置的剩余partialfile,需要指定"--delete-after"并且添加一条"risk"筛选规则,如"-f 'R .rsync-partial/'"(不要使用"--delete-before"或"--delete-during",除非你不想让rsync使用剩余的partial file来完成此次传输)。重要:"--partial-dir"目录不能让其他用户可写,否则有安全隐患。例如避免使用"/tmp"。你也可以通过环境变量"RSYNC_PARTIAL_DIR"来设置partial-dir的值。设置该环境变量不会强制开启"--partial",但在指定了"--partial"时会影响它的partial-dir路径。例如,不再让"-partial-dir=.rsync-tmp"随同"--progress"一起使用,而是设置"RSYNC_PARTIAL_DIR=.rsync-tmp",然后只需使用"-P"选项来应用".rsync-tmp"目录以完成partial传输。只有在以下情况下"--partial"不会查找该环境变量的值:(1)使用了选项"--inplace"(因为"--inplace"和"--partial-dir"选项冲突)(2)使用了选项"--delay-updates"(见下文)。--delay-updates该选项将receiver端每个重组的临时文件保留在某个目录中,直到传输结束之前才一次性将它们全部重命名为各自对应的目标文件。这样的行为使得所有文件的更新更具有原子性(译注:如果你了解数据库事务,就知道原子性是什么意思,最直白地说,具有原子性表示要么全部成功,要么全部失败,所以这里更新具有原子性表示要么全部更新成功,要么全部更新失败,但由于重命名覆盖目标文件后是不可回滚的,所以这里的原子性并不是那么的严格)。默认情况下,这些临时文件将放在每个目标文件所在目录下的".~tmp~"子目录下,但如果指定了选项"--partial-dir",那么将使用该选项指定的目录。请参见"--partial-dir"选项获取相关信息。该选项和"--inplace"以及"--append"选项冲突。该选项使得receiver端使用更多的内存空间,并且需要更多的磁盘空间以存储额外的目标文件副本。需要注意,"--partial-dir"不能使用绝对路径,除非你能保证传输中的文件没有同名文件(因为如果使用了绝对路径,所有的临时文件都放在那一个目录下,重名文件会先后覆盖),且在目录层次结构中没有挂载点(因为如果无法重命名到指定路径下,延迟更新将失败)-m, --prune-empty-dirs该选项告诉receiver端的rsync从文件列表中删除空目录,包括那些没有文件的空的嵌套目录。这对于避免创建一堆无用的目录很有用,例如在sender端使用include/exclude/filter规则扫描递归层次时会创建所有层次的目录。注意传输规则(如"--min-size")不会影响文件进入文件列表,因此不会让目录成为空目录,即使目录中没有任何文件可以匹配上传输规则。由于该选项会修剪file list,所以会影响delete对目录的删除行为。但记住,exclude排除的文件和目录可以防止现有条目被删除,因为排除规则既隐藏了源文件,又保护了目标文件。可以使用全局"protect"筛选规则防止file list中的某个特定目录被修剪。例如,下面的选项可以保证目录"emptydir"仍然保留在file list中:--filter ’protect emptydir/’以下的示例可以从一个层次结构中拷贝其中所有的.pdf文件,并且只在目标主机上创建必要的目录来存放这些.pdf文件,并会移除目标上所有多余文件和目录(注意此处使用了非目录文件的hide筛选规则替代exclude规则):rsync -avm --del --include=’*.pdf’ -f ’hide,! */’ src/ dest若不想删除目标主机上多余文件,可使用更古老的选项"--include='*/' --exclude='*'"替代hide筛选规则,不过你不一定能适应它,毕竟它是古老的选项。--progress该选项告诉rsync显示传输进度信息,这是给那些无聊的用户看的。它隐含了"--verbose"。如果rsync正在传输的是一个普通文件,将以下面格式显示进度信息:782448 63% 110.64kB/s 0:00:04在此例中,receiver重组了sender发送的文件的782448字节的数据或者说重组了该文件的63%(译者注:此处的意思是这些数据是文件的纯数据,不包括那些非文件信息类数据),且以110.64kB/s的速率重建文件,如果保持该速率,该文件将在4秒后重建完成。若使用的是rsync的增量拷贝算法,那么这些统计数据可能会误导用户。例如,如果sender的文件由basis file和另一段放在basis file前面的数据组成,那么当reciever在获取纯文件数据时,此处所显示的速率值会急剧下降,而且要完成传输可能会比估计的时间更长,因为它还要处理匹配的数据块部分。(译者注:换句话说,该进度信息是sender发送的纯数据相关信息,和真正完成同步的进度没有直接关系)当文件传输完成,rsync将使用总结性的行替代进度信息,类似格式如下:1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)此示例中,文件大小为1238099字节,整体传输平均速率是146.38kB/s,总共消耗了8秒才传输完成。"xfer#5"表示此文件是该rsync会话期间第5个传输的文件,"to-check=169/396"表示此次传输的文件列表中共要检查396个文件,其中有169个文件待检查以确定它们是否需要传输。(译者注:可以认为396是某些文件被排除后待考虑是否传输的总文件数,196则是还剩下196个文件还未检查)-P 该选项等价于"--partial --progess"选项。指定这两个选项的目的是为了让某一次可能会中断的较长传输过程变得更简单。--password-file该选项让rsync在连接rsync daemon时从密码文件中获取密码。密码文件必须可读。该文件中只有第一行是rsync将读取的密码,其他所有行都自动忽略。该选项无法为远程shell(如ssh)提供密码,至于如何为远程shell提供密码,参考对应远程shell的文档(译者注:对于ssh而言,使用公钥认证机制即可)。当使用远程shell访问rsyncdaemon时,该选项只有完成了远程shell的身份验证过程才生效。--list-only该选项强制rsync仅列出源路径的文件列表而不是进行文件传输。如果rsync命令行中只给出了一个地址,将隐含该选项。注意通配符会被shell解析并扩展为rsync的参数。例如:rsync -av --list-only foo* dest/--bwlimit=KBPS该选项对rsync的传输最大速度进行限速。该限制值是一个平均值,所以在实际传输过程中可能会短暂的超出该限制值。设置为0则表示不限速。--write-batch=FILE记录一个稍后被"--read-batch"读取的文件,该文件可被用于另一个完全一致的目标路径。详细信息见"批处理模式"段落信息。(译者注:通俗地说,就是将源和目标的不同点记录下来保存在FILE中,然后通过"--read-batch"读取这些不同点并更新目标文件,如果有多台目标主机上的文件情况是完全一致的,则可以通过此FILE一次性应用于所有这些主机,因此称之为"批处理模式"。注意,FILE中不仅记录了不同之处,还记录了将要应用于目标主机的数据部分,因此它是一个"信息+数据"文件而不仅仅只是小小的信息文件)--only-write-batch=FILE和"--write-batch"工作方式类似,区别是当生成batch file的时候不会对目标路径做任何操作。这使得你可以通过某些方法将所发生改变的信息传输到目标系统上,然后通过"--read-batch"应用这些改变。可以直接将批处理文件FILE保存到任意的移动存储设备中。注意,只有向远程主机推送这些改变时才能节省带宽,因为这样可以让sender端的数据分流记录到FILE中,而无需通过连接传输给receiver端。(如果是拉取数据,则sender端为remote,因此无法写批处理文件FILE)--read-batch=FILE读取所有通过"--write-batch"生成的批处理文件FILE并通过其中的"信息+数据"应用于目标主机。如果FILE未"-",则批处理数据将从标准输入中读取。--protocol=NUM强制指定要使用的协议版本。一般只在创建批处理文件以兼容老版本rsync时可能会用上,因此不做翻译。--iconv=CONVERT_SPECrsync可以在不同字符集间转换文件名。基本用不会上,因此不做翻译。-4, --ipv4 or -6, --ipv6限制rsync使用ipv4还是ipv6创建套接字。该选项由于明确表示了要用网络套接字,也就限制了只有连接rsync daemon时才生效。如果编译rsync时没有将ipv6的功能编译进去,则"--ipv6"无效。通过"--version"的输出结果可以知道是否编译了ipv6功能。--checksum-seed=NUM指定checksum的种子长度。默认种子长度为4字节,应用于每个数据块级和文件级checksum的计算。默认checksum的种子由server和其默认的当前系统时间time()计算生成。该选项显示指定特定的checksum种子,对应想要重复计算块级或文件级checksum时或者用户想要一个更具随机性的checksum种子时比较有用。设置NUM为0将导致rsync使用默认的time()来计算种子。
Ubuntu配置rsync服务
Ubuntu配置rsync服务
下一篇:正交采样