いろいろなアプリにsubmoduleとして追加していたライブラリを別アプリに切り出したので、リポジトリを巡回してgit submodule deinitしていた。最後のリポジトリでdeinitした瞬間に、そのアプリケーションは今日使ったばかりでsubmodule(しかもignoreされているところ)に実験データが残ったままであったことに気付く。Ctrl-Cするが時既に遅し。即座にネットワークを切断してDropboxの同期を止める。GitLabのデータ障害が脳裏をよぎる。

YPはすぐさま削除を停止させたが、もう遅かった。約310ギガバイトあったデータのうち、残ったのは4.5ギガバイトであった。 GitLab.comが操作ミスで本番データベース喪失

Dropbox同期している別のPCから救出を試みる。しかしこちらも1/4ほどのデータがすでに消えている。ディレクトリを横断して名前が若いファイル(001.png, 002.png, …)から消えているようだ。一部の実験ではなく今日記録したすべてのデータが使えなくなる可能性がある。

Dropboxで削除したファイルの復元ができることに気付く。deinitを実行したPCを再度ネットワークに繋いで、同期が完了したのを確認してWebにアクセスする。ところが、同期の途中でネットワークを切ったのが原因なのか「削除したファイル」の中に消えていた1/4のファイルがない。(再接続後に同期したファイルは復元できる。)

ディスク復元ソフトを使ってみるが削除したファイルが検出されない。絶望する。

Dropbox Webのツールバーにごみ箱アイコン「削除したファイルを表示」があるのを見つける。祈りながら削除したディレクトリに移動してアイコンを押す。消えていたファイルが見つかった!!!面倒だけど各ディレクトリに移動して表示->復元を繰り返す。

すべてのファイルを復元し終える。念のため解析スクリプトに入れてみて最初から最後までの実験のデータが破損していないか確かめる。無事だった。

Dropbox Web左カラムの「削除したファイル」に消えたファイルがなくても諦めてはいけない。そのディレクトリに移動して「削除したファイルを表示」を押すと見つかることがある。復元し終わってから気付いたけど左カラムの「イベント」にDropbox上のすべての変更が記録されていて、初めに消えた1/4のファイルの履歴も残っていた。ここからボタン一つで復元できたらしい。

教訓

バックアップ大事。特に大きな変更を加えるgitコマンドを叩くときは必ずハードコピーをとっておくこと。あと気が動転すると何を試したか今何をしているのか分からなくなってくるのでメモをとったほうがいい。