在更新源代码时使用rsync安全吗?


19

rsync假设可以在运行rsync的情况下很好地对其进行修改,那么在安装和写入源文件系统时使用它是否安全?我认为在比赛条件下我可能不会得到最新的修改,但是有腐败的风险吗?


1
您是否担心更改时的一致性(文件之间的关联,如数据文件和某些关联的元数据文件,日志等)或损坏(在单个文件内)?
CVn 2013年

好一点,我没有考虑文件之间的一致性。我不知道rsync该怎么做,只有快照可以,但是我更担心文件中的损坏。
brianmearns 2013年

Answers:


20

rsync在读写安装的文件系统上使用是相当安全的。当rsync启动它建立一个文件列表,然后开始复制这些文件。在运行期间不会更新此文件列表。然后复制实际数据。

这意味着在建立文件列表 更改rsync文件时,它将复制内容。但是,在建立文件列表之后添加rsync新文件时,不会复制该新文件。如果在建立文件列表后删除rsync文件,rsync将警告它无法复制该文件。请记住,这rsync不是快照,这意味着很难说出rsync何时复制了数据。

另一方面,文件系统或卷管理器快照(例如使用ZFS或LVM)是即时创建的,并且是文件系统在明确定义的时间点上的一致快照,然后可以将其复制到另一台主机。rsync不提供这种一致性。

编辑:正如其他人在评论中指出的那样,有rsync可能实际上会损坏您的文件。当rsync开始读取文件并且应用程序正在同时写入该文件时,您可能最终得到损坏的文件。


2
添加了有关已删除文件的注释。如果我可以为卷管理器快照+ rsync建议,可能会再给我一个赞。我唯一感觉不到此答案的是在复制过程中更改源上的文件时rsync的行为。我怀疑它是否处理得好。
CVn 2013年

同意 如果要确保某些文件是一致的,是否需要操作系统支持?
托尔比约恩Ravn的安徒生

1
如果源端的应用程序首先写入临时文件,然后将其移到适当位置,则适用此答案。如果应用程序打开了一个要写入的现有文件,而rsync恰好正在读取该文件,则rsync可能会复制旧版本和新版本的损坏组合。
吉尔斯(Gillles)“所以-别再邪恶了”

@吉尔斯感谢您指出这一点。我更新了答案。这与rsync有关吗,或者在其他应用程序写入同一文件时读取的任何应用程序都发生这种情况吗?
Marco Marco

1
@Marco任何应用程序都将发生这种情况,除非两者都使用某种锁定协议(unix没有强制性的锁,只有咨询性的锁,即只有每个人都在使用它们的锁才有效)。这就是为什么在考虑同时修改的情况下修改文件的常规协议是写入一个临时文件然后将其移到适当位置的原因。
吉尔斯(Gillles)“所以-别再邪恶了”
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.