我正在做一个rsync来备份我的服务器文件,我有两个问题:
1 - 在进程的中间我需要停止并再次启动rsync,我想知道rsync是否会在它停止的同一点开始,或者它将重新启动同步?
2 - 在日志文件中将此字符串显示在所有文件“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
感谢。
答案 0 :(得分:157)
让我们看一下rsync如何工作并更好地理解神秘的结果行:
1 - rsync的一个巨大优势是在中断后下一次顺利继续。
如果在此期间未更改文件,则下一次rsync调用将不再传输它已经传输的文件。但它会从头开始再次检查所有文件,因为它不知道它已被中断。
2 - 如果您阅读-i, --itemize-changes
中man rsync
的部分
从问题中解码您的示例日志文件:
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
. - 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
> - 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一起使用,但这也会打开其他详细信息的输出 - 先贤)。
“%i”转义具有一个长达11个字母的神秘输出。一般格式类似于字符串YXcstpoguax,其中Y由正在完成的更新类型替换,X由文件类型替换,其他字母表示在修改时可以输出的属性。
替换Y的更新类型如下:
<
表示文件正在传输到远程主机(已发送)。>
表示文件正在传输到本地主机(已接收)。c
表示项目正在进行本地更改/创建(例如创建目录或更改符号链接等)。h
表示该项目是指向其他项目的硬链接(需要--hard-links)。.
表示该项目未更新(尽管可能包含正在修改的属性)。*
表示逐项输出区域的其余部分包含一条消息(例如“删除”)。替换X的文件类型为:f
表示文件,d
表示目录,L
表示符号链接,D
表示文件类型设备和S
用于特殊文件(例如命名套接字和fifos)。
上面字符串中的其他字母是在更新项目的关联属性或“。”时将输出的实际字母。没有变化。对此有三个例外:(1)新创建的项目用“+”替换每个字母,(2)相同的项用空格替换点,(3)未知属性用“?”替换每个字母。 (与较旧的rsync交谈时可能会发生这种情况。)
与每个字母关联的属性如下:
c
表示常规文件具有不同的校验和(需要--checksum),或者符号链接,设备或特殊文件的值已更改。请注意,如果要将文件发送到3.0.1之前的rsync,则此更改标志仅适用于校验和不同的常规文件。s
表示常规文件的大小不同,将通过文件传输进行更新。t
表示修改时间不同,并且正在更新为发件人的值(需要 - 次)。 T的替代值意味着修改时间将设置为传输时间,这在没有 - 次更新文件/符号链接/设备且更改符号链接且接收器无法设置其时间时发生。 (注意:使用rsync 3.0.0客户端时,您可能会看到s标志与t结合而不是正确的T标志,因为此时间设置失败。)p
表示权限不同,并且正在更新为发件人的值(需要--perms)。o
表示所有者不同,并且正在更新为发件人的值(需要 - 所有者和超级用户权限)。g
表示该组不同,并且正在更新为发件人的值(需要--group和设置该组的权限)。u
广告位仅供将来使用。a
表示ACL信息已更改。x
表示扩展属性信息已更改。另一个输出是可能的:当删除文件时,“%i”将为每个被删除的项目输出字符串“*删除”(假设您正在与最近足够的rsync进行对话,它会记录删除而不是输出它们作为详细消息)。
答案 1 :(得分:73)
一段时间后,我需要了解我正在编写的脚本的rsync
输出。在编写脚本的过程中,我用Google搜索了@me撰写的above。我使用了这些信息,以及其他来源的文档,在bit标志上创建了自己的入门,以及如何让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
输出 all 文件系统更改。如果没有三重详细(-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|\*).......... .')
在上面的示例中,rsync
的(stdout)输出被重定向到grep
(通过stdin),因此我们只能隔离包含位标志的行。
处理捕获的输出:
然后可以记录变量的内容供以后使用,或者立即迭代感兴趣的项目。我在研究更多关于rsync
的过程中使用的脚本中使用了这个确切的策略。您可以查看脚本(https://github.com/jmmitchell/movestough),了解对捕获的输出进行后处理的示例,以隔离新文件,重复文件(相同名称,相同内容),文件冲突(相同名称,不同内容),以及子目录结构的变化。
答案 2 :(得分:2)
1)Wodin, 这并不完全正确。 如果使用--partial或-P标签(与--partial --progress相同) rsync恢复中断的传输。
2)确切地说,这是--itemize-changes标签的常见输出。
答案 3 :(得分:1)
1。)它将“重新启动同步”,但它不会传输大小和时间戳相同的文件等。它首先构建要传输的文件列表,在此阶段它将看到它已经转移了一些文件并将跳过它们。你应该告诉rsync保留时间戳等(例如使用rsync -a ...
)
当rsync传输文件时,它会将其称为.filename.XYZABC
而不是filename
。然后,当它完成传输该文件后,它将重命名它。因此,如果在传输大文件时终止rsync,则必须使用--partial选项继续传输而不是从头开始。
2。)我不知道那是什么。你能粘贴一些例子吗?
编辑:根据http://ubuntuforums.org/showthread.php?t=1342171,这些代码在-i, --itemize-changes
选项的rsync手册页中定义。
如果我的回答基于Joao的
,则修复了部分内容