f +++++++++在rsync日志中是什么意思?


116

我正在使用rsync服务器文件进行备份,我有两个问题:

  1. 在此过程的中间,我需要停止并重新开始rsync
    rsync从停止的地方,否则会重新从头开始点开始?

  2. 在日志文件中,我看到了"f+++++++++"。这是什么意思?

例如:

2010/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

Answers:


196

让我们看一下rsync的工作原理,并更好地理解神秘的结果行:

1-rsync的一个巨大优点是,下一次中断后,rsync会继续平稳运行。

下一次rsync调用将不会再次传输已经传输过的文件(如果在此期间未进行更改)。但是它会从头开始再次检查所有文件以找出原因,因为它不知道它已被中断。

2 -每个字符是可以,如果你读的部分被翻译代码-i, --itemize-changesman rsync

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

> 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至少为2.6.7版本时,才会输出未更改的文件(您可以将-vv与rsync的较早版本一起使用,但这也会打开其他详细信息mes-圣人)。

“%i”转义符的加密输出为11个字母长。通用格式类似于字符串YXcstpoguax,其中Y替换为完成的更新类型,X替换为文件类型,其他字母表示如果被修改则可以输出的属性。

替换Y的更新类型如下:

  • <装置,一个文件被传递到远程主机(发送)。
  • >那一个文件被传递到本地主机装置(接收)。
  • c意味着局部变化/创建正在发生该项目(如创建一个目录或符号链接的改变,等等)。
  • h意味着该产品的硬链接到另一个项目(需要--hard-链接)。
  • .表示该项目没有被更新(尽管它的属性可能正在被修改)。
  • *装置,所述的分项输出区域的其余部分包含一个消息(例如,“删除”)。

替换X的文件类型是:f对于文件,d对于目录,L对于符号链接,D对于设备,S对于特殊文件(例如,命名为sockets和fifos)。

上面字符串中的其他字母是如果要更新商品的相关属性或“。”将输出的实际字母。没有改变。这是三个例外:(1)新创建的项目用“ +”替换每个字母,(2)相同的项目用空格替换点,以及(3)未知属性用“?”替换每个字母 (与较旧的rsync通话时可能会发生这种情况)。

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

  • c意味着常规文件具有不同的校验和(需要--checksum),或者符号链接,设备或特殊文件的值已更改。请注意,如果您将文件发送到3.0.1之前的rsync,则此更改标志仅对校验和不同的常规文件存在。
  • A s表示常规文件的大小不同,并且将通过文件传输进行更新。
  • t意味着修改时间不同,并且正在被更新为发送者的值(需要--times)。T的替代值表示将修改时间设置为传输时间,这发生在没有--times的情况下更新文件/符号链接/设备以及更改符号链接且接收者无法设置其时间时。(注意:使用rsync 3.0.0客户端时,对于此时间设置失败,您可能会看到s标志与t组合在一起,而不是正确的T标志。)
  • A p表示权限不同,并且正在更新为发送者的值(需要--perms)。
  • o意味着所有者是不同的,并且正在更新为发送者的值(需要--owner和超级用户特权)。
  • 一个 g表示组不同,并且正在更新为发件人的值(需要--group和设置组的权限)。
  • u插槽保留供将来使用。
  • a方式的ACL信息改变。
  • 所述x改变了扩展属性信息的装置。

可能会有另一个输出:删除文件时,“%i”将为要删除的每个项目输出字符串“ * deleting”(假设您正在与最近的rsync交谈,它将记录删除而不是将它们输出为详细信息)。


该帖子/答案现在已经很老了,但是我不得不对此发表评论。这是我见过的有关rsync的最佳答案之一。谢谢麻省理工学院
豪尔赫

101

一段时间以前,我需要了解rsync我正在编写的脚本的输出。在编写该脚本的过程中,我四处搜寻并得出@mit 上面编写的内容。我使用该信息以及其他来源的文档来创建我自己的位标记入门,以及如何rsync为所有操作输出位标记(默认情况下不执行此操作)。

我将这些信息发布在这里,希望它可以帮助其他人(例如我)通过搜索在此页面上迷失方向,并且需要更好的解释 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 (e.g. 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 (e.g. "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
>f.s......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确定的更改列表收集到变量中(不进行任何更改),以便您可以对列表进行一些处理。类似于下面的内容将捕获变量中的输出:

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

在上面的示例中,(stdout)输出从rsync重定向到grep(通过stdin),因此我们只能隔离包含位标志的行。

处理捕获的输出:

然后可以记录该变量的内容以备后用,或立即对其进行迭代以查找感兴趣的项。在研究更多有关的过程中,我在脚本中使用了这种精确的策略rsync。您可以查看脚本(https://github.com/jmmitchell/movestough),以获得对捕获的输出进行后期处理以隔离新文件,重复文件(相同名称,相同内容),文件冲突(相同名称,不同)的示例。内容),以及子目录结构的更改。


1
很有用!日志输出中的-T是什么?
Pol Hallen

波尔,您是否在询问rsync的-T标志?
约翰·马克·米切尔

波尔,如果我正确理解了您的问题,则rsync日志中的t表示比较的两个文件具有不同的时间戳。意味着它们是在不同时间创建或修改的。
约翰·马克·米切尔

3
我相信输出中的“ T”表示时间已更新为当前时间“ <f..T ...... Rise.mp3”。至少这是我正在观察的。“ t”将是本地文件的时间。
C. Kelly

1
我迟了几年,但手册页中解释了“ t”与“ T”:a t表示修改时间不同,并且正在更新为发送者的值(需要--times)。T的替代值表示将修改时间设置为传输时间,这发生在没有--times的情况下更新文件/符号链接/设备以及更改符号链接且接收者无法设置其时间时。(注意:使用rsync 3.0.0客户端时,对于此时间设置失败,您可能会看到s标志与t组合在一起,而不是正确的T标志。)
user187557

2

1)Wodin,那不是完全正确的。如果使用--partial或-P标记(与--partial --progress相同),rsync将恢复中断的传输。

2)确实,这是--itemize-changes标记的常见输出。


2

1.)它会“重新开始同步”,但是不会传输大小和时间戳等相同的文件。它首先建立了一个要传输的文件列表,在此阶段,它将看到它已经传输了一些文件并会跳过它们。您应该告诉rsync保留时间戳等信息(例如使用rsync -a ...

虽然Rsync是传输文件,就会调用它像.filename.XYZABC代替filename。然后,当它完成传输该文件时,它将对其重命名。因此,如果在传输大文件时杀死rsync,则必须使用--partial选项继续传输,而不是从头开始。

2.)我不知道那是什么。您可以粘贴一些示例吗?

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

固定部分,如果我的答案基于若昂的


我在上面放了一些日志示例。谢谢。
GodFather 2010年

我已经更新了答案。代码在手册页中进行了说明。
Wodin 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.