我们运行了许多 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
答案1
Robocopy 必须先枚举所有本地和远程文件,以确定哪些文件需要传输。这很可能是耗时的操作。
如果在成功备份后重置存档文件属性会怎么样?
attrib -a /s *
然后,每次写入文件时,都会自动设置存档位。下次,您可以告诉 Robocopy 仅存档设置了 A 标志的文件:
robocopy source destination /mir /a
我还没有测试过,但我相信它应该更快,因为 Robocopy 需要处理的文件要少得多。
另一个想法是在远程服务器上运行计划作业(如果可能的话)以压缩整个目录结构,然后只需通过 VPN 复制生成的 zip 文件即可。 XML 将很好地压缩,并且在高延迟链接上复制单个文件将更加高效。
答案2
我使用 rsync for Windows 通过宽带连接进行复制。它据称是一个增量复制系统,只复制每个文件的变化,而 robocopy 则复制整个文件,只要文件有一点变化。(说实话,我有时想知道它是否真的这样做)
您还可以使用 robocopy /mon:x 开关并使其永久运行。当 robocopy 看到文件系统中的 x 个更改时,它将运行。如果它运行得非常频繁,那么只会发生少量更改。
您可以使用 Windows Server 中的文件复制功能,对每个文件夹使用 DFS 路径并将本地和远程文件夹设置为目标。
答案3
我赞同 Charles Gargent 对 rsync 的建议。我使用 Cygwin 通过 SSH 使用 rsync。如果我没记错的话,有一个不依赖于 Cygwin 的可执行文件可用。
rsync 相对于 robocopy 的一个巨大优势是,它会在远程端生成一个 rsync 代理来执行该端的处理。远程代理可以检查远程文件系统,而不必将所有文件详细信息带回本地机器进行处理。这比 robocopy 快得多,这可能是您延迟 5 小时的原因。
您还可以通过 ssh 使用 rsync 压缩,这可以进一步加快速度。
但是请注意,Cygwin 文件系统 ACL 和 Windows ACL 不能很好地协同工作。如果您需要 ACL 的完美副本,rsync 可能不适合您。我不得不编写一个脚本来运行 xcacls 以在复制文件后“清理”文件上的权限。
答案4
XYZ 关于使用 ATTRIB 的缺点的评论很有帮助,但是仅仅在 robocopy /MIR 命令后面跟上 robocopy /COPY /M 命令来选择性地重置存档位是不够的。Robocopy 不会重置该位,除非它实际复制了文件,并且(默认情况下)它不会复制“相同”文件。因此,
ROBOCOPY 源目标/MIR
ROBOCOPY 源目标/COPY/M
将使源上的许多文件的存档位保持不变。(我希望这不是真的。)
Robocopy 源代码不太可能进一步调整,但我希望作者能为 /MIR 提供一个“this”,以便一次性重置存档位(例如 /MIR:A)。这对于在新系统上启动备份最为重要,但无论如何,这表明 robocopy /MIR 不是“完整”备份解决方案。