酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Colab でマウントしている Google Drive に対してファイル書き込み後、書き込んだランタイムからは参照できるのに、別のランタイムからはファイルが見えない

Google Colaboratory (以下Colabと記す) に Google Drive をマウントし、大きい .tar ファイルを解凍して Google Drive に保存した。解凍をした Colab ランタイム側ではファイルが確認できるが、別のランタイムからは解凍したファイルが見られないという問題が起こっている。

Colab を使い始めた初日だったため、Google Drive を外付けハードディスクのように考えており、ファイルの保存に成功すれば当然保存されていると思っていた。

様々なことに2日間頭を悩ませた結果、やっと状況を理解できるようになり、以下のように疑問を整理した。

Google Drive に保存したにもかかわらず、別のランタイムや Web 版 Google Drive からも解凍したファイルが見えないのである。つまり、ファイルが同期されていないという問題である。「Colab Google Drive Sync」というキーワードで検索した結果、以下のIssueが見つかった。

github.com

この現象は 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 にファイルを保存できるようになった。