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

God*_*her 96 backup logging rsync

我正在做一个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
Run Code Online (Sandbox Code Playgroud)

谢谢.

mit*_*mit 167

让我们来看看rsync如何工作并更好地理解隐藏的结果行:

1 - rsync的一个巨大优势是在中断后下一次顺利继续.

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

2 - 如果您阅读了-i, --itemize-changesin 部分,则每个字符都是可以翻译的代码man 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
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

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

> - the item is received
f - a regular file
+++++++++ - this is a newly created item
Run Code Online (Sandbox Code Playgroud)

rsync手册页的相关部分:

-i, - item-changes

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

"%i"转义具有一个长达11个字母的神秘输出.一般格式类似于字符串YXcstpoguax,其中Y由正在完成的更新类型替换,X由文件类型替换,而其他字母表示在被修改时可以输出的属性.

替换Y的更新类型如下:

  • A <表示文件正在传输到远程主机(已发送).
  • A >表示文件正在传输到本地主机(已接收).
  • A c表示项目正在进行本地更改/创建(例如创建目录或更改符号链接等).
  • A h表示该项目是另一个项目的硬链接(需要--hard-links).
  • A .表示项目未更新(尽管可能具有正在修改的属性).
  • A *表示逐项输出区域的其余部分包含消息(例如"删除").

替换X的文件类型是:f用于文件,d用于目录,L用于符号链接,D用于设备,以及S用于特殊文件(例如,命名套接字和fifos).

上面字符串中的其他字母是在更新项目的关联属性或"."时将输出的实际字母.没有变化.对此有三个例外:(1)新创建的项目用"+"替换每个字母,(2)相同的项用空格替换点,(3)未知属性用"?"替换每个字母.(与较旧的rsync交谈时可能会发生这种情况).

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

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

另一个输出是可能的:当删除文件时,"%i"将为正在删除的每个项目输出字符串"*删除"(假设您正在与最近足够的rsync进行通信,它会记录删除而不是将其输出为一个冗长的消息).

  • 这篇文章/答案现在已经很老了,但我不得不写一条评论。这是我见过的关于 rsync 的最佳答案之一。谢谢米特 (6认同)

Joh*_*ell 81

一段时间后,我需要了解rsync我正在编写的脚本的输出.在写这个剧本的过程中,我用Google搜索并找到了@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")
Run Code Online (Sandbox Code Playgroud)

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/
Run Code Online (Sandbox Code Playgroud)

捕获rsync输出(专注于位标志):

在我的实验,无论是--itemize-changes标志-vvv标志需要获得rsync输出对于一款入门所有文件系统的变化.如果没有triple verbose(-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|\*).......... .')
Run Code Online (Sandbox Code Playgroud)

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

处理捕获的输出:

然后可以记录变量的内容供以后使用,或者立即针对感兴趣的项目迭代.我在研究过程中编写的脚本中使用了这个确切的策略rsync.您可以查看脚本(https://github.com/jmmitchell/movestough),了解对捕获的输出进行后处理以隔离新文件,重复文件(相同名称,相同内容),文件冲突(同名,不同)的示例内容),以及子目录结构的变化.

  • 我晚了几年,但手册页中解释了“t”与“T”: t 表示修改时间不同,并且正在更新为发送者的值(需要 --times)。T 的替代值意味着修改时间将设置为传输时间,当文件/符号链接/设备在没有 --times 的情况下更新时以及当符号链接更改且接收器无法设置其时间时,会发生这种情况。(注意:当使用 rsync 3.0.0 客户端时,您可能会看到 s 标志与 t 组合,而不是针对此时间设置失败的正确 T 标志。) (4认同)
  • 我相信输出中的“ T”表示时间已更新为当前时间“ &lt;f..T ...... Rise.mp3”。至少这是我正在观察的。“ t”将是本地文件的时间。 (3认同)
  • 很有用!日志输出中的 -T 是什么? (2认同)