在备份之前检测 Linux 上移动或重命名的文件的工具或脚本

Pha*_*aun 15 untagged

基本上,我正在搜索是否存在可以检测移动或重命名文件的工具或脚本,以便我可以获得重命名/移动文件的列表,并在网络的另一端应用相同的操作以节省带宽。

基本上磁盘存储很便宜但带宽不是,问题是文件通常会被重新组织或移动到更好的目录结构中,因此当您使用 rsync 进行备份时,rsync 不会注意到它已重命名或尽管另一端有相同的文件,但已移动文件并再次通过网络重新传输它。

所以我想知道是否存在一个脚本或工具可以记录所有文件的位置及其名称,然后在备份之前,它会重新扫描并检测移动或重命名的文件,然后我可以获取该列表并重新应用另一侧的移动/重命名操作。

以下是文件的“一般”功能列表:

  1. 大文件不变
  2. 它们可以重命名或移动

[编辑:]这些都是很好的答案,我最终要做的是查看所有答案,并将编写一些代码来处理这个问题。基本上我现在在想/正在做的是:

  1. 使用 AIDE 之类的东西进行“初始”扫描,并使我能够对文件进行校验和,因为它们应该永远不会改变,因此它有助于检测损坏。
  2. 创建一个 inotify 守护进程来监视这些文件/目录并记录与重命名相关的任何更改并将文件移动到日志文件中。
  3. 在某些极端情况下,inotify 可能无法记录文件系统发生的事情,因此最后一步是使用 find 搜索文件系统以查找更改时间晚于上次备份的文件

这有几个好处:

  1. 来自 AIDE 的校验和/等能够检查/确保某些媒体没有损坏
  2. Inotify 保持低资源使用率,无需一遍又一遍地重新扫描文件系统
  3. 无需修补 rsync;如果我必须打补丁,我可以,但我宁愿避免打补丁以降低负担(IE 不需要在每次有更新时重新打补丁)。
  4. 我以前使用过 Unison 并且它真的很好,但是我可以发誓 Unison 确实在文件系统上保留了副本,并且它的“存档”文件可能会变得相当大?

Mar*_*ner 7

Unison http://www.cis.upenn.edu/~bcpierce/unison/声称能够检测移动和重命名。

rsync 有几个补丁可以添加移动/重命名检测:

http://gitweb.samba.org/?p=rsync-patches.git;a=blob;f=detect-renamed-lax.diff;h=1ff593c8f97a97e8970d43ff5a62dfad5abddd75;hb=master

http://gitweb.samba.org/?p=rsync-patches.git;a=blob;f=detect-renamed.diff;h=c3e6e846eab437e56e25e2c334e292996ee84345;hb=master

跟踪此问题的 Bugzilla 条目:https ://bugzilla.samba.org/show_bug.cgi?id =2294

  • 为什么不集成这些补丁?他们只是添加标志,他们没有侵入性。另一个有趣的补丁是 [rsyncsums](http://rsync.mirror.aussiehq.net.au/patches/checksum-reading.diff),它可以在 rsync 运行之间保持校验和。 (6认同)

pjz*_*pjz 5

这是一个有点奇怪的解决方案,但是... git 根据文件内容检测移动和重命名,因此如果您将有问题的目录置于版本控制之下,那么 git 将能够检测移动等并避免传输内容(因为它已经在电线的两侧),同时仍然在树中移动东西。

只是一个想法。

  • 是的,我考虑过这一点,如果文件很小且基于文本,这可能会很好用,但它们是二进制的,总大小接近 TB。 (2认同)

小智 5

有趣的建议在这里。还考虑使用文件系统功能,即 ZFS。奇怪的是没有工具可以做这么简单的事情。正如人们所报告的那样,Unison 选项在大多数情况下不起作用,对我来说也不适用。

我希望该功能可以在重新整理文件夹时将我的电影收藏备份在第二个硬盘上保持同步。

现在我找到了这个简单的 C 脚本http://sourceforge.net/projects/movesync/

似乎工作正常。运行它,然后与 ie unison 正常同步。


War*_*ner 4

您也许能够使用基于主机的 IDS(例如AIDE)并使用其输出编写包装器脚本。考虑到校验和,您可能必须编写更复杂的逻辑。

否则,基于网络的文件系统可能有意义,因为更改将反映在所有位置。尽管如此,我怀疑您正在通过互联网传输,这将限制这里的选择。