![数据复制工具/方法](https://linux22.com/image/496175/%E6%95%B0%E6%8D%AE%E5%A4%8D%E5%88%B6%E5%B7%A5%E5%85%B7%2F%E6%96%B9%E6%B3%95.png)
我正在尝试将大量数据(几百 GB,包含各种大小的文件夹和文件)从 Windows 2008 服务器上的本地存储复制到另一台服务器上的 CIFS 共享。只能通过 CIFS 访问 CIFS 共享空间,并且无法以任何方式“登录”(通过 ssh 或 RDP 或类似方式)托管 CIFS 共享的系统。必须维护所有权限,必须维护所有文件夹树和文件名,并且必须在合理的时间内完成复制。服务器不能长时间离线,并且无论使用什么方法/工具都必须是免费的。
微软的“RichCopy”实用程序似乎无法覆盖运行它的帐户无权访问的文件夹的权限。但是,它提供了线程复制功能,由于存在大量非常小的文件,因此这对于快速复制数据似乎至关重要。
我读过其他几篇有类似问题的帖子,但大多数都与 Linux 环境有关,或者没有相同的要求。这里有很多细节,但我希望有人能帮我找到一个好的解决方案!
答案1
Windows 2008 版 Robocopy 可以正确处理权限,在需要覆盖 ACL 的限制时调用备份权限(通过 /B 或 /ZB 开关),这些限制会拒绝运行复制的帐户直接访问文件\目录。它还支持多线程复制(通过 /MT 开关,默认值为 8,最大值为 128)。/Z(或 /ZB)开关提供部分复制\恢复。
/B 选项要求用户可以调用备份权限 - 管理员或备份操作员组成员的用户都可以调用此权限。您使用的帐户应满足源和目标上的这些要求。
我注意到 Robocopy 的一个怪癖是 /B 或 /ZB 开关仅当您从源系统运行 Robocopy 到目标时才可靠地工作,在拉模式下,当您在目标系统上运行它时,我看到了访问被拒绝错误。
答案2
我用过泰拉复制 很多次都非常成功。我相信它正确地维护了所有权限。计算机是否在同一个域中?如果不是,则可能存在用户存在于一台计算机上而另一台计算机上不存在的问题,但我不知道有什么解决方案可以解决这个问题。
TeraCopy 还使用线程复制,因此比内置的 Windows 复制方法快得多。如果您在复制过程中因任何原因需要暂停或停止,它将从中断处恢复。
至于复制您无权复制的文件,我不确定是否有任何实用程序能够做到这一点。在我的 Windows 2003 域中,有一个名为 Backup Operators 的内置安全组,描述为“成员可以绕过文件安全性来备份文件”。如果您是该组的成员,您可能能够做您想做的事情。
答案3
我尝试按照上述 Helvick 的建议下载 Windows 2008 R2 评估版。我制作了一个虚拟机来运行操作系统,因为我目前无法将数据源服务器升级到 R2。
在此过程中,我遇到了不少障碍,最终发现,即使设置了 /B 和 /MIR 开关,Robocopy 也只能在源服务器(也可能是目标服务器)上运行才能正确传输 ACL。如果在中间设备上运行,即使数据已复制,在目标端设置 ACL 也会失败。然后,Robocopy 会将其有权访问的最深文件夹的 ACL 应用于树中该级别以下的所有数据,这是不可接受的。除此之外,通过中间服务器运行复制的开销太高,大大降低了复制速度。
但是,在源服务器上运行时,2008 Vanilla 版本的 Robocopy 能够顺利传输和实施 ACL。幸运的是,我们还发现非线程 Robocopy 的速度足以完成这种数据迁移。但是,如果我可以将源服务器更新到 2008 R2,我毫不怀疑使用多线程数据复制绝对会飞起来。
希望微软的小伙子们能很快为 RichCopy 添加“备份”模式,这样它就会成为一个超级有用的小实用程序。