我们运行许多 Web 应用程序,它们将大量本地数据存储在小型 xml 文件中。我们备份/恢复策略的一部分是通过 VPN 生成文件系统的本地镜像到托管中心。
VPN 连接仅通过 12Mbps ADSL,虽然有很多文件和目录,但实际更改的文件数量非常少。
尽管带宽可能是一个问题,但我看到的结果如下所示。robocopy /MIR 运行了 5 个小时,但实际执行复制只需要 30 分钟。
有没有人对如何改进这一点有任何建议。5 小时现在已经接近于太慢了,如果我们找不到加快速度的方法,那么我们将不得不提出一个完全不同的解决方案。
Total Copied Skipped Mismatch FAILED Extras
Dirs : 17625 6618 11007 0 0 0
Files : 1112430 1223 1111207 0 0 0
Bytes : 57.451 g 192.25 m 57.263 g 0 0 0
Times : 5:01:23 0:35:55 0:00:00 4:25:27
Speed : 93509 Bytes/sec.
Speed : 5.350 MegaBytes/min.
Ended : Fri Apr 16 05:54:23 2010
我使用 rsync for Windows 通过宽带连接进行复制。它应该是一个增量复制系统,它只复制每个文件的更改,而 robocopy 复制整个文件,如果它改变了一个位。(我有时想知道它是否真的这样做)
您还可以使用 robocopy /mon:x 开关并让它永久运行。这将在 robocopy 看到文件系统中的 x 更改时运行。如果它非常频繁地运行,那么只会发生少量更改。
您可以使用 Windows Server 中的文件复制功能,使用每个文件夹的 DFS 路径并将本地和远程文件夹设置为目标。
Robocopy 必须首先枚举所有本地和远程文件,以确定需要传输哪些文件。这很可能是需要时间的事情。
如果您在成功备份后重置存档文件属性怎么办:
然后每次写入文件时,存档位将自动设置。下次,您可以告诉 Robocopy 只归档设置了 A 标志的文件:
我没有对此进行测试,但我相信它应该更快,因为 Robocopy 需要处理的文件要少得多。
另一个想法是在远程服务器上运行计划作业(如果可能的话)以压缩整个目录结构,然后通过 VPN 复制生成的 zip 文件。XML 将很好地压缩,并且复制单个文件将比高延迟链接更有效。
我赞同 Charles Gargent 对 rsync 的建议。我通过 SSH 使用 rsync 和 Cygwin。如果我没记错的话,有一个非 cygwin 依赖的可执行文件可用。
rsync 相对于 robocopy 的一个巨大好处是,将在远程端生成一个 rsync 代理来执行该端的处理。远程代理可以检查远程文件系统,而无需将所有文件详细信息带回本地计算机进行处理。这比 robocopy 快得多,并且可能是您延迟 5 小时的原因。
您还可以使用 rsync over ssh 进行压缩,这可以进一步加快速度。
但是请注意,Cygwin 文件系统 ACL 和 Windows ACL 不能很好地配合使用。如果您需要 ACL 的完美副本,rsync 可能不适合您。我必须编写一个脚本来运行 xcacls 以在复制文件后“清理”我的文件的权限。
只是一些关于使用 attrib -a /s 来解决 robocopy 不足的说明。如果您要使用此解决方案,请在运行完整备份之前运行它。IE。完整备份通常需要很长时间,并且有些文件可能在备份时和之后运行 attrib 之间发生了变化,这可能意味着在以后的副本中丢失了这些更改。
关于此解决方案的第二个注意事项是,它仅在您的副本未被过滤时才能正常工作。如果您过滤备份或 robocopy 进程以避免临时文件和类似的垃圾,那么没有简单的方法可以确保 attrib 只查看复制进程查看的文件。那是; 您正在更改您实际上并未复制的文件的属性 - 这并不是一个好主意。
令人着迷的是,robocopy 似乎无法创建传统的完整备份……或者一次无法创建。你可以通过运行它两次来做到这一点。一次复制所有内容,然后再次使用 /M 复制,这一次实际上重置了存档位。什么皮塔饼。
XYZ 关于使用 ATTRIB 的缺点的评论很有帮助,但是仅仅在 robocopy /MIR 命令之后使用 robocopy /COPY /M 命令来选择性地重置存档位是不够的。除非它实际复制文件,否则 Robocopy 不会重置该位,并且(默认情况下)它不会复制“相同”文件。所以,
ROBOCOPY 源目标 /MIR
ROBOCOPY 源目标 /COPY /M
将使源上许多文件的存档位保持不变。(我希望这不是真的。)
Robocopy 源代码不太可能进一步调整,但我希望作者能为 /MIR 提供一个“this”,以便一次性重置存档位(例如,/MIR:A)。这对于在新系统上启动备份非常重要,但无论如何这表明 robocopy /MIR 不是“完整”备份解决方案。