アメリエフの技術ブログ

Amelieff Staff Blog

Excelファイルをrcloneで転送する際に困った話

こんにちは、最近はデータ解析コンサルティングを担当することが多い tsuyuh です。
なんだかとてもご無沙汰している気がします。

今回は、以前に何度か投稿した rclone に関する話をしたいと思います。

rclone を使えるとサーバ⇔クラウドストレージ間のデータ移行が非常に楽になります。
しかしながら、送るファイルによっては途中でエラーが出ることがあります。
その時、もしエラー出力を見逃したら、最悪の場合ファイルを消失させてしまうかもしれません。

昔、Excelファイルを含むフォルダをサーバからクラウドストレージに自動転送させていたら、エラーが起こって途中で止まっていた、なんてことがありました。
色々検証してみたところ、Excelファイル形式に特有の問題であることがわかったので、備忘録がてら以下に記載します。

もし気づかずに元ファイルを消してしまっていたら...と思うとゾッとします。

(関連記事)
staffblog.amelieff.jp
staffblog.amelieff.jp

yatteshimatta

状況

とあるExcelファイルを、Linuxサーバから SharePointに転送したかった

原因と対策

rclone はアップロードしたファイルの「サイズ」と「MD5ハッシュ値」を自動的に計算して、アップロード前後で破損がなかったかどうかをチェックしてくれます。

これはこれで非常に嬉しい機能なんですが、Excelファイルなど一部のファイルはデータ移行前後で「サイズとハッシュ値が違う」と認識されてしまうようです。

詳しいことは理解できていませんが、
Excelファイルの特殊な構造 (様々な関連ファイルを一纏めにした構造) が関係しているのかもしれません。(弊社システム担当者談)
SharePoint は Excelファイルの構造を少し婉曲して捉えているんですかね...?

そのため、そのようなファイルを含むフォルダをクラウドストレージに転送しようとすると、下記のようなエラーが出ます。

Failed to copy: corrupted on transfer: sizes differ 99182 vs 99478

Failed to copy: corrupted on transfer: QuickXorHash hash differ "f6f291e63(略)f26114ca3073d07" vs "809561564(略)253405085dcafe4016"

そんなときは、rcloneのコマンドに --ignore-size と --ignore-checksum オプションを付けてあげればOKです
当然破損チェックはできないので、別途チェックする必要はありますが。。

$ rclone copy directory sharepoint:/General/tsuyuh/xxxxx/ --ignore-size --ignore-checksum


ちなみに、htmlファイルも同様のエラーが出ました。

まとめ

・rclone でデータ移行するときは出力メッセージを必ず読むこと! ← 大事
・特定の種類のファイルでエラーが出たときは、--ignore-size --ignore-checksum オプションを付ける。
 (その場合、別の手段で破損チェックをする)