使用 rsync、多个 rsync 进程、移动/重命名源文件损坏文件

使用 rsync、多个 rsync 进程、移动/重命名源文件损坏文件

我在使用 rsync 时遇到一些文件损坏(即文件内容与源文件不匹配)。我可以理解,如果在同步时写入文件,文件就会损坏,但我不认为它正在被写入。在其他情况下会发生腐败吗?

1. 文件正在被多个rsync进程同时同步。

这似乎是一件不必要且可能危险的事情。但我们假设这是必要的。我想这两个 rsync 进程将源同步到两个单独的临时文件。每个完成后,它都会执行原子重命名,以用临时文件替换目标文件。我不明白这怎么会导致腐败。在最坏的情况下,我可以看到较早的 rsync 最后完成并导致目标文件同步到该文件的潜在较旧版本。

2. 同步期间源文件被移动/重命名。

也就是说,另一个文件被重命名为与当前同步的文件具有相同的名称。假设源端的 rsync 进程打开源文件一次且仅一次,我不明白这会如何导致损坏。当文件被重命名以取代源时,rsync 已打开的文件不会更改。它应该继续在原始的、未修改的(假设没有进程正在写入)源上运行。

我可能对 rsync 的工作原理做出了错误的假设。请随时纠正任何错误。

答案1

这里的问题到底是什么?

您应该在您的调用模式上添加一些详细信息,rsync以获得任何有意义的帮助。我已经使用了rsync很多年没有问题。我认为可以肯定地说,任何明显的损坏都是由于对这个多功能工具的不当使用造成的。如果没有通过-crsync则根据修改时间和大小跳过。即使您通过了-c,如果您也通过了并且文件在接收器上较新,rsync则不会更新。-u如果通过--inplacersync则就地更新目标文件。我只是举这些例子来表明有一个很多的选项之间的交互rsync,并且您确实需要添加有关如何调用的详细信息rsync

我可以理解,如果在同步时写入文件,文件就会损坏,但我不认为它正在被写入。

与其猜测,不如运行inotify(例如,在文件的包含目录上)来确定该文件在任何时候仅由一个进程更新?

相关内容