Regonn&Curry.fm Episode 128収録後記 しくじり先生「GoogleColabでGoogleDrive連携中に `rm -rf *`」
このnoteは、Regonn&Curry.fm というポッドキャストの第128回の収録後記です。
128ではGoogle I/O、分析コンペLT会、Spaces、今週のKaggleについて話しました。
今回は、最近GoogleColabのGoogleDrive連携でファイルを削除してしまう失敗をしてしまったので、その時の話をまとめていきます。
ざっくりまとめ
・論文実装のサンプルコードがGoogleColabで公開されていて、インスタンスを初期化する際に「rm -rf *」が実行されていた
・それに気付かずに、GoogleDriveを最初に連携してからコードを実行してしまい `/drive` にマウントしていたGoogleDriveの中身が削除されていった
・GoogleDriveではゴミ箱機能が存在して、30日以内だったら復元できた
・しかし、共有フォルダの場合に削除するとゴミ箱へは行かず、復元ができない状態になり、仕様が他と異なり別途対応が必要だった
ことの発端
論文実装のサンプルコードがGoogleColabで公開されていて、実際に実行して試していました。サンプルコードの動きを確認し、結果が良かったので自分の持っているデータで試してみたくなり、データを保管してあるGoogleDriveでディレクトリをマウントして再実行しました。
コードはあまり見ずに結果だけ見てしまっていて、次のようなコードが存在していることに気づいていませんでした。
## init all the necessary models
!rm -rf *
!gdown https://drive.google.com/uc?id=xxxxxxxxxxx
!unzip pretrained.zip && rm pretrained.zip
学習済みモデルファイルをダウンロード等もするため、最初に初期化として `!rm -rf *` を実行しています。意味的には全てのファイルやディレクトリを削除してしまうコマンドで、GoogleColab等のインスタンス毎に実行する分には問題の無いコードだったのですが、GoogleDriveをマウントしていると、`/drive` というディレクトリが作られて、そこも削除対象になっていました。
実行中に気づく
ノート実行中に初期化にすごい時間がかかっている事を疑問に思い、コードを確認したら、先程の処理に気づきました。急いで、GoogleDriveを確認しましたが、実際にどのファイルやディレクトリが削除されてしまっていたのかは、その時点ではわからない状態でした。普段から個人の確定申告のデータ等もGoogleDriveで管理していたため、消えてしまったかと思いとても焦りました。
復元を試みる
色々と確認をしていくと、GoogleDriveの履歴ではいくつかのファイルやフォルダがゴミ箱に移動しているみたいだったので、ゴミ箱を確認すると、一覧ではゴミ箱に入った日時でファイルをソートできて、その日にゴミ箱に入ったものが分かるようになっていたので、それらをまとめて復元処理をしました。
一通り確認してみた感じ、自分の覚えている範囲ではファイルやフォルダが入っていたので、一旦落ち着きました。しかし、後日復元しきれていなかったことに気づきます。
共有していたディレクトリが消えている
知り合いと共同で利用していた、共有ディレクトリの中身が一部復元されていないことに、気づきました。履歴にもゴミ箱への移動ではなく次のように表示されていました。
アクセスを制限したとのことなので、アクセス権限を復元すればいいのかなと思ってもファイル自体のリンクが消えており、他ではバックアップを行っていなかったファイルのため、ここでも焦りました。
共有していたディレクトリ削除時の独特の仕様
調査した結果次のことがわかりました。
自分が共有ディレクトリに上げたファイルやフォルダ
自分が共有ディレクトリに上げたファイルやフォルダ
→みなしごファイルになり、GoogleDriveのサイトで「is:unorganized owner:me」と検索しない限り表示されない(マイドライブで表示されなくなる)
他の人が共有ディレクトリに上げたファイルやフォルダ
→自分の方では削除されるが、相手のマイドライブ直下に移動している
このようになったため、完全にもとの状態に復元するためには、自分や相手にファイルを再び移動してもらう必要がありました。(ここが復元の中では一番面倒な作業だった)
教訓
実際に被害は無かった(と現在は思っています)ですが、他の人にも影響がでてしまったりして、今回の件で色々と普段のデータの扱いについても改めて考えさせられました。
・ノートブックのコードやGoogleDriveの連携時の影響を実行時に確認(一番重要)
・機械学習のデータなどはGoogleDriveではなくて、GCP等でzipで保管する等、単体で管理できるようにしてある方がこういったリスクを減らせるかも
・重要なファイルやフォルダは定期的にバックアップを作っておくと安心
皆様もデータの扱いには、お気をつけください。