我们的 Intranet 上有一个文件夹结构,其中包含大约 800,000 个文件,分为大约 4,000 个文件夹。我们需要将其同步到我们 DMZ 中的一小部分机器。结构的深度非常浅(它永远不会超过两层深)。
大多数文件永远不会改变,每天有几千个更新文件和 1-2000 个新文件。数据是在源数据已被清除的地方维护的历史报告数据(即,这些是源数据足够旧以至于我们存档和删除它的最终报告)。每天同步一次就足够了,因为它可以在合理的时间范围内发生。报告是在一夜之间生成的,我们早上第一件事就是同步作为计划任务。
显然,由于很少有文件定期更改,我们可以从增量复制中受益匪浅。我们已经尝试过 Rsync,但是仅仅完成“构建文件列表”操作就可能需要长达八到十二个小时的时间。很明显,我们正在迅速超越 rsync 的能力(12 小时的时间框架太长了)。
我们一直在使用另一个名为 RepliWeb 的工具来同步结构,它可以在大约 45 分钟内完成增量传输。然而,我们似乎已经超出了它的限制,它已经开始看到文件显示为删除,而实际上它们不是(也许某些内部内存结构已经耗尽,我们不确定)。
有没有其他人遇到过这种大规模的同步项目?是否有设计用于处理像这样的大量文件结构以进行同步?
如何rsync知道哪些文件已更改,哪些未更改?它是否将其数据记录在文件中的任何位置?
因为我想做增量备份,但首先它会传输所有文件。
所以我的主要问题是:如果我通过 FTP 而不是通过rsync. 请问rsync仍然跳过那些已存在的文件,否则将上载在第一次运行的一切。
我通过安装份额(份额被安装在Linux文件transfering到Windows 7从视窗上的Linux)..我复制大量数据(即近TB)从旧到新机器上我的局域网内. 我已经很不幸了,我只有 100MBit。自然地,我盲目地使用了 rsync,但在一天后已经想知道为什么它感觉如此缓慢。启用进度表显示我的传输速率约为 2MB/s 。
所以我拿了一个合理的大文件(800MB)并跟踪传输时间(1):
cp : 05:33
scp (2): 06:33
rsync : 21:51
Run Code Online (Sandbox Code Playgroud)
1) 我删除了每次运行之间的文件
2) 通过 localhost scp 到同一台 Linux 机器直接到共享;完全没用,但提供了一个进度表
测试很简单
(cp|scp|rsync) <source> <destination>
Run Code Online (Sandbox Code Playgroud)
除了 scp 的主机/端口外,没有特殊参数。我什至尝试-W切换 rsync 但十分钟后取消。rsync 是在 Lenny 上运行的 3.0.3。能够随时中断复制过程并恢复使我使用 rsync,但现在我认为我真的需要重新考虑这个要求。
怎么可能有这么大的差别?
更新/解决:
感谢rschuler,我能够解决这个问题:出于效率原因,使用 rsync 守护进程而不是 smb 挂载。所说的 DeltaCopy 有效,但必须注意一些事项
rsync 是我项目的好选择吗?
我必须:
- 通过 SSH 将文件从源文件夹复制到目标文件夹,
- 确保所有文件都已复制,
-复制后删除源文件。
- 如果我有冲突名称,我必须重命名文件。
看起来我可以使用选项:--remove-source-files(删除源文件)
但是rsync如何管理冲突,我可以有规则吗?
我的项目中的用例:
我在服务器 A 上运行科学计算并将结果插入文件夹“process”中,对于每个计算,我都有一个这样的存储库:/process/calc1。
现在我想将存储库“/calc1”传输到服务器 B(我得到 /process/calc1),并从服务器 A 中删除“calc1”
。...在另一次计算中,我在服务器 A 上得到“/process/calc2”,这个想法也是将“calc2”移动到服务器 B 上的“/process/”目录中,然后我现在在服务器 B 上:
- /process/calc1
- /process/calc2
(并且服务器 A 上的 /process/ 是空的)。
如果在新计算后在服务器 A 中有另一个像“/process/calc1”这样的文件夹(如果服务器 B 上已经存在“/process/calc1”),rsync 将如何管理冲突(在服务器 B 上)?
是否可以使用 rsync 添加规则,并在服务器 B 中通过“process/calc1R2”重命名“/process/calc1”?依此类推(例如:calc1R3)?
谢谢。
我正在尝试制定 rsync 过滤器语法来执行复杂的包含/排除,并尝试实现以下目标:
Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*
Run Code Online (Sandbox Code Playgroud)
我在过滤器语法上尝试了许多变体,尽管多次阅读手册页,但我无法获得这种效果。Rsync 过滤器似乎非常强大,我很难相信它们无法处理诸如此类的常见情况。
我有大量的相对性小数据文件,但它们占用了大约 50 GB,我需要将它们转移到另一台机器上。我试图想出最有效的方法来做到这一点。
我的想法是 gzip 整个事情,然后 rsync 它并解压缩它,依靠 rsync -z 进行压缩,gzip 然后使用 rsync -z。我不确定哪个最有效,因为我不确定 rsync -z 是如何实现的。关于哪个选项最快的任何想法?
这可能是一个愚蠢的问题,但我想保持我的一些服务器干净并且不想安装任何其他软件。
但我一直认为 rsync 会通过 SSH 复制数据并且不需要远程端的 rsync ?
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh root@server01:/etc /.snapshot/hourly.0/server01
rsync: command not found
Run Code Online (Sandbox Code Playgroud) 我正在使用rsync(1)在源区域和目标区域之间同步文件,其中目标目录层次结构包含符号链接。
当源目录与目标区域中的符号链接具有相同的名称和相对路径时,rsync 会用复制的源目录及其所有内容替换符号链接。我希望 rsync 保持符号链接完好无损,并且只复制如果符号链接是真正的目录就会被复制的文件。
我目前正在使用-Cvrtprsync 选项。我知道这个--links选项,但这似乎只与源区域中的符号链接有关。
有没有办法通过 rsync 获得我正在寻找的行为?
我正在使用脚本在sudo crontab. 该脚本执行 2 路 rsync(从 serverA 到 serverB 并反向)。重新启动两台服务器计算机后,rsync 无法在sudo crontab. 我还设置了一个新的 cronjob 但它失败了,错误是:
rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6]
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
Run Code Online (Sandbox Code Playgroud)
但是,当从终端运行时,rync 脚本按预期工作,没有问题。请帮忙。
我需要将文件树 rsync 到 kubernetes 集群中的特定 pod。如果只有一个人可以说服 rsync 相信 kubectl 的行为有点像 rsh,那似乎应该是可能的。就像是:
rsync --rsh='kubectl exec -i podname -- ' -r foo x:/tmp
Run Code Online (Sandbox Code Playgroud)
...除了这会遇到 x 问题,因为 rsync 假设需要一个主机名:
exec: "x": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)
我似乎找不到帮助 rsync 构建 rsh 命令的方法。有没有办法做到这一点?或者可以通过管道实现相对高效的文件传输的其他方法?
(我知道gcloud compute copy-files,但它只能在节点上使用?)
rsync ×10
backup ×3
compression ×1
incrontab ×1
kubernetes ×1
linux ×1
performance ×1
sftp ×1
ssh ×1
unison ×1
unix ×1