Google Colaboratory (以下Colabと記す) に Google Drive をマウントし、大きい .tar ファイルを解凍して Google Drive に保存した。解凍をした Colab ランタイム側ではファイルが確認できるが、別のランタイムからは解凍したファイルが見られないという問題が起こっている。
Colab を使い始めた初日だったため、Google Drive を外付けハードディスクのように考えており、ファイルの保存に成功すれば当然保存されていると思っていた。
様々なことに2日間頭を悩ませた結果、やっと状況を理解できるようになり、以下のように疑問を整理した。
Colab の仕様なのかどうかわからないけど、Google Drive への書き込みが成功したかのように見えて、実はローカルストレージに書き込んでいる現象が発生するのなんでなん……
— さくさん (@ch3cooh) 2023年3月24日
Google Drive に保存したにもかかわらず、別のランタイムや Web 版 Google Drive からも解凍したファイルが見えないのである。つまり、ファイルが同期されていないという問題である。「Colab Google Drive Sync」というキーワードで検索した結果、以下のIssueが見つかった。
この現象は 2018年から発生しているようで、大容量や大量のファイルを Google Drive に書き込んでも保存されていないという問題が指摘されている。解決策として「drive.flush()
を実装して欲しい!」と多数要求されていたが、2023年3月時点でもまだ実装されていない。現状では drive.flush_and_unmount()
で代用する必要があるようだ。
from google.colab import drive for tar_file in tar_files: # 解凍処理 # 解凍したファイル群を Google Drive に同期させる drive.flush_and_unmount() drive.mount('/content/drive', force_remount=False)
解凍するたびに unmount と mount が実行されるため、処理速度はかなり低下する。悲しいことに 1分間に 1.5ファイル分しか解凍できないが、確実に Google Drive にファイルを保存できるようになった。