我的任务是将一个实时 SharePoint 文档库迁移到另一个文档库。由于我们希望将停机时间降至最低,我使用 OneDrive 将两个文档库同步到我的 PC,并使用 robocopy 在两个本地副本之间进行镜像。对于网络共享来说,这是相当常规的事情。
但是,我注意到当我重新运行镜像命令时,robocopy 再次复制了大量文件。我预计会有少量更改,但不会是数千个。此外,robocopy 将文件标记为“已更改”,在我看来,这是 robocopy 非常不寻常的复制原因 - 这意味着时间戳没有改变,但文件大小已经改变...
进一步诊断发现,只有 Office 文档(例如 pptx)被再次复制。其他文件类型(例如 PDF 和图形文件)被复制一次后就不再复制。
我最终追踪到了这一观察:
- 使用(例如)cmd.exe copy 将文件复制到 OneDrive
- 立即在 OneDrive 中查看文件大小,其大小与原始大小一致
- 等到 OneDrive 同步后再检查文件大小
大小已更改。以下是复制文件、立即获取大小、等待 15 秒(同步)并再次获取大小的 PowerShell 脚本。
$SourceFile = "S:\Temp\Helios\Library\Example.pptx"
$TargetFile = "C:\Users\rob.nicholson\Helios Medical Communications\Library - Documents (unused)\Example.pptx"
Copy-Item $SourceFile $TargetFile
$Length1 = (Get-Item $SourceFile).Length
$Length2 = (Get-Item $TargetFile).Length
Start-Sleep 15
$Length3 = (Get-Item $TargetFile).Length
Write-Host "Orignal size: $Length1"
Write-Host "After copy size: $Length2"
Write-Host "After sync size: $Length3"
这是输出:
Source size: 1996810
After copy size: 1996810
After sync size: 1997141
有人能解释一下文件大小为什么会改变吗?另一个观察结果是,OneDrive 会显示“正在上传”,然后立即显示“正在下载” - 此时文件大小会发生变化。
这使得使用 OneDrive 同步工具变得相当困难。不用说,Google Drive 或 Dropbox 不会有同样的问题。
最后说明一下:OneDrive“按需”功能已启用。
答案1
在与 Microsoft 讨论并阅读上面链接的文章后,我发现这是“设计使然”,因为 OneDrive 会在上传 Office 文档后向其添加额外的元数据,因此它们会立即上传并下载。因此,这会改变文件的大小。对于那些可能依赖文件大小/MD5 校验和来确保文档完整性的人来说,这是一个问题。个人版 OneDrive 似乎不会发生这种情况,非 Office 文档也不会发生变化。