OneDrive がファイルのサイズを変更するのはなぜですか?

OneDrive がファイルのサイズを変更するのはなぜですか?

ライブ SharePoint ドキュメント ライブラリを別のドキュメント ライブラリに移行するというタスクが課されました。ダウンタイムを最小限に抑えたいため、OneDrive を使用して 2 つのドキュメント ライブラリを自分の PC に同期し、robocopy を使用して 2 つのローカル コピーをミラーリングしています。これは、ネットワーク共有ではよくあることです。

しかし、ミラー コマンドを再実行したときに、robocopy が大量のファイルを再度コピーしたことに気付きました。変更は少数だろうと予想していましたが、数千ではないでしょう。また、robocopy はファイルに「変更」のフラグを付けていましたが、これは robocopy のコピー理由としては非常に珍しいと思います。つまり、タイムスタンプは変更されていないが、ファイルのサイズが変更されているということです...

さらに診断を進めると、再度コピーされていたのは pptx などの Office ドキュメントのみであることが判明しました。PDF やグラフィック ファイルなどの他のファイル タイプは、一度コピーされた後、再度コピーされていませんでした。

私は最終的に次の観察にたどり着きました:

  1. たとえば、cmd.exe copy を使用して OneDrive にファイルをコピーします。
  2. OneDriveでファイルサイズをすぐに確認すると、元のサイズと一致します
  3. 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

ファイル サイズが変化する理由を説明できる人はいますか? もう 1 つの観察結果は、OneDrive が「アップロード中」と表示し、その後すぐに「ダウンロード中」と表示することです。このとき、ファイル サイズが変化します。

OneDrive では同期ツールの使用がかなり難しくなります。言うまでもなく、Google Drive や Dropbox では同じ問題はありません。

最後に注意: OneDrive の「オンデマンド」が有効になっています。

答え1

Microsoft とこの件について話し合い、上記のリンク先の記事を読んだところ、これは「設計によるもの」で、OneDrive はアップロード後に Office ドキュメントに追加のメタデータを追加するため、アップロードしてすぐにダウンロードされるのだそうです。そのため、ファイルのサイズが変わります。これは、ドキュメントの整合性を確保するためにファイル サイズ/MD5 チェックサムに依存している人にとっては問題です。これは、OneDrive の個人バージョンでは発生しないようで、Office 以外のドキュメントは変更されません。

関連情報