rsync – 什么意思是rsync日志上的f +++++++++?

我正在做一个rsync来备份我的服务器文件,我有两个问题:

1 – 在进程的中间,我需要停止并重新启动rsync,我想知道是否rsync将启动在同一点,它停止或将重新启动同步?

2 – 在日志文件显示这个string的所有文件“f +++++++++”,我想知道这是什么意思?

例如:

010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log 2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log 2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/ 2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.017a771cc19b18cd 2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.01eade9d317ca79a 

谢谢。

让我们来看看rsync如何工作,更好地理解这些神秘的结果:

1 – rsync的一个巨大优势是在下一次中断之后,它会继续顺利进行。

下一次的rsync调用将不会再次传输文件,如果它们在此期间没有更改,它已经传输。 但它会从头开始检查所有的文件,因为它不知道它已被打断。

2 – 每个字符都是可以翻译的代码,如果您阅读man rsync -i, --itemize-changes部分

从问题解码您的示例日志文件:

> f.st ……

 > - the item is received f - it is a regular file s - the file size is different t - the time stamp is different 

.d..t ……

 . - the item is not being updated (though it might have attributes that are being modified) d - it is a directory t - the time stamp is different 

>˚F+++++++++

 > - the item is received f - a regular file +++++++++ - this is a newly created item 

rsync手册页的相关部分:

-i,–itemize-changes

请求对每个文件进行的更改的简单逐项列表,包括属性更改。 这与指定–out-format ='%i%n%L'完全相同。 如果重复该选项,则也会输出未更改的文件,但只有在接收rsync至less为版本2.6.7(可以对旧版本的rsync使用-vv时,也可以打开其他详细信息的输出)先贤)。

“%i”转义有一个11个字母的神秘输出。 通用格式类似于stringYXcstpoguax,其中Y由正在执行的更新typesreplace,X由文件typesreplace,而其他字母表示在修改时可以输出的属性。

replaceY的更新types如下所示:

  • A <表示文件正在传输到远程主机(已发送)。
  • A >表示文件正在传输到本地主机(接收)。
  • c表示该项目正在发生本地更改/创build(如创build目录或更改符号链接等)。
  • h表示该项目是另一个项目的硬链接(需要–hard-links)。
  • A。 意味着该项目没有被更新(虽然它可能有被修改的属性)。
  • A *表示剩余的分项输出区域包含一条消息(例如“删除”)。

replaceX的文件types是: f表示文件, d表示目录, L表示符号链接, D表示设备, S表示特殊文件(例如命名套接字和fifo)。

上面string中的其他字母是如果正在更新项目的关联属性或“。”字符将被输出的实际字母。 没有变化。 三个例外是:(1)新创build的项目用“+”replace每个字母,(2)相同的项目用空格replace点,(3)未知属性用“?”replace每个字母。 (这可能发生在与旧的rsync交谈时)。

与每个字母关联的属性如下所示:

  • c表示常规文件具有不同的校验和(需要–checksum),或者符号链接,设备或特殊文件具有更改的值。 请注意,如果您要将文件发送到3.0.1之前的rsync,则此更改标记将仅出现在校验和不同的常规文件中。
  • s表示常规文件的大小是不同的,并将通过文件传输进行更新。
  • t表示修改时间不同,正在更新为发件人的值(需要 – 时间)。 T的一个替代值意味着修改时间将被设置为传输时间,当文件/符号链接/设备更新时没有 – 时间和当符号链接改变并且接收器不能设置其时间时发生。 (注意:使用rsync 3.0.0客户端时,您可能会看到s标志与t相结合,而不是正确的T标志,因此时间设置失败。
  • p表示权限不同,并且正在更新为发件人的值(需要–perms)。
  • 一个o意味着所有者是不同的,正在更新为发件人的价值(要求 – 所有者和超级用户的权限)。
  • g表示该组不同,并且正在更新为发件人的值(要求–group和设置组的权限)。
  • u槽保留供将来使用。
  • 这意味着ACL信息发生了变化。
  • x表示扩展的属性信息发生了变化。

另一个输出是可能的:删除文件时,“%i”将输出string“*删除”为每个项目被删除(假设你正在谈论一个最近足够的rsync,它logging删除,而不是输出为一个详细的消息)。

有一段时间,我需要了解我写的脚本的rsync输出。 在写这个脚本的过程中,我search了一下,来到了上面写的@mit。 我使用这些信息以及来自其他来源的文档来创build自己的位标志,以及如何让rsync输出所有操作的位标志(默认情况下不会这样做)。

我在这里发布的信息,希望它可以帮助其他人(像我)在这个页面上通过search绊倒,需要更好的解释rsync

使用--itemize-changes标志 -vvv标志的组合, rsync为我们提供了与目标目录相比在源目录中标识的所有文件系统更改的详细输出。 rsync生成的位标志然后可以被解码以确定改变了什么。 要解码每个位的含义,请使用下表。

rsync输出中每个位的位置和值的解释:

 YXcstpoguax path/to/file 

||

|╰- x: The extended attribute information changed

╰– a: The ACL information changed

||╰— u: The u slot is reserved for future use

|╰—- g: Group is different

╰—– o: Owner is different

||╰—— p: Permission are different

|╰——- t: Modification time is different

╰——– s: Size is different ||╰——— c: Different checksum (for regular files), or || changed value (for symlinks, devices, and special files) |╰———- the file type: | f: for a file, | d: for a directory, | L: for a symlink, | D: for a device, | S: for a special file (eg named sockets and fifos) ╰———– the type of update being done:: <: file is being transferred to the remote host (sent) >: file is being transferred to the local host (received) c: local change/creation for the item, such as: – the creation of a directory – the changing of a symlink, – etc. h: the item is a hard link to another item (requires –hard-links). .: the item is not being updated (though it might have attributes that are being modified) *: means that the rest of the itemized-output area contains a message (eg "deleting")

一些示例输出rsync的各种情况:

 >f+++++++++ some/dir/new-file.txt .f....og..x some/dir/existing-file-with-changed-owner-and-group.txt .f........x some/dir/existing-file-with-changed-unnamed-attribute.txt >f...p....x some/dir/existing-file-with-changed-permissions.txt >f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt >fs.....x some/dir/existing-file-with-changed-size.txt >f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt cd+++++++++ some/dir/new-directory/ .d....og... some/dir/existing-directory-with-changed-owner-and-group/ .d..t...... some/dir/existing-directory-with-different-time-stamp/ 

捕获rsync的输出(侧重于位标志):

在我的实验中,需要使用--itemize-changes标志 -vvv标志来使rsync输出所有文件系统更改的条目。 没有三详细( -vvv )标志,我没有看到目录,链接和设备更改列出。 值得尝试一下你的rsync版本,以确保它正在观察和注意你所期望的一切。

这种技术的一个简便的用法是将--dry-run标志添加到命令中,并将由rsync确定的更改列表收集到variables中(不作任何更改),以便您可以--dry-run对列表进行一些处理。 像下面这样的东西将捕获variables中的输出:

 file_system_changes=$(rsync --archive --acls --xattrs \ --checksum --dry-run \ --itemize-changes -vvv \ "/some/source-path/" \ "/some/destination-path/" \ | grep -E '^(\.|>|<|c|h|\*).......... .') 

在上面的例子中, rsync的(stdout)输出被redirect到grep (通过stdin),所以我们只能隔离包含位标志的行。

处理捕获的输出:

然后可以logging该variables的内容以供稍后使用或者立即迭代感兴趣的项目。 我在研究更多关于rsync的脚本中使用了这个确切的策略。 您可以查看脚本( https://github.com/jmmitchell/movestough ),查看捕获输出的后处理示例,以隔离新文件,重复文件(相同名称,相同内容),文件冲突(同名,不同内容),以及子目录结构的变化。

1)沃丁,这并不完全正确。 如果使用–partial或-P标签(与–partial –progress相同)rsync继续中断传输。

2)确切地说,这是–itemize-changes标签的常见输出。

1.)它将“重新启动同步”,但不会传输具有相同大小和时间戳的文件等。它首先build立一个要传输的文件列表,在这个阶段它将会看到它已经传输了一些文件并会跳过它们。 你应该告诉rsync保存时间戳等(例如使用rsync -a ...

当rsync传输文件时,它会将其称为.filename.XYZABC而不是filename 。 然后当它完成传输该文件时,它将重命名它。 因此,如果您在传输大文件时终止了rsync,则必须使用–partial选项继续传输,而不是从头开始。

2.)我不知道那是什么。 你能贴一些例子吗?

编辑:根据http://ubuntuforums.org/showthread.php?t=1342171这些代码是在;-i, --itemize-changes选项部分的rsync手册页中定义的。

如果我的答案是基于Joao的话