こんにちは、最近はデータ解析コンサルティングを担当することが多い tsuyuh です。
なんだかとてもご無沙汰している気がします。
今回は、以前に何度か投稿した rclone に関する話をしたいと思います。
rclone を使えるとサーバ⇔クラウドストレージ間のデータ移行が非常に楽になります。
しかしながら、送るファイルによっては途中でエラーが出ることがあります。
その時、もしエラー出力を見逃したら、最悪の場合ファイルを消失させてしまうかもしれません。
昔、Excelファイルを含むフォルダをサーバからクラウドストレージに自動転送させていたら、エラーが起こって途中で止まっていた、なんてことがありました。
色々検証してみたところ、Excelファイル形式に特有の問題であることがわかったので、備忘録がてら以下に記載します。
もし気づかずに元ファイルを消してしまっていたら...と思うとゾッとします。
(関連記事)
staffblog.amelieff.jp
staffblog.amelieff.jp
状況
とある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 オプションを付ける。
(その場合、別の手段で破損チェックをする)